[lld] r265258 - [LTO] Implement -disable-verify, which disables bitcode verification.
Davide Italiano via llvm-commits
llvm-commits at lists.llvm.org
Sat Apr 2 20:39:10 PDT 2016
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;
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
+
+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
More information about the llvm-commits
mailing list