r340640 - [LTO] Fix -save-temps with LTO and unnamed globals.
Eli Friedman via cfe-commits
cfe-commits at lists.llvm.org
Fri Aug 24 12:31:52 PDT 2018
Author: efriedma
Date: Fri Aug 24 12:31:52 2018
New Revision: 340640
URL: http://llvm.org/viewvc/llvm-project?rev=340640&view=rev
Log:
[LTO] Fix -save-temps with LTO and unnamed globals.
If all LLVM passes are disabled, we can't emit a summary because there
could be unnamed globals in the IR.
Differential Revision: https://reviews.llvm.org/D51198
Added:
cfe/trunk/test/CodeGen/summary-index-unnamed-global.ll
Modified:
cfe/trunk/lib/CodeGen/BackendUtil.cpp
Modified: cfe/trunk/lib/CodeGen/BackendUtil.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/BackendUtil.cpp?rev=340640&r1=340639&r2=340640&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/BackendUtil.cpp (original)
+++ cfe/trunk/lib/CodeGen/BackendUtil.cpp Fri Aug 24 12:31:52 2018
@@ -783,7 +783,7 @@ void EmitAssemblyHelper::EmitAssembly(Ba
break;
case Backend_EmitBC:
- if (CodeGenOpts.PrepareForThinLTO) {
+ if (CodeGenOpts.PrepareForThinLTO && !CodeGenOpts.DisableLLVMPasses) {
if (!CodeGenOpts.ThinLinkBitcodeFile.empty()) {
ThinLinkOS = openOutputFile(CodeGenOpts.ThinLinkBitcodeFile);
if (!ThinLinkOS)
@@ -796,6 +796,7 @@ void EmitAssemblyHelper::EmitAssembly(Ba
// targets
bool EmitLTOSummary =
(CodeGenOpts.PrepareForLTO &&
+ !CodeGenOpts.DisableLLVMPasses &&
llvm::Triple(TheModule->getTargetTriple()).getVendor() !=
llvm::Triple::Apple);
if (EmitLTOSummary && !TheModule->getModuleFlag("ThinLTO"))
@@ -1014,7 +1015,7 @@ void EmitAssemblyHelper::EmitAssemblyWit
break;
case Backend_EmitBC:
- if (CodeGenOpts.PrepareForThinLTO) {
+ if (CodeGenOpts.PrepareForThinLTO && !CodeGenOpts.DisableLLVMPasses) {
if (!CodeGenOpts.ThinLinkBitcodeFile.empty()) {
ThinLinkOS = openOutputFile(CodeGenOpts.ThinLinkBitcodeFile);
if (!ThinLinkOS)
@@ -1027,6 +1028,7 @@ void EmitAssemblyHelper::EmitAssemblyWit
// targets
bool EmitLTOSummary =
(CodeGenOpts.PrepareForLTO &&
+ !CodeGenOpts.DisableLLVMPasses &&
llvm::Triple(TheModule->getTargetTriple()).getVendor() !=
llvm::Triple::Apple);
if (EmitLTOSummary && !TheModule->getModuleFlag("ThinLTO"))
Added: cfe/trunk/test/CodeGen/summary-index-unnamed-global.ll
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/summary-index-unnamed-global.ll?rev=340640&view=auto
==============================================================================
--- cfe/trunk/test/CodeGen/summary-index-unnamed-global.ll (added)
+++ cfe/trunk/test/CodeGen/summary-index-unnamed-global.ll Fri Aug 24 12:31:52 2018
@@ -0,0 +1,10 @@
+; RUN: %clang_cc1 -flto -triple x86_64-pc-linux-gnu -emit-llvm-bc -disable-llvm-passes -x ir < %s -o - | llvm-bcanalyzer -dump | FileCheck %s
+; RUN: %clang_cc1 -flto=thin -triple x86_64-pc-linux-gnu -emit-llvm-bc -disable-llvm-passes -x ir < %s -o - | llvm-bcanalyzer -dump | FileCheck %s
+; RUN: %clang_cc1 -fexperimental-new-pass-manager -flto -triple x86_64-pc-linux-gnu -emit-llvm-bc -disable-llvm-passes -x ir < %s -o - | llvm-bcanalyzer -dump | FileCheck %s
+; RUN: %clang_cc1 -fexperimental-new-pass-manager -flto=thin -triple x86_64-pc-linux-gnu -emit-llvm-bc -disable-llvm-passes -x ir < %s -o - | llvm-bcanalyzer -dump | FileCheck %s
+
+; CHECK-NOT:GLOBALVAL_SUMMARY_BLOCK
+
+; Make sure this doesn't crash, and we don't try to emit a module summary.
+; (The command is roughly emulating what -save-temps would do.)
+ at 0 = global i32 0
More information about the cfe-commits
mailing list