[lld] r265258 - [LTO] Implement -disable-verify, which disables bitcode verification.
Rui Ueyama via llvm-commits
llvm-commits at lists.llvm.org
Sun Apr 3 10:54:12 PDT 2016
On Sat, Apr 2, 2016 at 8:39 PM, Davide Italiano via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> Author: davide
> Date: Sat Apr 2 22:39:09 2016
> New Revision: 265258
>
> URL: http://llvm.org/viewvc/llvm-project?rev=265258&view=rev
> Log:
> [LTO] Implement -disable-verify, which disables bitcode verification.
>
> So, there are some cases when the IR Linker produces a broken
> module (which doesn't pass the verifier) and we end up asserting
> inside the verifier. I think it's always a bug producing a module
> which does not pass the verifier but there are some cases in which
> people can live with the broken module (e.g. if only DebugInfo
> metadata are broken). The gold plugin has something similar.
>
> This commit is motivated by a situation I found in the
> wild. It seems that somebody else discovered it independently
> and reported in PR24923.
>
> Added:
> lld/trunk/test/ELF/lto/verify-invalid.ll
> Modified:
> lld/trunk/ELF/Config.h
> lld/trunk/ELF/Driver.cpp
> lld/trunk/ELF/LTO.cpp
> lld/trunk/ELF/Options.td
>
> Modified: lld/trunk/ELF/Config.h
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Config.h?rev=265258&r1=265257&r2=265258&view=diff
>
> ==============================================================================
> --- lld/trunk/ELF/Config.h (original)
> +++ lld/trunk/ELF/Config.h Sat Apr 2 22:39:09 2016
> @@ -56,6 +56,7 @@ struct Configuration {
> bool BsymbolicFunctions;
> bool BuildId;
> bool Demangle = true;
> + bool DisableVerify;
> bool DiscardAll;
> bool DiscardLocals;
> bool DiscardNone;
>
> Modified: lld/trunk/ELF/Driver.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Driver.cpp?rev=265258&r1=265257&r2=265258&view=diff
>
> ==============================================================================
> --- lld/trunk/ELF/Driver.cpp (original)
> +++ lld/trunk/ELF/Driver.cpp Sat Apr 2 22:39:09 2016
> @@ -270,6 +270,7 @@ void LinkerDriver::readConfigs(opt::Inpu
> Config->BsymbolicFunctions = Args.hasArg(OPT_Bsymbolic_functions);
> Config->BuildId = Args.hasArg(OPT_build_id);
> Config->Demangle = !Args.hasArg(OPT_no_demangle);
> + Config->DisableVerify = Args.hasArg(OPT_disable_verify);
> Config->DiscardAll = Args.hasArg(OPT_discard_all);
> Config->DiscardLocals = Args.hasArg(OPT_discard_locals);
> Config->DiscardNone = Args.hasArg(OPT_discard_none);
>
> Modified: lld/trunk/ELF/LTO.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LTO.cpp?rev=265258&r1=265257&r2=265258&view=diff
>
> ==============================================================================
> --- lld/trunk/ELF/LTO.cpp (original)
> +++ lld/trunk/ELF/LTO.cpp Sat Apr 2 22:39:09 2016
> @@ -59,8 +59,7 @@ static void runLTOPasses(Module &M, Targ
> PassManagerBuilder PMB;
> PMB.LibraryInfo = new
> TargetLibraryInfoImpl(Triple(TM.getTargetTriple()));
> PMB.Inliner = createFunctionInliningPass();
> - PMB.VerifyInput = true;
> - PMB.VerifyOutput = true;
> + PMB.VerifyInput = PMB.VerifyOutput = !Config->DisableVerify;
>
nit: I'd write it in two lines.
PMB.LoopVectorize = true;
> PMB.SLPVectorize = true;
> PMB.OptLevel = Config->LtoO;
>
> Modified: lld/trunk/ELF/Options.td
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Options.td?rev=265258&r1=265257&r2=265258&view=diff
>
> ==============================================================================
> --- lld/trunk/ELF/Options.td (original)
> +++ lld/trunk/ELF/Options.td Sat Apr 2 22:39:09 2016
> @@ -217,5 +217,6 @@ def G : Separate<["-"], "G">;
> def alias_version_script_version_script : Joined<["--"],
> "version-script=">, Alias<version_script>;
>
> // Debugging/developer options
> +def disable_verify : Flag<["-"], "disable-verify">;
> def save_temps : Flag<["-"], "save-temps">;
> def mllvm : Separate<["-"], "mllvm">;
>
> Added: lld/trunk/test/ELF/lto/verify-invalid.ll
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/lto/verify-invalid.ll?rev=265258&view=auto
>
> ==============================================================================
> --- lld/trunk/test/ELF/lto/verify-invalid.ll (added)
> +++ lld/trunk/test/ELF/lto/verify-invalid.ll Sat Apr 2 22:39:09 2016
> @@ -0,0 +1,14 @@
> +; REQUIRES: x86
> +; RUN: llvm-as %s -o %t.o
> +; RUN: not ld.lld -m elf_x86_64 %t.o -o %t2 -mllvm -disable-verify \
> +; RUN: -debug-pass=Arguments 2>&1 | FileCheck %s
>
"-debug-pass=Arguments" is the argument for -mllvm, and -disable-verify is
the parameter interpreted by LLD. But -disable-verify is in between -mllvm
and its argument. How does it work?
+
> +target triple = "x86_64-unknown-linux-gnu"
> +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
> +
> +define void @_start() {
> + ret void
> +}
> +
> +; -disable-verify should disable the verification of bitcode.
> +; CHECK-NOT: Pass Arguments: {{.*}} -verify {{.*}} -verify
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160403/2c4aade9/attachment.html>
More information about the llvm-commits
mailing list