diff options
Diffstat (limited to 'lib/Target/X86/X86TargetMachine.cpp')
-rw-r--r-- | lib/Target/X86/X86TargetMachine.cpp | 21 |
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; |