summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2018-09-23 16:17:13 +0000
committerSimon Pilgrim <llvm-dev@redking.me.uk>2018-09-23 16:17:13 +0000
commit4b50086013bb695d0dc28d57f2254e76a7389777 (patch)
tree6f44b543aa9ce7564e51dedc2b42ad12b06db67d /llvm/lib
parent151efca3fe67a36157e778f22993b4929b08b0cb (diff)
downloadbcm5719-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.td6
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]>;
}
}
OpenPOWER on IntegriCloud