[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