[PATCH] D139816: [LTO] Don't generate invalid modules if "LTOPostLink" MD already exists
Pierre van Houtryve via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 23 02:36:36 PDT 2023
Pierre-vh updated this revision to Diff 533907.
Pierre-vh added a comment.
Removing new APIs, use existing ones
I'm not sure about removing the flag yet, it's present in a lot of tests and the intention with this patch is to be almost a NFC and just fix a edge case compiler crash
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D139816/new/
https://reviews.llvm.org/D139816
Files:
llvm/lib/LTO/LTO.cpp
llvm/lib/LTO/LTOCodeGenerator.cpp
llvm/test/LTO/ARM/lto-linking-metadata-already-present.ll
Index: llvm/test/LTO/ARM/lto-linking-metadata-already-present.ll
===================================================================
--- /dev/null
+++ llvm/test/LTO/ARM/lto-linking-metadata-already-present.ll
@@ -0,0 +1,24 @@
+; RUN: opt %s -o %t1.bc
+
+; RUN: llvm-lto %t1.bc -o %t1.save.opt -save-linked-module -save-merged-module -O1 --exported-symbol=foo
+; RUN: llvm-dis < %t1.save.opt.merged.bc | FileCheck %s
+
+; RUN: llvm-lto2 run %t1.bc -o %t.out.o -save-temps \
+; RUN: -r=%t1.bc,foo,pxl
+; RUN: llvm-dis < %t.out.o.0.2.internalize.bc | FileCheck %s
+
+; Tests that LTO won't add LTOPostLink twice.
+
+target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
+target triple = "armv7a-unknown-linux"
+
+define void @foo() {
+entry:
+ ret void
+}
+
+!llvm.module.flags = !{!1}
+!1 = !{i32 1, !"LTOPostLink", i32 1}
+
+; CHECK: !llvm.module.flags = !{[[MD_NUM:![0-9]+]]}
+; CHECK: [[MD_NUM]] = !{i32 1, !"LTOPostLink", i32 1}
Index: llvm/lib/LTO/LTOCodeGenerator.cpp
===================================================================
--- llvm/lib/LTO/LTOCodeGenerator.cpp
+++ llvm/lib/LTO/LTOCodeGenerator.cpp
@@ -618,7 +618,8 @@
this->applyScopeRestrictions();
// Write LTOPostLink flag for passes that require all the modules.
- MergedModule->addModuleFlag(Module::Error, "LTOPostLink", 1);
+ if (!MergedModule->getModuleFlag("LTOPostLink"))
+ MergedModule->addModuleFlag(Module::Error, "LTOPostLink", 1);
// Add an appropriate DataLayout instance for this module...
MergedModule->setDataLayout(TargetMach->createDataLayout());
Index: llvm/lib/LTO/LTO.cpp
===================================================================
--- llvm/lib/LTO/LTO.cpp
+++ llvm/lib/LTO/LTO.cpp
@@ -1290,7 +1290,8 @@
GV->setLinkage(GlobalValue::InternalLinkage);
}
- RegularLTO.CombinedModule->addModuleFlag(Module::Error, "LTOPostLink", 1);
+ if (!RegularLTO.CombinedModule->getModuleFlag("LTOPostLink"))
+ RegularLTO.CombinedModule->addModuleFlag(Module::Error, "LTOPostLink", 1);
if (Conf.PostInternalizeModuleHook &&
!Conf.PostInternalizeModuleHook(0, *RegularLTO.CombinedModule))
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D139816.533907.patch
Type: text/x-patch
Size: 2162 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230623/2e9e174f/attachment.bin>
More information about the llvm-commits
mailing list