diff options
| author | Evan Cheng <evan.cheng@apple.com> | 2007-12-22 02:26:46 +0000 |
|---|---|---|
| committer | Evan Cheng <evan.cheng@apple.com> | 2007-12-22 02:26:46 +0000 |
| commit | f4f52dbc8c7fd69c8354fd897abdc8bc4b8b8e78 (patch) | |
| tree | a2a6f057f03c1ce6b23211eeefe3b5405c29acc4 | |
| parent | dbc53856083ae7a1e6ff741ab1f0dd3d618c0092 (diff) | |
| download | bcm5719-llvm-f4f52dbc8c7fd69c8354fd897abdc8bc4b8b8e78.tar.gz bcm5719-llvm-f4f52dbc8c7fd69c8354fd897abdc8bc4b8b8e78.zip | |
Fix JIT code emission of X86::MovePCtoStack.
llvm-svn: 45307
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelDAGToDAG.cpp | 4 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86InstrInfo.td | 8 |
2 files changed, 7 insertions, 5 deletions
diff --git a/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp b/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp index e0183c6e1ed..c91b19a6afd 100644 --- a/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp +++ b/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp @@ -994,7 +994,9 @@ SDNode *X86DAGToDAGISel::getGlobalBaseReg() { unsigned PC = RegMap->createVirtualRegister(X86::GR32RegisterClass); const TargetInstrInfo *TII = TM.getInstrInfo(); - BuildMI(FirstMBB, MBBI, TII->get(X86::MovePCtoStack)); + // Operand of MovePCtoStack is completely ignored by asm printer. It's + // only used in JIT code emission as displacement to pc. + BuildMI(FirstMBB, MBBI, TII->get(X86::MovePCtoStack)).addImm(0); BuildMI(FirstMBB, MBBI, TII->get(X86::POP32r), PC); // If we're using vanilla 'GOT' PIC style, we should use relative addressing diff --git a/llvm/lib/Target/X86/X86InstrInfo.td b/llvm/lib/Target/X86/X86InstrInfo.td index f3b51dc127d..233907a9a4c 100644 --- a/llvm/lib/Target/X86/X86InstrInfo.td +++ b/llvm/lib/Target/X86/X86InstrInfo.td @@ -356,8 +356,8 @@ let isCall = 1 in let Defs = [EAX, ECX, EDX, FP0, FP1, FP2, FP3, FP4, FP5, FP6, ST0, MM0, MM1, MM2, MM3, MM4, MM5, MM6, MM7, XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7, EFLAGS] in { - def CALLpcrel32 : I<0xE8, RawFrm, (outs), (ins i32imm:$dst, variable_ops), - "call\t${dst:call}", []>; + def CALLpcrel32 : Ii32<0xE8, RawFrm, (outs), (ins i32imm:$dst,variable_ops), + "call\t${dst:call}", []>; def CALL32r : I<0xFF, MRM2r, (outs), (ins GR32:$dst, variable_ops), "call\t{*}$dst", [(X86call GR32:$dst)]>; def CALL32m : I<0xFF, MRM2m, (outs), (ins i32mem:$dst, variable_ops), @@ -408,8 +408,8 @@ def POPFD : I<0x9D, RawFrm, (outs), (ins), "popf", []>; let Defs = [ESP], Uses = [ESP, EFLAGS] in def PUSHFD : I<0x9C, RawFrm, (outs), (ins), "pushf", []>; -def MovePCtoStack : I<0, Pseudo, (outs), (ins piclabel:$label), - "call\t$label", []>; +def MovePCtoStack : Ii32<0xE8, RawFrm, (outs), (ins piclabel:$label), + "call\t$label", []>; let isTwoAddress = 1 in // GR32 = bswap GR32 def BSWAP32r : I<0xC8, AddRegFrm, |

