diff options
Diffstat (limited to 'llvm/test/CodeGen/X86/vector-reduce-smax.ll')
| -rw-r--r-- | llvm/test/CodeGen/X86/vector-reduce-smax.ll | 148 |
1 files changed, 74 insertions, 74 deletions
diff --git a/llvm/test/CodeGen/X86/vector-reduce-smax.ll b/llvm/test/CodeGen/X86/vector-reduce-smax.ll index 8e21e169b8d..f81998496c9 100644 --- a/llvm/test/CodeGen/X86/vector-reduce-smax.ll +++ b/llvm/test/CodeGen/X86/vector-reduce-smax.ll @@ -958,13 +958,13 @@ define i32 @test_v16i32(<16 x i32> %a0) { ; SSE41-LABEL: test_v16i32: ; SSE41: # %bb.0: ; SSE41-NEXT: pmaxsd %xmm3, %xmm1 -; SSE41-NEXT: pmaxsd %xmm2, %xmm0 -; SSE41-NEXT: pmaxsd %xmm1, %xmm0 -; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1] +; SSE41-NEXT: pmaxsd %xmm2, %xmm1 ; SSE41-NEXT: pmaxsd %xmm0, %xmm1 -; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3] +; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1] ; SSE41-NEXT: pmaxsd %xmm1, %xmm0 -; SSE41-NEXT: movd %xmm0, %eax +; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3] +; SSE41-NEXT: pmaxsd %xmm0, %xmm1 +; SSE41-NEXT: movd %xmm1, %eax ; SSE41-NEXT: retq ; ; AVX1-LABEL: test_v16i32: @@ -972,8 +972,8 @@ define i32 @test_v16i32(<16 x i32> %a0) { ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2 +; AVX1-NEXT: vpmaxsd %xmm2, %xmm1, %xmm1 ; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 -; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 ; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1] ; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 ; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3] @@ -1068,14 +1068,14 @@ define i32 @test_v32i32(<32 x i32> %a0) { ; SSE41-LABEL: test_v32i32: ; SSE41: # %bb.0: ; SSE41-NEXT: pmaxsd %xmm6, %xmm2 -; SSE41-NEXT: pmaxsd %xmm4, %xmm0 -; SSE41-NEXT: pmaxsd %xmm2, %xmm0 ; SSE41-NEXT: pmaxsd %xmm7, %xmm3 -; SSE41-NEXT: pmaxsd %xmm5, %xmm1 -; SSE41-NEXT: pmaxsd %xmm3, %xmm1 -; SSE41-NEXT: pmaxsd %xmm0, %xmm1 -; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1] -; SSE41-NEXT: pmaxsd %xmm1, %xmm0 +; SSE41-NEXT: pmaxsd %xmm5, %xmm3 +; SSE41-NEXT: pmaxsd %xmm1, %xmm3 +; SSE41-NEXT: pmaxsd %xmm4, %xmm2 +; SSE41-NEXT: pmaxsd %xmm3, %xmm2 +; SSE41-NEXT: pmaxsd %xmm0, %xmm2 +; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[2,3,0,1] +; SSE41-NEXT: pmaxsd %xmm2, %xmm0 ; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3] ; SSE41-NEXT: pmaxsd %xmm0, %xmm1 ; SSE41-NEXT: movd %xmm1, %eax @@ -1084,16 +1084,16 @@ define i32 @test_v32i32(<32 x i32> %a0) { ; AVX1-LABEL: test_v32i32: ; AVX1: # %bb.0: ; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm4 -; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm5 -; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 ; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1 -; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2 -; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 -; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0 +; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm3 +; AVX1-NEXT: vpmaxsd %xmm1, %xmm3, %xmm1 +; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 +; AVX1-NEXT: vpmaxsd %xmm1, %xmm3, %xmm1 +; AVX1-NEXT: vpmaxsd %xmm4, %xmm2, %xmm2 +; AVX1-NEXT: vpmaxsd %xmm1, %xmm2, %xmm1 ; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 -; AVX1-NEXT: vpmaxsd %xmm0, %xmm4, %xmm0 ; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1] ; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 ; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3] @@ -1105,7 +1105,7 @@ define i32 @test_v32i32(<32 x i32> %a0) { ; AVX2-LABEL: test_v32i32: ; AVX2: # %bb.0: ; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1 -; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0 +; AVX2-NEXT: vpmaxsd %ymm1, %ymm2, %ymm1 ; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 ; AVX2-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0 @@ -1461,26 +1461,26 @@ define i16 @test_v32i16(<32 x i16> %a0) { ; SSE2-LABEL: test_v32i16: ; SSE2: # %bb.0: ; SSE2-NEXT: pmaxsw %xmm3, %xmm1 -; SSE2-NEXT: pmaxsw %xmm2, %xmm0 -; SSE2-NEXT: pmaxsw %xmm1, %xmm0 -; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1] +; SSE2-NEXT: pmaxsw %xmm2, %xmm1 ; SSE2-NEXT: pmaxsw %xmm0, %xmm1 -; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3] +; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1] ; SSE2-NEXT: pmaxsw %xmm1, %xmm0 -; SSE2-NEXT: movdqa %xmm0, %xmm1 -; SSE2-NEXT: psrld $16, %xmm1 +; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3] ; SSE2-NEXT: pmaxsw %xmm0, %xmm1 -; SSE2-NEXT: movd %xmm1, %eax +; SSE2-NEXT: movdqa %xmm1, %xmm0 +; SSE2-NEXT: psrld $16, %xmm0 +; SSE2-NEXT: pmaxsw %xmm1, %xmm0 +; SSE2-NEXT: movd %xmm0, %eax ; SSE2-NEXT: # kill: def $ax killed $ax killed $eax ; SSE2-NEXT: retq ; ; SSE41-LABEL: test_v32i16: ; SSE41: # %bb.0: ; SSE41-NEXT: pmaxsw %xmm3, %xmm1 -; SSE41-NEXT: pmaxsw %xmm2, %xmm0 -; SSE41-NEXT: pmaxsw %xmm1, %xmm0 -; SSE41-NEXT: pxor {{.*}}(%rip), %xmm0 -; SSE41-NEXT: phminposuw %xmm0, %xmm0 +; SSE41-NEXT: pmaxsw %xmm2, %xmm1 +; SSE41-NEXT: pmaxsw %xmm0, %xmm1 +; SSE41-NEXT: pxor {{.*}}(%rip), %xmm1 +; SSE41-NEXT: phminposuw %xmm1, %xmm0 ; SSE41-NEXT: movd %xmm0, %eax ; SSE41-NEXT: xorl $32767, %eax # imm = 0x7FFF ; SSE41-NEXT: # kill: def $ax killed $ax killed $eax @@ -1491,8 +1491,8 @@ define i16 @test_v32i16(<32 x i16> %a0) { ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2 +; AVX1-NEXT: vpmaxsw %xmm2, %xmm1, %xmm1 ; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 -; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 ; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0 ; AVX1-NEXT: vphminposuw %xmm0, %xmm0 ; AVX1-NEXT: vmovd %xmm0, %eax @@ -1535,14 +1535,14 @@ define i16 @test_v64i16(<64 x i16> %a0) { ; SSE2-LABEL: test_v64i16: ; SSE2: # %bb.0: ; SSE2-NEXT: pmaxsw %xmm6, %xmm2 -; SSE2-NEXT: pmaxsw %xmm4, %xmm0 -; SSE2-NEXT: pmaxsw %xmm2, %xmm0 ; SSE2-NEXT: pmaxsw %xmm7, %xmm3 -; SSE2-NEXT: pmaxsw %xmm5, %xmm1 -; SSE2-NEXT: pmaxsw %xmm3, %xmm1 -; SSE2-NEXT: pmaxsw %xmm0, %xmm1 -; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1] -; SSE2-NEXT: pmaxsw %xmm1, %xmm0 +; SSE2-NEXT: pmaxsw %xmm5, %xmm3 +; SSE2-NEXT: pmaxsw %xmm1, %xmm3 +; SSE2-NEXT: pmaxsw %xmm4, %xmm2 +; SSE2-NEXT: pmaxsw %xmm3, %xmm2 +; SSE2-NEXT: pmaxsw %xmm0, %xmm2 +; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[2,3,0,1] +; SSE2-NEXT: pmaxsw %xmm2, %xmm0 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3] ; SSE2-NEXT: pmaxsw %xmm0, %xmm1 ; SSE2-NEXT: movdqa %xmm1, %xmm0 @@ -1555,14 +1555,14 @@ define i16 @test_v64i16(<64 x i16> %a0) { ; SSE41-LABEL: test_v64i16: ; SSE41: # %bb.0: ; SSE41-NEXT: pmaxsw %xmm7, %xmm3 -; SSE41-NEXT: pmaxsw %xmm5, %xmm1 -; SSE41-NEXT: pmaxsw %xmm3, %xmm1 +; SSE41-NEXT: pmaxsw %xmm5, %xmm3 +; SSE41-NEXT: pmaxsw %xmm1, %xmm3 ; SSE41-NEXT: pmaxsw %xmm6, %xmm2 -; SSE41-NEXT: pmaxsw %xmm4, %xmm0 -; SSE41-NEXT: pmaxsw %xmm2, %xmm0 -; SSE41-NEXT: pmaxsw %xmm1, %xmm0 -; SSE41-NEXT: pxor {{.*}}(%rip), %xmm0 -; SSE41-NEXT: phminposuw %xmm0, %xmm0 +; SSE41-NEXT: pmaxsw %xmm4, %xmm2 +; SSE41-NEXT: pmaxsw %xmm3, %xmm2 +; SSE41-NEXT: pmaxsw %xmm0, %xmm2 +; SSE41-NEXT: pxor {{.*}}(%rip), %xmm2 +; SSE41-NEXT: phminposuw %xmm2, %xmm0 ; SSE41-NEXT: movd %xmm0, %eax ; SSE41-NEXT: xorl $32767, %eax # imm = 0x7FFF ; SSE41-NEXT: # kill: def $ax killed $ax killed $eax @@ -1574,13 +1574,13 @@ define i16 @test_v64i16(<64 x i16> %a0) { ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5 ; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 -; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 -; AVX1-NEXT: vpmaxsw %xmm5, %xmm6, %xmm5 +; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 +; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 ; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4 ; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1 -; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0 +; AVX1-NEXT: vpmaxsw %xmm1, %xmm2, %xmm1 +; AVX1-NEXT: vpmaxsw %xmm4, %xmm1, %xmm1 ; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 -; AVX1-NEXT: vpmaxsw %xmm4, %xmm0, %xmm0 ; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0 ; AVX1-NEXT: vphminposuw %xmm0, %xmm0 ; AVX1-NEXT: vmovd %xmm0, %eax @@ -1592,7 +1592,7 @@ define i16 @test_v64i16(<64 x i16> %a0) { ; AVX2-LABEL: test_v64i16: ; AVX2: # %bb.0: ; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1 -; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0 +; AVX2-NEXT: vpmaxsw %ymm1, %ymm2, %ymm1 ; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 ; AVX2-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0 @@ -2139,13 +2139,13 @@ define i8 @test_v64i8(<64 x i8> %a0) { ; SSE41-LABEL: test_v64i8: ; SSE41: # %bb.0: ; SSE41-NEXT: pmaxsb %xmm3, %xmm1 -; SSE41-NEXT: pmaxsb %xmm2, %xmm0 -; SSE41-NEXT: pmaxsb %xmm1, %xmm0 -; SSE41-NEXT: pxor {{.*}}(%rip), %xmm0 -; SSE41-NEXT: movdqa %xmm0, %xmm1 -; SSE41-NEXT: psrlw $8, %xmm1 -; SSE41-NEXT: pminub %xmm0, %xmm1 -; SSE41-NEXT: phminposuw %xmm1, %xmm0 +; SSE41-NEXT: pmaxsb %xmm2, %xmm1 +; SSE41-NEXT: pmaxsb %xmm0, %xmm1 +; SSE41-NEXT: pxor {{.*}}(%rip), %xmm1 +; SSE41-NEXT: movdqa %xmm1, %xmm0 +; SSE41-NEXT: psrlw $8, %xmm0 +; SSE41-NEXT: pminub %xmm1, %xmm0 +; SSE41-NEXT: phminposuw %xmm0, %xmm0 ; SSE41-NEXT: pextrb $0, %xmm0, %eax ; SSE41-NEXT: xorb $127, %al ; SSE41-NEXT: # kill: def $al killed $al killed $eax @@ -2156,8 +2156,8 @@ define i8 @test_v64i8(<64 x i8> %a0) { ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2 +; AVX1-NEXT: vpmaxsb %xmm2, %xmm1, %xmm1 ; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 -; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 ; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0 ; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 @@ -2273,17 +2273,17 @@ define i8 @test_v128i8(<128 x i8> %a0) { ; SSE41-LABEL: test_v128i8: ; SSE41: # %bb.0: ; SSE41-NEXT: pmaxsb %xmm7, %xmm3 -; SSE41-NEXT: pmaxsb %xmm5, %xmm1 -; SSE41-NEXT: pmaxsb %xmm3, %xmm1 +; SSE41-NEXT: pmaxsb %xmm5, %xmm3 +; SSE41-NEXT: pmaxsb %xmm1, %xmm3 ; SSE41-NEXT: pmaxsb %xmm6, %xmm2 -; SSE41-NEXT: pmaxsb %xmm4, %xmm0 -; SSE41-NEXT: pmaxsb %xmm2, %xmm0 -; SSE41-NEXT: pmaxsb %xmm1, %xmm0 -; SSE41-NEXT: pxor {{.*}}(%rip), %xmm0 -; SSE41-NEXT: movdqa %xmm0, %xmm1 -; SSE41-NEXT: psrlw $8, %xmm1 -; SSE41-NEXT: pminub %xmm0, %xmm1 -; SSE41-NEXT: phminposuw %xmm1, %xmm0 +; SSE41-NEXT: pmaxsb %xmm4, %xmm2 +; SSE41-NEXT: pmaxsb %xmm3, %xmm2 +; SSE41-NEXT: pmaxsb %xmm0, %xmm2 +; SSE41-NEXT: pxor {{.*}}(%rip), %xmm2 +; SSE41-NEXT: movdqa %xmm2, %xmm0 +; SSE41-NEXT: psrlw $8, %xmm0 +; SSE41-NEXT: pminub %xmm2, %xmm0 +; SSE41-NEXT: phminposuw %xmm0, %xmm0 ; SSE41-NEXT: pextrb $0, %xmm0, %eax ; SSE41-NEXT: xorb $127, %al ; SSE41-NEXT: # kill: def $al killed $al killed $eax @@ -2295,13 +2295,13 @@ define i8 @test_v128i8(<128 x i8> %a0) { ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5 ; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5 -; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 -; AVX1-NEXT: vpmaxsb %xmm5, %xmm6, %xmm5 +; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 +; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 ; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4 ; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1 -; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0 +; AVX1-NEXT: vpmaxsb %xmm1, %xmm2, %xmm1 +; AVX1-NEXT: vpmaxsb %xmm4, %xmm1, %xmm1 ; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 -; AVX1-NEXT: vpmaxsb %xmm4, %xmm0, %xmm0 ; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0 ; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0 @@ -2315,7 +2315,7 @@ define i8 @test_v128i8(<128 x i8> %a0) { ; AVX2-LABEL: test_v128i8: ; AVX2: # %bb.0: ; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1 -; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0 +; AVX2-NEXT: vpmaxsb %ymm1, %ymm2, %ymm1 ; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 ; AVX2-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0 |

