mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-27 23:51:56 +00:00
[Clang][Driver] Add new flags to control IR verification (#68172)
Enables or disables verification of the generated LLVM IR. Users can pass this to turn on extra verification to catch certain types of compiler bugs at the cost of extra compile time.
This commit is contained in:
parent
4ee8c676ee
commit
6da382d27b
@ -146,6 +146,13 @@ Non-comprehensive list of changes in this release
|
||||
|
||||
New Compiler Flags
|
||||
------------------
|
||||
* ``-fverify-intermediate-code`` and its complement ``-fno-verify-intermediate-code``.
|
||||
Enables or disables verification of the generated LLVM IR.
|
||||
Users can pass this to turn on extra verification to catch certain types of
|
||||
compiler bugs at the cost of extra compile time.
|
||||
Since enabling the verifier adds a non-trivial cost of a few percent impact on
|
||||
build times, it's disabled by default, unless your LLVM distribution itself is
|
||||
compiled with runtime checks enabled.
|
||||
|
||||
Deprecated Compiler Flags
|
||||
-------------------------
|
||||
|
@ -1909,6 +1909,12 @@ defm safe_buffer_usage_suggestions : BoolFOption<"safe-buffer-usage-suggestions"
|
||||
PosFlag<SetTrue, [], [ClangOption, CC1Option],
|
||||
"Display suggestions to update code associated with -Wunsafe-buffer-usage warnings">,
|
||||
NegFlag<SetFalse>>;
|
||||
def fverify_intermediate_code : Flag<["-"], "fverify-intermediate-code">,
|
||||
Group<f_clang_Group>, Visibility<[ClangOption, CLOption, DXCOption]>,
|
||||
HelpText<"Enable verification of LLVM IR">, Flags<[NoXarchOption]>;
|
||||
def fno_verify_intermediate_code : Flag<["-"], "fno-verify-intermediate-code">,
|
||||
Group<f_clang_Group>, Visibility<[ClangOption, CLOption, DXCOption]>,
|
||||
HelpText<"Disable verification of LLVM IR">, Flags<[NoXarchOption]>;
|
||||
def fdiscard_value_names : Flag<["-"], "fdiscard-value-names">,
|
||||
Group<f_clang_Group>, Visibility<[ClangOption, DXCOption]>,
|
||||
HelpText<"Discard value names in LLVM IR">, Flags<[NoXarchOption]>;
|
||||
|
@ -5150,9 +5150,11 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
||||
const bool IsAssertBuild = true;
|
||||
#endif
|
||||
|
||||
// Disable the verification pass in -asserts builds.
|
||||
if (!IsAssertBuild)
|
||||
// Disable the verification pass in asserts builds unless otherwise specified.
|
||||
if (Args.hasFlag(options::OPT_fno_verify_intermediate_code,
|
||||
options::OPT_fverify_intermediate_code, !IsAssertBuild)) {
|
||||
CmdArgs.push_back("-disable-llvm-verifier");
|
||||
}
|
||||
|
||||
// Discard value names in assert builds unless otherwise specified.
|
||||
if (Args.hasFlag(options::OPT_fdiscard_value_names,
|
||||
|
@ -520,6 +520,11 @@
|
||||
// CHECK-COVERAGE-COMPILATION-DIR: "-fcoverage-compilation-dir=."
|
||||
// CHECK-COVERAGE-COMPILATION-DIR-NOT: "-ffile-compilation-dir=."
|
||||
|
||||
// RUN: %clang -### -S -fverify-intermediate-code %s 2>&1 | FileCheck -check-prefix=CHECK-VERIFY-INTERMEDIATE-CODE %s
|
||||
// RUN: %clang -### -S -fno-verify-intermediate-code %s 2>&1 | FileCheck -check-prefix=CHECK-NO-VERIFY-INTERMEDIATE-CODE %s
|
||||
// CHECK-VERIFY-INTERMEDIATE-CODE-NOT: "-disable-llvm-verifier"
|
||||
// CHECK-NO-VERIFY-INTERMEDIATE-CODE: "-disable-llvm-verifier"
|
||||
|
||||
// RUN: %clang -### -S -fdiscard-value-names %s 2>&1 | FileCheck -check-prefix=CHECK-DISCARD-NAMES %s
|
||||
// RUN: %clang -### -S -fno-discard-value-names %s 2>&1 | FileCheck -check-prefix=CHECK-NO-DISCARD-NAMES %s
|
||||
// CHECK-DISCARD-NAMES: "-discard-value-names"
|
||||
|
Loading…
Reference in New Issue
Block a user