summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/ARM/ARMTargetMachine.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2013-12-09 23:56:41 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2013-12-09 23:56:41 +0000
commit964bf07fb8d1f9b9a6af5ea64183d60724134b77 (patch)
tree046160b398cf50c0eb59ead788904e6e31419c40 /llvm/lib/Target/ARM/ARMTargetMachine.cpp
parent7e6f36e29f89d3cb2836bbbc8e96b4424732cdf5 (diff)
downloadbcm5719-llvm-964bf07fb8d1f9b9a6af5ea64183d60724134b77.tar.gz
bcm5719-llvm-964bf07fb8d1f9b9a6af5ea64183d60724134b77.zip
Refactor the construction of the DataLayout string on ARM.
llvm-svn: 196843
Diffstat (limited to 'llvm/lib/Target/ARM/ARMTargetMachine.cpp')
-rw-r--r--llvm/lib/Target/ARM/ARMTargetMachine.cpp58
1 files changed, 39 insertions, 19 deletions
diff --git a/llvm/lib/Target/ARM/ARMTargetMachine.cpp b/llvm/lib/Target/ARM/ARMTargetMachine.cpp
index c2bf7887787..0c4adafbe16 100644
--- a/llvm/lib/Target/ARM/ARMTargetMachine.cpp
+++ b/llvm/lib/Target/ARM/ARMTargetMachine.cpp
@@ -67,6 +67,43 @@ void ARMBaseTargetMachine::addAnalysisPasses(PassManagerBase &PM) {
void ARMTargetMachine::anchor() { }
+static std::string computeDataLayout(ARMSubtarget &ST) {
+ std::string Ret = "e-p:32:32";
+
+ if (ST.isAPCS_ABI())
+ Ret += "-f64:32:64-i64:32:64";
+ else
+ Ret += "-f64:64:64-i64:64:64";
+
+ if (ST.isThumb()) {
+ if (ST.isAPCS_ABI())
+ Ret += "-i16:16:32-i8:8:32-i1:8:32";
+ else
+ Ret += "-i16:16:32-i8:8:32-i1:8:32";
+ }
+
+ if (ST.isAPCS_ABI())
+ Ret += "-v128:32:128-v64:32:64";
+ else
+ Ret += "-v128:64:128-v64:64:64";
+
+ if (ST.isThumb()) {
+ if (ST.isAPCS_ABI())
+ Ret += "-a:0:32";
+ else
+ Ret += "-a:0:32";
+ }
+
+ Ret += "-n32";
+
+ if (ST.isAAPCS_ABI())
+ Ret += "-S64";
+ else
+ Ret += "-S32";
+
+ return Ret;
+}
+
ARMTargetMachine::ARMTargetMachine(const Target &T, StringRef TT,
StringRef CPU, StringRef FS,
const TargetOptions &Options,
@@ -74,14 +111,7 @@ ARMTargetMachine::ARMTargetMachine(const Target &T, StringRef TT,
CodeGenOpt::Level OL)
: ARMBaseTargetMachine(T, TT, CPU, FS, Options, RM, CM, OL),
InstrInfo(Subtarget),
- DL(Subtarget.isAPCS_ABI() ?
- std::string("e-p:32:32-f64:32:64-i64:32:64-"
- "v128:32:128-v64:32:64-n32-S32") :
- Subtarget.isAAPCS_ABI() ?
- std::string("e-p:32:32-f64:64:64-i64:64:64-"
- "v128:64:128-v64:64:64-n32-S64") :
- std::string("e-p:32:32-f64:64:64-i64:64:64-"
- "v128:64:128-v64:64:64-n32-S32")),
+ DL(computeDataLayout(Subtarget)),
TLInfo(*this),
TSInfo(*this),
FrameLowering(Subtarget) {
@@ -102,17 +132,7 @@ ThumbTargetMachine::ThumbTargetMachine(const Target &T, StringRef TT,
InstrInfo(Subtarget.hasThumb2()
? ((ARMBaseInstrInfo*)new Thumb2InstrInfo(Subtarget))
: ((ARMBaseInstrInfo*)new Thumb1InstrInfo(Subtarget))),
- DL(Subtarget.isAPCS_ABI() ?
- std::string("e-p:32:32-f64:32:64-i64:32:64-"
- "i16:16:32-i8:8:32-i1:8:32-"
- "v128:32:128-v64:32:64-a:0:32-n32-S32") :
- Subtarget.isAAPCS_ABI() ?
- std::string("e-p:32:32-f64:64:64-i64:64:64-"
- "i16:16:32-i8:8:32-i1:8:32-"
- "v128:64:128-v64:64:64-a:0:32-n32-S64") :
- std::string("e-p:32:32-f64:64:64-i64:64:64-"
- "i16:16:32-i8:8:32-i1:8:32-"
- "v128:64:128-v64:64:64-a:0:32-n32-S32")),
+ DL(computeDataLayout(Subtarget)),
TLInfo(*this),
TSInfo(*this),
FrameLowering(Subtarget.hasThumb2()
OpenPOWER on IntegriCloud