mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-19 01:48:34 +00:00
eliminate TargetLoweringObjectFileSparc in favor of a TAI hook.
A TAI hook is appropriate in this case because this is just an asm syntax issue, not a semantic difference. TLOF should model the semantics of the section. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78498 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
17421d81fd
commit
5277b22687
@ -158,6 +158,11 @@ namespace llvm {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/// SunStyleELFSectionSwitchSyntax - This is true if this target uses "Sun
|
||||
/// Style" syntax for section switching ("#alloc,#write" etc) instead of the
|
||||
/// normal ELF syntax (,"a,w") in .section directives.
|
||||
bool SunStyleELFSectionSwitchSyntax; // Defaults to false.
|
||||
|
||||
//===--- Alignment Information ----------------------------------------===//
|
||||
|
||||
/// AlignDirective - The directive used to emit round up to an alignment
|
||||
@ -326,6 +331,11 @@ namespace llvm {
|
||||
return AS == 0 ? Data64bitsDirective : getDataASDirective(64, AS);
|
||||
}
|
||||
|
||||
|
||||
bool usesSunStyleELFSectionSwitchSyntax() const {
|
||||
return SunStyleELFSectionSwitchSyntax;
|
||||
}
|
||||
|
||||
|
||||
// Accessors.
|
||||
//
|
||||
|
@ -25,6 +25,7 @@ namespace llvm {
|
||||
class GlobalValue;
|
||||
class Mangler;
|
||||
class TargetMachine;
|
||||
class TargetAsmInfo;
|
||||
|
||||
class TargetLoweringObjectFile {
|
||||
MCContext *Ctx;
|
||||
@ -172,7 +173,8 @@ public:
|
||||
/// into a string that can be printed to the assembly file after the
|
||||
/// ".section foo" part of a section directive.
|
||||
virtual void getSectionFlagsAsString(SectionKind Kind,
|
||||
SmallVectorImpl<char> &Str) const {
|
||||
SmallVectorImpl<char> &Str,
|
||||
const TargetAsmInfo &TAI) const {
|
||||
}
|
||||
|
||||
protected:
|
||||
@ -229,7 +231,8 @@ public:
|
||||
Mangler *Mang, const TargetMachine &TM) const;
|
||||
|
||||
void getSectionFlagsAsString(SectionKind Kind,
|
||||
SmallVectorImpl<char> &Str) const;
|
||||
SmallVectorImpl<char> &Str,
|
||||
const TargetAsmInfo &TAI) const;
|
||||
|
||||
virtual const MCSection *
|
||||
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||
@ -286,7 +289,8 @@ public:
|
||||
Mangler *Mang, const TargetMachine &TM) const;
|
||||
|
||||
virtual void getSectionFlagsAsString(SectionKind Kind,
|
||||
SmallVectorImpl<char> &Str) const;
|
||||
SmallVectorImpl<char> &Str,
|
||||
const TargetAsmInfo &TAI) const;
|
||||
|
||||
virtual const MCSection *
|
||||
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||
|
@ -99,7 +99,7 @@ void AsmPrinter::SwitchToSection(const MCSection *NS) {
|
||||
// some magic assembler directive.
|
||||
if (!NS->isDirective()) {
|
||||
SmallString<32> FlagsStr;
|
||||
getObjFileLowering().getSectionFlagsAsString(NS->getKind(), FlagsStr);
|
||||
getObjFileLowering().getSectionFlagsAsString(NS->getKind(), FlagsStr, *TAI);
|
||||
|
||||
O << TAI->getSwitchToSectionDirective()
|
||||
<< CurrentSection->getName() << FlagsStr.c_str() << '\n';
|
||||
|
@ -549,34 +549,8 @@ static SPCC::CondCodes FPCondCCodeToFCC(ISD::CondCode CC) {
|
||||
}
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
class TargetLoweringObjectFileSparc : public TargetLoweringObjectFileELF {
|
||||
public:
|
||||
void getSectionFlagsAsString(SectionKind Kind,
|
||||
SmallVectorImpl<char> &Str) const {
|
||||
if (Kind.isMergeableConst() || Kind.isMergeableCString())
|
||||
return TargetLoweringObjectFileELF::getSectionFlagsAsString(Kind, Str);
|
||||
|
||||
// FIXME: Inefficient.
|
||||
std::string Res;
|
||||
if (!Kind.isMetadata())
|
||||
Res += ",#alloc";
|
||||
if (Kind.isText())
|
||||
Res += ",#execinstr";
|
||||
if (Kind.isWriteable())
|
||||
Res += ",#write";
|
||||
if (Kind.isThreadLocal())
|
||||
Res += ",#tls";
|
||||
|
||||
Str.append(Res.begin(), Res.end());
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
SparcTargetLowering::SparcTargetLowering(TargetMachine &TM)
|
||||
: TargetLowering(TM, new TargetLoweringObjectFileSparc()) {
|
||||
: TargetLowering(TM, new TargetLoweringObjectFileELF()) {
|
||||
|
||||
// Set up the register classes.
|
||||
addRegisterClass(MVT::i32, SP::IntRegsRegisterClass);
|
||||
|
@ -22,6 +22,8 @@ SparcELFTargetAsmInfo::SparcELFTargetAsmInfo() {
|
||||
ZeroDirective = "\t.skip\t";
|
||||
CommentString = "!";
|
||||
COMMDirectiveTakesAlignment = true;
|
||||
|
||||
SunStyleELFSectionSwitchSyntax = true;
|
||||
}
|
||||
|
||||
|
||||
|
@ -49,6 +49,7 @@ TargetAsmInfo::TargetAsmInfo() {
|
||||
Data16bitsDirective = "\t.short\t";
|
||||
Data32bitsDirective = "\t.long\t";
|
||||
Data64bitsDirective = "\t.quad\t";
|
||||
SunStyleELFSectionSwitchSyntax = false;
|
||||
AlignDirective = "\t.align\t";
|
||||
AlignmentIsInBytes = true;
|
||||
TextAlignFillValue = 0;
|
||||
|
@ -18,8 +18,9 @@
|
||||
#include "llvm/GlobalVariable.h"
|
||||
#include "llvm/MC/MCContext.h"
|
||||
#include "llvm/MC/MCSection.h"
|
||||
#include "llvm/Target/TargetMachine.h"
|
||||
#include "llvm/Target/TargetAsmInfo.h"
|
||||
#include "llvm/Target/TargetData.h"
|
||||
#include "llvm/Target/TargetMachine.h"
|
||||
#include "llvm/Target/TargetOptions.h"
|
||||
#include "llvm/Support/Mangler.h"
|
||||
#include "llvm/ADT/StringExtras.h"
|
||||
@ -407,7 +408,25 @@ getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||
|
||||
|
||||
void TargetLoweringObjectFileELF::
|
||||
getSectionFlagsAsString(SectionKind Kind, SmallVectorImpl<char> &Str) const {
|
||||
getSectionFlagsAsString(SectionKind Kind, SmallVectorImpl<char> &Str,
|
||||
const TargetAsmInfo &TAI) const {
|
||||
// Handle the weird solaris syntax if desired.
|
||||
if (TAI.usesSunStyleELFSectionSwitchSyntax() &&
|
||||
!Kind.isMergeableConst() && !Kind.isMergeableCString()) {
|
||||
// FIXME: Inefficient.
|
||||
std::string Res;
|
||||
if (!Kind.isMetadata())
|
||||
Res += ",#alloc";
|
||||
if (Kind.isText())
|
||||
Res += ",#execinstr";
|
||||
if (Kind.isWriteable())
|
||||
Res += ",#write";
|
||||
if (Kind.isThreadLocal())
|
||||
Res += ",#tls";
|
||||
Str.append(Res.begin(), Res.end());
|
||||
return;
|
||||
}
|
||||
|
||||
Str.push_back(',');
|
||||
Str.push_back('"');
|
||||
|
||||
@ -848,7 +867,8 @@ getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||
|
||||
|
||||
void TargetLoweringObjectFileCOFF::
|
||||
getSectionFlagsAsString(SectionKind Kind, SmallVectorImpl<char> &Str) const {
|
||||
getSectionFlagsAsString(SectionKind Kind, SmallVectorImpl<char> &Str,
|
||||
const TargetAsmInfo &TAI) const {
|
||||
// FIXME: Inefficient.
|
||||
std::string Res = ",\"";
|
||||
if (Kind.isText())
|
||||
|
Loading…
Reference in New Issue
Block a user