mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[IRGen] Add flags to control LLVM verify-each.
Analogous to -sil-verify-all, the new flags cause LLVM verification to be run after each LLVM optimization pass.
This commit is contained in:
@@ -272,6 +272,9 @@ public:
|
|||||||
/// well-formed?
|
/// well-formed?
|
||||||
unsigned Verify : 1;
|
unsigned Verify : 1;
|
||||||
|
|
||||||
|
/// Whether to verify after every optimizer change.
|
||||||
|
unsigned VerifyEach : 1;
|
||||||
|
|
||||||
OptimizationMode OptMode;
|
OptimizationMode OptMode;
|
||||||
|
|
||||||
/// Which sanitizer is turned on.
|
/// Which sanitizer is turned on.
|
||||||
@@ -580,7 +583,7 @@ public:
|
|||||||
|
|
||||||
IRGenOptions()
|
IRGenOptions()
|
||||||
: OutputKind(IRGenOutputKind::LLVMAssemblyAfterOptimization),
|
: OutputKind(IRGenOutputKind::LLVMAssemblyAfterOptimization),
|
||||||
Verify(true), OptMode(OptimizationMode::NotSet),
|
Verify(true), VerifyEach(false), OptMode(OptimizationMode::NotSet),
|
||||||
Sanitizers(OptionSet<SanitizerKind>()),
|
Sanitizers(OptionSet<SanitizerKind>()),
|
||||||
SanitizersWithRecoveryInstrumentation(OptionSet<SanitizerKind>()),
|
SanitizersWithRecoveryInstrumentation(OptionSet<SanitizerKind>()),
|
||||||
SanitizeAddressUseODRIndicator(false), SanitizerUseStableABI(false),
|
SanitizeAddressUseODRIndicator(false), SanitizerUseStableABI(false),
|
||||||
|
|||||||
@@ -592,6 +592,12 @@ def disable_swift_specific_llvm_optzns : Flag<["-"], "disable-swift-specific-llv
|
|||||||
def disable_llvm_verify : Flag<["-"], "disable-llvm-verify">,
|
def disable_llvm_verify : Flag<["-"], "disable-llvm-verify">,
|
||||||
HelpText<"Don't run the LLVM IR verifier.">;
|
HelpText<"Don't run the LLVM IR verifier.">;
|
||||||
|
|
||||||
|
def enable_llvm_verify_each : Flag<["-"], "enable-llvm-verify-each">,
|
||||||
|
HelpText<"Run the LLVM IR verifier after every pass.">;
|
||||||
|
|
||||||
|
def disable_llvm_verify_each : Flag<["-"], "disable-llvm-verify-each">,
|
||||||
|
HelpText<"Don't run the LLVM IR verifier after every pass.">;
|
||||||
|
|
||||||
def disable_llvm_value_names : Flag<["-"], "disable-llvm-value-names">,
|
def disable_llvm_value_names : Flag<["-"], "disable-llvm-value-names">,
|
||||||
HelpText<"Don't add names to local values in LLVM IR">;
|
HelpText<"Don't add names to local values in LLVM IR">;
|
||||||
|
|
||||||
|
|||||||
@@ -3235,6 +3235,9 @@ static bool ParseIRGenArgs(IRGenOptions &Opts, ArgList &Args,
|
|||||||
if (Args.hasArg(OPT_disable_llvm_verify))
|
if (Args.hasArg(OPT_disable_llvm_verify))
|
||||||
Opts.Verify = false;
|
Opts.Verify = false;
|
||||||
|
|
||||||
|
Opts.VerifyEach = Args.hasFlag(OPT_enable_llvm_verify_each,
|
||||||
|
OPT_disable_llvm_verify_each, Opts.VerifyEach);
|
||||||
|
|
||||||
Opts.EmitStackPromotionChecks |= Args.hasArg(OPT_stack_promotion_checks);
|
Opts.EmitStackPromotionChecks |= Args.hasArg(OPT_stack_promotion_checks);
|
||||||
if (const Arg *A = Args.getLastArg(OPT_stack_promotion_limit)) {
|
if (const Arg *A = Args.getLastArg(OPT_stack_promotion_limit)) {
|
||||||
unsigned limit;
|
unsigned limit;
|
||||||
|
|||||||
@@ -294,7 +294,7 @@ void swift::performLLVMOptimizations(const IRGenOptions &Opts,
|
|||||||
PrintPassOpts.Indent = DebugPassStructure;
|
PrintPassOpts.Indent = DebugPassStructure;
|
||||||
PrintPassOpts.SkipAnalyses = DebugPassStructure;
|
PrintPassOpts.SkipAnalyses = DebugPassStructure;
|
||||||
StandardInstrumentations SI(Module->getContext(), DebugPassStructure,
|
StandardInstrumentations SI(Module->getContext(), DebugPassStructure,
|
||||||
/*VerifyEach*/ false, PrintPassOpts);
|
Opts.VerifyEach, PrintPassOpts);
|
||||||
SI.registerCallbacks(PIC, &MAM);
|
SI.registerCallbacks(PIC, &MAM);
|
||||||
|
|
||||||
PassBuilder PB(TargetMachine, PTO, PGOOpt, &PIC);
|
PassBuilder PB(TargetMachine, PTO, PGOOpt, &PIC);
|
||||||
|
|||||||
Reference in New Issue
Block a user