Prime text sections to improve branch locality in large object files.
authorJim Laskey <jlaskey@mac.com>
Tue, 28 Nov 2006 18:21:52 +0000 (18:21 +0000)
committerJim Laskey <jlaskey@mac.com>
Tue, 28 Nov 2006 18:21:52 +0000 (18:21 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31969 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PowerPC/PPCAsmPrinter.cpp

index 7ac423348ab0fe9c73d8048730ee062caec1e6ee..b5962ea215a0bf7209100be045b3f4d51d363e06 100644 (file)
@@ -543,6 +543,19 @@ bool DarwinAsmPrinter::doInitialization(Module &M) {
   // Darwin wants symbols to be quoted if they have complex names.
   Mang->setUseQuotes(true);
   
+  // Prime text sections so they are adjacent.  This reduces the likelihood a
+  // large data or debug section causes a branch to exceed 16M limit.
+  SwitchToTextSection(".section __TEXT,__textcoal_nt,coalesced,"
+                      "pure_instructions");
+  if (TM.getRelocationModel() == Reloc::PIC_) {
+    SwitchToTextSection(".section __TEXT,__picsymbolstub1,symbol_stubs,"
+                          "pure_instructions,32");
+  } else if (TM.getRelocationModel() == Reloc::DynamicNoPIC) {
+    SwitchToTextSection(".section __TEXT,__symbol_stub1,symbol_stubs,"
+                        "pure_instructions,16");
+  }
+  SwitchToTextSection(TAI->getTextSection());
+  
   // Emit initial debug information.
   DW.BeginModule(&M);
   return false;