aboutsummaryrefslogtreecommitdiff
path: root/lib/Target/X86/X86TargetMachine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Target/X86/X86TargetMachine.cpp')
-rw-r--r--lib/Target/X86/X86TargetMachine.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/lib/Target/X86/X86TargetMachine.cpp b/lib/Target/X86/X86TargetMachine.cpp
index b7ba568394..df4aefbe3d 100644
--- a/lib/Target/X86/X86TargetMachine.cpp
+++ b/lib/Target/X86/X86TargetMachine.cpp
@@ -43,6 +43,8 @@ X86_32TargetMachine::X86_32TargetMachine(const Target &T, StringRef TT,
getSubtargetImpl()->isTargetWindows()) ?
"e-p:32:32-f64:64:64-i64:64:64-f80:32:32-f128:128:128-"
"n8:16:32-S32" :
+ getSubtargetImpl()->isTargetNaCl() ? // @LOCALMOD
+ "e-p:32:32-s:32-f64:64:64-f32:32:32-f80:128:128-i64:64:64-n8:16:32-S128" :
"e-p:32:32-f64:32:64-i64:32:64-f80:32:32-f128:128:128-"
"n8:16:32-S128"),
InstrInfo(*this),
@@ -59,7 +61,10 @@ X86_64TargetMachine::X86_64TargetMachine(const Target &T, StringRef TT,
Reloc::Model RM, CodeModel::Model CM,
CodeGenOpt::Level OL)
: X86TargetMachine(T, TT, CPU, FS, Options, RM, CM, OL, true),
- DataLayout("e-p:64:64-s:64-f64:64:64-i64:64:64-f80:128:128-f128:128:128-"
+ DataLayout(getSubtargetImpl()->isTargetNaCl() ? // @LOCALMOD
+ "e-p:32:32-s:64-f64:64:64-f32:32:32-f80:128:128-i64:64:64-"
+ "n8:16:32:64-S128" :
+ "e-p:64:64-s:64-f64:64:64-i64:64:64-f80:128:128-f128:128:128-"
"n8:16:32:64-S128"),
InstrInfo(*this),
TSInfo(*this),
@@ -185,11 +190,25 @@ bool X86PassConfig::addPreEmitPass() {
ShouldPrint = true;
}
+ // @LOCALMOD-START
+ if (getX86Subtarget().isTargetNaCl()) {
+ addPass(createX86NaClRewritePass());
+ ShouldPrint = true;
+ }
+ // @LOCALMOD-END
+
return ShouldPrint;
}
bool X86TargetMachine::addCodeEmitter(PassManagerBase &PM,
JITCodeEmitter &JCE) {
+ // @LOCALMOD-START
+ // Add this pass here instead of as a PreEmitPass because this function is
+ // only called in JIT mode
+ if (Subtarget.isTargetNaCl()) {
+ PM.add(createX86NaClRewriteFinalPass());
+ }
+ // @LOCALMOD-END
PM.add(createX86JITCodeEmitterPass(*this, JCE));
return false;