[PATCH] D46091: [MachineOutliner] Don't outline from functions with a section marking.

Eli Friedman via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 25 16:04:53 PDT 2018


efriedma created this revision.
efriedma added a reviewer: paquette.
Herald added a reviewer: javed.absar.

The program might have unusual expectations for functions with section markings; for example, the Linux kernel's build system prints an error if it finds references from .text to .init.data.

I'm not sure this is something we actually want to make any guarantees about (there isn't any explicit rule that would disallow outlining in this case), but we might want to be conservative anyway.


Repository:
  rL LLVM

https://reviews.llvm.org/D46091

Files:
  lib/Target/AArch64/AArch64InstrInfo.cpp
  test/CodeGen/AArch64/machine-outliner.ll


Index: test/CodeGen/AArch64/machine-outliner.ll
===================================================================
--- test/CodeGen/AArch64/machine-outliner.ll
+++ test/CodeGen/AArch64/machine-outliner.ll
@@ -17,6 +17,21 @@
   ret void
 }
 
+define void @turtle() section "TURTLE,turtle" {
+  ; CHECK-LABEL: _turtle:
+  ; ODR-LABEL: _turtle:
+  ; CHECK-NOT: OUTLINED
+  %1 = alloca i32, align 4
+  %2 = alloca i32, align 4
+  %3 = alloca i32, align 4
+  %4 = alloca i32, align 4
+  store i32 0, i32* %1, align 4
+  store i32 1, i32* %2, align 4
+  store i32 2, i32* %3, align 4
+  store i32 3, i32* %4, align 4
+  ret void
+}
+
 define void @cat() #0 {
   ; CHECK-LABEL: _cat:
   ; CHECK: [[OUTLINED:OUTLINED_FUNCTION_[0-9]+]]
Index: lib/Target/AArch64/AArch64InstrInfo.cpp
===================================================================
--- lib/Target/AArch64/AArch64InstrInfo.cpp
+++ lib/Target/AArch64/AArch64InstrInfo.cpp
@@ -4989,6 +4989,13 @@
   if (!OutlineFromLinkOnceODRs && F.hasLinkOnceODRLinkage())
     return false;
 
+  // Don't outline from functions with section markings; the program could
+  // expect that all the code is in the named section.
+  // FIXME: Allow outlining from multiple functions with the same section
+  // marking.
+  if (F.hasSection())
+    return false;
+
   // Outlining from functions with redzones is unsafe since the outliner may
   // modify the stack. Check if hasRedZone is true or unknown; if yes, don't
   // outline from it.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D46091.144030.patch
Type: text/x-patch
Size: 1482 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180425/1b7ac11f/attachment.bin>


More information about the llvm-commits mailing list