diff options
| author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-09-23 16:17:13 +0000 |
|---|---|---|
| committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-09-23 16:17:13 +0000 |
| commit | 4b50086013bb695d0dc28d57f2254e76a7389777 (patch) | |
| tree | 6f44b543aa9ce7564e51dedc2b42ad12b06db67d /llvm/lib | |
| parent | 151efca3fe67a36157e778f22993b4929b08b0cb (diff) | |
| download | bcm5719-llvm-4b50086013bb695d0dc28d57f2254e76a7389777.tar.gz bcm5719-llvm-4b50086013bb695d0dc28d57f2254e76a7389777.zip | |
[X86] Move RORX instructions back to WriteShift schedule class
Despite being rotates, these more modern instructions avoid many of the quirks of the regular x86 rotate instructions and consistently have a schedule closer to shifts.
llvm-svn: 342839
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/X86/X86InstrShiftRotate.td | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/X86InstrShiftRotate.td b/llvm/lib/Target/X86/X86InstrShiftRotate.td index fb6b8425b24..65be5b199db 100644 --- a/llvm/lib/Target/X86/X86InstrShiftRotate.td +++ b/llvm/lib/Target/X86/X86InstrShiftRotate.td @@ -822,16 +822,18 @@ def ROT64L2R_imm8 : SDNodeXForm<imm, [{ return getI8Imm(64 - N->getZExtValue(), SDLoc(N)); }]>; +// NOTE: We use WriteShift for these rotates as they avoid the stalls +// of many of the older x86 rotate instructions. multiclass bmi_rotate<string asm, RegisterClass RC, X86MemOperand x86memop> { let hasSideEffects = 0 in { def ri : Ii8<0xF0, MRMSrcReg, (outs RC:$dst), (ins RC:$src1, u8imm:$src2), !strconcat(asm, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"), - []>, TAXD, VEX, Sched<[WriteRotate]>; + []>, TAXD, VEX, Sched<[WriteShift]>; let mayLoad = 1 in def mi : Ii8<0xF0, MRMSrcMem, (outs RC:$dst), (ins x86memop:$src1, u8imm:$src2), !strconcat(asm, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"), - []>, TAXD, VEX, Sched<[WriteRotateLd]>; + []>, TAXD, VEX, Sched<[WriteShiftLd]>; } } |

