https://github.com/mizvekov updated https://github.com/llvm/llvm-project/pull/68172
>From ee49cd2bddc21be68f73fca7cb344150cd7ad7a6 Mon Sep 17 00:00:00 2001 From: Matheus Izvekov <mizve...@gmail.com> Date: Wed, 4 Oct 2023 04:39:11 +0200 Subject: [PATCH] [CLang][Driver] Add new flags to control IR verification --- clang/docs/ReleaseNotes.rst | 6 ++++++ clang/include/clang/Driver/Options.td | 6 ++++++ clang/lib/Driver/ToolChains/Clang.cpp | 6 ++++-- clang/test/Driver/clang_f_opts.c | 5 +++++ 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 3dce7f6a8f9d56e..4e8487d3386e21c 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -146,6 +146,12 @@ Non-comprehensive list of changes in this release New Compiler Flags ------------------ +* ``-fenable-llvm-verifier`` and it's complement ``-fdisable-llvm-verifier``. + It's strongly encouraged to enable this verification, as it can catch hard to + find code generation bugs. + 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 ------------------------- diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 61e0729974c24d1..ee464de14f7740b 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -1905,6 +1905,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 fenable_llvm_verifier : Flag<["-"], "fenable-llvm-verifier">, + Group<f_clang_Group>, Visibility<[ClangOption, CLOption, DXCOption]>, + HelpText<"Enable verification of LLVM IR">, Flags<[NoXarchOption]>; +def fdisable_llvm_verifier : Flag<["-"], "fdisable-llvm-verifier">, + 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]>; diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 129adfb9fcc74d1..11abc2cdf34d6a7 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -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_fdisable_llvm_verifier, + options::OPT_fenable_llvm_verifier, !IsAssertBuild)) { CmdArgs.push_back("-disable-llvm-verifier"); + } // Discard value names in assert builds unless otherwise specified. if (Args.hasFlag(options::OPT_fdiscard_value_names, diff --git a/clang/test/Driver/clang_f_opts.c b/clang/test/Driver/clang_f_opts.c index 7a3616a2e9f0a48..e0764cf0b76830f 100644 --- a/clang/test/Driver/clang_f_opts.c +++ b/clang/test/Driver/clang_f_opts.c @@ -520,6 +520,11 @@ // CHECK-COVERAGE-COMPILATION-DIR: "-fcoverage-compilation-dir=." // CHECK-COVERAGE-COMPILATION-DIR-NOT: "-ffile-compilation-dir=." +// RUN: %clang -### -S -fenable-llvm-verifier %s 2>&1 | FileCheck -check-prefix=CHECK-ENABLE-LLVM-VERIFIER %s +// RUN: %clang -### -S -fdisable-llvm-verifier %s 2>&1 | FileCheck -check-prefix=CHECK-DISABLE-LLVM-VERIFIER %s +// CHECK-ENABLE-LLVM-VERIFIER-NOT: "-disable-llvm-verifier" +// CHECK-DISABLE-LLVM-VERIFIER: "-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" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits