diff options
Diffstat (limited to 'llvm/test/CodeGen/X86/recip-fastmath.ll')
| -rw-r--r-- | llvm/test/CodeGen/X86/recip-fastmath.ll | 118 |
1 files changed, 77 insertions, 41 deletions
diff --git a/llvm/test/CodeGen/X86/recip-fastmath.ll b/llvm/test/CodeGen/X86/recip-fastmath.ll index e33c688b0a0..5fb531da706 100644 --- a/llvm/test/CodeGen/X86/recip-fastmath.ll +++ b/llvm/test/CodeGen/X86/recip-fastmath.ll @@ -61,11 +61,17 @@ define float @f32_no_estimate(float %x) #0 { ; HASWELL-NO-FMA-NEXT: vdivss %xmm0, %xmm1, %xmm0 ; HASWELL-NO-FMA-NEXT: retq ; -; AVX512-LABEL: f32_no_estimate: -; AVX512: # BB#0: -; AVX512-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [1:0.50] -; AVX512-NEXT: vdivss %xmm0, %xmm1, %xmm0 # sched: [13:1.00] -; AVX512-NEXT: retq # sched: [2:1.00] +; KNL-LABEL: f32_no_estimate: +; KNL: # BB#0: +; KNL-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [1:0.50] +; KNL-NEXT: vdivss %xmm0, %xmm1, %xmm0 # sched: [13:1.00] +; KNL-NEXT: retq # sched: [2:1.00] +; +; SKX-LABEL: f32_no_estimate: +; SKX: # BB#0: +; SKX-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [1:0.50] +; SKX-NEXT: vdivss %xmm0, %xmm1, %xmm0 # sched: [11:1.00] +; SKX-NEXT: retq # sched: [2:1.00] %div = fdiv fast float 1.0, %x ret float %div } @@ -136,12 +142,19 @@ define float @f32_one_step(float %x) #1 { ; HASWELL-NO-FMA-NEXT: vaddss %xmm0, %xmm1, %xmm0 ; HASWELL-NO-FMA-NEXT: retq ; -; AVX512-LABEL: f32_one_step: -; AVX512: # BB#0: -; AVX512-NEXT: vrcp14ss %xmm0, %xmm0, %xmm1 -; AVX512-NEXT: vfnmadd213ss {{.*}}(%rip), %xmm1, %xmm0 # sched: [5:0.50] -; AVX512-NEXT: vfmadd132ss %xmm1, %xmm1, %xmm0 # sched: [5:0.50] -; AVX512-NEXT: retq # sched: [2:1.00] +; KNL-LABEL: f32_one_step: +; KNL: # BB#0: +; KNL-NEXT: vrcp14ss %xmm0, %xmm0, %xmm1 +; KNL-NEXT: vfnmadd213ss {{.*}}(%rip), %xmm1, %xmm0 # sched: [5:0.50] +; KNL-NEXT: vfmadd132ss %xmm1, %xmm1, %xmm0 # sched: [5:0.50] +; KNL-NEXT: retq # sched: [2:1.00] +; +; SKX-LABEL: f32_one_step: +; SKX: # BB#0: +; SKX-NEXT: vrcp14ss %xmm0, %xmm0, %xmm1 +; SKX-NEXT: vfnmadd213ss {{.*}}(%rip), %xmm1, %xmm0 # sched: [4:0.50] +; SKX-NEXT: vfmadd132ss %xmm1, %xmm1, %xmm0 # sched: [4:0.50] +; SKX-NEXT: retq # sched: [2:1.00] %div = fdiv fast float 1.0, %x ret float %div } @@ -242,16 +255,27 @@ define float @f32_two_step(float %x) #2 { ; HASWELL-NO-FMA-NEXT: vaddss %xmm0, %xmm1, %xmm0 ; HASWELL-NO-FMA-NEXT: retq ; -; AVX512-LABEL: f32_two_step: -; AVX512: # BB#0: -; AVX512-NEXT: vrcp14ss %xmm0, %xmm0, %xmm1 -; AVX512-NEXT: vmovss {{.*#+}} xmm2 = mem[0],zero,zero,zero sched: [1:0.50] -; AVX512-NEXT: vmovaps %xmm1, %xmm3 # sched: [1:1.00] -; AVX512-NEXT: vfnmadd213ss %xmm2, %xmm0, %xmm3 # sched: [5:0.50] -; AVX512-NEXT: vfmadd132ss %xmm1, %xmm1, %xmm3 # sched: [5:0.50] -; AVX512-NEXT: vfnmadd213ss %xmm2, %xmm3, %xmm0 # sched: [5:0.50] -; AVX512-NEXT: vfmadd132ss %xmm3, %xmm3, %xmm0 # sched: [5:0.50] -; AVX512-NEXT: retq # sched: [2:1.00] +; KNL-LABEL: f32_two_step: +; KNL: # BB#0: +; KNL-NEXT: vrcp14ss %xmm0, %xmm0, %xmm1 +; KNL-NEXT: vmovss {{.*#+}} xmm2 = mem[0],zero,zero,zero sched: [1:0.50] +; KNL-NEXT: vmovaps %xmm1, %xmm3 # sched: [1:1.00] +; KNL-NEXT: vfnmadd213ss %xmm2, %xmm0, %xmm3 # sched: [5:0.50] +; KNL-NEXT: vfmadd132ss %xmm1, %xmm1, %xmm3 # sched: [5:0.50] +; KNL-NEXT: vfnmadd213ss %xmm2, %xmm3, %xmm0 # sched: [5:0.50] +; KNL-NEXT: vfmadd132ss %xmm3, %xmm3, %xmm0 # sched: [5:0.50] +; KNL-NEXT: retq # sched: [2:1.00] +; +; SKX-LABEL: f32_two_step: +; SKX: # BB#0: +; SKX-NEXT: vrcp14ss %xmm0, %xmm0, %xmm1 +; SKX-NEXT: vmovss {{.*#+}} xmm2 = mem[0],zero,zero,zero sched: [1:0.50] +; SKX-NEXT: vmovaps %xmm1, %xmm3 # sched: [1:1.00] +; SKX-NEXT: vfnmadd213ss %xmm2, %xmm0, %xmm3 # sched: [4:0.50] +; SKX-NEXT: vfmadd132ss %xmm1, %xmm1, %xmm3 # sched: [4:0.50] +; SKX-NEXT: vfnmadd213ss %xmm2, %xmm3, %xmm0 # sched: [4:0.50] +; SKX-NEXT: vfmadd132ss %xmm3, %xmm3, %xmm0 # sched: [4:0.50] +; SKX-NEXT: retq # sched: [2:1.00] %div = fdiv fast float 1.0, %x ret float %div } @@ -300,11 +324,17 @@ define <4 x float> @v4f32_no_estimate(<4 x float> %x) #0 { ; HASWELL-NO-FMA-NEXT: vdivps %xmm0, %xmm1, %xmm0 ; HASWELL-NO-FMA-NEXT: retq ; -; AVX512-LABEL: v4f32_no_estimate: -; AVX512: # BB#0: -; AVX512-NEXT: vbroadcastss {{.*#+}} xmm1 = [1,1,1,1] sched: [1:0.50] -; AVX512-NEXT: vdivps %xmm0, %xmm1, %xmm0 # sched: [13:1.00] -; AVX512-NEXT: retq # sched: [2:1.00] +; KNL-LABEL: v4f32_no_estimate: +; KNL: # BB#0: +; KNL-NEXT: vbroadcastss {{.*#+}} xmm1 = [1,1,1,1] sched: [1:0.50] +; KNL-NEXT: vdivps %xmm0, %xmm1, %xmm0 # sched: [13:1.00] +; KNL-NEXT: retq # sched: [2:1.00] +; +; SKX-LABEL: v4f32_no_estimate: +; SKX: # BB#0: +; SKX-NEXT: vbroadcastss {{.*#+}} xmm1 = [1,1,1,1] sched: [1:0.50] +; SKX-NEXT: vdivps %xmm0, %xmm1, %xmm0 # sched: [11:1.00] +; SKX-NEXT: retq # sched: [2:1.00] %div = fdiv fast <4 x float> <float 1.0, float 1.0, float 1.0, float 1.0>, %x ret <4 x float> %div } @@ -388,7 +418,7 @@ define <4 x float> @v4f32_one_step(<4 x float> %x) #1 { ; SKX: # BB#0: ; SKX-NEXT: vrcp14ps %xmm0, %xmm1 ; SKX-NEXT: vfnmadd213ps {{.*}}(%rip){1to4}, %xmm1, %xmm0 -; SKX-NEXT: vfmadd132ps %xmm1, %xmm1, %xmm0 # sched: [5:0.50] +; SKX-NEXT: vfmadd132ps %xmm1, %xmm1, %xmm0 # sched: [4:0.50] ; SKX-NEXT: retq # sched: [2:1.00] %div = fdiv fast <4 x float> <float 1.0, float 1.0, float 1.0, float 1.0>, %x ret <4 x float> %div @@ -506,10 +536,10 @@ define <4 x float> @v4f32_two_step(<4 x float> %x) #2 { ; SKX-NEXT: vrcp14ps %xmm0, %xmm1 ; SKX-NEXT: vbroadcastss {{.*#+}} xmm2 = [1,1,1,1] sched: [1:0.50] ; SKX-NEXT: vmovaps %xmm1, %xmm3 # sched: [1:1.00] -; SKX-NEXT: vfnmadd213ps %xmm2, %xmm0, %xmm3 # sched: [5:0.50] -; SKX-NEXT: vfmadd132ps %xmm1, %xmm1, %xmm3 # sched: [5:0.50] -; SKX-NEXT: vfnmadd213ps %xmm2, %xmm3, %xmm0 # sched: [5:0.50] -; SKX-NEXT: vfmadd132ps %xmm3, %xmm3, %xmm0 # sched: [5:0.50] +; SKX-NEXT: vfnmadd213ps %xmm2, %xmm0, %xmm3 # sched: [4:0.50] +; SKX-NEXT: vfmadd132ps %xmm1, %xmm1, %xmm3 # sched: [4:0.50] +; SKX-NEXT: vfnmadd213ps %xmm2, %xmm3, %xmm0 # sched: [4:0.50] +; SKX-NEXT: vfmadd132ps %xmm3, %xmm3, %xmm0 # sched: [4:0.50] ; SKX-NEXT: retq # sched: [2:1.00] %div = fdiv fast <4 x float> <float 1.0, float 1.0, float 1.0, float 1.0>, %x ret <4 x float> %div @@ -562,11 +592,17 @@ define <8 x float> @v8f32_no_estimate(<8 x float> %x) #0 { ; HASWELL-NO-FMA-NEXT: vdivps %ymm0, %ymm1, %ymm0 ; HASWELL-NO-FMA-NEXT: retq ; -; AVX512-LABEL: v8f32_no_estimate: -; AVX512: # BB#0: -; AVX512-NEXT: vbroadcastss {{.*#+}} ymm1 = [1,1,1,1,1,1,1,1] sched: [1:0.50] -; AVX512-NEXT: vdivps %ymm0, %ymm1, %ymm0 # sched: [21:2.00] -; AVX512-NEXT: retq # sched: [2:1.00] +; KNL-LABEL: v8f32_no_estimate: +; KNL: # BB#0: +; KNL-NEXT: vbroadcastss {{.*#+}} ymm1 = [1,1,1,1,1,1,1,1] sched: [1:0.50] +; KNL-NEXT: vdivps %ymm0, %ymm1, %ymm0 # sched: [21:2.00] +; KNL-NEXT: retq # sched: [2:1.00] +; +; SKX-LABEL: v8f32_no_estimate: +; SKX: # BB#0: +; SKX-NEXT: vbroadcastss {{.*#+}} ymm1 = [1,1,1,1,1,1,1,1] sched: [1:0.50] +; SKX-NEXT: vdivps %ymm0, %ymm1, %ymm0 # sched: [11:1.00] +; SKX-NEXT: retq # sched: [2:1.00] %div = fdiv fast <8 x float> <float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0>, %x ret <8 x float> %div } @@ -657,7 +693,7 @@ define <8 x float> @v8f32_one_step(<8 x float> %x) #1 { ; SKX: # BB#0: ; SKX-NEXT: vrcp14ps %ymm0, %ymm1 ; SKX-NEXT: vfnmadd213ps {{.*}}(%rip){1to8}, %ymm1, %ymm0 -; SKX-NEXT: vfmadd132ps %ymm1, %ymm1, %ymm0 # sched: [5:0.50] +; SKX-NEXT: vfmadd132ps %ymm1, %ymm1, %ymm0 # sched: [4:0.50] ; SKX-NEXT: retq # sched: [2:1.00] %div = fdiv fast <8 x float> <float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0>, %x ret <8 x float> %div @@ -788,10 +824,10 @@ define <8 x float> @v8f32_two_step(<8 x float> %x) #2 { ; SKX-NEXT: vrcp14ps %ymm0, %ymm1 ; SKX-NEXT: vbroadcastss {{.*#+}} ymm2 = [1,1,1,1,1,1,1,1] sched: [1:0.50] ; SKX-NEXT: vmovaps %ymm1, %ymm3 # sched: [1:1.00] -; SKX-NEXT: vfnmadd213ps %ymm2, %ymm0, %ymm3 # sched: [5:0.50] -; SKX-NEXT: vfmadd132ps %ymm1, %ymm1, %ymm3 # sched: [5:0.50] -; SKX-NEXT: vfnmadd213ps %ymm2, %ymm3, %ymm0 # sched: [5:0.50] -; SKX-NEXT: vfmadd132ps %ymm3, %ymm3, %ymm0 # sched: [5:0.50] +; SKX-NEXT: vfnmadd213ps %ymm2, %ymm0, %ymm3 # sched: [4:0.50] +; SKX-NEXT: vfmadd132ps %ymm1, %ymm1, %ymm3 # sched: [4:0.50] +; SKX-NEXT: vfnmadd213ps %ymm2, %ymm3, %ymm0 # sched: [4:0.50] +; SKX-NEXT: vfmadd132ps %ymm3, %ymm3, %ymm0 # sched: [4:0.50] ; SKX-NEXT: retq # sched: [2:1.00] %div = fdiv fast <8 x float> <float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0>, %x ret <8 x float> %div |

