forked from OSchip/llvm-project
[X86][SSE] Add scheduler class support for SSE42 (PCMPGT) instructions
llvm-svn: 301142
This commit is contained in:
parent
7d71ed503d
commit
06d6263309
|
@ -7144,33 +7144,37 @@ let Predicates = [UseSSE41] in {
|
|||
/// SS42I_binop_rm - Simple SSE 4.2 binary operator
|
||||
multiclass SS42I_binop_rm<bits<8> opc, string OpcodeStr, SDNode OpNode,
|
||||
ValueType OpVT, RegisterClass RC, PatFrag memop_frag,
|
||||
X86MemOperand x86memop, bit Is2Addr = 1> {
|
||||
X86MemOperand x86memop, OpndItins itins,
|
||||
bit Is2Addr = 1> {
|
||||
def rr : SS428I<opc, MRMSrcReg, (outs RC:$dst),
|
||||
(ins RC:$src1, RC:$src2),
|
||||
!if(Is2Addr,
|
||||
!strconcat(OpcodeStr, "\t{$src2, $dst|$dst, $src2}"),
|
||||
!strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}")),
|
||||
[(set RC:$dst, (OpVT (OpNode RC:$src1, RC:$src2)))]>;
|
||||
[(set RC:$dst, (OpVT (OpNode RC:$src1, RC:$src2)))]>, Sched<[itins.Sched]>;
|
||||
def rm : SS428I<opc, MRMSrcMem, (outs RC:$dst),
|
||||
(ins RC:$src1, x86memop:$src2),
|
||||
!if(Is2Addr,
|
||||
!strconcat(OpcodeStr, "\t{$src2, $dst|$dst, $src2}"),
|
||||
!strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}")),
|
||||
[(set RC:$dst,
|
||||
(OpVT (OpNode RC:$src1, (memop_frag addr:$src2))))]>;
|
||||
(OpVT (OpNode RC:$src1, (memop_frag addr:$src2))))]>,
|
||||
Sched<[itins.Sched.Folded, ReadAfterLd]>;
|
||||
}
|
||||
|
||||
let Predicates = [HasAVX] in
|
||||
defm VPCMPGTQ : SS42I_binop_rm<0x37, "vpcmpgtq", X86pcmpgt, v2i64, VR128,
|
||||
loadv2i64, i128mem, 0>, VEX_4V, VEX_WIG;
|
||||
loadv2i64, i128mem, SSE_INTALU_ITINS_P, 0>,
|
||||
VEX_4V, VEX_WIG;
|
||||
|
||||
let Predicates = [HasAVX2] in
|
||||
defm VPCMPGTQY : SS42I_binop_rm<0x37, "vpcmpgtq", X86pcmpgt, v4i64, VR256,
|
||||
loadv4i64, i256mem, 0>, VEX_4V, VEX_L, VEX_WIG;
|
||||
loadv4i64, i256mem, SSE_INTALU_ITINS_P, 0>,
|
||||
VEX_4V, VEX_L, VEX_WIG;
|
||||
|
||||
let Constraints = "$src1 = $dst" in
|
||||
defm PCMPGTQ : SS42I_binop_rm<0x37, "pcmpgtq", X86pcmpgt, v2i64, VR128,
|
||||
memopv2i64, i128mem>;
|
||||
memopv2i64, i128mem, SSE_INTALU_ITINS_P>;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// SSE4.2 - String/text Processing Instructions
|
||||
|
|
|
@ -447,14 +447,14 @@ define <2 x i64> @test_pcmpgtq(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> *%a2) {
|
|||
;
|
||||
; SLM-LABEL: test_pcmpgtq:
|
||||
; SLM: # BB#0:
|
||||
; SLM-NEXT: pcmpgtq %xmm1, %xmm0 # sched: [?:0.000000e+00]
|
||||
; SLM-NEXT: pcmpgtq (%rdi), %xmm0 # sched: [?:0.000000e+00]
|
||||
; SLM-NEXT: pcmpgtq %xmm1, %xmm0 # sched: [1:0.50]
|
||||
; SLM-NEXT: pcmpgtq (%rdi), %xmm0 # sched: [4:1.00]
|
||||
; SLM-NEXT: retq # sched: [4:1.00]
|
||||
;
|
||||
; SANDY-LABEL: test_pcmpgtq:
|
||||
; SANDY: # BB#0:
|
||||
; SANDY-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [?:0.000000e+00]
|
||||
; SANDY-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [?:0.000000e+00]
|
||||
; SANDY-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
|
||||
; SANDY-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [5:0.50]
|
||||
; SANDY-NEXT: retq # sched: [5:1.00]
|
||||
;
|
||||
; HASWELL-LABEL: test_pcmpgtq:
|
||||
|
@ -465,8 +465,8 @@ define <2 x i64> @test_pcmpgtq(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> *%a2) {
|
|||
;
|
||||
; BTVER2-LABEL: test_pcmpgtq:
|
||||
; BTVER2: # BB#0:
|
||||
; BTVER2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [?:0.000000e+00]
|
||||
; BTVER2-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [?:0.000000e+00]
|
||||
; BTVER2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
|
||||
; BTVER2-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
|
||||
; BTVER2-NEXT: retq # sched: [4:1.00]
|
||||
%1 = icmp sgt <2 x i64> %a0, %a1
|
||||
%2 = sext <2 x i1> %1 to <2 x i64>
|
||||
|
|
Loading…
Reference in New Issue