diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2017-09-26 10:25:27 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2017-09-26 10:25:27 +0000 |
commit | 4b2113a3034842b6035cf9c184c5602b5535b7dc (patch) | |
tree | 7adb901ebe602ade201084c7a14324f4d36f5e56 /llvm/lib/Target | |
parent | 4a5a6337f7b79c8800dc0f5d7119f17b07e527ae (diff) | |
download | bcm5719-llvm-4b2113a3034842b6035cf9c184c5602b5535b7dc.tar.gz bcm5719-llvm-4b2113a3034842b6035cf9c184c5602b5535b7dc.zip |
Revert "[X86] Make all the NOREX CodeGenOnly instructions into postRA pseudos like the NOREX version of TEST."
Makes llc crash. This reverts commit r314151.
llvm-svn: 314199
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r-- | llvm/lib/Target/X86/X86InstrExtension.td | 22 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86InstrInfo.cpp | 21 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86InstrInfo.td | 17 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86MCInstLower.cpp | 4 |
4 files changed, 27 insertions, 37 deletions
diff --git a/llvm/lib/Target/X86/X86InstrExtension.td b/llvm/lib/Target/X86/X86InstrExtension.td index 83fbea2dd1c..af43d9f5332 100644 --- a/llvm/lib/Target/X86/X86InstrExtension.td +++ b/llvm/lib/Target/X86/X86InstrExtension.td @@ -94,22 +94,26 @@ def MOVZX32rm16: I<0xB7, MRMSrcMem, (outs GR32:$dst), (ins i16mem:$src), // These are the same as the regular MOVZX32rr8 and MOVZX32rm8 // except that they use GR32_NOREX for the output operand register class // instead of GR32. This allows them to operate on h registers on x86-64. -let hasSideEffects = 0, isPseudo = 1 in { -def MOVZX32_NOREXrr8 : I<0, Pseudo, +let hasSideEffects = 0, isCodeGenOnly = 1 in { +def MOVZX32_NOREXrr8 : I<0xB6, MRMSrcReg, (outs GR32_NOREX:$dst), (ins GR8_NOREX:$src), - "", [], IIC_MOVZX>, Sched<[WriteALU]>; + "movz{bl|x}\t{$src, $dst|$dst, $src} # NOREX", + [], IIC_MOVZX>, TB, OpSize32, Sched<[WriteALU]>; let mayLoad = 1 in -def MOVZX32_NOREXrm8 : I<0, Pseudo, +def MOVZX32_NOREXrm8 : I<0xB6, MRMSrcMem, (outs GR32_NOREX:$dst), (ins i8mem_NOREX:$src), - "", [], IIC_MOVZX>, Sched<[WriteALULd]>; + "movz{bl|x}\t{$src, $dst|$dst, $src} # NOREX", + [], IIC_MOVZX>, TB, OpSize32, Sched<[WriteALULd]>; -def MOVSX32_NOREXrr8 : I<0, Pseudo, +def MOVSX32_NOREXrr8 : I<0xBE, MRMSrcReg, (outs GR32_NOREX:$dst), (ins GR8_NOREX:$src), - "", [], IIC_MOVSX>, Sched<[WriteALU]>; + "movs{bl|x}\t{$src, $dst|$dst, $src} # NOREX", + [], IIC_MOVSX>, TB, OpSize32, Sched<[WriteALU]>; let mayLoad = 1 in -def MOVSX32_NOREXrm8 : I<0, Pseudo, +def MOVSX32_NOREXrm8 : I<0xBE, MRMSrcMem, (outs GR32_NOREX:$dst), (ins i8mem_NOREX:$src), - "", [], IIC_MOVSX>, Sched<[WriteALULd]>; + "movs{bl|x}\t{$src, $dst|$dst, $src} # NOREX", + [], IIC_MOVSX>, TB, OpSize32, Sched<[WriteALULd]>; } // MOVSX64rr8 always has a REX prefix and it has an 8-bit register diff --git a/llvm/lib/Target/X86/X86InstrInfo.cpp b/llvm/lib/Target/X86/X86InstrInfo.cpp index 6638c3bb2ac..0561bcd8d0a 100644 --- a/llvm/lib/Target/X86/X86InstrInfo.cpp +++ b/llvm/lib/Target/X86/X86InstrInfo.cpp @@ -7888,27 +7888,6 @@ bool X86InstrInfo::expandPostRAPseudo(MachineInstr &MI) const { case X86::VMOVUPSZ256mr_NOVLX: return expandNOVLXStore(MIB, &getRegisterInfo(), get(X86::VMOVUPSYmr), get(X86::VEXTRACTF64x4Zmr), X86::sub_ymm); - case X86::MOV8rr_NOREX: - MI.setDesc(get(X86::MOV8rr)); - return true; - case X86::MOV8rm_NOREX: - MI.setDesc(get(X86::MOV8rm)); - return true; - case X86::MOV8mr_NOREX: - MI.setDesc(get(X86::MOV8mr)); - return true; - case X86::MOVZX32_NOREXrr8: - MI.setDesc(get(X86::MOVZX32rr8)); - return true; - case X86::MOVZX32_NOREXrm8: - MI.setDesc(get(X86::MOVZX32rm8)); - return true; - case X86::MOVSX32_NOREXrr8: - MI.setDesc(get(X86::MOVSX32rr8)); - return true; - case X86::MOVSX32_NOREXrm8: - MI.setDesc(get(X86::MOVSX32rm8)); - return true; case X86::TEST8ri_NOREX: MI.setDesc(get(X86::TEST8ri)); return true; diff --git a/llvm/lib/Target/X86/X86InstrInfo.td b/llvm/lib/Target/X86/X86InstrInfo.td index d42a6e31af4..4800ac99bed 100644 --- a/llvm/lib/Target/X86/X86InstrInfo.td +++ b/llvm/lib/Target/X86/X86InstrInfo.td @@ -1618,20 +1618,23 @@ def MOV64mr : RI<0x89, MRMDestMem, (outs), (ins i64mem:$dst, GR64:$src), // Versions of MOV8rr, MOV8mr, and MOV8rm that use i8mem_NOREX and GR8_NOREX so // that they can be used for copying and storing h registers, which can't be // encoded when a REX prefix is present. -let isPseudo = 1 in { +let isCodeGenOnly = 1 in { let hasSideEffects = 0 in -def MOV8rr_NOREX : I<0, Pseudo, +def MOV8rr_NOREX : I<0x88, MRMDestReg, (outs GR8_NOREX:$dst), (ins GR8_NOREX:$src), - "", [], IIC_MOV>, Sched<[WriteMove]>; + "mov{b}\t{$src, $dst|$dst, $src} # NOREX", [], IIC_MOV>, + Sched<[WriteMove]>; let mayStore = 1, hasSideEffects = 0 in -def MOV8mr_NOREX : I<0, Pseudo, +def MOV8mr_NOREX : I<0x88, MRMDestMem, (outs), (ins i8mem_NOREX:$dst, GR8_NOREX:$src), - "", [], IIC_MOV_MEM>, Sched<[WriteStore]>; + "mov{b}\t{$src, $dst|$dst, $src} # NOREX", [], + IIC_MOV_MEM>, Sched<[WriteStore]>; let mayLoad = 1, hasSideEffects = 0, canFoldAsLoad = 1, isReMaterializable = 1 in -def MOV8rm_NOREX : I<0, Pseudo, +def MOV8rm_NOREX : I<0x8A, MRMSrcMem, (outs GR8_NOREX:$dst), (ins i8mem_NOREX:$src), - "", [], IIC_MOV_MEM>, Sched<[WriteLoad]>; + "mov{b}\t{$src, $dst|$dst, $src} # NOREX", [], + IIC_MOV_MEM>, Sched<[WriteLoad]>; } diff --git a/llvm/lib/Target/X86/X86MCInstLower.cpp b/llvm/lib/Target/X86/X86MCInstLower.cpp index 7a770d6cbc5..36d81128acf 100644 --- a/llvm/lib/Target/X86/X86MCInstLower.cpp +++ b/llvm/lib/Target/X86/X86MCInstLower.cpp @@ -604,7 +604,9 @@ ReSimplify: // Note, we are currently not handling the following instructions: // MOV64ao8, MOV64o8a // XCHG16ar, XCHG32ar, XCHG64ar + case X86::MOV8mr_NOREX: case X86::MOV8mr: + case X86::MOV8rm_NOREX: case X86::MOV8rm: case X86::MOV16mr: case X86::MOV16rm: @@ -613,7 +615,9 @@ ReSimplify: unsigned NewOpc; switch (OutMI.getOpcode()) { default: llvm_unreachable("Invalid opcode"); + case X86::MOV8mr_NOREX: case X86::MOV8mr: NewOpc = X86::MOV8o32a; break; + case X86::MOV8rm_NOREX: case X86::MOV8rm: NewOpc = X86::MOV8ao32; break; case X86::MOV16mr: NewOpc = X86::MOV16o32a; break; case X86::MOV16rm: NewOpc = X86::MOV16ao32; break; |