[X86] Add VEXTRB/W/D/Q to Zen scheduler model.
authorCraig Topper <craig.topper@intel.com>
Fri, 23 Mar 2018 06:41:36 +0000 (06:41 +0000)
committerCraig Topper <craig.topper@intel.com>
Fri, 23 Mar 2018 06:41:36 +0000 (06:41 +0000)
The SSE versions were present, but not the VEX version.

llvm-svn: 328290

llvm/lib/Target/X86/X86ScheduleZnver1.td
llvm/test/CodeGen/X86/sse-schedule.ll
llvm/test/CodeGen/X86/sse2-schedule.ll
llvm/test/CodeGen/X86/sse41-schedule.ll

index 2ed0008757bac5fb7b2a1ad4a3113f1aa72daa98..7ddbb2762e51bf199f84e58aca019496badb629e 100644 (file)
@@ -1033,7 +1033,7 @@ def ZnWritePEXTRr : SchedWriteRes<[ZnFPU12, ZnFPU2]> {
   let Latency = 2;
   let ResourceCycles = [1, 2];
 }
-def : InstRW<[ZnWritePEXTRr], (instregex "PEXTR(B|W|D|Q)rr", "MMX_PEXTRWrr")>;
+def : InstRW<[ZnWritePEXTRr], (instregex "(V?)PEXTR(B|W|D|Q)rr", "MMX_PEXTRWrr")>;
 
 def ZnWritePEXTRm : SchedWriteRes<[ZnAGU, ZnFPU12, ZnFPU2]> {
   let Latency = 5;
@@ -1041,7 +1041,7 @@ def ZnWritePEXTRm : SchedWriteRes<[ZnAGU, ZnFPU12, ZnFPU2]> {
   let ResourceCycles = [1, 2, 3];
 }
 // m8,x,i.
-def : InstRW<[ZnWritePEXTRm], (instregex "PEXTR(B|W|D|Q)mr")>;
+def : InstRW<[ZnWritePEXTRm], (instregex "(V?)PEXTR(B|W|D|Q)mr")>;
 
 // VPBROADCAST B/W.
 // x, m8/16.
index cf91bc1dce36b7502707eb07fe87843a7edcb330..91b6ce880aae3505dce7007e408cb1ef527c2110 100644 (file)
@@ -1738,7 +1738,7 @@ define void @test_movhps(<4 x float> %a0, <4 x float> %a1, x86_mmx *%a2) {
 ; ZNVER1:       # %bb.0:
 ; ZNVER1-NEXT:    vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [8:0.50]
 ; ZNVER1-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
-; ZNVER1-NEXT:    vpextrq $1, %xmm0, (%rdi) # sched: [8:1.00]
+; ZNVER1-NEXT:    vpextrq $1, %xmm0, (%rdi) # sched: [5:3.00]
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
   %1 = bitcast x86_mmx* %a2 to <2 x float>*
   %2 = load <2 x float>, <2 x float> *%1, align 8
index 5477cdb4ebfa8256ea4860caeed1810a1b51da46..37edfa0f2d9d5daa4a606c62245913dfa2859fd6 100644 (file)
@@ -5538,7 +5538,7 @@ define i16 @test_pextrw(<8 x i16> %a0) {
 ;
 ; ZNVER1-LABEL: test_pextrw:
 ; ZNVER1:       # %bb.0:
-; ZNVER1-NEXT:    vpextrw $6, %xmm0, %eax # sched: [1:0.25]
+; ZNVER1-NEXT:    vpextrw $6, %xmm0, %eax # sched: [2:2.00]
 ; ZNVER1-NEXT:    # kill: def $ax killed $ax killed $eax
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
   %1 = extractelement <8 x i16> %a0, i32 6
index de697317e9747f0efa0f5c8565b8095d4df92a12..7a739b649c8d51de5802eb5a11b29cd3644dd4a2 100644 (file)
@@ -954,8 +954,8 @@ define i32 @test_pextrb(<16 x i8> %a0, i8 *%a1) {
 ;
 ; ZNVER1-LABEL: test_pextrb:
 ; ZNVER1:       # %bb.0:
-; ZNVER1-NEXT:    vpextrb $3, %xmm0, %eax # sched: [1:0.25]
-; ZNVER1-NEXT:    vpextrb $1, %xmm0, (%rdi) # sched: [8:1.00]
+; ZNVER1-NEXT:    vpextrb $3, %xmm0, %eax # sched: [2:2.00]
+; ZNVER1-NEXT:    vpextrb $1, %xmm0, (%rdi) # sched: [5:3.00]
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
   %1 = extractelement <16 x i8> %a0, i32 3
   %2 = extractelement <16 x i8> %a0, i32 1
@@ -1024,8 +1024,8 @@ define i32 @test_pextrd(<4 x i32> %a0, i32 *%a1) {
 ; ZNVER1-LABEL: test_pextrd:
 ; ZNVER1:       # %bb.0:
 ; ZNVER1-NEXT:    vpaddd %xmm0, %xmm0, %xmm0 # sched: [1:0.25]
-; ZNVER1-NEXT:    vpextrd $3, %xmm0, %eax # sched: [1:0.25]
-; ZNVER1-NEXT:    vpextrd $1, %xmm0, (%rdi) # sched: [8:1.00]
+; ZNVER1-NEXT:    vpextrd $3, %xmm0, %eax # sched: [2:2.00]
+; ZNVER1-NEXT:    vpextrd $1, %xmm0, (%rdi) # sched: [5:3.00]
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
   %1 = add <4 x i32> %a0, %a0
   %2 = extractelement <4 x i32> %1, i32 3
@@ -1085,8 +1085,8 @@ define i64 @test_pextrq(<2 x i64> %a0, <2 x i64> %a1, i64 *%a2) {
 ;
 ; ZNVER1-LABEL: test_pextrq:
 ; ZNVER1:       # %bb.0:
-; ZNVER1-NEXT:    vpextrq $1, %xmm0, %rax # sched: [1:0.25]
-; ZNVER1-NEXT:    vpextrq $1, %xmm0, (%rdi) # sched: [8:1.00]
+; ZNVER1-NEXT:    vpextrq $1, %xmm0, %rax # sched: [2:2.00]
+; ZNVER1-NEXT:    vpextrq $1, %xmm0, (%rdi) # sched: [5:3.00]
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
   %1 = extractelement <2 x i64> %a0, i32 1
   %2 = extractelement <2 x i64> %a0, i32 1
@@ -1145,8 +1145,8 @@ define i32 @test_pextrw(<8 x i16> %a0, i16 *%a1) {
 ;
 ; ZNVER1-LABEL: test_pextrw:
 ; ZNVER1:       # %bb.0:
-; ZNVER1-NEXT:    vpextrw $3, %xmm0, %eax # sched: [1:0.25]
-; ZNVER1-NEXT:    vpextrw $1, %xmm0, (%rdi) # sched: [8:1.00]
+; ZNVER1-NEXT:    vpextrw $3, %xmm0, %eax # sched: [2:2.00]
+; ZNVER1-NEXT:    vpextrw $1, %xmm0, (%rdi) # sched: [5:3.00]
 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
   %1 = extractelement <8 x i16> %a0, i32 3
   %2 = extractelement <8 x i16> %a0, i32 1