summaryrefslogtreecommitdiff
path: root/lib/Target/Alpha
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2006-05-03 01:29:57 +0000
committerOwen Anderson <resistor@mac.com>2006-05-03 01:29:57 +0000
commita69571c7991813c93cba64e88eced6899ce93d81 (patch)
tree06bc81338c35527b69a6e8e7434e7c1a824bc4ca /lib/Target/Alpha
parent0eb4d6b52e1b5db9a4c86e5a954356ae3507a287 (diff)
downloadllvm-a69571c7991813c93cba64e88eced6899ce93d81.tar.gz
llvm-a69571c7991813c93cba64e88eced6899ce93d81.tar.bz2
llvm-a69571c7991813c93cba64e88eced6899ce93d81.tar.xz
Refactor TargetMachine, pushing handling of TargetData into the target-specific subclasses. This has one caller-visible change: getTargetData() now returns a pointer instead of a reference.
This fixes PR 759. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28074 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/Alpha')
-rw-r--r--lib/Target/Alpha/AlphaAsmPrinter.cpp8
-rw-r--r--lib/Target/Alpha/AlphaTargetMachine.cpp3
-rw-r--r--lib/Target/Alpha/AlphaTargetMachine.h4
3 files changed, 9 insertions, 6 deletions
diff --git a/lib/Target/Alpha/AlphaAsmPrinter.cpp b/lib/Target/Alpha/AlphaAsmPrinter.cpp
index b078b68bd7..74af78e250 100644
--- a/lib/Target/Alpha/AlphaAsmPrinter.cpp
+++ b/lib/Target/Alpha/AlphaAsmPrinter.cpp
@@ -221,7 +221,7 @@ bool AlphaAsmPrinter::doInitialization(Module &M)
}
bool AlphaAsmPrinter::doFinalization(Module &M) {
- const TargetData &TD = TM.getTargetData();
+ const TargetData *TD = TM.getTargetData();
for (Module::const_global_iterator I = M.global_begin(), E = M.global_end(); I != E; ++I)
if (I->hasInitializer()) { // External global require no code
@@ -232,8 +232,8 @@ bool AlphaAsmPrinter::doFinalization(Module &M) {
O << "\n\n";
std::string name = Mang->getValueName(I);
Constant *C = I->getInitializer();
- unsigned Size = TD.getTypeSize(C->getType());
- // unsigned Align = TD.getTypeAlignmentShift(C->getType());
+ unsigned Size = TD->getTypeSize(C->getType());
+ // unsigned Align = TD->getTypeAlignmentShift(C->getType());
unsigned Align = getPreferredAlignmentLog(I);
if (C->isNullValue() &&
@@ -243,7 +243,7 @@ bool AlphaAsmPrinter::doFinalization(Module &M) {
if (I->hasInternalLinkage())
O << "\t.local " << name << "\n";
- O << "\t.comm " << name << "," << TD.getTypeSize(C->getType())
+ O << "\t.comm " << name << "," << TD->getTypeSize(C->getType())
<< "," << (1 << Align)
<< "\n";
} else {
diff --git a/lib/Target/Alpha/AlphaTargetMachine.cpp b/lib/Target/Alpha/AlphaTargetMachine.cpp
index 709669ffd7..2970f8201b 100644
--- a/lib/Target/Alpha/AlphaTargetMachine.cpp
+++ b/lib/Target/Alpha/AlphaTargetMachine.cpp
@@ -54,7 +54,8 @@ unsigned AlphaTargetMachine::getJITMatchQuality() {
}
AlphaTargetMachine::AlphaTargetMachine(const Module &M, const std::string &FS)
- : TargetMachine("alpha", true),
+ : TargetMachine("alpha"),
+ DataLayout("alpha", true),
FrameInfo(TargetFrameInfo::StackGrowsDown, 16, 0),
JITInfo(*this),
Subtarget(M, FS)
diff --git a/lib/Target/Alpha/AlphaTargetMachine.h b/lib/Target/Alpha/AlphaTargetMachine.h
index 8f6caeb6c2..6e23868172 100644
--- a/lib/Target/Alpha/AlphaTargetMachine.h
+++ b/lib/Target/Alpha/AlphaTargetMachine.h
@@ -26,11 +26,12 @@ namespace llvm {
class GlobalValue;
class AlphaTargetMachine : public TargetMachine {
+ const TargetData DataLayout; // Calculates type size & alignment
AlphaInstrInfo InstrInfo;
TargetFrameInfo FrameInfo;
AlphaJITInfo JITInfo;
AlphaSubtarget Subtarget;
-
+
public:
AlphaTargetMachine(const Module &M, const std::string &FS);
@@ -40,6 +41,7 @@ public:
virtual const MRegisterInfo *getRegisterInfo() const {
return &InstrInfo.getRegisterInfo();
}
+ virtual const TargetData *getTargetData() const { return &DataLayout; }
virtual TargetJITInfo* getJITInfo() {
return &JITInfo;
}