summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2017-09-26 10:25:27 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2017-09-26 10:25:27 +0000
commit4b2113a3034842b6035cf9c184c5602b5535b7dc (patch)
tree7adb901ebe602ade201084c7a14324f4d36f5e56 /llvm/lib/Target
parent4a5a6337f7b79c8800dc0f5d7119f17b07e527ae (diff)
downloadbcm5719-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.td22
-rw-r--r--llvm/lib/Target/X86/X86InstrInfo.cpp21
-rw-r--r--llvm/lib/Target/X86/X86InstrInfo.td17
-rw-r--r--llvm/lib/Target/X86/X86MCInstLower.cpp4
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;
OpenPOWER on IntegriCloud