summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/X86/vector-reduce-smax.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/CodeGen/X86/vector-reduce-smax.ll')
-rw-r--r--llvm/test/CodeGen/X86/vector-reduce-smax.ll148
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
OpenPOWER on IntegriCloud