[llvm] r198761 - [x86] Do not relax PUSHi16 to PUSHi32 (PR18414)
David Woodhouse
dwmw2 at infradead.org
Wed Jan 8 04:58:33 PST 2014
Author: dwmw2
Date: Wed Jan 8 06:58:32 2014
New Revision: 198761
URL: http://llvm.org/viewvc/llvm-project?rev=198761&view=rev
Log:
[x86] Do not relax PUSHi16 to PUSHi32 (PR18414)
They do *different* things to %esp, so they are not equivalent.
Rename PUSHi8 to PUSH32i8 and add the missing PUSH16i8.
Added:
llvm/trunk/test/MC/X86/relax-insn.s
Modified:
llvm/trunk/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
llvm/trunk/lib/Target/X86/X86InstrInfo.td
Modified: llvm/trunk/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp?rev=198761&r1=198760&r2=198761&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp (original)
+++ llvm/trunk/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp Wed Jan 8 06:58:32 2014
@@ -217,9 +217,9 @@ static unsigned getRelaxedOpcodeArith(un
case X86::CMP64mi8: return X86::CMP64mi32;
// PUSH
- case X86::PUSHi8: return X86::PUSHi32;
- case X86::PUSHi16: return X86::PUSHi32;
- case X86::PUSH64i8: return X86::PUSH64i32;
+ case X86::PUSH32i8: return X86::PUSHi32;
+ case X86::PUSH16i8: return X86::PUSHi16;
+ case X86::PUSH64i8: return X86::PUSH64i32;
case X86::PUSH64i16: return X86::PUSH64i32;
}
}
Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.td?rev=198761&r1=198760&r2=198761&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86InstrInfo.td (original)
+++ llvm/trunk/lib/Target/X86/X86InstrInfo.td Wed Jan 8 06:58:32 2014
@@ -917,7 +917,10 @@ def PUSH32rmr: I<0xFF, MRM6r, (outs), (i
def PUSH32rmm: I<0xFF, MRM6m, (outs), (ins i32mem:$src), "push{l}\t$src",[],
IIC_PUSH_MEM>, OpSize16, Requires<[Not64BitMode]>;
-def PUSHi8 : Ii8<0x6a, RawFrm, (outs), (ins i32i8imm:$imm),
+def PUSH16i8 : Ii8<0x6a, RawFrm, (outs), (ins i16i8imm:$imm),
+ "push{w}\t$imm", [], IIC_PUSH_IMM>, OpSize,
+ Requires<[Not64BitMode]>;
+def PUSH32i8 : Ii8<0x6a, RawFrm, (outs), (ins i32i8imm:$imm),
"push{l}\t$imm", [], IIC_PUSH_IMM>, OpSize16,
Requires<[Not64BitMode]>;
def PUSHi16 : Ii16<0x68, RawFrm, (outs), (ins i16imm:$imm),
Added: llvm/trunk/test/MC/X86/relax-insn.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/X86/relax-insn.s?rev=198761&view=auto
==============================================================================
--- llvm/trunk/test/MC/X86/relax-insn.s (added)
+++ llvm/trunk/test/MC/X86/relax-insn.s Wed Jan 8 06:58:32 2014
@@ -0,0 +1,5 @@
+// RUN: llvm-mc -filetype=obj -triple i386-pc-linux-gnu %s -o %t
+// RUN: llvm-objdump -d %t | FileCheck %s
+
+.global foo
+pushw $foo // CHECK: pushw
More information about the llvm-commits
mailing list