Add support for mergeable sections back into the XCore backend.
authorRichard Osborne <richard@xmos.com>
Tue, 18 Aug 2009 21:14:31 +0000 (21:14 +0000)
committerRichard Osborne <richard@xmos.com>
Tue, 18 Aug 2009 21:14:31 +0000 (21:14 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79368 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/XCore/XCoreTargetObjectFile.cpp
test/CodeGen/XCore/constants.ll
test/CodeGen/XCore/globals.ll

index 91cb11533df6b161d5fec971e2176fe01bf7b54a..c1990d6d0fcbbc702af07787de3388ac900119b7 100644 (file)
@@ -28,11 +28,24 @@ void XCoreTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM){
                            MCSectionXCore::SHF_DP_SECTION,
                            SectionKind::getBSS(), false, getContext());
   
-  // For now, disable lowering of mergable sections, just drop everything into
-  // ReadOnly.
-  MergeableConst4Section = 0;
-  MergeableConst8Section = 0;
-  MergeableConst16Section = 0;
+  MergeableConst4Section = 
+    MCSectionXCore::Create(".cp.rodata.cst4", MCSectionELF::SHT_PROGBITS,
+                           MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_MERGE |
+                           MCSectionXCore::SHF_CP_SECTION,
+                           SectionKind::getMergeableConst4(), false,
+                           getContext());
+  MergeableConst8Section = 
+    MCSectionXCore::Create(".cp.rodata.cst8", MCSectionELF::SHT_PROGBITS,
+                           MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_MERGE |
+                           MCSectionXCore::SHF_CP_SECTION,
+                           SectionKind::getMergeableConst8(), false,
+                           getContext());
+  MergeableConst16Section = 
+    MCSectionXCore::Create(".cp.rodata.cst16", MCSectionELF::SHT_PROGBITS,
+                           MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_MERGE |
+                           MCSectionXCore::SHF_CP_SECTION,
+                           SectionKind::getMergeableConst16(), false,
+                           getContext());
   
   // TLS globals are lowered in the backend to arrays indexed by the current
   // thread id. After lowering they require no special handling by the linker
index 2aee6a26c4ebd2cc86c8a0b2741fb8372a6c90aa..8ba8b5c6a764ff8ebee79f30649f8a14ed97e3ac 100644 (file)
@@ -1,6 +1,6 @@
 ; RUN: llvm-as < %s | llc -march=xcore -mcpu=xs1b-generic | FileCheck %s
 
-; CHECK: .section .cp.rodata,"ac",@progbits
+; CHECK: .section .cp.rodata.cst4,"aMc",@progbits,4
 ; CHECK: .LCPI1_0:
 ; CHECK: .long 12345678
 ; CHECK: f:
index 8cb2ef36694568765b2b91ba3da07f5b2c001006..9bc0f53de71aadbc3840919a8c0a68c7de7a02ef 100644 (file)
@@ -68,7 +68,7 @@ entry:
 ; CHECK: G2:
 
 @G3 = constant i32 9401
-; CHECK: .section .cp.rodata,"ac",@progbits
+; CHECK: .section .cp.rodata.cst4,"aMc",@progbits,4
 ; CHECK: G3:
 
 @G4 = global i32* @G1