diff options
22 files changed, 61 insertions, 203 deletions
diff --git a/include/llvm/CodeGen/MachineConstantPool.h b/include/llvm/CodeGen/MachineConstantPool.h index c82935a251b..d2036c4a29a 100644 --- a/include/llvm/CodeGen/MachineConstantPool.h +++ b/include/llvm/CodeGen/MachineConstantPool.h @@ -46,12 +46,6 @@ public: /// Type *getType() const { return Ty; } - /// getRelocationInfo - This method classifies the entry according to - /// whether or not it may generate a relocation entry. This must be - /// conservative, so if it might codegen to a relocatable entry, it should say - /// so. The return values are the same as Constant::getRelocationInfo(). - virtual unsigned getRelocationInfo() const = 0; - virtual int getExistingMachineCPValue(MachineConstantPool *CP, unsigned Alignment) = 0; @@ -106,18 +100,10 @@ public: Type *getType() const; - /// getRelocationInfo - This method classifies the entry according to - /// whether or not it may generate a relocation entry. This must be - /// conservative, so if it might codegen to a relocatable entry, it should say - /// so. The return values are: - /// - /// 0: This constant pool entry is guaranteed to never have a relocation - /// applied to it (because it holds a simple constant like '4'). - /// 1: This entry has relocations, but the entries are guaranteed to be - /// resolvable by the static linker, so the dynamic linker will never see - /// them. - /// 2: This entry may have arbitrary relocations. - unsigned getRelocationInfo() const; + /// This method classifies the entry according to whether or not it may + /// generate a relocation entry. This must be conservative, so if it might + /// codegen to a relocatable entry, it should say so. + bool needsRelocation() const; SectionKind getSectionKind(const DataLayout *DL) const; }; diff --git a/include/llvm/IR/Constant.h b/include/llvm/IR/Constant.h index 555efc41c06..bb88905aa57 100644 --- a/include/llvm/IR/Constant.h +++ b/include/llvm/IR/Constant.h @@ -86,26 +86,12 @@ public: /// exprs and other dangling things. bool isConstantUsed() const; - enum PossibleRelocationsTy { - NoRelocation = 0, - LocalRelocation = 1, - GlobalRelocations = 2 - }; - /// This method classifies the entry according to whether or not it may /// generate a relocation entry. This must be conservative, so if it might - /// codegen to a relocatable entry, it should say so. The return values are: - /// - /// NoRelocation: This constant pool entry is guaranteed to never have a - /// relocation applied to it (because it holds a simple constant like - /// '4'). - /// LocalRelocation: This entry has relocations, but the entries are - /// guaranteed to be resolvable by the static linker, so the dynamic - /// linker will never see them. - /// GlobalRelocations: This entry may have arbitrary relocations. + /// codegen to a relocatable entry, it should say so. /// /// FIXME: This really should not be in IR. - PossibleRelocationsTy getRelocationInfo() const; + bool needsRelocation() const; /// getAggregateElement - For aggregates (struct/array/vector) return the /// constant that corresponds to the specified element if possible, or null if diff --git a/include/llvm/MC/MCObjectFileInfo.h b/include/llvm/MC/MCObjectFileInfo.h index 6e325cc21f2..2ba945f9d35 100644 --- a/include/llvm/MC/MCObjectFileInfo.h +++ b/include/llvm/MC/MCObjectFileInfo.h @@ -150,9 +150,7 @@ protected: // ELF specific sections. MCSection *DataRelSection; - const MCSection *DataRelLocalSection; MCSection *DataRelROSection; - MCSection *DataRelROLocalSection; MCSection *MergeableConst4Section; MCSection *MergeableConst8Section; MCSection *MergeableConst16Section; @@ -279,11 +277,7 @@ public: // ELF specific sections. MCSection *getDataRelSection() const { return DataRelSection; } - const MCSection *getDataRelLocalSection() const { - return DataRelLocalSection; - } MCSection *getDataRelROSection() const { return DataRelROSection; } - MCSection *getDataRelROLocalSection() const { return DataRelROLocalSection; } const MCSection *getMergeableConst4Section() const { return MergeableConst4Section; } diff --git a/include/llvm/MC/SectionKind.h b/include/llvm/MC/SectionKind.h index 9e8b68f4340..7a5e7d99e26 100644 --- a/include/llvm/MC/SectionKind.h +++ b/include/llvm/MC/SectionKind.h @@ -104,12 +104,6 @@ class SectionKind { /// globals. DataRel, - /// DataRelLocal - This is writeable data that has a non-zero - /// initializer and has relocations in it, but all of the - /// relocations are known to be within the final linked image - /// the global is linked into. - DataRelLocal, - /// DataNoRel - This is writeable data that has a non-zero /// initializer, but whose initializer is known to have no /// relocations. @@ -121,15 +115,7 @@ class SectionKind { /// can write to them. If it chooses to, the dynamic linker can /// mark the pages these globals end up on as read-only after it is /// done with its relocation phase. - ReadOnlyWithRel, - - /// ReadOnlyWithRelLocal - This is data that is readonly by the - /// program, but must be writeable so that the dynamic linker - /// can perform relocations in it. This is used when we know - /// that all the relocations are to globals in this final - /// linked image. - ReadOnlyWithRelLocal - + ReadOnlyWithRel } K : 8; public: @@ -179,21 +165,13 @@ public: bool isCommon() const { return K == Common; } bool isDataRel() const { - return K == DataRel || K == DataRelLocal || K == DataNoRel; - } - - bool isDataRelLocal() const { - return K == DataRelLocal || K == DataNoRel; + return K == DataRel || K == DataNoRel; } bool isDataNoRel() const { return K == DataNoRel; } bool isReadOnlyWithRel() const { - return K == ReadOnlyWithRel || K == ReadOnlyWithRelLocal; - } - - bool isReadOnlyWithRelLocal() const { - return K == ReadOnlyWithRelLocal; + return K == ReadOnlyWithRel; } private: static SectionKind get(Kind K) { @@ -225,12 +203,8 @@ public: static SectionKind getBSSExtern() { return get(BSSExtern); } static SectionKind getCommon() { return get(Common); } static SectionKind getDataRel() { return get(DataRel); } - static SectionKind getDataRelLocal() { return get(DataRelLocal); } static SectionKind getDataNoRel() { return get(DataNoRel); } static SectionKind getReadOnlyWithRel() { return get(ReadOnlyWithRel); } - static SectionKind getReadOnlyWithRelLocal(){ - return get(ReadOnlyWithRelLocal); - } }; } // end namespace llvm diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 5ec451e512b..f1e4cb813df 100644 --- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -357,10 +357,10 @@ void AsmPrinter::EmitEmulatedTLSControlVariable(const GlobalVariable *GV, bool AllZeroInitValue) { // If there is init value, use .data.rel.local section; // otherwise use the .data section. - MCSection *TLSVarSection = const_cast<MCSection*>( - (GV->hasInitializer() && !AllZeroInitValue) - ? getObjFileLowering().getDataRelLocalSection() - : getObjFileLowering().getDataSection()); + MCSection *TLSVarSection = + const_cast<MCSection *>((GV->hasInitializer() && !AllZeroInitValue) + ? getObjFileLowering().getDataRelSection() + : getObjFileLowering().getDataSection()); OutStreamer->SwitchSection(TLSVarSection); MCSymbol *GVSym = getSymbol(GV); EmitLinkage(GV, EmittedSym); // same linkage as GV @@ -390,8 +390,6 @@ void AsmPrinter::EmitGlobalVariable(const GlobalVariable *GV) { bool IsEmuTLSVar = GV->getThreadLocalMode() != llvm::GlobalVariable::NotThreadLocal && TM.Options.EmulatedTLS; - assert((!IsEmuTLSVar || getObjFileLowering().getDataRelLocalSection()) && - "Need relocatable local section for emulated TLS variables"); assert(!(IsEmuTLSVar && GV->hasCommonLinkage()) && "No emulated TLS variables in the common section"); diff --git a/lib/CodeGen/MachineFunction.cpp b/lib/CodeGen/MachineFunction.cpp index 5e614c6cb2e..fa6849fcfdc 100644 --- a/lib/CodeGen/MachineFunction.cpp +++ b/lib/CodeGen/MachineFunction.cpp @@ -816,42 +816,26 @@ Type *MachineConstantPoolEntry::getType() const { return Val.ConstVal->getType(); } - -unsigned MachineConstantPoolEntry::getRelocationInfo() const { +bool MachineConstantPoolEntry::needsRelocation() const { if (isMachineConstantPoolEntry()) - return Val.MachineCPVal->getRelocationInfo(); - return Val.ConstVal->getRelocationInfo(); + return true; + return Val.ConstVal->needsRelocation(); } SectionKind MachineConstantPoolEntry::getSectionKind(const DataLayout *DL) const { - SectionKind Kind; - switch (getRelocationInfo()) { + if (needsRelocation()) + return SectionKind::getReadOnlyWithRel(); + switch (DL->getTypeAllocSize(getType())) { + case 4: + return SectionKind::getMergeableConst4(); + case 8: + return SectionKind::getMergeableConst8(); + case 16: + return SectionKind::getMergeableConst16(); default: - llvm_unreachable("Unknown section kind"); - case Constant::GlobalRelocations: - Kind = SectionKind::getReadOnlyWithRel(); - break; - case Constant::LocalRelocation: - Kind = SectionKind::getReadOnlyWithRelLocal(); - break; - case Constant::NoRelocation: - switch (DL->getTypeAllocSize(getType())) { - case 4: - Kind = SectionKind::getMergeableConst4(); - break; - case 8: - Kind = SectionKind::getMergeableConst8(); - break; - case 16: - Kind = SectionKind::getMergeableConst16(); - break; - default: - Kind = SectionKind::getReadOnly(); - break; - } + return SectionKind::getReadOnly(); } - return Kind; } MachineConstantPool::~MachineConstantPool() { diff --git a/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/lib/CodeGen/TargetLoweringObjectFileImpl.cpp index 372ac403769..7043f7911a3 100644 --- a/lib/CodeGen/TargetLoweringObjectFileImpl.cpp +++ b/lib/CodeGen/TargetLoweringObjectFileImpl.cpp @@ -235,12 +235,8 @@ static StringRef getSectionPrefixForGlobal(SectionKind Kind) { return ".tbss"; if (Kind.isDataNoRel()) return ".data"; - if (Kind.isDataRelLocal()) - return ".data.rel.local"; if (Kind.isDataRel()) return ".data.rel"; - if (Kind.isReadOnlyWithRelLocal()) - return ".data.rel.ro.local"; assert(Kind.isReadOnlyWithRel() && "Unknown section kind"); return ".data.rel.ro"; } @@ -362,7 +358,6 @@ MCSection *TargetLoweringObjectFileELF::getSectionForConstant( if (Kind.isReadOnly()) return ReadOnlySection; - if (Kind.isReadOnlyWithRelLocal()) return DataRelROLocalSection; assert(Kind.isReadOnlyWithRel() && "Unknown section kind"); return DataRelROSection; } diff --git a/lib/IR/Constants.cpp b/lib/IR/Constants.cpp index 457b69d2f39..550d9a89a65 100644 --- a/lib/IR/Constants.cpp +++ b/lib/IR/Constants.cpp @@ -414,16 +414,13 @@ bool Constant::isConstantUsed() const { return false; } -Constant::PossibleRelocationsTy Constant::getRelocationInfo() const { - if (const GlobalValue *GV = dyn_cast<GlobalValue>(this)) { - if (GV->hasLocalLinkage() || GV->hasHiddenVisibility()) - return LocalRelocation; // Local to this file/library. - return GlobalRelocations; // Global reference. - } - +bool Constant::needsRelocation() const { + if (isa<GlobalValue>(this)) + return true; // Global reference. + if (const BlockAddress *BA = dyn_cast<BlockAddress>(this)) - return BA->getFunction()->getRelocationInfo(); - + return BA->getFunction()->needsRelocation(); + // While raw uses of blockaddress need to be relocated, differences between // two of them don't when they are for labels in the same function. This is a // common idiom when creating a table for the indirect goto extension, so we @@ -432,20 +429,18 @@ Constant::PossibleRelocationsTy Constant::getRelocationInfo() const { if (CE->getOpcode() == Instruction::Sub) { ConstantExpr *LHS = dyn_cast<ConstantExpr>(CE->getOperand(0)); ConstantExpr *RHS = dyn_cast<ConstantExpr>(CE->getOperand(1)); - if (LHS && RHS && - LHS->getOpcode() == Instruction::PtrToInt && + if (LHS && RHS && LHS->getOpcode() == Instruction::PtrToInt && RHS->getOpcode() == Instruction::PtrToInt && isa<BlockAddress>(LHS->getOperand(0)) && isa<BlockAddress>(RHS->getOperand(0)) && cast<BlockAddress>(LHS->getOperand(0))->getFunction() == - cast<BlockAddress>(RHS->getOperand(0))->getFunction()) - return NoRelocation; + cast<BlockAddress>(RHS->getOperand(0))->getFunction()) + return false; } - PossibleRelocationsTy Result = NoRelocation; + bool Result = false; for (unsigned i = 0, e = getNumOperands(); i != e; ++i) - Result = std::max(Result, - cast<Constant>(getOperand(i))->getRelocationInfo()); + Result |= cast<Constant>(getOperand(i))->needsRelocation(); return Result; } diff --git a/lib/MC/MCObjectFileInfo.cpp b/lib/MC/MCObjectFileInfo.cpp index 253564e6d49..943eaef0386 100644 --- a/lib/MC/MCObjectFileInfo.cpp +++ b/lib/MC/MCObjectFileInfo.cpp @@ -455,15 +455,9 @@ void MCObjectFileInfo::initELFMCObjectFileInfo(Triple T) { DataRelSection = Ctx->getELFSection(".data.rel", ELF::SHT_PROGBITS, ELF::SHF_ALLOC | ELF::SHF_WRITE); - DataRelLocalSection = Ctx->getELFSection(".data.rel.local", ELF::SHT_PROGBITS, - ELF::SHF_ALLOC | ELF::SHF_WRITE); - DataRelROSection = Ctx->getELFSection(".data.rel.ro", ELF::SHT_PROGBITS, ELF::SHF_ALLOC | ELF::SHF_WRITE); - DataRelROLocalSection = Ctx->getELFSection( - ".data.rel.ro.local", ELF::SHT_PROGBITS, ELF::SHF_ALLOC | ELF::SHF_WRITE); - MergeableConst4Section = Ctx->getELFSection(".rodata.cst4", ELF::SHT_PROGBITS, ELF::SHF_ALLOC | ELF::SHF_MERGE, 4, ""); diff --git a/lib/MC/MCParser/ELFAsmParser.cpp b/lib/MC/MCParser/ELFAsmParser.cpp index 5f8a6039afd..e00a1afc0e4 100644 --- a/lib/MC/MCParser/ELFAsmParser.cpp +++ b/lib/MC/MCParser/ELFAsmParser.cpp @@ -52,8 +52,6 @@ public: addDirectiveHandler< &ELFAsmParser::ParseSectionDirectiveDataRelRo>(".data.rel.ro"); addDirectiveHandler< - &ELFAsmParser::ParseSectionDirectiveDataRelRoLocal>(".data.rel.ro.local"); - addDirectiveHandler< &ELFAsmParser::ParseSectionDirectiveEhFrame>(".eh_frame"); addDirectiveHandler<&ELFAsmParser::ParseDirectiveSection>(".section"); addDirectiveHandler< @@ -123,12 +121,6 @@ public: ELF::SHF_WRITE, SectionKind::getReadOnlyWithRel()); } - bool ParseSectionDirectiveDataRelRoLocal(StringRef, SMLoc) { - return ParseSectionSwitch(".data.rel.ro.local", ELF::SHT_PROGBITS, - ELF::SHF_ALLOC | - ELF::SHF_WRITE, - SectionKind::getReadOnlyWithRelLocal()); - } bool ParseSectionDirectiveEhFrame(StringRef, SMLoc) { return ParseSectionSwitch(".eh_frame", ELF::SHT_PROGBITS, ELF::SHF_ALLOC | diff --git a/lib/Target/ARM/ARMConstantPoolValue.h b/lib/Target/ARM/ARMConstantPoolValue.h index 21ad07d394c..6b18a4e5287 100644 --- a/lib/Target/ARM/ARMConstantPoolValue.h +++ b/lib/Target/ARM/ARMConstantPoolValue.h @@ -102,8 +102,6 @@ public: bool isLSDA() const { return Kind == ARMCP::CPLSDA; } bool isMachineBasicBlock() const{ return Kind == ARMCP::CPMachineBasicBlock; } - unsigned getRelocationInfo() const override { return 2; } - int getExistingMachineCPValue(MachineConstantPool *CP, unsigned Alignment) override; diff --git a/lib/Target/PowerPC/PPCTargetObjectFile.cpp b/lib/Target/PowerPC/PPCTargetObjectFile.cpp index 9ee5db938b6..798bb9d6b89 100644 --- a/lib/Target/PowerPC/PPCTargetObjectFile.cpp +++ b/lib/Target/PowerPC/PPCTargetObjectFile.cpp @@ -42,9 +42,7 @@ MCSection *PPC64LinuxTargetObjectFile::SelectSectionForGlobal( if (Kind.isReadOnly()) { const GlobalVariable *GVar = dyn_cast<GlobalVariable>(GV); - if (GVar && GVar->isConstant() && - (GVar->getInitializer()->getRelocationInfo() == - Constant::GlobalRelocations)) + if (GVar && GVar->isConstant() && GVar->getInitializer()->needsRelocation()) Kind = SectionKind::getReadOnlyWithRel(); } diff --git a/lib/Target/SystemZ/SystemZConstantPoolValue.cpp b/lib/Target/SystemZ/SystemZConstantPoolValue.cpp index 44ea1d25f08..4a6beb67f18 100644 --- a/lib/Target/SystemZ/SystemZConstantPoolValue.cpp +++ b/lib/Target/SystemZ/SystemZConstantPoolValue.cpp @@ -26,21 +26,6 @@ SystemZConstantPoolValue::Create(const GlobalValue *GV, return new SystemZConstantPoolValue(GV, Modifier); } -unsigned SystemZConstantPoolValue::getRelocationInfo() const { - switch (Modifier) { - case SystemZCP::TLSGD: - case SystemZCP::TLSLDM: - case SystemZCP::DTPOFF: - // May require a dynamic relocation. - return 2; - case SystemZCP::NTPOFF: - // May require a relocation, but the relocations are always resolved - // by the static linker. - return 1; - } - llvm_unreachable("Unknown modifier"); -} - int SystemZConstantPoolValue:: getExistingMachineCPValue(MachineConstantPool *CP, unsigned Alignment) { unsigned AlignMask = Alignment - 1; diff --git a/lib/Target/SystemZ/SystemZConstantPoolValue.h b/lib/Target/SystemZ/SystemZConstantPoolValue.h index e5f1bb18581..a71b595560d 100644 --- a/lib/Target/SystemZ/SystemZConstantPoolValue.h +++ b/lib/Target/SystemZ/SystemZConstantPoolValue.h @@ -43,7 +43,6 @@ public: Create(const GlobalValue *GV, SystemZCP::SystemZCPModifier Modifier); // Override MachineConstantPoolValue. - unsigned getRelocationInfo() const override; int getExistingMachineCPValue(MachineConstantPool *CP, unsigned Alignment) override; void addSelectionDAGCSEId(FoldingSetNodeID &ID) override; diff --git a/lib/Target/TargetLoweringObjectFile.cpp b/lib/Target/TargetLoweringObjectFile.cpp index dd65b881f4d..5ccdae42024 100644 --- a/lib/Target/TargetLoweringObjectFile.cpp +++ b/lib/Target/TargetLoweringObjectFile.cpp @@ -169,14 +169,13 @@ SectionKind TargetLoweringObjectFile::getKindForGlobal(const GlobalValue *GV, // If the initializer for the global contains something that requires a // relocation, then we may have to drop this into a writable data section // even though it is marked const. - switch (C->getRelocationInfo()) { - case Constant::NoRelocation: + if (!C->needsRelocation()) { // If the global is required to have a unique address, it can't be put // into a mergable section: just drop it into the general read-only // section instead. if (!GVar->hasUnnamedAddr()) return SectionKind::getReadOnly(); - + // If initializer is a null-terminated string, put it in a "cstring" // section of the right width. if (ArrayType *ATy = dyn_cast<ArrayType>(C->getType())) { @@ -207,20 +206,7 @@ SectionKind TargetLoweringObjectFile::getKindForGlobal(const GlobalValue *GV, return SectionKind::getReadOnly(); } - case Constant::LocalRelocation: - // In static relocation model, the linker will resolve all addresses, so - // the relocation entries will actually be constants by the time the app - // starts up. However, we can't put this into a mergable section, because - // the linker doesn't take relocations into consideration when it tries to - // merge entries in the section. - if (ReloModel == Reloc::Static) - return SectionKind::getReadOnly(); - - // Otherwise, the dynamic linker needs to fix it up, put it in the - // writable data.rel.local section. - return SectionKind::getReadOnlyWithRelLocal(); - - case Constant::GlobalRelocations: + } else { // In static relocation model, the linker will resolve all addresses, so // the relocation entries will actually be constants by the time the app // starts up. However, we can't put this into a mergable section, because @@ -243,15 +229,9 @@ SectionKind TargetLoweringObjectFile::getKindForGlobal(const GlobalValue *GV, if (ReloModel == Reloc::Static) return SectionKind::getDataNoRel(); - switch (C->getRelocationInfo()) { - case Constant::NoRelocation: - return SectionKind::getDataNoRel(); - case Constant::LocalRelocation: - return SectionKind::getDataRelLocal(); - case Constant::GlobalRelocations: + if (C->needsRelocation()) return SectionKind::getDataRel(); - } - llvm_unreachable("Invalid relocation"); + return SectionKind::getDataNoRel(); } /// This method computes the appropriate section to emit the specified global diff --git a/test/CodeGen/AArch64/emutls_generic.ll b/test/CodeGen/AArch64/emutls_generic.ll index d02bf72d80e..b06c647d341 100644 --- a/test/CodeGen/AArch64/emutls_generic.ll +++ b/test/CodeGen/AArch64/emutls_generic.ll @@ -47,7 +47,7 @@ entry: ; ARM_64: .section .rodata, ; ARM_64-LABEL: __emutls_t.external_y: ; ARM_64-NEXT: .byte 7 -; ARM_64: .section .data.rel.local +; ARM_64: .section .data.rel ; ARM_64: .align 3 ; ARM_64-LABEL: __emutls_v.internal_y: ; ARM_64-NEXT: .xword 8 diff --git a/test/CodeGen/ARM/emutls_generic.ll b/test/CodeGen/ARM/emutls_generic.ll index 864daae568f..b6f745d8cb8 100644 --- a/test/CodeGen/ARM/emutls_generic.ll +++ b/test/CodeGen/ARM/emutls_generic.ll @@ -39,7 +39,7 @@ entry: ; ARM_32: .long __emutls_v.internal_y ; ARM_32-NOT: __emutls_t.external_x ; ARM_32-NOT: __emutls_v.external_x: -; ARM_32: .section .data.rel.local +; ARM_32: .section .data.rel ; ARM_32: .align 2 ; ARM_32-LABEL: __emutls_v.external_y: ; ARM_32-NEXT: .long 1 @@ -49,7 +49,7 @@ entry: ; ARM_32: .section .rodata, ; ARM_32-LABEL: __emutls_t.external_y: ; ARM_32-NEXT: .byte 7 -; ARM_32: .section .data.rel.local +; ARM_32: .section .data.rel ; ARM_32: .align 2 ; ARM_32-LABEL: __emutls_v.internal_y: ; ARM_32-NEXT: .long 8 diff --git a/test/CodeGen/Mips/emutls_generic.ll b/test/CodeGen/Mips/emutls_generic.ll index 84a84f3fd74..6d0bb33b06b 100644 --- a/test/CodeGen/Mips/emutls_generic.ll +++ b/test/CodeGen/Mips/emutls_generic.ll @@ -30,13 +30,13 @@ entry: ; MIPS_32: lw {{.+}}call16(__emutls_get_address ; MIPS_32-NOT: __emutls_t.external_x ; MIPS_32-NOT: __emutls_v.external_x: -; MIPS_32: .section .data.rel.local +; MIPS_32: .section .data.rel ; MIPS_32: .align 2 ; MIPS_32-LABEL: __emutls_v.external_y: ; MIPS_32: .section .rodata, ; MIPS_32-LABEL: __emutls_t.external_y: ; MIPS_32-NEXT: .byte 7 -; MIPS_32: .section .data.rel.local +; MIPS_32: .section .data.rel ; MIPS_32: .align 2 ; MIPS_32-LABEL: __emutls_v.internal_y: ; MIPS_32-NEXT: .4byte 8 @@ -58,7 +58,7 @@ entry: ; MIPS_64: .section .rodata, ; MIPS_64-LABEL: __emutls_t.external_y: ; MIPS_64-NEXT: .byte 7 -; MIPS_64: .section .data.rel.local +; MIPS_64: .section .data.rel ; MIPS_64: .align 3 ; MIPS_64-LABEL: __emutls_v.internal_y: ; MIPS_64-NEXT: .8byte 8 diff --git a/test/CodeGen/X86/emutls-pic.ll b/test/CodeGen/X86/emutls-pic.ll index 7204c10f9b3..1c4d83728e6 100644 --- a/test/CodeGen/X86/emutls-pic.ll +++ b/test/CodeGen/X86/emutls-pic.ll @@ -103,7 +103,7 @@ entry: ;;;;; 32-bit targets -; X32: .section .data.rel.local, +; X32: .section .data.rel, ; X32-LABEL: __emutls_v.i: ; X32-NEXT: .long 4 ; X32-NEXT: .long 4 @@ -114,7 +114,7 @@ entry: ; X32-LABEL: __emutls_t.i: ; X32-NEXT: .long 15 -; X32: .section .data.rel.local, +; X32: .section .data.rel, ; X32-LABEL: __emutls_v.j: ; X32-NEXT: .long 4 ; X32-NEXT: .long 4 @@ -136,7 +136,7 @@ entry: ;;;;; 64-bit targets -; X64: .section .data.rel.local, +; X64: .section .data.rel, ; X64-LABEL: __emutls_v.i: ; X64-NEXT: .quad 4 ; X64-NEXT: .quad 4 @@ -147,7 +147,7 @@ entry: ; X64-LABEL: __emutls_t.i: ; X64-NEXT: .long 15 -; X64: .section .data.rel.local, +; X64: .section .data.rel, ; X64-LABEL: __emutls_v.j: ; X64-NEXT: .quad 4 ; X64-NEXT: .quad 4 diff --git a/test/CodeGen/X86/emutls-pie.ll b/test/CodeGen/X86/emutls-pie.ll index 4cd3d22bce0..92a7b16887e 100644 --- a/test/CodeGen/X86/emutls-pie.ll +++ b/test/CodeGen/X86/emutls-pie.ll @@ -100,7 +100,7 @@ entry: ;;;;; 32-bit targets -; X32: .section .data.rel.local, +; X32: .section .data.rel, ; X32-LABEL: __emutls_v.i: ; X32-NEXT: .long 4 ; X32-NEXT: .long 4 @@ -116,7 +116,7 @@ entry: ;;;;; 64-bit targets -; X64: .section .data.rel.local, +; X64: .section .data.rel, ; X64-LABEL: __emutls_v.i: ; X64-NEXT: .quad 4 ; X64-NEXT: .quad 4 diff --git a/test/CodeGen/X86/emutls_generic.ll b/test/CodeGen/X86/emutls_generic.ll index c80c8977447..480543dd43f 100644 --- a/test/CodeGen/X86/emutls_generic.ll +++ b/test/CodeGen/X86/emutls_generic.ll @@ -55,7 +55,7 @@ entry: ; X86_32: calll __emutls_get_address ; X86_32-NOT: __emutls_t.external_x ; X86_32-NOT: __emutls_v.external_x: -; X86_32: .section .data.rel.local +; X86_32: .section .data.rel ; X86_32: .align 4 ; X86_32-LABEL: __emutls_v.external_y: ; X86_32-NEXT: .long 1 @@ -65,7 +65,7 @@ entry: ; X86_32: .section .rodata, ; X86_32-LABEL: __emutls_t.external_y: ; X86_32-NEXT: .byte 7 -; X86_32: .section .data.rel.local +; X86_32: .section .data.rel ; X86_32: .align 4 ; X86_32-LABEL: __emutls_v.internal_y: ; X86_32-NEXT: .long 8 @@ -95,7 +95,7 @@ entry: ; X86_64: .section .rodata, ; X86_64-LABEL: __emutls_t.external_y: ; X86_64-NEXT: .byte 7 -; X86_64: .section .data.rel.local +; X86_64: .section .data.rel ; X86_64: .align 8 ; X86_64-LABEL: __emutls_v.internal_y: ; X86_64-NEXT: .quad 8 diff --git a/test/CodeGen/X86/rodata-relocs.ll b/test/CodeGen/X86/rodata-relocs.ll index 9228ea1f621..7bd129b7fe9 100644 --- a/test/CodeGen/X86/rodata-relocs.ll +++ b/test/CodeGen/X86/rodata-relocs.ll @@ -32,15 +32,15 @@ target triple = "x86_64-unknown-linux-gnu" ; PIC: .section .rodata.cst16,"aM",@progbits,16 ; PIC: e: ; PIC: e1: -; PIC: .section .data.rel.ro.local,"aw",@progbits +; PIC: .section .data.rel.ro,"aw",@progbits ; PIC: p: ; PIC: t: -; PIC: .section .data.rel.ro,"aw",@progbits +; PIC-NOT: .section ; PIC: p1: ; PIC: t1: ; PIC: .section .data.rel,"aw",@progbits ; PIC: p2: ; PIC: t2: -; PIC: .section .data.rel.local,"aw",@progbits +; PIC-NOT: .section ; PIC: p3: ; PIC: t3: |