[PATCH] D65009: [LTO] Don't mark regular LTO units with EnableSplitLTOUnit

Teresa Johnson via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Jul 19 13:02:19 PDT 2019

tejohnson created this revision.
tejohnson added a reviewer: pcc.
Herald added subscribers: dexonsmith, steven_wu, inglorion, Prazek, mehdi_amini.
Herald added a project: clang.

LTO Unit splitting does not apply to regular LTO modules, only ThinLTO
(which must be consistently split into regular and Thin units for
optimizations such as whole program devirtualization and lower type
tests). Don't add the corresponding module flag to regular LTO modules,
to avoid mismatched module flag errors when linking a regular LTO module
with the regular LTO part of a split ThinLTO module.

This relies on a corresponding LTO patch that ignores the status of this
module flag on non-ThinLTO modules.

Depends on D65008 <https://reviews.llvm.org/D65008>.

  rC Clang



Index: test/CodeGen/split-lto-unit.c
--- /dev/null
+++ test/CodeGen/split-lto-unit.c
@@ -0,0 +1,13 @@
+// ; Check that -flto=thin without -fsplit-lto-unit has EnableSplitLTOUnit = 0
+// RUN: %clang_cc1 -flto=thin -emit-llvm-bc < %s | llvm-dis -o - | FileCheck %s
+// CHECK: !{i32 1, !"EnableSplitLTOUnit", i32 0}
+// ; Check that -flto=thin with -fsplit-lto-unit has EnableSplitLTOUnit = 1
+// RUN: %clang_cc1 -flto=thin -fsplit-lto-unit -emit-llvm-bc < %s | llvm-dis -o - | FileCheck %s --check-prefix=SPLIT
+// SPLIT: !{i32 1, !"EnableSplitLTOUnit", i32 1}
+// ; Check that regular LTO has no EnableSplitLTOUnit flag
+// RUN: %clang_cc1 -flto -triple x86_64-pc-linux-gnu -emit-llvm-bc < %s | llvm-dis -o - | FileCheck %s --implicit-check-not="EnableSplitLTOUnit" --check-prefix=THINLTOOFF
+// THINLTOOFF: !{i32 1, !"ThinLTO", i32 0}
+int main() {}
Index: lib/CodeGen/BackendUtil.cpp
--- lib/CodeGen/BackendUtil.cpp
+++ lib/CodeGen/BackendUtil.cpp
@@ -847,8 +847,6 @@
       if (EmitLTOSummary) {
         if (!TheModule->getModuleFlag("ThinLTO"))
           TheModule->addModuleFlag(Module::Error, "ThinLTO", uint32_t(0));
-        TheModule->addModuleFlag(Module::Error, "EnableSplitLTOUnit",
-                                 CodeGenOpts.EnableSplitLTOUnit);

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D65009.210880.patch
Type: text/x-patch
Size: 1472 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190719/f4d6cdb5/attachment.bin>

More information about the cfe-commits mailing list