[PATCH] D31101: [ThinLTO] Use clang's existing code gen handling for ThinLTO backends
Teresa Johnson via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Mar 30 13:39:40 PDT 2017
tejohnson updated this revision to Diff 93535.
tejohnson added a comment.
Use LTO to emit LLVM IR
https://reviews.llvm.org/D31101
Files:
lib/CodeGen/BackendUtil.cpp
test/CodeGen/thinlto-emit-llvm.c
Index: test/CodeGen/thinlto-emit-llvm.c
===================================================================
--- /dev/null
+++ test/CodeGen/thinlto-emit-llvm.c
@@ -0,0 +1,10 @@
+// Test to ensure -emit-llvm and -emit-llvm-bc work when invoking the
+// ThinLTO backend path.
+// RUN: %clang -O2 %s -flto=thin -c -o %t.o
+// RUN: llvm-lto -thinlto -o %t %t.o
+// RUN: %clang_cc1 -O2 -x ir %t.o -fthinlto-index=%t.thinlto.bc -emit-llvm -o - | FileCheck %s
+// RUN: %clang_cc1 -O2 -x ir %t.o -fthinlto-index=%t.thinlto.bc -emit-llvm-bc -o - | llvm-dis -o - | FileCheck %s
+
+// CHECK: define void @foo()
+void foo() {
+}
Index: lib/CodeGen/BackendUtil.cpp
===================================================================
--- lib/CodeGen/BackendUtil.cpp
+++ lib/CodeGen/BackendUtil.cpp
@@ -902,7 +902,7 @@
static void runThinLTOBackend(ModuleSummaryIndex *CombinedIndex, Module *M,
std::unique_ptr<raw_pwrite_stream> OS,
- std::string SampleProfile) {
+ std::string SampleProfile, BackendAction Action) {
StringMap<std::map<GlobalValue::GUID, GlobalValueSummary *>>
ModuleToDefinedGVSummaries;
CombinedIndex->collectDefinedGVSummariesPerModule(ModuleToDefinedGVSummaries);
@@ -954,6 +954,20 @@
};
lto::Config Conf;
Conf.SampleProfile = std::move(SampleProfile);
+ switch (Action) {
+ case Backend_EmitNothing:
+ Conf.IROutputType = lto::Config::EIRT_Nothing;
+ break;
+ case Backend_EmitLL:
+ Conf.IROutputType = lto::Config::EIRT_LL;
+ break;
+ case Backend_EmitBC:
+ Conf.IROutputType = lto::Config::EIRT_BC;
+ break;
+ default:
+ Conf.IROutputType = lto::Config::EIRT_CodeGen;
+ break;
+ }
if (Error E = thinBackend(
Conf, 0, AddStream, *M, *CombinedIndex, ImportList,
ModuleToDefinedGVSummaries[M->getModuleIdentifier()], ModuleMap)) {
@@ -990,7 +1004,7 @@
bool DoThinLTOBackend = CombinedIndex != nullptr;
if (DoThinLTOBackend) {
runThinLTOBackend(CombinedIndex.get(), M, std::move(OS),
- CGOpts.SampleProfileFile);
+ CGOpts.SampleProfileFile, Action);
return;
}
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D31101.93535.patch
Type: text/x-patch
Size: 2214 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170330/6ab252c0/attachment.bin>
More information about the cfe-commits
mailing list