mirror of
https://github.com/RPCS3/llvm.git
synced 2024-11-27 21:50:29 +00:00
[X86] Add the vector integer min/max instructions to isAssociativeAndCommutative.
As far as I know these should be freely reassociatable just like the floating point MAXC/MINC instructions. The *reduce* test changes are largely regressions and caused by the "generic" CPU we default to not having a scheduler model. The machine-combiner-int-vec.ll test shows the positive benefits of this change. Differential Revision: https://reviews.llvm.org/D62787 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@362629 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
999ea6229b
commit
b342c7ebe8
@ -6922,6 +6922,18 @@ bool X86InstrInfo::isAssociativeAndCommutative(const MachineInstr &Inst) const {
|
|||||||
case X86::PADDQrr:
|
case X86::PADDQrr:
|
||||||
case X86::PMULLWrr:
|
case X86::PMULLWrr:
|
||||||
case X86::PMULLDrr:
|
case X86::PMULLDrr:
|
||||||
|
case X86::PMAXSBrr:
|
||||||
|
case X86::PMAXSDrr:
|
||||||
|
case X86::PMAXSWrr:
|
||||||
|
case X86::PMAXUBrr:
|
||||||
|
case X86::PMAXUDrr:
|
||||||
|
case X86::PMAXUWrr:
|
||||||
|
case X86::PMINSBrr:
|
||||||
|
case X86::PMINSDrr:
|
||||||
|
case X86::PMINSWrr:
|
||||||
|
case X86::PMINUBrr:
|
||||||
|
case X86::PMINUDrr:
|
||||||
|
case X86::PMINUWrr:
|
||||||
case X86::VPANDrr:
|
case X86::VPANDrr:
|
||||||
case X86::VPANDYrr:
|
case X86::VPANDYrr:
|
||||||
case X86::VPANDDZ128rr:
|
case X86::VPANDDZ128rr:
|
||||||
@ -7025,6 +7037,78 @@ bool X86InstrInfo::isAssociativeAndCommutative(const MachineInstr &Inst) const {
|
|||||||
case X86::VPMULLQZ128rr:
|
case X86::VPMULLQZ128rr:
|
||||||
case X86::VPMULLQZ256rr:
|
case X86::VPMULLQZ256rr:
|
||||||
case X86::VPMULLQZrr:
|
case X86::VPMULLQZrr:
|
||||||
|
case X86::VPMAXSBrr:
|
||||||
|
case X86::VPMAXSBYrr:
|
||||||
|
case X86::VPMAXSBZ128rr:
|
||||||
|
case X86::VPMAXSBZ256rr:
|
||||||
|
case X86::VPMAXSBZrr:
|
||||||
|
case X86::VPMAXSDrr:
|
||||||
|
case X86::VPMAXSDYrr:
|
||||||
|
case X86::VPMAXSDZ128rr:
|
||||||
|
case X86::VPMAXSDZ256rr:
|
||||||
|
case X86::VPMAXSDZrr:
|
||||||
|
case X86::VPMAXSQZ128rr:
|
||||||
|
case X86::VPMAXSQZ256rr:
|
||||||
|
case X86::VPMAXSQZrr:
|
||||||
|
case X86::VPMAXSWrr:
|
||||||
|
case X86::VPMAXSWYrr:
|
||||||
|
case X86::VPMAXSWZ128rr:
|
||||||
|
case X86::VPMAXSWZ256rr:
|
||||||
|
case X86::VPMAXSWZrr:
|
||||||
|
case X86::VPMAXUBrr:
|
||||||
|
case X86::VPMAXUBYrr:
|
||||||
|
case X86::VPMAXUBZ128rr:
|
||||||
|
case X86::VPMAXUBZ256rr:
|
||||||
|
case X86::VPMAXUBZrr:
|
||||||
|
case X86::VPMAXUDrr:
|
||||||
|
case X86::VPMAXUDYrr:
|
||||||
|
case X86::VPMAXUDZ128rr:
|
||||||
|
case X86::VPMAXUDZ256rr:
|
||||||
|
case X86::VPMAXUDZrr:
|
||||||
|
case X86::VPMAXUQZ128rr:
|
||||||
|
case X86::VPMAXUQZ256rr:
|
||||||
|
case X86::VPMAXUQZrr:
|
||||||
|
case X86::VPMAXUWrr:
|
||||||
|
case X86::VPMAXUWYrr:
|
||||||
|
case X86::VPMAXUWZ128rr:
|
||||||
|
case X86::VPMAXUWZ256rr:
|
||||||
|
case X86::VPMAXUWZrr:
|
||||||
|
case X86::VPMINSBrr:
|
||||||
|
case X86::VPMINSBYrr:
|
||||||
|
case X86::VPMINSBZ128rr:
|
||||||
|
case X86::VPMINSBZ256rr:
|
||||||
|
case X86::VPMINSBZrr:
|
||||||
|
case X86::VPMINSDrr:
|
||||||
|
case X86::VPMINSDYrr:
|
||||||
|
case X86::VPMINSDZ128rr:
|
||||||
|
case X86::VPMINSDZ256rr:
|
||||||
|
case X86::VPMINSDZrr:
|
||||||
|
case X86::VPMINSQZ128rr:
|
||||||
|
case X86::VPMINSQZ256rr:
|
||||||
|
case X86::VPMINSQZrr:
|
||||||
|
case X86::VPMINSWrr:
|
||||||
|
case X86::VPMINSWYrr:
|
||||||
|
case X86::VPMINSWZ128rr:
|
||||||
|
case X86::VPMINSWZ256rr:
|
||||||
|
case X86::VPMINSWZrr:
|
||||||
|
case X86::VPMINUBrr:
|
||||||
|
case X86::VPMINUBYrr:
|
||||||
|
case X86::VPMINUBZ128rr:
|
||||||
|
case X86::VPMINUBZ256rr:
|
||||||
|
case X86::VPMINUBZrr:
|
||||||
|
case X86::VPMINUDrr:
|
||||||
|
case X86::VPMINUDYrr:
|
||||||
|
case X86::VPMINUDZ128rr:
|
||||||
|
case X86::VPMINUDZ256rr:
|
||||||
|
case X86::VPMINUDZrr:
|
||||||
|
case X86::VPMINUQZ128rr:
|
||||||
|
case X86::VPMINUQZ256rr:
|
||||||
|
case X86::VPMINUQZrr:
|
||||||
|
case X86::VPMINUWrr:
|
||||||
|
case X86::VPMINUWYrr:
|
||||||
|
case X86::VPMINUWZ128rr:
|
||||||
|
case X86::VPMINUWZ256rr:
|
||||||
|
case X86::VPMINUWZrr:
|
||||||
// Normal min/max instructions are not commutative because of NaN and signed
|
// Normal min/max instructions are not commutative because of NaN and signed
|
||||||
// zero semantics, but these are. Thus, there's no need to check for global
|
// zero semantics, but these are. Thus, there's no need to check for global
|
||||||
// relaxed math; the instructions themselves have the properties we need.
|
// relaxed math; the instructions themselves have the properties we need.
|
||||||
|
@ -1331,13 +1331,13 @@ define i32 @test_reduce_v16i32(<16 x i32> %a0) {
|
|||||||
; X86-SSE42-LABEL: test_reduce_v16i32:
|
; X86-SSE42-LABEL: test_reduce_v16i32:
|
||||||
; X86-SSE42: ## %bb.0:
|
; X86-SSE42: ## %bb.0:
|
||||||
; X86-SSE42-NEXT: pmaxsd %xmm3, %xmm1
|
; X86-SSE42-NEXT: pmaxsd %xmm3, %xmm1
|
||||||
; X86-SSE42-NEXT: pmaxsd %xmm2, %xmm0
|
; X86-SSE42-NEXT: pmaxsd %xmm2, %xmm1
|
||||||
; X86-SSE42-NEXT: pmaxsd %xmm1, %xmm0
|
|
||||||
; X86-SSE42-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; X86-SSE42-NEXT: pmaxsd %xmm0, %xmm1
|
; X86-SSE42-NEXT: pmaxsd %xmm0, %xmm1
|
||||||
; X86-SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; X86-SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; X86-SSE42-NEXT: pmaxsd %xmm1, %xmm0
|
; X86-SSE42-NEXT: pmaxsd %xmm1, %xmm0
|
||||||
; X86-SSE42-NEXT: movd %xmm0, %eax
|
; X86-SSE42-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
|
; X86-SSE42-NEXT: pmaxsd %xmm0, %xmm1
|
||||||
|
; X86-SSE42-NEXT: movd %xmm1, %eax
|
||||||
; X86-SSE42-NEXT: retl
|
; X86-SSE42-NEXT: retl
|
||||||
;
|
;
|
||||||
; X86-AVX1-LABEL: test_reduce_v16i32:
|
; X86-AVX1-LABEL: test_reduce_v16i32:
|
||||||
@ -1345,8 +1345,8 @@ define i32 @test_reduce_v16i32(<16 x i32> %a0) {
|
|||||||
; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; X86-AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2
|
; X86-AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2
|
||||||
|
; X86-AVX1-NEXT: vpmaxsd %xmm2, %xmm1, %xmm1
|
||||||
; X86-AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
|
; X86-AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
|
||||||
; X86-AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0
|
|
||||||
; X86-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
; X86-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
||||||
; X86-AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
|
; X86-AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
|
||||||
; X86-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; X86-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
@ -1403,13 +1403,13 @@ define i32 @test_reduce_v16i32(<16 x i32> %a0) {
|
|||||||
; X64-SSE42-LABEL: test_reduce_v16i32:
|
; X64-SSE42-LABEL: test_reduce_v16i32:
|
||||||
; X64-SSE42: ## %bb.0:
|
; X64-SSE42: ## %bb.0:
|
||||||
; X64-SSE42-NEXT: pmaxsd %xmm3, %xmm1
|
; X64-SSE42-NEXT: pmaxsd %xmm3, %xmm1
|
||||||
; X64-SSE42-NEXT: pmaxsd %xmm2, %xmm0
|
; X64-SSE42-NEXT: pmaxsd %xmm2, %xmm1
|
||||||
; X64-SSE42-NEXT: pmaxsd %xmm1, %xmm0
|
|
||||||
; X64-SSE42-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; X64-SSE42-NEXT: pmaxsd %xmm0, %xmm1
|
; X64-SSE42-NEXT: pmaxsd %xmm0, %xmm1
|
||||||
; X64-SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; X64-SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; X64-SSE42-NEXT: pmaxsd %xmm1, %xmm0
|
; X64-SSE42-NEXT: pmaxsd %xmm1, %xmm0
|
||||||
; X64-SSE42-NEXT: movd %xmm0, %eax
|
; X64-SSE42-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
|
; X64-SSE42-NEXT: pmaxsd %xmm0, %xmm1
|
||||||
|
; X64-SSE42-NEXT: movd %xmm1, %eax
|
||||||
; X64-SSE42-NEXT: retq
|
; X64-SSE42-NEXT: retq
|
||||||
;
|
;
|
||||||
; X64-AVX1-LABEL: test_reduce_v16i32:
|
; X64-AVX1-LABEL: test_reduce_v16i32:
|
||||||
@ -1417,8 +1417,8 @@ define i32 @test_reduce_v16i32(<16 x i32> %a0) {
|
|||||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; X64-AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2
|
; X64-AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2
|
||||||
|
; X64-AVX1-NEXT: vpmaxsd %xmm2, %xmm1, %xmm1
|
||||||
; X64-AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
|
; X64-AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
|
||||||
; X64-AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0
|
|
||||||
; X64-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
; X64-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
||||||
; X64-AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
|
; X64-AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
|
||||||
; X64-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; X64-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
@ -1473,26 +1473,26 @@ define i16 @test_reduce_v32i16(<32 x i16> %a0) {
|
|||||||
; X86-SSE2-LABEL: test_reduce_v32i16:
|
; X86-SSE2-LABEL: test_reduce_v32i16:
|
||||||
; X86-SSE2: ## %bb.0:
|
; X86-SSE2: ## %bb.0:
|
||||||
; X86-SSE2-NEXT: pmaxsw %xmm3, %xmm1
|
; X86-SSE2-NEXT: pmaxsw %xmm3, %xmm1
|
||||||
; X86-SSE2-NEXT: pmaxsw %xmm2, %xmm0
|
; X86-SSE2-NEXT: pmaxsw %xmm2, %xmm1
|
||||||
; X86-SSE2-NEXT: pmaxsw %xmm1, %xmm0
|
|
||||||
; X86-SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; X86-SSE2-NEXT: pmaxsw %xmm0, %xmm1
|
; X86-SSE2-NEXT: pmaxsw %xmm0, %xmm1
|
||||||
; X86-SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; X86-SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; X86-SSE2-NEXT: pmaxsw %xmm1, %xmm0
|
; X86-SSE2-NEXT: pmaxsw %xmm1, %xmm0
|
||||||
; X86-SSE2-NEXT: movdqa %xmm0, %xmm1
|
; X86-SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; X86-SSE2-NEXT: psrld $16, %xmm1
|
|
||||||
; X86-SSE2-NEXT: pmaxsw %xmm0, %xmm1
|
; X86-SSE2-NEXT: pmaxsw %xmm0, %xmm1
|
||||||
; X86-SSE2-NEXT: movd %xmm1, %eax
|
; X86-SSE2-NEXT: movdqa %xmm1, %xmm0
|
||||||
|
; X86-SSE2-NEXT: psrld $16, %xmm0
|
||||||
|
; X86-SSE2-NEXT: pmaxsw %xmm1, %xmm0
|
||||||
|
; X86-SSE2-NEXT: movd %xmm0, %eax
|
||||||
; X86-SSE2-NEXT: ## kill: def $ax killed $ax killed $eax
|
; X86-SSE2-NEXT: ## kill: def $ax killed $ax killed $eax
|
||||||
; X86-SSE2-NEXT: retl
|
; X86-SSE2-NEXT: retl
|
||||||
;
|
;
|
||||||
; X86-SSE42-LABEL: test_reduce_v32i16:
|
; X86-SSE42-LABEL: test_reduce_v32i16:
|
||||||
; X86-SSE42: ## %bb.0:
|
; X86-SSE42: ## %bb.0:
|
||||||
; X86-SSE42-NEXT: pmaxsw %xmm3, %xmm1
|
; X86-SSE42-NEXT: pmaxsw %xmm3, %xmm1
|
||||||
; X86-SSE42-NEXT: pmaxsw %xmm2, %xmm0
|
; X86-SSE42-NEXT: pmaxsw %xmm2, %xmm1
|
||||||
; X86-SSE42-NEXT: pmaxsw %xmm1, %xmm0
|
; X86-SSE42-NEXT: pmaxsw %xmm0, %xmm1
|
||||||
; X86-SSE42-NEXT: pxor LCPI10_0, %xmm0
|
; X86-SSE42-NEXT: pxor LCPI10_0, %xmm1
|
||||||
; X86-SSE42-NEXT: phminposuw %xmm0, %xmm0
|
; X86-SSE42-NEXT: phminposuw %xmm1, %xmm0
|
||||||
; X86-SSE42-NEXT: movd %xmm0, %eax
|
; X86-SSE42-NEXT: movd %xmm0, %eax
|
||||||
; X86-SSE42-NEXT: xorl $32767, %eax ## imm = 0x7FFF
|
; X86-SSE42-NEXT: xorl $32767, %eax ## imm = 0x7FFF
|
||||||
; X86-SSE42-NEXT: ## kill: def $ax killed $ax killed $eax
|
; X86-SSE42-NEXT: ## kill: def $ax killed $ax killed $eax
|
||||||
@ -1503,8 +1503,8 @@ define i16 @test_reduce_v32i16(<32 x i16> %a0) {
|
|||||||
; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; X86-AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2
|
; X86-AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2
|
||||||
|
; X86-AVX1-NEXT: vpmaxsw %xmm2, %xmm1, %xmm1
|
||||||
; X86-AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
|
; X86-AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
|
||||||
; X86-AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0
|
|
||||||
; X86-AVX1-NEXT: vpxor LCPI10_0, %xmm0, %xmm0
|
; X86-AVX1-NEXT: vpxor LCPI10_0, %xmm0, %xmm0
|
||||||
; X86-AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; X86-AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
; X86-AVX1-NEXT: vmovd %xmm0, %eax
|
; X86-AVX1-NEXT: vmovd %xmm0, %eax
|
||||||
@ -1529,26 +1529,26 @@ define i16 @test_reduce_v32i16(<32 x i16> %a0) {
|
|||||||
; X64-SSE2-LABEL: test_reduce_v32i16:
|
; X64-SSE2-LABEL: test_reduce_v32i16:
|
||||||
; X64-SSE2: ## %bb.0:
|
; X64-SSE2: ## %bb.0:
|
||||||
; X64-SSE2-NEXT: pmaxsw %xmm3, %xmm1
|
; X64-SSE2-NEXT: pmaxsw %xmm3, %xmm1
|
||||||
; X64-SSE2-NEXT: pmaxsw %xmm2, %xmm0
|
; X64-SSE2-NEXT: pmaxsw %xmm2, %xmm1
|
||||||
; X64-SSE2-NEXT: pmaxsw %xmm1, %xmm0
|
|
||||||
; X64-SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; X64-SSE2-NEXT: pmaxsw %xmm0, %xmm1
|
; X64-SSE2-NEXT: pmaxsw %xmm0, %xmm1
|
||||||
; X64-SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; X64-SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; X64-SSE2-NEXT: pmaxsw %xmm1, %xmm0
|
; X64-SSE2-NEXT: pmaxsw %xmm1, %xmm0
|
||||||
; X64-SSE2-NEXT: movdqa %xmm0, %xmm1
|
; X64-SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; X64-SSE2-NEXT: psrld $16, %xmm1
|
|
||||||
; X64-SSE2-NEXT: pmaxsw %xmm0, %xmm1
|
; X64-SSE2-NEXT: pmaxsw %xmm0, %xmm1
|
||||||
; X64-SSE2-NEXT: movd %xmm1, %eax
|
; X64-SSE2-NEXT: movdqa %xmm1, %xmm0
|
||||||
|
; X64-SSE2-NEXT: psrld $16, %xmm0
|
||||||
|
; X64-SSE2-NEXT: pmaxsw %xmm1, %xmm0
|
||||||
|
; X64-SSE2-NEXT: movd %xmm0, %eax
|
||||||
; X64-SSE2-NEXT: ## kill: def $ax killed $ax killed $eax
|
; X64-SSE2-NEXT: ## kill: def $ax killed $ax killed $eax
|
||||||
; X64-SSE2-NEXT: retq
|
; X64-SSE2-NEXT: retq
|
||||||
;
|
;
|
||||||
; X64-SSE42-LABEL: test_reduce_v32i16:
|
; X64-SSE42-LABEL: test_reduce_v32i16:
|
||||||
; X64-SSE42: ## %bb.0:
|
; X64-SSE42: ## %bb.0:
|
||||||
; X64-SSE42-NEXT: pmaxsw %xmm3, %xmm1
|
; X64-SSE42-NEXT: pmaxsw %xmm3, %xmm1
|
||||||
; X64-SSE42-NEXT: pmaxsw %xmm2, %xmm0
|
; X64-SSE42-NEXT: pmaxsw %xmm2, %xmm1
|
||||||
; X64-SSE42-NEXT: pmaxsw %xmm1, %xmm0
|
; X64-SSE42-NEXT: pmaxsw %xmm0, %xmm1
|
||||||
; X64-SSE42-NEXT: pxor {{.*}}(%rip), %xmm0
|
; X64-SSE42-NEXT: pxor {{.*}}(%rip), %xmm1
|
||||||
; X64-SSE42-NEXT: phminposuw %xmm0, %xmm0
|
; X64-SSE42-NEXT: phminposuw %xmm1, %xmm0
|
||||||
; X64-SSE42-NEXT: movd %xmm0, %eax
|
; X64-SSE42-NEXT: movd %xmm0, %eax
|
||||||
; X64-SSE42-NEXT: xorl $32767, %eax ## imm = 0x7FFF
|
; X64-SSE42-NEXT: xorl $32767, %eax ## imm = 0x7FFF
|
||||||
; X64-SSE42-NEXT: ## kill: def $ax killed $ax killed $eax
|
; X64-SSE42-NEXT: ## kill: def $ax killed $ax killed $eax
|
||||||
@ -1559,8 +1559,8 @@ define i16 @test_reduce_v32i16(<32 x i16> %a0) {
|
|||||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; X64-AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2
|
; X64-AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2
|
||||||
|
; X64-AVX1-NEXT: vpmaxsw %xmm2, %xmm1, %xmm1
|
||||||
; X64-AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
|
; X64-AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
|
||||||
; X64-AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0
|
|
||||||
; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
||||||
; X64-AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; X64-AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
; X64-AVX1-NEXT: vmovd %xmm0, %eax
|
; X64-AVX1-NEXT: vmovd %xmm0, %eax
|
||||||
@ -1665,13 +1665,13 @@ define i8 @test_reduce_v64i8(<64 x i8> %a0) {
|
|||||||
; X86-SSE42-LABEL: test_reduce_v64i8:
|
; X86-SSE42-LABEL: test_reduce_v64i8:
|
||||||
; X86-SSE42: ## %bb.0:
|
; X86-SSE42: ## %bb.0:
|
||||||
; X86-SSE42-NEXT: pmaxsb %xmm3, %xmm1
|
; X86-SSE42-NEXT: pmaxsb %xmm3, %xmm1
|
||||||
; X86-SSE42-NEXT: pmaxsb %xmm2, %xmm0
|
; X86-SSE42-NEXT: pmaxsb %xmm2, %xmm1
|
||||||
; X86-SSE42-NEXT: pmaxsb %xmm1, %xmm0
|
; X86-SSE42-NEXT: pmaxsb %xmm0, %xmm1
|
||||||
; X86-SSE42-NEXT: pxor LCPI11_0, %xmm0
|
; X86-SSE42-NEXT: pxor LCPI11_0, %xmm1
|
||||||
; X86-SSE42-NEXT: movdqa %xmm0, %xmm1
|
; X86-SSE42-NEXT: movdqa %xmm1, %xmm0
|
||||||
; X86-SSE42-NEXT: psrlw $8, %xmm1
|
; X86-SSE42-NEXT: psrlw $8, %xmm0
|
||||||
; X86-SSE42-NEXT: pminub %xmm0, %xmm1
|
; X86-SSE42-NEXT: pminub %xmm1, %xmm0
|
||||||
; X86-SSE42-NEXT: phminposuw %xmm1, %xmm0
|
; X86-SSE42-NEXT: phminposuw %xmm0, %xmm0
|
||||||
; X86-SSE42-NEXT: pextrb $0, %xmm0, %eax
|
; X86-SSE42-NEXT: pextrb $0, %xmm0, %eax
|
||||||
; X86-SSE42-NEXT: xorb $127, %al
|
; X86-SSE42-NEXT: xorb $127, %al
|
||||||
; X86-SSE42-NEXT: ## kill: def $al killed $al killed $eax
|
; X86-SSE42-NEXT: ## kill: def $al killed $al killed $eax
|
||||||
@ -1682,8 +1682,8 @@ define i8 @test_reduce_v64i8(<64 x i8> %a0) {
|
|||||||
; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; X86-AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2
|
; X86-AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2
|
||||||
|
; X86-AVX1-NEXT: vpmaxsb %xmm2, %xmm1, %xmm1
|
||||||
; X86-AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
|
; X86-AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
|
||||||
; X86-AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0
|
|
||||||
; X86-AVX1-NEXT: vpxor LCPI11_0, %xmm0, %xmm0
|
; X86-AVX1-NEXT: vpxor LCPI11_0, %xmm0, %xmm0
|
||||||
; X86-AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
; X86-AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
||||||
; X86-AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
; X86-AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
@ -1759,13 +1759,13 @@ define i8 @test_reduce_v64i8(<64 x i8> %a0) {
|
|||||||
; X64-SSE42-LABEL: test_reduce_v64i8:
|
; X64-SSE42-LABEL: test_reduce_v64i8:
|
||||||
; X64-SSE42: ## %bb.0:
|
; X64-SSE42: ## %bb.0:
|
||||||
; X64-SSE42-NEXT: pmaxsb %xmm3, %xmm1
|
; X64-SSE42-NEXT: pmaxsb %xmm3, %xmm1
|
||||||
; X64-SSE42-NEXT: pmaxsb %xmm2, %xmm0
|
; X64-SSE42-NEXT: pmaxsb %xmm2, %xmm1
|
||||||
; X64-SSE42-NEXT: pmaxsb %xmm1, %xmm0
|
; X64-SSE42-NEXT: pmaxsb %xmm0, %xmm1
|
||||||
; X64-SSE42-NEXT: pxor {{.*}}(%rip), %xmm0
|
; X64-SSE42-NEXT: pxor {{.*}}(%rip), %xmm1
|
||||||
; X64-SSE42-NEXT: movdqa %xmm0, %xmm1
|
; X64-SSE42-NEXT: movdqa %xmm1, %xmm0
|
||||||
; X64-SSE42-NEXT: psrlw $8, %xmm1
|
; X64-SSE42-NEXT: psrlw $8, %xmm0
|
||||||
; X64-SSE42-NEXT: pminub %xmm0, %xmm1
|
; X64-SSE42-NEXT: pminub %xmm1, %xmm0
|
||||||
; X64-SSE42-NEXT: phminposuw %xmm1, %xmm0
|
; X64-SSE42-NEXT: phminposuw %xmm0, %xmm0
|
||||||
; X64-SSE42-NEXT: pextrb $0, %xmm0, %eax
|
; X64-SSE42-NEXT: pextrb $0, %xmm0, %eax
|
||||||
; X64-SSE42-NEXT: xorb $127, %al
|
; X64-SSE42-NEXT: xorb $127, %al
|
||||||
; X64-SSE42-NEXT: ## kill: def $al killed $al killed $eax
|
; X64-SSE42-NEXT: ## kill: def $al killed $al killed $eax
|
||||||
@ -1776,8 +1776,8 @@ define i8 @test_reduce_v64i8(<64 x i8> %a0) {
|
|||||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; X64-AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2
|
; X64-AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2
|
||||||
|
; X64-AVX1-NEXT: vpmaxsb %xmm2, %xmm1, %xmm1
|
||||||
; X64-AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
|
; X64-AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
|
||||||
; X64-AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0
|
|
||||||
; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
||||||
; X64-AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
; X64-AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
||||||
; X64-AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
; X64-AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
|
@ -1335,13 +1335,13 @@ define i32 @test_reduce_v16i32(<16 x i32> %a0) {
|
|||||||
; X86-SSE42-LABEL: test_reduce_v16i32:
|
; X86-SSE42-LABEL: test_reduce_v16i32:
|
||||||
; X86-SSE42: ## %bb.0:
|
; X86-SSE42: ## %bb.0:
|
||||||
; X86-SSE42-NEXT: pminsd %xmm3, %xmm1
|
; X86-SSE42-NEXT: pminsd %xmm3, %xmm1
|
||||||
; X86-SSE42-NEXT: pminsd %xmm2, %xmm0
|
; X86-SSE42-NEXT: pminsd %xmm2, %xmm1
|
||||||
; X86-SSE42-NEXT: pminsd %xmm1, %xmm0
|
|
||||||
; X86-SSE42-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; X86-SSE42-NEXT: pminsd %xmm0, %xmm1
|
; X86-SSE42-NEXT: pminsd %xmm0, %xmm1
|
||||||
; X86-SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; X86-SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; X86-SSE42-NEXT: pminsd %xmm1, %xmm0
|
; X86-SSE42-NEXT: pminsd %xmm1, %xmm0
|
||||||
; X86-SSE42-NEXT: movd %xmm0, %eax
|
; X86-SSE42-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
|
; X86-SSE42-NEXT: pminsd %xmm0, %xmm1
|
||||||
|
; X86-SSE42-NEXT: movd %xmm1, %eax
|
||||||
; X86-SSE42-NEXT: retl
|
; X86-SSE42-NEXT: retl
|
||||||
;
|
;
|
||||||
; X86-AVX1-LABEL: test_reduce_v16i32:
|
; X86-AVX1-LABEL: test_reduce_v16i32:
|
||||||
@ -1349,8 +1349,8 @@ define i32 @test_reduce_v16i32(<16 x i32> %a0) {
|
|||||||
; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; X86-AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2
|
; X86-AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2
|
||||||
|
; X86-AVX1-NEXT: vpminsd %xmm2, %xmm1, %xmm1
|
||||||
; X86-AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
; X86-AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
||||||
; X86-AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0
|
|
||||||
; X86-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
; X86-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
||||||
; X86-AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
; X86-AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
||||||
; X86-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; X86-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
@ -1407,13 +1407,13 @@ define i32 @test_reduce_v16i32(<16 x i32> %a0) {
|
|||||||
; X64-SSE42-LABEL: test_reduce_v16i32:
|
; X64-SSE42-LABEL: test_reduce_v16i32:
|
||||||
; X64-SSE42: ## %bb.0:
|
; X64-SSE42: ## %bb.0:
|
||||||
; X64-SSE42-NEXT: pminsd %xmm3, %xmm1
|
; X64-SSE42-NEXT: pminsd %xmm3, %xmm1
|
||||||
; X64-SSE42-NEXT: pminsd %xmm2, %xmm0
|
; X64-SSE42-NEXT: pminsd %xmm2, %xmm1
|
||||||
; X64-SSE42-NEXT: pminsd %xmm1, %xmm0
|
|
||||||
; X64-SSE42-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; X64-SSE42-NEXT: pminsd %xmm0, %xmm1
|
; X64-SSE42-NEXT: pminsd %xmm0, %xmm1
|
||||||
; X64-SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; X64-SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; X64-SSE42-NEXT: pminsd %xmm1, %xmm0
|
; X64-SSE42-NEXT: pminsd %xmm1, %xmm0
|
||||||
; X64-SSE42-NEXT: movd %xmm0, %eax
|
; X64-SSE42-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
|
; X64-SSE42-NEXT: pminsd %xmm0, %xmm1
|
||||||
|
; X64-SSE42-NEXT: movd %xmm1, %eax
|
||||||
; X64-SSE42-NEXT: retq
|
; X64-SSE42-NEXT: retq
|
||||||
;
|
;
|
||||||
; X64-AVX1-LABEL: test_reduce_v16i32:
|
; X64-AVX1-LABEL: test_reduce_v16i32:
|
||||||
@ -1421,8 +1421,8 @@ define i32 @test_reduce_v16i32(<16 x i32> %a0) {
|
|||||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; X64-AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2
|
; X64-AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2
|
||||||
|
; X64-AVX1-NEXT: vpminsd %xmm2, %xmm1, %xmm1
|
||||||
; X64-AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
; X64-AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
||||||
; X64-AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0
|
|
||||||
; X64-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
; X64-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
||||||
; X64-AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
; X64-AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
||||||
; X64-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; X64-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
@ -1477,26 +1477,26 @@ define i16 @test_reduce_v32i16(<32 x i16> %a0) {
|
|||||||
; X86-SSE2-LABEL: test_reduce_v32i16:
|
; X86-SSE2-LABEL: test_reduce_v32i16:
|
||||||
; X86-SSE2: ## %bb.0:
|
; X86-SSE2: ## %bb.0:
|
||||||
; X86-SSE2-NEXT: pminsw %xmm3, %xmm1
|
; X86-SSE2-NEXT: pminsw %xmm3, %xmm1
|
||||||
; X86-SSE2-NEXT: pminsw %xmm2, %xmm0
|
; X86-SSE2-NEXT: pminsw %xmm2, %xmm1
|
||||||
; X86-SSE2-NEXT: pminsw %xmm1, %xmm0
|
|
||||||
; X86-SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; X86-SSE2-NEXT: pminsw %xmm0, %xmm1
|
; X86-SSE2-NEXT: pminsw %xmm0, %xmm1
|
||||||
; X86-SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; X86-SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; X86-SSE2-NEXT: pminsw %xmm1, %xmm0
|
; X86-SSE2-NEXT: pminsw %xmm1, %xmm0
|
||||||
; X86-SSE2-NEXT: movdqa %xmm0, %xmm1
|
; X86-SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; X86-SSE2-NEXT: psrld $16, %xmm1
|
|
||||||
; X86-SSE2-NEXT: pminsw %xmm0, %xmm1
|
; X86-SSE2-NEXT: pminsw %xmm0, %xmm1
|
||||||
; X86-SSE2-NEXT: movd %xmm1, %eax
|
; X86-SSE2-NEXT: movdqa %xmm1, %xmm0
|
||||||
|
; X86-SSE2-NEXT: psrld $16, %xmm0
|
||||||
|
; X86-SSE2-NEXT: pminsw %xmm1, %xmm0
|
||||||
|
; X86-SSE2-NEXT: movd %xmm0, %eax
|
||||||
; X86-SSE2-NEXT: ## kill: def $ax killed $ax killed $eax
|
; X86-SSE2-NEXT: ## kill: def $ax killed $ax killed $eax
|
||||||
; X86-SSE2-NEXT: retl
|
; X86-SSE2-NEXT: retl
|
||||||
;
|
;
|
||||||
; X86-SSE42-LABEL: test_reduce_v32i16:
|
; X86-SSE42-LABEL: test_reduce_v32i16:
|
||||||
; X86-SSE42: ## %bb.0:
|
; X86-SSE42: ## %bb.0:
|
||||||
; X86-SSE42-NEXT: pminsw %xmm3, %xmm1
|
; X86-SSE42-NEXT: pminsw %xmm3, %xmm1
|
||||||
; X86-SSE42-NEXT: pminsw %xmm2, %xmm0
|
; X86-SSE42-NEXT: pminsw %xmm2, %xmm1
|
||||||
; X86-SSE42-NEXT: pminsw %xmm1, %xmm0
|
; X86-SSE42-NEXT: pminsw %xmm0, %xmm1
|
||||||
; X86-SSE42-NEXT: pxor LCPI10_0, %xmm0
|
; X86-SSE42-NEXT: pxor LCPI10_0, %xmm1
|
||||||
; X86-SSE42-NEXT: phminposuw %xmm0, %xmm0
|
; X86-SSE42-NEXT: phminposuw %xmm1, %xmm0
|
||||||
; X86-SSE42-NEXT: movd %xmm0, %eax
|
; X86-SSE42-NEXT: movd %xmm0, %eax
|
||||||
; X86-SSE42-NEXT: xorl $32768, %eax ## imm = 0x8000
|
; X86-SSE42-NEXT: xorl $32768, %eax ## imm = 0x8000
|
||||||
; X86-SSE42-NEXT: ## kill: def $ax killed $ax killed $eax
|
; X86-SSE42-NEXT: ## kill: def $ax killed $ax killed $eax
|
||||||
@ -1507,8 +1507,8 @@ define i16 @test_reduce_v32i16(<32 x i16> %a0) {
|
|||||||
; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; X86-AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2
|
; X86-AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2
|
||||||
|
; X86-AVX1-NEXT: vpminsw %xmm2, %xmm1, %xmm1
|
||||||
; X86-AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0
|
; X86-AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0
|
||||||
; X86-AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0
|
|
||||||
; X86-AVX1-NEXT: vpxor LCPI10_0, %xmm0, %xmm0
|
; X86-AVX1-NEXT: vpxor LCPI10_0, %xmm0, %xmm0
|
||||||
; X86-AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; X86-AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
; X86-AVX1-NEXT: vmovd %xmm0, %eax
|
; X86-AVX1-NEXT: vmovd %xmm0, %eax
|
||||||
@ -1533,26 +1533,26 @@ define i16 @test_reduce_v32i16(<32 x i16> %a0) {
|
|||||||
; X64-SSE2-LABEL: test_reduce_v32i16:
|
; X64-SSE2-LABEL: test_reduce_v32i16:
|
||||||
; X64-SSE2: ## %bb.0:
|
; X64-SSE2: ## %bb.0:
|
||||||
; X64-SSE2-NEXT: pminsw %xmm3, %xmm1
|
; X64-SSE2-NEXT: pminsw %xmm3, %xmm1
|
||||||
; X64-SSE2-NEXT: pminsw %xmm2, %xmm0
|
; X64-SSE2-NEXT: pminsw %xmm2, %xmm1
|
||||||
; X64-SSE2-NEXT: pminsw %xmm1, %xmm0
|
|
||||||
; X64-SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; X64-SSE2-NEXT: pminsw %xmm0, %xmm1
|
; X64-SSE2-NEXT: pminsw %xmm0, %xmm1
|
||||||
; X64-SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; X64-SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; X64-SSE2-NEXT: pminsw %xmm1, %xmm0
|
; X64-SSE2-NEXT: pminsw %xmm1, %xmm0
|
||||||
; X64-SSE2-NEXT: movdqa %xmm0, %xmm1
|
; X64-SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; X64-SSE2-NEXT: psrld $16, %xmm1
|
|
||||||
; X64-SSE2-NEXT: pminsw %xmm0, %xmm1
|
; X64-SSE2-NEXT: pminsw %xmm0, %xmm1
|
||||||
; X64-SSE2-NEXT: movd %xmm1, %eax
|
; X64-SSE2-NEXT: movdqa %xmm1, %xmm0
|
||||||
|
; X64-SSE2-NEXT: psrld $16, %xmm0
|
||||||
|
; X64-SSE2-NEXT: pminsw %xmm1, %xmm0
|
||||||
|
; X64-SSE2-NEXT: movd %xmm0, %eax
|
||||||
; X64-SSE2-NEXT: ## kill: def $ax killed $ax killed $eax
|
; X64-SSE2-NEXT: ## kill: def $ax killed $ax killed $eax
|
||||||
; X64-SSE2-NEXT: retq
|
; X64-SSE2-NEXT: retq
|
||||||
;
|
;
|
||||||
; X64-SSE42-LABEL: test_reduce_v32i16:
|
; X64-SSE42-LABEL: test_reduce_v32i16:
|
||||||
; X64-SSE42: ## %bb.0:
|
; X64-SSE42: ## %bb.0:
|
||||||
; X64-SSE42-NEXT: pminsw %xmm3, %xmm1
|
; X64-SSE42-NEXT: pminsw %xmm3, %xmm1
|
||||||
; X64-SSE42-NEXT: pminsw %xmm2, %xmm0
|
; X64-SSE42-NEXT: pminsw %xmm2, %xmm1
|
||||||
; X64-SSE42-NEXT: pminsw %xmm1, %xmm0
|
; X64-SSE42-NEXT: pminsw %xmm0, %xmm1
|
||||||
; X64-SSE42-NEXT: pxor {{.*}}(%rip), %xmm0
|
; X64-SSE42-NEXT: pxor {{.*}}(%rip), %xmm1
|
||||||
; X64-SSE42-NEXT: phminposuw %xmm0, %xmm0
|
; X64-SSE42-NEXT: phminposuw %xmm1, %xmm0
|
||||||
; X64-SSE42-NEXT: movd %xmm0, %eax
|
; X64-SSE42-NEXT: movd %xmm0, %eax
|
||||||
; X64-SSE42-NEXT: xorl $32768, %eax ## imm = 0x8000
|
; X64-SSE42-NEXT: xorl $32768, %eax ## imm = 0x8000
|
||||||
; X64-SSE42-NEXT: ## kill: def $ax killed $ax killed $eax
|
; X64-SSE42-NEXT: ## kill: def $ax killed $ax killed $eax
|
||||||
@ -1563,8 +1563,8 @@ define i16 @test_reduce_v32i16(<32 x i16> %a0) {
|
|||||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; X64-AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2
|
; X64-AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2
|
||||||
|
; X64-AVX1-NEXT: vpminsw %xmm2, %xmm1, %xmm1
|
||||||
; X64-AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0
|
; X64-AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0
|
||||||
; X64-AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0
|
|
||||||
; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
||||||
; X64-AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; X64-AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
; X64-AVX1-NEXT: vmovd %xmm0, %eax
|
; X64-AVX1-NEXT: vmovd %xmm0, %eax
|
||||||
@ -1669,13 +1669,13 @@ define i8 @test_reduce_v64i8(<64 x i8> %a0) {
|
|||||||
; X86-SSE42-LABEL: test_reduce_v64i8:
|
; X86-SSE42-LABEL: test_reduce_v64i8:
|
||||||
; X86-SSE42: ## %bb.0:
|
; X86-SSE42: ## %bb.0:
|
||||||
; X86-SSE42-NEXT: pminsb %xmm3, %xmm1
|
; X86-SSE42-NEXT: pminsb %xmm3, %xmm1
|
||||||
; X86-SSE42-NEXT: pminsb %xmm2, %xmm0
|
; X86-SSE42-NEXT: pminsb %xmm2, %xmm1
|
||||||
; X86-SSE42-NEXT: pminsb %xmm1, %xmm0
|
; X86-SSE42-NEXT: pminsb %xmm0, %xmm1
|
||||||
; X86-SSE42-NEXT: pxor LCPI11_0, %xmm0
|
; X86-SSE42-NEXT: pxor LCPI11_0, %xmm1
|
||||||
; X86-SSE42-NEXT: movdqa %xmm0, %xmm1
|
; X86-SSE42-NEXT: movdqa %xmm1, %xmm0
|
||||||
; X86-SSE42-NEXT: psrlw $8, %xmm1
|
; X86-SSE42-NEXT: psrlw $8, %xmm0
|
||||||
; X86-SSE42-NEXT: pminub %xmm0, %xmm1
|
; X86-SSE42-NEXT: pminub %xmm1, %xmm0
|
||||||
; X86-SSE42-NEXT: phminposuw %xmm1, %xmm0
|
; X86-SSE42-NEXT: phminposuw %xmm0, %xmm0
|
||||||
; X86-SSE42-NEXT: pextrb $0, %xmm0, %eax
|
; X86-SSE42-NEXT: pextrb $0, %xmm0, %eax
|
||||||
; X86-SSE42-NEXT: xorb $-128, %al
|
; X86-SSE42-NEXT: xorb $-128, %al
|
||||||
; X86-SSE42-NEXT: ## kill: def $al killed $al killed $eax
|
; X86-SSE42-NEXT: ## kill: def $al killed $al killed $eax
|
||||||
@ -1686,8 +1686,8 @@ define i8 @test_reduce_v64i8(<64 x i8> %a0) {
|
|||||||
; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; X86-AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2
|
; X86-AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2
|
||||||
|
; X86-AVX1-NEXT: vpminsb %xmm2, %xmm1, %xmm1
|
||||||
; X86-AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0
|
; X86-AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0
|
||||||
; X86-AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0
|
|
||||||
; X86-AVX1-NEXT: vpxor LCPI11_0, %xmm0, %xmm0
|
; X86-AVX1-NEXT: vpxor LCPI11_0, %xmm0, %xmm0
|
||||||
; X86-AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
; X86-AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
||||||
; X86-AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
; X86-AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
@ -1763,13 +1763,13 @@ define i8 @test_reduce_v64i8(<64 x i8> %a0) {
|
|||||||
; X64-SSE42-LABEL: test_reduce_v64i8:
|
; X64-SSE42-LABEL: test_reduce_v64i8:
|
||||||
; X64-SSE42: ## %bb.0:
|
; X64-SSE42: ## %bb.0:
|
||||||
; X64-SSE42-NEXT: pminsb %xmm3, %xmm1
|
; X64-SSE42-NEXT: pminsb %xmm3, %xmm1
|
||||||
; X64-SSE42-NEXT: pminsb %xmm2, %xmm0
|
; X64-SSE42-NEXT: pminsb %xmm2, %xmm1
|
||||||
; X64-SSE42-NEXT: pminsb %xmm1, %xmm0
|
; X64-SSE42-NEXT: pminsb %xmm0, %xmm1
|
||||||
; X64-SSE42-NEXT: pxor {{.*}}(%rip), %xmm0
|
; X64-SSE42-NEXT: pxor {{.*}}(%rip), %xmm1
|
||||||
; X64-SSE42-NEXT: movdqa %xmm0, %xmm1
|
; X64-SSE42-NEXT: movdqa %xmm1, %xmm0
|
||||||
; X64-SSE42-NEXT: psrlw $8, %xmm1
|
; X64-SSE42-NEXT: psrlw $8, %xmm0
|
||||||
; X64-SSE42-NEXT: pminub %xmm0, %xmm1
|
; X64-SSE42-NEXT: pminub %xmm1, %xmm0
|
||||||
; X64-SSE42-NEXT: phminposuw %xmm1, %xmm0
|
; X64-SSE42-NEXT: phminposuw %xmm0, %xmm0
|
||||||
; X64-SSE42-NEXT: pextrb $0, %xmm0, %eax
|
; X64-SSE42-NEXT: pextrb $0, %xmm0, %eax
|
||||||
; X64-SSE42-NEXT: xorb $-128, %al
|
; X64-SSE42-NEXT: xorb $-128, %al
|
||||||
; X64-SSE42-NEXT: ## kill: def $al killed $al killed $eax
|
; X64-SSE42-NEXT: ## kill: def $al killed $al killed $eax
|
||||||
@ -1780,8 +1780,8 @@ define i8 @test_reduce_v64i8(<64 x i8> %a0) {
|
|||||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; X64-AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2
|
; X64-AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2
|
||||||
|
; X64-AVX1-NEXT: vpminsb %xmm2, %xmm1, %xmm1
|
||||||
; X64-AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0
|
; X64-AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0
|
||||||
; X64-AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0
|
|
||||||
; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
; X64-AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
||||||
; X64-AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
; X64-AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
||||||
; X64-AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
; X64-AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
|
@ -1524,13 +1524,13 @@ define i32 @test_reduce_v16i32(<16 x i32> %a0) {
|
|||||||
; X86-SSE42-LABEL: test_reduce_v16i32:
|
; X86-SSE42-LABEL: test_reduce_v16i32:
|
||||||
; X86-SSE42: ## %bb.0:
|
; X86-SSE42: ## %bb.0:
|
||||||
; X86-SSE42-NEXT: pmaxud %xmm3, %xmm1
|
; X86-SSE42-NEXT: pmaxud %xmm3, %xmm1
|
||||||
; X86-SSE42-NEXT: pmaxud %xmm2, %xmm0
|
; X86-SSE42-NEXT: pmaxud %xmm2, %xmm1
|
||||||
; X86-SSE42-NEXT: pmaxud %xmm1, %xmm0
|
|
||||||
; X86-SSE42-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; X86-SSE42-NEXT: pmaxud %xmm0, %xmm1
|
; X86-SSE42-NEXT: pmaxud %xmm0, %xmm1
|
||||||
; X86-SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; X86-SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; X86-SSE42-NEXT: pmaxud %xmm1, %xmm0
|
; X86-SSE42-NEXT: pmaxud %xmm1, %xmm0
|
||||||
; X86-SSE42-NEXT: movd %xmm0, %eax
|
; X86-SSE42-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
|
; X86-SSE42-NEXT: pmaxud %xmm0, %xmm1
|
||||||
|
; X86-SSE42-NEXT: movd %xmm1, %eax
|
||||||
; X86-SSE42-NEXT: retl
|
; X86-SSE42-NEXT: retl
|
||||||
;
|
;
|
||||||
; X86-AVX1-LABEL: test_reduce_v16i32:
|
; X86-AVX1-LABEL: test_reduce_v16i32:
|
||||||
@ -1538,8 +1538,8 @@ define i32 @test_reduce_v16i32(<16 x i32> %a0) {
|
|||||||
; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; X86-AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2
|
; X86-AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2
|
||||||
|
; X86-AVX1-NEXT: vpmaxud %xmm2, %xmm1, %xmm1
|
||||||
; X86-AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
; X86-AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
||||||
; X86-AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0
|
|
||||||
; X86-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
; X86-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
||||||
; X86-AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
; X86-AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
||||||
; X86-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; X86-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
@ -1611,13 +1611,13 @@ define i32 @test_reduce_v16i32(<16 x i32> %a0) {
|
|||||||
; X64-SSE42-LABEL: test_reduce_v16i32:
|
; X64-SSE42-LABEL: test_reduce_v16i32:
|
||||||
; X64-SSE42: ## %bb.0:
|
; X64-SSE42: ## %bb.0:
|
||||||
; X64-SSE42-NEXT: pmaxud %xmm3, %xmm1
|
; X64-SSE42-NEXT: pmaxud %xmm3, %xmm1
|
||||||
; X64-SSE42-NEXT: pmaxud %xmm2, %xmm0
|
; X64-SSE42-NEXT: pmaxud %xmm2, %xmm1
|
||||||
; X64-SSE42-NEXT: pmaxud %xmm1, %xmm0
|
|
||||||
; X64-SSE42-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; X64-SSE42-NEXT: pmaxud %xmm0, %xmm1
|
; X64-SSE42-NEXT: pmaxud %xmm0, %xmm1
|
||||||
; X64-SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; X64-SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; X64-SSE42-NEXT: pmaxud %xmm1, %xmm0
|
; X64-SSE42-NEXT: pmaxud %xmm1, %xmm0
|
||||||
; X64-SSE42-NEXT: movd %xmm0, %eax
|
; X64-SSE42-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
|
; X64-SSE42-NEXT: pmaxud %xmm0, %xmm1
|
||||||
|
; X64-SSE42-NEXT: movd %xmm1, %eax
|
||||||
; X64-SSE42-NEXT: retq
|
; X64-SSE42-NEXT: retq
|
||||||
;
|
;
|
||||||
; X64-AVX1-LABEL: test_reduce_v16i32:
|
; X64-AVX1-LABEL: test_reduce_v16i32:
|
||||||
@ -1625,8 +1625,8 @@ define i32 @test_reduce_v16i32(<16 x i32> %a0) {
|
|||||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; X64-AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2
|
; X64-AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2
|
||||||
|
; X64-AVX1-NEXT: vpmaxud %xmm2, %xmm1, %xmm1
|
||||||
; X64-AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
; X64-AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
||||||
; X64-AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0
|
|
||||||
; X64-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
; X64-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
||||||
; X64-AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
; X64-AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
||||||
; X64-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; X64-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
@ -1685,9 +1685,9 @@ define i16 @test_reduce_v32i16(<32 x i16> %a0) {
|
|||||||
; X86-SSE2-NEXT: pxor %xmm4, %xmm1
|
; X86-SSE2-NEXT: pxor %xmm4, %xmm1
|
||||||
; X86-SSE2-NEXT: pmaxsw %xmm3, %xmm1
|
; X86-SSE2-NEXT: pmaxsw %xmm3, %xmm1
|
||||||
; X86-SSE2-NEXT: pxor %xmm4, %xmm2
|
; X86-SSE2-NEXT: pxor %xmm4, %xmm2
|
||||||
|
; X86-SSE2-NEXT: pmaxsw %xmm1, %xmm2
|
||||||
; X86-SSE2-NEXT: pxor %xmm4, %xmm0
|
; X86-SSE2-NEXT: pxor %xmm4, %xmm0
|
||||||
; X86-SSE2-NEXT: pmaxsw %xmm2, %xmm0
|
; X86-SSE2-NEXT: pmaxsw %xmm2, %xmm0
|
||||||
; X86-SSE2-NEXT: pmaxsw %xmm1, %xmm0
|
|
||||||
; X86-SSE2-NEXT: movdqa %xmm0, %xmm1
|
; X86-SSE2-NEXT: movdqa %xmm0, %xmm1
|
||||||
; X86-SSE2-NEXT: pxor %xmm4, %xmm1
|
; X86-SSE2-NEXT: pxor %xmm4, %xmm1
|
||||||
; X86-SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
|
; X86-SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
|
||||||
@ -1711,11 +1711,11 @@ define i16 @test_reduce_v32i16(<32 x i16> %a0) {
|
|||||||
; X86-SSE42-LABEL: test_reduce_v32i16:
|
; X86-SSE42-LABEL: test_reduce_v32i16:
|
||||||
; X86-SSE42: ## %bb.0:
|
; X86-SSE42: ## %bb.0:
|
||||||
; X86-SSE42-NEXT: pmaxuw %xmm3, %xmm1
|
; X86-SSE42-NEXT: pmaxuw %xmm3, %xmm1
|
||||||
; X86-SSE42-NEXT: pmaxuw %xmm2, %xmm0
|
; X86-SSE42-NEXT: pmaxuw %xmm2, %xmm1
|
||||||
; X86-SSE42-NEXT: pmaxuw %xmm1, %xmm0
|
; X86-SSE42-NEXT: pmaxuw %xmm0, %xmm1
|
||||||
; X86-SSE42-NEXT: pcmpeqd %xmm1, %xmm1
|
; X86-SSE42-NEXT: pcmpeqd %xmm0, %xmm0
|
||||||
; X86-SSE42-NEXT: pxor %xmm0, %xmm1
|
; X86-SSE42-NEXT: pxor %xmm1, %xmm0
|
||||||
; X86-SSE42-NEXT: phminposuw %xmm1, %xmm0
|
; X86-SSE42-NEXT: phminposuw %xmm0, %xmm0
|
||||||
; X86-SSE42-NEXT: movd %xmm0, %eax
|
; X86-SSE42-NEXT: movd %xmm0, %eax
|
||||||
; X86-SSE42-NEXT: notl %eax
|
; X86-SSE42-NEXT: notl %eax
|
||||||
; X86-SSE42-NEXT: ## kill: def $ax killed $ax killed $eax
|
; X86-SSE42-NEXT: ## kill: def $ax killed $ax killed $eax
|
||||||
@ -1726,8 +1726,8 @@ define i16 @test_reduce_v32i16(<32 x i16> %a0) {
|
|||||||
; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; X86-AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2
|
; X86-AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2
|
||||||
|
; X86-AVX1-NEXT: vpmaxuw %xmm2, %xmm1, %xmm1
|
||||||
; X86-AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
|
; X86-AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
|
||||||
; X86-AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0
|
|
||||||
; X86-AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
|
; X86-AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
|
||||||
; X86-AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
|
; X86-AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
|
||||||
; X86-AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; X86-AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
@ -1758,9 +1758,9 @@ define i16 @test_reduce_v32i16(<32 x i16> %a0) {
|
|||||||
; X64-SSE2-NEXT: pxor %xmm4, %xmm1
|
; X64-SSE2-NEXT: pxor %xmm4, %xmm1
|
||||||
; X64-SSE2-NEXT: pmaxsw %xmm3, %xmm1
|
; X64-SSE2-NEXT: pmaxsw %xmm3, %xmm1
|
||||||
; X64-SSE2-NEXT: pxor %xmm4, %xmm2
|
; X64-SSE2-NEXT: pxor %xmm4, %xmm2
|
||||||
|
; X64-SSE2-NEXT: pmaxsw %xmm1, %xmm2
|
||||||
; X64-SSE2-NEXT: pxor %xmm4, %xmm0
|
; X64-SSE2-NEXT: pxor %xmm4, %xmm0
|
||||||
; X64-SSE2-NEXT: pmaxsw %xmm2, %xmm0
|
; X64-SSE2-NEXT: pmaxsw %xmm2, %xmm0
|
||||||
; X64-SSE2-NEXT: pmaxsw %xmm1, %xmm0
|
|
||||||
; X64-SSE2-NEXT: movdqa %xmm0, %xmm1
|
; X64-SSE2-NEXT: movdqa %xmm0, %xmm1
|
||||||
; X64-SSE2-NEXT: pxor %xmm4, %xmm1
|
; X64-SSE2-NEXT: pxor %xmm4, %xmm1
|
||||||
; X64-SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
|
; X64-SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
|
||||||
@ -1784,11 +1784,11 @@ define i16 @test_reduce_v32i16(<32 x i16> %a0) {
|
|||||||
; X64-SSE42-LABEL: test_reduce_v32i16:
|
; X64-SSE42-LABEL: test_reduce_v32i16:
|
||||||
; X64-SSE42: ## %bb.0:
|
; X64-SSE42: ## %bb.0:
|
||||||
; X64-SSE42-NEXT: pmaxuw %xmm3, %xmm1
|
; X64-SSE42-NEXT: pmaxuw %xmm3, %xmm1
|
||||||
; X64-SSE42-NEXT: pmaxuw %xmm2, %xmm0
|
; X64-SSE42-NEXT: pmaxuw %xmm2, %xmm1
|
||||||
; X64-SSE42-NEXT: pmaxuw %xmm1, %xmm0
|
; X64-SSE42-NEXT: pmaxuw %xmm0, %xmm1
|
||||||
; X64-SSE42-NEXT: pcmpeqd %xmm1, %xmm1
|
; X64-SSE42-NEXT: pcmpeqd %xmm0, %xmm0
|
||||||
; X64-SSE42-NEXT: pxor %xmm0, %xmm1
|
; X64-SSE42-NEXT: pxor %xmm1, %xmm0
|
||||||
; X64-SSE42-NEXT: phminposuw %xmm1, %xmm0
|
; X64-SSE42-NEXT: phminposuw %xmm0, %xmm0
|
||||||
; X64-SSE42-NEXT: movd %xmm0, %eax
|
; X64-SSE42-NEXT: movd %xmm0, %eax
|
||||||
; X64-SSE42-NEXT: notl %eax
|
; X64-SSE42-NEXT: notl %eax
|
||||||
; X64-SSE42-NEXT: ## kill: def $ax killed $ax killed $eax
|
; X64-SSE42-NEXT: ## kill: def $ax killed $ax killed $eax
|
||||||
@ -1799,8 +1799,8 @@ define i16 @test_reduce_v32i16(<32 x i16> %a0) {
|
|||||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; X64-AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2
|
; X64-AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2
|
||||||
|
; X64-AVX1-NEXT: vpmaxuw %xmm2, %xmm1, %xmm1
|
||||||
; X64-AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
|
; X64-AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
|
||||||
; X64-AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0
|
|
||||||
; X64-AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
|
; X64-AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
|
||||||
; X64-AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
|
; X64-AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
|
||||||
; X64-AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; X64-AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
@ -1860,33 +1860,33 @@ define i8 @test_reduce_v64i8(<64 x i8> %a0) {
|
|||||||
; X86-SSE2-LABEL: test_reduce_v64i8:
|
; X86-SSE2-LABEL: test_reduce_v64i8:
|
||||||
; X86-SSE2: ## %bb.0:
|
; X86-SSE2: ## %bb.0:
|
||||||
; X86-SSE2-NEXT: pmaxub %xmm3, %xmm1
|
; X86-SSE2-NEXT: pmaxub %xmm3, %xmm1
|
||||||
; X86-SSE2-NEXT: pmaxub %xmm2, %xmm0
|
; X86-SSE2-NEXT: pmaxub %xmm2, %xmm1
|
||||||
; X86-SSE2-NEXT: pmaxub %xmm1, %xmm0
|
|
||||||
; X86-SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; X86-SSE2-NEXT: pmaxub %xmm0, %xmm1
|
; X86-SSE2-NEXT: pmaxub %xmm0, %xmm1
|
||||||
; X86-SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; X86-SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; X86-SSE2-NEXT: pmaxub %xmm1, %xmm0
|
; X86-SSE2-NEXT: pmaxub %xmm1, %xmm0
|
||||||
; X86-SSE2-NEXT: movdqa %xmm0, %xmm1
|
; X86-SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; X86-SSE2-NEXT: psrld $16, %xmm1
|
|
||||||
; X86-SSE2-NEXT: pmaxub %xmm0, %xmm1
|
; X86-SSE2-NEXT: pmaxub %xmm0, %xmm1
|
||||||
; X86-SSE2-NEXT: movdqa %xmm1, %xmm0
|
; X86-SSE2-NEXT: movdqa %xmm1, %xmm0
|
||||||
; X86-SSE2-NEXT: psrlw $8, %xmm0
|
; X86-SSE2-NEXT: psrld $16, %xmm0
|
||||||
; X86-SSE2-NEXT: pmaxub %xmm1, %xmm0
|
; X86-SSE2-NEXT: pmaxub %xmm1, %xmm0
|
||||||
; X86-SSE2-NEXT: movd %xmm0, %eax
|
; X86-SSE2-NEXT: movdqa %xmm0, %xmm1
|
||||||
|
; X86-SSE2-NEXT: psrlw $8, %xmm1
|
||||||
|
; X86-SSE2-NEXT: pmaxub %xmm0, %xmm1
|
||||||
|
; X86-SSE2-NEXT: movd %xmm1, %eax
|
||||||
; X86-SSE2-NEXT: ## kill: def $al killed $al killed $eax
|
; X86-SSE2-NEXT: ## kill: def $al killed $al killed $eax
|
||||||
; X86-SSE2-NEXT: retl
|
; X86-SSE2-NEXT: retl
|
||||||
;
|
;
|
||||||
; X86-SSE42-LABEL: test_reduce_v64i8:
|
; X86-SSE42-LABEL: test_reduce_v64i8:
|
||||||
; X86-SSE42: ## %bb.0:
|
; X86-SSE42: ## %bb.0:
|
||||||
; X86-SSE42-NEXT: pmaxub %xmm3, %xmm1
|
; X86-SSE42-NEXT: pmaxub %xmm3, %xmm1
|
||||||
; X86-SSE42-NEXT: pmaxub %xmm2, %xmm0
|
; X86-SSE42-NEXT: pmaxub %xmm2, %xmm1
|
||||||
; X86-SSE42-NEXT: pmaxub %xmm1, %xmm0
|
; X86-SSE42-NEXT: pmaxub %xmm0, %xmm1
|
||||||
; X86-SSE42-NEXT: pcmpeqd %xmm1, %xmm1
|
; X86-SSE42-NEXT: pcmpeqd %xmm0, %xmm0
|
||||||
; X86-SSE42-NEXT: pxor %xmm0, %xmm1
|
; X86-SSE42-NEXT: pxor %xmm1, %xmm0
|
||||||
; X86-SSE42-NEXT: movdqa %xmm1, %xmm0
|
; X86-SSE42-NEXT: movdqa %xmm0, %xmm1
|
||||||
; X86-SSE42-NEXT: psrlw $8, %xmm0
|
; X86-SSE42-NEXT: psrlw $8, %xmm1
|
||||||
; X86-SSE42-NEXT: pminub %xmm1, %xmm0
|
; X86-SSE42-NEXT: pminub %xmm0, %xmm1
|
||||||
; X86-SSE42-NEXT: phminposuw %xmm0, %xmm0
|
; X86-SSE42-NEXT: phminposuw %xmm1, %xmm0
|
||||||
; X86-SSE42-NEXT: pextrb $0, %xmm0, %eax
|
; X86-SSE42-NEXT: pextrb $0, %xmm0, %eax
|
||||||
; X86-SSE42-NEXT: notb %al
|
; X86-SSE42-NEXT: notb %al
|
||||||
; X86-SSE42-NEXT: ## kill: def $al killed $al killed $eax
|
; X86-SSE42-NEXT: ## kill: def $al killed $al killed $eax
|
||||||
@ -1897,8 +1897,8 @@ define i8 @test_reduce_v64i8(<64 x i8> %a0) {
|
|||||||
; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; X86-AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2
|
; X86-AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2
|
||||||
|
; X86-AVX1-NEXT: vpmaxub %xmm2, %xmm1, %xmm1
|
||||||
; X86-AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
|
; X86-AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
|
||||||
; X86-AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0
|
|
||||||
; X86-AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
|
; X86-AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
|
||||||
; X86-AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
|
; X86-AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
|
||||||
; X86-AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
; X86-AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
||||||
@ -1929,33 +1929,33 @@ define i8 @test_reduce_v64i8(<64 x i8> %a0) {
|
|||||||
; X64-SSE2-LABEL: test_reduce_v64i8:
|
; X64-SSE2-LABEL: test_reduce_v64i8:
|
||||||
; X64-SSE2: ## %bb.0:
|
; X64-SSE2: ## %bb.0:
|
||||||
; X64-SSE2-NEXT: pmaxub %xmm3, %xmm1
|
; X64-SSE2-NEXT: pmaxub %xmm3, %xmm1
|
||||||
; X64-SSE2-NEXT: pmaxub %xmm2, %xmm0
|
; X64-SSE2-NEXT: pmaxub %xmm2, %xmm1
|
||||||
; X64-SSE2-NEXT: pmaxub %xmm1, %xmm0
|
|
||||||
; X64-SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; X64-SSE2-NEXT: pmaxub %xmm0, %xmm1
|
; X64-SSE2-NEXT: pmaxub %xmm0, %xmm1
|
||||||
; X64-SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; X64-SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; X64-SSE2-NEXT: pmaxub %xmm1, %xmm0
|
; X64-SSE2-NEXT: pmaxub %xmm1, %xmm0
|
||||||
; X64-SSE2-NEXT: movdqa %xmm0, %xmm1
|
; X64-SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; X64-SSE2-NEXT: psrld $16, %xmm1
|
|
||||||
; X64-SSE2-NEXT: pmaxub %xmm0, %xmm1
|
; X64-SSE2-NEXT: pmaxub %xmm0, %xmm1
|
||||||
; X64-SSE2-NEXT: movdqa %xmm1, %xmm0
|
; X64-SSE2-NEXT: movdqa %xmm1, %xmm0
|
||||||
; X64-SSE2-NEXT: psrlw $8, %xmm0
|
; X64-SSE2-NEXT: psrld $16, %xmm0
|
||||||
; X64-SSE2-NEXT: pmaxub %xmm1, %xmm0
|
; X64-SSE2-NEXT: pmaxub %xmm1, %xmm0
|
||||||
; X64-SSE2-NEXT: movd %xmm0, %eax
|
; X64-SSE2-NEXT: movdqa %xmm0, %xmm1
|
||||||
|
; X64-SSE2-NEXT: psrlw $8, %xmm1
|
||||||
|
; X64-SSE2-NEXT: pmaxub %xmm0, %xmm1
|
||||||
|
; X64-SSE2-NEXT: movd %xmm1, %eax
|
||||||
; X64-SSE2-NEXT: ## kill: def $al killed $al killed $eax
|
; X64-SSE2-NEXT: ## kill: def $al killed $al killed $eax
|
||||||
; X64-SSE2-NEXT: retq
|
; X64-SSE2-NEXT: retq
|
||||||
;
|
;
|
||||||
; X64-SSE42-LABEL: test_reduce_v64i8:
|
; X64-SSE42-LABEL: test_reduce_v64i8:
|
||||||
; X64-SSE42: ## %bb.0:
|
; X64-SSE42: ## %bb.0:
|
||||||
; X64-SSE42-NEXT: pmaxub %xmm3, %xmm1
|
; X64-SSE42-NEXT: pmaxub %xmm3, %xmm1
|
||||||
; X64-SSE42-NEXT: pmaxub %xmm2, %xmm0
|
; X64-SSE42-NEXT: pmaxub %xmm2, %xmm1
|
||||||
; X64-SSE42-NEXT: pmaxub %xmm1, %xmm0
|
; X64-SSE42-NEXT: pmaxub %xmm0, %xmm1
|
||||||
; X64-SSE42-NEXT: pcmpeqd %xmm1, %xmm1
|
; X64-SSE42-NEXT: pcmpeqd %xmm0, %xmm0
|
||||||
; X64-SSE42-NEXT: pxor %xmm0, %xmm1
|
; X64-SSE42-NEXT: pxor %xmm1, %xmm0
|
||||||
; X64-SSE42-NEXT: movdqa %xmm1, %xmm0
|
; X64-SSE42-NEXT: movdqa %xmm0, %xmm1
|
||||||
; X64-SSE42-NEXT: psrlw $8, %xmm0
|
; X64-SSE42-NEXT: psrlw $8, %xmm1
|
||||||
; X64-SSE42-NEXT: pminub %xmm1, %xmm0
|
; X64-SSE42-NEXT: pminub %xmm0, %xmm1
|
||||||
; X64-SSE42-NEXT: phminposuw %xmm0, %xmm0
|
; X64-SSE42-NEXT: phminposuw %xmm1, %xmm0
|
||||||
; X64-SSE42-NEXT: pextrb $0, %xmm0, %eax
|
; X64-SSE42-NEXT: pextrb $0, %xmm0, %eax
|
||||||
; X64-SSE42-NEXT: notb %al
|
; X64-SSE42-NEXT: notb %al
|
||||||
; X64-SSE42-NEXT: ## kill: def $al killed $al killed $eax
|
; X64-SSE42-NEXT: ## kill: def $al killed $al killed $eax
|
||||||
@ -1966,8 +1966,8 @@ define i8 @test_reduce_v64i8(<64 x i8> %a0) {
|
|||||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; X64-AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2
|
; X64-AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2
|
||||||
|
; X64-AVX1-NEXT: vpmaxub %xmm2, %xmm1, %xmm1
|
||||||
; X64-AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
|
; X64-AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
|
||||||
; X64-AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0
|
|
||||||
; X64-AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
|
; X64-AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
|
||||||
; X64-AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
|
; X64-AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
|
||||||
; X64-AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
; X64-AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
||||||
|
@ -1428,13 +1428,13 @@ define i32 @test_reduce_v16i32(<16 x i32> %a0) {
|
|||||||
; X86-SSE42-LABEL: test_reduce_v16i32:
|
; X86-SSE42-LABEL: test_reduce_v16i32:
|
||||||
; X86-SSE42: ## %bb.0:
|
; X86-SSE42: ## %bb.0:
|
||||||
; X86-SSE42-NEXT: pminud %xmm3, %xmm1
|
; X86-SSE42-NEXT: pminud %xmm3, %xmm1
|
||||||
; X86-SSE42-NEXT: pminud %xmm2, %xmm0
|
; X86-SSE42-NEXT: pminud %xmm2, %xmm1
|
||||||
; X86-SSE42-NEXT: pminud %xmm1, %xmm0
|
|
||||||
; X86-SSE42-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; X86-SSE42-NEXT: pminud %xmm0, %xmm1
|
; X86-SSE42-NEXT: pminud %xmm0, %xmm1
|
||||||
; X86-SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; X86-SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; X86-SSE42-NEXT: pminud %xmm1, %xmm0
|
; X86-SSE42-NEXT: pminud %xmm1, %xmm0
|
||||||
; X86-SSE42-NEXT: movd %xmm0, %eax
|
; X86-SSE42-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
|
; X86-SSE42-NEXT: pminud %xmm0, %xmm1
|
||||||
|
; X86-SSE42-NEXT: movd %xmm1, %eax
|
||||||
; X86-SSE42-NEXT: retl
|
; X86-SSE42-NEXT: retl
|
||||||
;
|
;
|
||||||
; X86-AVX1-LABEL: test_reduce_v16i32:
|
; X86-AVX1-LABEL: test_reduce_v16i32:
|
||||||
@ -1442,8 +1442,8 @@ define i32 @test_reduce_v16i32(<16 x i32> %a0) {
|
|||||||
; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; X86-AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2
|
; X86-AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2
|
||||||
|
; X86-AVX1-NEXT: vpminud %xmm2, %xmm1, %xmm1
|
||||||
; X86-AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
; X86-AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
||||||
; X86-AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0
|
|
||||||
; X86-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
; X86-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
||||||
; X86-AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
; X86-AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
||||||
; X86-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; X86-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
@ -1515,13 +1515,13 @@ define i32 @test_reduce_v16i32(<16 x i32> %a0) {
|
|||||||
; X64-SSE42-LABEL: test_reduce_v16i32:
|
; X64-SSE42-LABEL: test_reduce_v16i32:
|
||||||
; X64-SSE42: ## %bb.0:
|
; X64-SSE42: ## %bb.0:
|
||||||
; X64-SSE42-NEXT: pminud %xmm3, %xmm1
|
; X64-SSE42-NEXT: pminud %xmm3, %xmm1
|
||||||
; X64-SSE42-NEXT: pminud %xmm2, %xmm0
|
; X64-SSE42-NEXT: pminud %xmm2, %xmm1
|
||||||
; X64-SSE42-NEXT: pminud %xmm1, %xmm0
|
|
||||||
; X64-SSE42-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; X64-SSE42-NEXT: pminud %xmm0, %xmm1
|
; X64-SSE42-NEXT: pminud %xmm0, %xmm1
|
||||||
; X64-SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; X64-SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; X64-SSE42-NEXT: pminud %xmm1, %xmm0
|
; X64-SSE42-NEXT: pminud %xmm1, %xmm0
|
||||||
; X64-SSE42-NEXT: movd %xmm0, %eax
|
; X64-SSE42-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
|
; X64-SSE42-NEXT: pminud %xmm0, %xmm1
|
||||||
|
; X64-SSE42-NEXT: movd %xmm1, %eax
|
||||||
; X64-SSE42-NEXT: retq
|
; X64-SSE42-NEXT: retq
|
||||||
;
|
;
|
||||||
; X64-AVX1-LABEL: test_reduce_v16i32:
|
; X64-AVX1-LABEL: test_reduce_v16i32:
|
||||||
@ -1529,8 +1529,8 @@ define i32 @test_reduce_v16i32(<16 x i32> %a0) {
|
|||||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; X64-AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2
|
; X64-AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2
|
||||||
|
; X64-AVX1-NEXT: vpminud %xmm2, %xmm1, %xmm1
|
||||||
; X64-AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
; X64-AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
||||||
; X64-AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0
|
|
||||||
; X64-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
; X64-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
||||||
; X64-AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
; X64-AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
||||||
; X64-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; X64-AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
@ -1589,9 +1589,9 @@ define i16 @test_reduce_v32i16(<32 x i16> %a0) {
|
|||||||
; X86-SSE2-NEXT: pxor %xmm4, %xmm1
|
; X86-SSE2-NEXT: pxor %xmm4, %xmm1
|
||||||
; X86-SSE2-NEXT: pminsw %xmm3, %xmm1
|
; X86-SSE2-NEXT: pminsw %xmm3, %xmm1
|
||||||
; X86-SSE2-NEXT: pxor %xmm4, %xmm2
|
; X86-SSE2-NEXT: pxor %xmm4, %xmm2
|
||||||
|
; X86-SSE2-NEXT: pminsw %xmm1, %xmm2
|
||||||
; X86-SSE2-NEXT: pxor %xmm4, %xmm0
|
; X86-SSE2-NEXT: pxor %xmm4, %xmm0
|
||||||
; X86-SSE2-NEXT: pminsw %xmm2, %xmm0
|
; X86-SSE2-NEXT: pminsw %xmm2, %xmm0
|
||||||
; X86-SSE2-NEXT: pminsw %xmm1, %xmm0
|
|
||||||
; X86-SSE2-NEXT: movdqa %xmm0, %xmm1
|
; X86-SSE2-NEXT: movdqa %xmm0, %xmm1
|
||||||
; X86-SSE2-NEXT: pxor %xmm4, %xmm1
|
; X86-SSE2-NEXT: pxor %xmm4, %xmm1
|
||||||
; X86-SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
|
; X86-SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
|
||||||
@ -1615,9 +1615,9 @@ define i16 @test_reduce_v32i16(<32 x i16> %a0) {
|
|||||||
; X86-SSE42-LABEL: test_reduce_v32i16:
|
; X86-SSE42-LABEL: test_reduce_v32i16:
|
||||||
; X86-SSE42: ## %bb.0:
|
; X86-SSE42: ## %bb.0:
|
||||||
; X86-SSE42-NEXT: pminuw %xmm3, %xmm1
|
; X86-SSE42-NEXT: pminuw %xmm3, %xmm1
|
||||||
; X86-SSE42-NEXT: pminuw %xmm2, %xmm0
|
; X86-SSE42-NEXT: pminuw %xmm2, %xmm1
|
||||||
; X86-SSE42-NEXT: pminuw %xmm1, %xmm0
|
; X86-SSE42-NEXT: pminuw %xmm0, %xmm1
|
||||||
; X86-SSE42-NEXT: phminposuw %xmm0, %xmm0
|
; X86-SSE42-NEXT: phminposuw %xmm1, %xmm0
|
||||||
; X86-SSE42-NEXT: movd %xmm0, %eax
|
; X86-SSE42-NEXT: movd %xmm0, %eax
|
||||||
; X86-SSE42-NEXT: ## kill: def $ax killed $ax killed $eax
|
; X86-SSE42-NEXT: ## kill: def $ax killed $ax killed $eax
|
||||||
; X86-SSE42-NEXT: retl
|
; X86-SSE42-NEXT: retl
|
||||||
@ -1627,8 +1627,8 @@ define i16 @test_reduce_v32i16(<32 x i16> %a0) {
|
|||||||
; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; X86-AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2
|
; X86-AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2
|
||||||
|
; X86-AVX1-NEXT: vpminuw %xmm2, %xmm1, %xmm1
|
||||||
; X86-AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0
|
; X86-AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0
|
||||||
; X86-AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0
|
|
||||||
; X86-AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; X86-AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
; X86-AVX1-NEXT: vmovd %xmm0, %eax
|
; X86-AVX1-NEXT: vmovd %xmm0, %eax
|
||||||
; X86-AVX1-NEXT: ## kill: def $ax killed $ax killed $eax
|
; X86-AVX1-NEXT: ## kill: def $ax killed $ax killed $eax
|
||||||
@ -1653,9 +1653,9 @@ define i16 @test_reduce_v32i16(<32 x i16> %a0) {
|
|||||||
; X64-SSE2-NEXT: pxor %xmm4, %xmm1
|
; X64-SSE2-NEXT: pxor %xmm4, %xmm1
|
||||||
; X64-SSE2-NEXT: pminsw %xmm3, %xmm1
|
; X64-SSE2-NEXT: pminsw %xmm3, %xmm1
|
||||||
; X64-SSE2-NEXT: pxor %xmm4, %xmm2
|
; X64-SSE2-NEXT: pxor %xmm4, %xmm2
|
||||||
|
; X64-SSE2-NEXT: pminsw %xmm1, %xmm2
|
||||||
; X64-SSE2-NEXT: pxor %xmm4, %xmm0
|
; X64-SSE2-NEXT: pxor %xmm4, %xmm0
|
||||||
; X64-SSE2-NEXT: pminsw %xmm2, %xmm0
|
; X64-SSE2-NEXT: pminsw %xmm2, %xmm0
|
||||||
; X64-SSE2-NEXT: pminsw %xmm1, %xmm0
|
|
||||||
; X64-SSE2-NEXT: movdqa %xmm0, %xmm1
|
; X64-SSE2-NEXT: movdqa %xmm0, %xmm1
|
||||||
; X64-SSE2-NEXT: pxor %xmm4, %xmm1
|
; X64-SSE2-NEXT: pxor %xmm4, %xmm1
|
||||||
; X64-SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
|
; X64-SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
|
||||||
@ -1679,9 +1679,9 @@ define i16 @test_reduce_v32i16(<32 x i16> %a0) {
|
|||||||
; X64-SSE42-LABEL: test_reduce_v32i16:
|
; X64-SSE42-LABEL: test_reduce_v32i16:
|
||||||
; X64-SSE42: ## %bb.0:
|
; X64-SSE42: ## %bb.0:
|
||||||
; X64-SSE42-NEXT: pminuw %xmm3, %xmm1
|
; X64-SSE42-NEXT: pminuw %xmm3, %xmm1
|
||||||
; X64-SSE42-NEXT: pminuw %xmm2, %xmm0
|
; X64-SSE42-NEXT: pminuw %xmm2, %xmm1
|
||||||
; X64-SSE42-NEXT: pminuw %xmm1, %xmm0
|
; X64-SSE42-NEXT: pminuw %xmm0, %xmm1
|
||||||
; X64-SSE42-NEXT: phminposuw %xmm0, %xmm0
|
; X64-SSE42-NEXT: phminposuw %xmm1, %xmm0
|
||||||
; X64-SSE42-NEXT: movd %xmm0, %eax
|
; X64-SSE42-NEXT: movd %xmm0, %eax
|
||||||
; X64-SSE42-NEXT: ## kill: def $ax killed $ax killed $eax
|
; X64-SSE42-NEXT: ## kill: def $ax killed $ax killed $eax
|
||||||
; X64-SSE42-NEXT: retq
|
; X64-SSE42-NEXT: retq
|
||||||
@ -1691,8 +1691,8 @@ define i16 @test_reduce_v32i16(<32 x i16> %a0) {
|
|||||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; X64-AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2
|
; X64-AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2
|
||||||
|
; X64-AVX1-NEXT: vpminuw %xmm2, %xmm1, %xmm1
|
||||||
; X64-AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0
|
; X64-AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0
|
||||||
; X64-AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0
|
|
||||||
; X64-AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; X64-AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
; X64-AVX1-NEXT: vmovd %xmm0, %eax
|
; X64-AVX1-NEXT: vmovd %xmm0, %eax
|
||||||
; X64-AVX1-NEXT: ## kill: def $ax killed $ax killed $eax
|
; X64-AVX1-NEXT: ## kill: def $ax killed $ax killed $eax
|
||||||
@ -1744,31 +1744,31 @@ define i8 @test_reduce_v64i8(<64 x i8> %a0) {
|
|||||||
; X86-SSE2-LABEL: test_reduce_v64i8:
|
; X86-SSE2-LABEL: test_reduce_v64i8:
|
||||||
; X86-SSE2: ## %bb.0:
|
; X86-SSE2: ## %bb.0:
|
||||||
; X86-SSE2-NEXT: pminub %xmm3, %xmm1
|
; X86-SSE2-NEXT: pminub %xmm3, %xmm1
|
||||||
; X86-SSE2-NEXT: pminub %xmm2, %xmm0
|
; X86-SSE2-NEXT: pminub %xmm2, %xmm1
|
||||||
; X86-SSE2-NEXT: pminub %xmm1, %xmm0
|
|
||||||
; X86-SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; X86-SSE2-NEXT: pminub %xmm0, %xmm1
|
; X86-SSE2-NEXT: pminub %xmm0, %xmm1
|
||||||
; X86-SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; X86-SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; X86-SSE2-NEXT: pminub %xmm1, %xmm0
|
; X86-SSE2-NEXT: pminub %xmm1, %xmm0
|
||||||
; X86-SSE2-NEXT: movdqa %xmm0, %xmm1
|
; X86-SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; X86-SSE2-NEXT: psrld $16, %xmm1
|
|
||||||
; X86-SSE2-NEXT: pminub %xmm0, %xmm1
|
; X86-SSE2-NEXT: pminub %xmm0, %xmm1
|
||||||
; X86-SSE2-NEXT: movdqa %xmm1, %xmm0
|
; X86-SSE2-NEXT: movdqa %xmm1, %xmm0
|
||||||
; X86-SSE2-NEXT: psrlw $8, %xmm0
|
; X86-SSE2-NEXT: psrld $16, %xmm0
|
||||||
; X86-SSE2-NEXT: pminub %xmm1, %xmm0
|
; X86-SSE2-NEXT: pminub %xmm1, %xmm0
|
||||||
; X86-SSE2-NEXT: movd %xmm0, %eax
|
; X86-SSE2-NEXT: movdqa %xmm0, %xmm1
|
||||||
|
; X86-SSE2-NEXT: psrlw $8, %xmm1
|
||||||
|
; X86-SSE2-NEXT: pminub %xmm0, %xmm1
|
||||||
|
; X86-SSE2-NEXT: movd %xmm1, %eax
|
||||||
; X86-SSE2-NEXT: ## kill: def $al killed $al killed $eax
|
; X86-SSE2-NEXT: ## kill: def $al killed $al killed $eax
|
||||||
; X86-SSE2-NEXT: retl
|
; X86-SSE2-NEXT: retl
|
||||||
;
|
;
|
||||||
; X86-SSE42-LABEL: test_reduce_v64i8:
|
; X86-SSE42-LABEL: test_reduce_v64i8:
|
||||||
; X86-SSE42: ## %bb.0:
|
; X86-SSE42: ## %bb.0:
|
||||||
; X86-SSE42-NEXT: pminub %xmm3, %xmm1
|
; X86-SSE42-NEXT: pminub %xmm3, %xmm1
|
||||||
; X86-SSE42-NEXT: pminub %xmm2, %xmm0
|
; X86-SSE42-NEXT: pminub %xmm2, %xmm1
|
||||||
; X86-SSE42-NEXT: pminub %xmm1, %xmm0
|
|
||||||
; X86-SSE42-NEXT: movdqa %xmm0, %xmm1
|
|
||||||
; X86-SSE42-NEXT: psrlw $8, %xmm1
|
|
||||||
; X86-SSE42-NEXT: pminub %xmm0, %xmm1
|
; X86-SSE42-NEXT: pminub %xmm0, %xmm1
|
||||||
; X86-SSE42-NEXT: phminposuw %xmm1, %xmm0
|
; X86-SSE42-NEXT: movdqa %xmm1, %xmm0
|
||||||
|
; X86-SSE42-NEXT: psrlw $8, %xmm0
|
||||||
|
; X86-SSE42-NEXT: pminub %xmm1, %xmm0
|
||||||
|
; X86-SSE42-NEXT: phminposuw %xmm0, %xmm0
|
||||||
; X86-SSE42-NEXT: pextrb $0, %xmm0, %eax
|
; X86-SSE42-NEXT: pextrb $0, %xmm0, %eax
|
||||||
; X86-SSE42-NEXT: ## kill: def $al killed $al killed $eax
|
; X86-SSE42-NEXT: ## kill: def $al killed $al killed $eax
|
||||||
; X86-SSE42-NEXT: retl
|
; X86-SSE42-NEXT: retl
|
||||||
@ -1778,8 +1778,8 @@ define i8 @test_reduce_v64i8(<64 x i8> %a0) {
|
|||||||
; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; X86-AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2
|
; X86-AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2
|
||||||
|
; X86-AVX1-NEXT: vpminub %xmm2, %xmm1, %xmm1
|
||||||
; X86-AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
; X86-AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
; X86-AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0
|
|
||||||
; X86-AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
; X86-AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
||||||
; X86-AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
; X86-AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
; X86-AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; X86-AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
@ -1804,31 +1804,31 @@ define i8 @test_reduce_v64i8(<64 x i8> %a0) {
|
|||||||
; X64-SSE2-LABEL: test_reduce_v64i8:
|
; X64-SSE2-LABEL: test_reduce_v64i8:
|
||||||
; X64-SSE2: ## %bb.0:
|
; X64-SSE2: ## %bb.0:
|
||||||
; X64-SSE2-NEXT: pminub %xmm3, %xmm1
|
; X64-SSE2-NEXT: pminub %xmm3, %xmm1
|
||||||
; X64-SSE2-NEXT: pminub %xmm2, %xmm0
|
; X64-SSE2-NEXT: pminub %xmm2, %xmm1
|
||||||
; X64-SSE2-NEXT: pminub %xmm1, %xmm0
|
|
||||||
; X64-SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; X64-SSE2-NEXT: pminub %xmm0, %xmm1
|
; X64-SSE2-NEXT: pminub %xmm0, %xmm1
|
||||||
; X64-SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; X64-SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; X64-SSE2-NEXT: pminub %xmm1, %xmm0
|
; X64-SSE2-NEXT: pminub %xmm1, %xmm0
|
||||||
; X64-SSE2-NEXT: movdqa %xmm0, %xmm1
|
; X64-SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; X64-SSE2-NEXT: psrld $16, %xmm1
|
|
||||||
; X64-SSE2-NEXT: pminub %xmm0, %xmm1
|
; X64-SSE2-NEXT: pminub %xmm0, %xmm1
|
||||||
; X64-SSE2-NEXT: movdqa %xmm1, %xmm0
|
; X64-SSE2-NEXT: movdqa %xmm1, %xmm0
|
||||||
; X64-SSE2-NEXT: psrlw $8, %xmm0
|
; X64-SSE2-NEXT: psrld $16, %xmm0
|
||||||
; X64-SSE2-NEXT: pminub %xmm1, %xmm0
|
; X64-SSE2-NEXT: pminub %xmm1, %xmm0
|
||||||
; X64-SSE2-NEXT: movd %xmm0, %eax
|
; X64-SSE2-NEXT: movdqa %xmm0, %xmm1
|
||||||
|
; X64-SSE2-NEXT: psrlw $8, %xmm1
|
||||||
|
; X64-SSE2-NEXT: pminub %xmm0, %xmm1
|
||||||
|
; X64-SSE2-NEXT: movd %xmm1, %eax
|
||||||
; X64-SSE2-NEXT: ## kill: def $al killed $al killed $eax
|
; X64-SSE2-NEXT: ## kill: def $al killed $al killed $eax
|
||||||
; X64-SSE2-NEXT: retq
|
; X64-SSE2-NEXT: retq
|
||||||
;
|
;
|
||||||
; X64-SSE42-LABEL: test_reduce_v64i8:
|
; X64-SSE42-LABEL: test_reduce_v64i8:
|
||||||
; X64-SSE42: ## %bb.0:
|
; X64-SSE42: ## %bb.0:
|
||||||
; X64-SSE42-NEXT: pminub %xmm3, %xmm1
|
; X64-SSE42-NEXT: pminub %xmm3, %xmm1
|
||||||
; X64-SSE42-NEXT: pminub %xmm2, %xmm0
|
; X64-SSE42-NEXT: pminub %xmm2, %xmm1
|
||||||
; X64-SSE42-NEXT: pminub %xmm1, %xmm0
|
|
||||||
; X64-SSE42-NEXT: movdqa %xmm0, %xmm1
|
|
||||||
; X64-SSE42-NEXT: psrlw $8, %xmm1
|
|
||||||
; X64-SSE42-NEXT: pminub %xmm0, %xmm1
|
; X64-SSE42-NEXT: pminub %xmm0, %xmm1
|
||||||
; X64-SSE42-NEXT: phminposuw %xmm1, %xmm0
|
; X64-SSE42-NEXT: movdqa %xmm1, %xmm0
|
||||||
|
; X64-SSE42-NEXT: psrlw $8, %xmm0
|
||||||
|
; X64-SSE42-NEXT: pminub %xmm1, %xmm0
|
||||||
|
; X64-SSE42-NEXT: phminposuw %xmm0, %xmm0
|
||||||
; X64-SSE42-NEXT: pextrb $0, %xmm0, %eax
|
; X64-SSE42-NEXT: pextrb $0, %xmm0, %eax
|
||||||
; X64-SSE42-NEXT: ## kill: def $al killed $al killed $eax
|
; X64-SSE42-NEXT: ## kill: def $al killed $al killed $eax
|
||||||
; X64-SSE42-NEXT: retq
|
; X64-SSE42-NEXT: retq
|
||||||
@ -1838,8 +1838,8 @@ define i8 @test_reduce_v64i8(<64 x i8> %a0) {
|
|||||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; X64-AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2
|
; X64-AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2
|
||||||
|
; X64-AVX1-NEXT: vpminub %xmm2, %xmm1, %xmm1
|
||||||
; X64-AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
; X64-AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
; X64-AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0
|
|
||||||
; X64-AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
; X64-AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
||||||
; X64-AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
; X64-AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
; X64-AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; X64-AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
|
@ -271,15 +271,15 @@ define <16 x i8> @reassociate_umax_v16i8(<16 x i8> %x0, <16 x i8> %x1, <16 x i8>
|
|||||||
; SSE-LABEL: reassociate_umax_v16i8:
|
; SSE-LABEL: reassociate_umax_v16i8:
|
||||||
; SSE: # %bb.0:
|
; SSE: # %bb.0:
|
||||||
; SSE-NEXT: paddb %xmm1, %xmm0
|
; SSE-NEXT: paddb %xmm1, %xmm0
|
||||||
|
; SSE-NEXT: pmaxub %xmm3, %xmm2
|
||||||
; SSE-NEXT: pmaxub %xmm2, %xmm0
|
; SSE-NEXT: pmaxub %xmm2, %xmm0
|
||||||
; SSE-NEXT: pmaxub %xmm3, %xmm0
|
|
||||||
; SSE-NEXT: retq
|
; SSE-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX-LABEL: reassociate_umax_v16i8:
|
; AVX-LABEL: reassociate_umax_v16i8:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vpaddb %xmm1, %xmm0, %xmm0
|
; AVX-NEXT: vpaddb %xmm1, %xmm0, %xmm0
|
||||||
; AVX-NEXT: vpmaxub %xmm0, %xmm2, %xmm0
|
; AVX-NEXT: vpmaxub %xmm3, %xmm2, %xmm1
|
||||||
; AVX-NEXT: vpmaxub %xmm0, %xmm3, %xmm0
|
; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <16 x i8> %x0, %x1
|
%t0 = add <16 x i8> %x0, %x1
|
||||||
@ -306,8 +306,8 @@ define <8 x i16> @reassociate_umax_v8i16(<8 x i16> %x0, <8 x i16> %x1, <8 x i16>
|
|||||||
; AVX-LABEL: reassociate_umax_v8i16:
|
; AVX-LABEL: reassociate_umax_v8i16:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vpaddw %xmm1, %xmm0, %xmm0
|
; AVX-NEXT: vpaddw %xmm1, %xmm0, %xmm0
|
||||||
; AVX-NEXT: vpmaxuw %xmm0, %xmm2, %xmm0
|
; AVX-NEXT: vpmaxuw %xmm3, %xmm2, %xmm1
|
||||||
; AVX-NEXT: vpmaxuw %xmm0, %xmm3, %xmm0
|
; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <8 x i16> %x0, %x1
|
%t0 = add <8 x i16> %x0, %x1
|
||||||
@ -344,8 +344,8 @@ define <4 x i32> @reassociate_umax_v4i32(<4 x i32> %x0, <4 x i32> %x1, <4 x i32>
|
|||||||
; AVX-LABEL: reassociate_umax_v4i32:
|
; AVX-LABEL: reassociate_umax_v4i32:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vpaddd %xmm1, %xmm0, %xmm0
|
; AVX-NEXT: vpaddd %xmm1, %xmm0, %xmm0
|
||||||
; AVX-NEXT: vpmaxud %xmm0, %xmm2, %xmm0
|
; AVX-NEXT: vpmaxud %xmm3, %xmm2, %xmm1
|
||||||
; AVX-NEXT: vpmaxud %xmm0, %xmm3, %xmm0
|
; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <4 x i32> %x0, %x1
|
%t0 = add <4 x i32> %x0, %x1
|
||||||
@ -409,8 +409,8 @@ define <2 x i64> @reassociate_umax_v2i64(<2 x i64> %x0, <2 x i64> %x1, <2 x i64>
|
|||||||
; AVX512-LABEL: reassociate_umax_v2i64:
|
; AVX512-LABEL: reassociate_umax_v2i64:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vpaddq %xmm1, %xmm0, %xmm0
|
; AVX512-NEXT: vpaddq %xmm1, %xmm0, %xmm0
|
||||||
; AVX512-NEXT: vpmaxuq %xmm0, %xmm2, %xmm0
|
; AVX512-NEXT: vpmaxuq %xmm3, %xmm2, %xmm1
|
||||||
; AVX512-NEXT: vpmaxuq %xmm0, %xmm3, %xmm0
|
; AVX512-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <2 x i64> %x0, %x1
|
%t0 = add <2 x i64> %x0, %x1
|
||||||
@ -440,8 +440,8 @@ define <16 x i8> @reassociate_smax_v16i8(<16 x i8> %x0, <16 x i8> %x1, <16 x i8>
|
|||||||
; AVX-LABEL: reassociate_smax_v16i8:
|
; AVX-LABEL: reassociate_smax_v16i8:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vpaddb %xmm1, %xmm0, %xmm0
|
; AVX-NEXT: vpaddb %xmm1, %xmm0, %xmm0
|
||||||
; AVX-NEXT: vpmaxsb %xmm0, %xmm2, %xmm0
|
; AVX-NEXT: vpmaxsb %xmm3, %xmm2, %xmm1
|
||||||
; AVX-NEXT: vpmaxsb %xmm0, %xmm3, %xmm0
|
; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <16 x i8> %x0, %x1
|
%t0 = add <16 x i8> %x0, %x1
|
||||||
@ -456,15 +456,15 @@ define <8 x i16> @reassociate_smax_v8i16(<8 x i16> %x0, <8 x i16> %x1, <8 x i16>
|
|||||||
; SSE-LABEL: reassociate_smax_v8i16:
|
; SSE-LABEL: reassociate_smax_v8i16:
|
||||||
; SSE: # %bb.0:
|
; SSE: # %bb.0:
|
||||||
; SSE-NEXT: paddw %xmm1, %xmm0
|
; SSE-NEXT: paddw %xmm1, %xmm0
|
||||||
|
; SSE-NEXT: pmaxsw %xmm3, %xmm2
|
||||||
; SSE-NEXT: pmaxsw %xmm2, %xmm0
|
; SSE-NEXT: pmaxsw %xmm2, %xmm0
|
||||||
; SSE-NEXT: pmaxsw %xmm3, %xmm0
|
|
||||||
; SSE-NEXT: retq
|
; SSE-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX-LABEL: reassociate_smax_v8i16:
|
; AVX-LABEL: reassociate_smax_v8i16:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vpaddw %xmm1, %xmm0, %xmm0
|
; AVX-NEXT: vpaddw %xmm1, %xmm0, %xmm0
|
||||||
; AVX-NEXT: vpmaxsw %xmm0, %xmm2, %xmm0
|
; AVX-NEXT: vpmaxsw %xmm3, %xmm2, %xmm1
|
||||||
; AVX-NEXT: vpmaxsw %xmm0, %xmm3, %xmm0
|
; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <8 x i16> %x0, %x1
|
%t0 = add <8 x i16> %x0, %x1
|
||||||
@ -494,8 +494,8 @@ define <4 x i32> @reassociate_smax_v4i32(<4 x i32> %x0, <4 x i32> %x1, <4 x i32>
|
|||||||
; AVX-LABEL: reassociate_smax_v4i32:
|
; AVX-LABEL: reassociate_smax_v4i32:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vpaddd %xmm1, %xmm0, %xmm0
|
; AVX-NEXT: vpaddd %xmm1, %xmm0, %xmm0
|
||||||
; AVX-NEXT: vpmaxsd %xmm0, %xmm2, %xmm0
|
; AVX-NEXT: vpmaxsd %xmm3, %xmm2, %xmm1
|
||||||
; AVX-NEXT: vpmaxsd %xmm0, %xmm3, %xmm0
|
; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <4 x i32> %x0, %x1
|
%t0 = add <4 x i32> %x0, %x1
|
||||||
@ -554,8 +554,8 @@ define <2 x i64> @reassociate_smax_v2i64(<2 x i64> %x0, <2 x i64> %x1, <2 x i64>
|
|||||||
; AVX512-LABEL: reassociate_smax_v2i64:
|
; AVX512-LABEL: reassociate_smax_v2i64:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vpaddq %xmm1, %xmm0, %xmm0
|
; AVX512-NEXT: vpaddq %xmm1, %xmm0, %xmm0
|
||||||
; AVX512-NEXT: vpmaxsq %xmm0, %xmm2, %xmm0
|
; AVX512-NEXT: vpmaxsq %xmm3, %xmm2, %xmm1
|
||||||
; AVX512-NEXT: vpmaxsq %xmm0, %xmm3, %xmm0
|
; AVX512-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <2 x i64> %x0, %x1
|
%t0 = add <2 x i64> %x0, %x1
|
||||||
@ -570,15 +570,15 @@ define <16 x i8> @reassociate_umin_v16i8(<16 x i8> %x0, <16 x i8> %x1, <16 x i8>
|
|||||||
; SSE-LABEL: reassociate_umin_v16i8:
|
; SSE-LABEL: reassociate_umin_v16i8:
|
||||||
; SSE: # %bb.0:
|
; SSE: # %bb.0:
|
||||||
; SSE-NEXT: paddb %xmm1, %xmm0
|
; SSE-NEXT: paddb %xmm1, %xmm0
|
||||||
|
; SSE-NEXT: pminub %xmm3, %xmm2
|
||||||
; SSE-NEXT: pminub %xmm2, %xmm0
|
; SSE-NEXT: pminub %xmm2, %xmm0
|
||||||
; SSE-NEXT: pminub %xmm3, %xmm0
|
|
||||||
; SSE-NEXT: retq
|
; SSE-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX-LABEL: reassociate_umin_v16i8:
|
; AVX-LABEL: reassociate_umin_v16i8:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vpaddb %xmm1, %xmm0, %xmm0
|
; AVX-NEXT: vpaddb %xmm1, %xmm0, %xmm0
|
||||||
; AVX-NEXT: vpminub %xmm0, %xmm2, %xmm0
|
; AVX-NEXT: vpminub %xmm3, %xmm2, %xmm1
|
||||||
; AVX-NEXT: vpminub %xmm0, %xmm3, %xmm0
|
; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <16 x i8> %x0, %x1
|
%t0 = add <16 x i8> %x0, %x1
|
||||||
@ -605,8 +605,8 @@ define <8 x i16> @reassociate_umin_v8i16(<8 x i16> %x0, <8 x i16> %x1, <8 x i16>
|
|||||||
; AVX-LABEL: reassociate_umin_v8i16:
|
; AVX-LABEL: reassociate_umin_v8i16:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vpaddw %xmm1, %xmm0, %xmm0
|
; AVX-NEXT: vpaddw %xmm1, %xmm0, %xmm0
|
||||||
; AVX-NEXT: vpminuw %xmm0, %xmm2, %xmm0
|
; AVX-NEXT: vpminuw %xmm3, %xmm2, %xmm1
|
||||||
; AVX-NEXT: vpminuw %xmm0, %xmm3, %xmm0
|
; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <8 x i16> %x0, %x1
|
%t0 = add <8 x i16> %x0, %x1
|
||||||
@ -642,8 +642,8 @@ define <4 x i32> @reassociate_umin_v4i32(<4 x i32> %x0, <4 x i32> %x1, <4 x i32>
|
|||||||
; AVX-LABEL: reassociate_umin_v4i32:
|
; AVX-LABEL: reassociate_umin_v4i32:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vpaddd %xmm1, %xmm0, %xmm0
|
; AVX-NEXT: vpaddd %xmm1, %xmm0, %xmm0
|
||||||
; AVX-NEXT: vpminud %xmm0, %xmm2, %xmm0
|
; AVX-NEXT: vpminud %xmm3, %xmm2, %xmm1
|
||||||
; AVX-NEXT: vpminud %xmm0, %xmm3, %xmm0
|
; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <4 x i32> %x0, %x1
|
%t0 = add <4 x i32> %x0, %x1
|
||||||
@ -707,8 +707,8 @@ define <2 x i64> @reassociate_umin_v2i64(<2 x i64> %x0, <2 x i64> %x1, <2 x i64>
|
|||||||
; AVX512-LABEL: reassociate_umin_v2i64:
|
; AVX512-LABEL: reassociate_umin_v2i64:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vpaddq %xmm1, %xmm0, %xmm0
|
; AVX512-NEXT: vpaddq %xmm1, %xmm0, %xmm0
|
||||||
; AVX512-NEXT: vpminuq %xmm0, %xmm2, %xmm0
|
; AVX512-NEXT: vpminuq %xmm3, %xmm2, %xmm1
|
||||||
; AVX512-NEXT: vpminuq %xmm0, %xmm3, %xmm0
|
; AVX512-NEXT: vpminuq %xmm1, %xmm0, %xmm0
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <2 x i64> %x0, %x1
|
%t0 = add <2 x i64> %x0, %x1
|
||||||
@ -738,8 +738,8 @@ define <16 x i8> @reassociate_smin_v16i8(<16 x i8> %x0, <16 x i8> %x1, <16 x i8>
|
|||||||
; AVX-LABEL: reassociate_smin_v16i8:
|
; AVX-LABEL: reassociate_smin_v16i8:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vpaddb %xmm1, %xmm0, %xmm0
|
; AVX-NEXT: vpaddb %xmm1, %xmm0, %xmm0
|
||||||
; AVX-NEXT: vpminsb %xmm0, %xmm2, %xmm0
|
; AVX-NEXT: vpminsb %xmm3, %xmm2, %xmm1
|
||||||
; AVX-NEXT: vpminsb %xmm0, %xmm3, %xmm0
|
; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <16 x i8> %x0, %x1
|
%t0 = add <16 x i8> %x0, %x1
|
||||||
@ -754,15 +754,15 @@ define <8 x i16> @reassociate_smin_v8i16(<8 x i16> %x0, <8 x i16> %x1, <8 x i16>
|
|||||||
; SSE-LABEL: reassociate_smin_v8i16:
|
; SSE-LABEL: reassociate_smin_v8i16:
|
||||||
; SSE: # %bb.0:
|
; SSE: # %bb.0:
|
||||||
; SSE-NEXT: paddw %xmm1, %xmm0
|
; SSE-NEXT: paddw %xmm1, %xmm0
|
||||||
|
; SSE-NEXT: pminsw %xmm3, %xmm2
|
||||||
; SSE-NEXT: pminsw %xmm2, %xmm0
|
; SSE-NEXT: pminsw %xmm2, %xmm0
|
||||||
; SSE-NEXT: pminsw %xmm3, %xmm0
|
|
||||||
; SSE-NEXT: retq
|
; SSE-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX-LABEL: reassociate_smin_v8i16:
|
; AVX-LABEL: reassociate_smin_v8i16:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vpaddw %xmm1, %xmm0, %xmm0
|
; AVX-NEXT: vpaddw %xmm1, %xmm0, %xmm0
|
||||||
; AVX-NEXT: vpminsw %xmm0, %xmm2, %xmm0
|
; AVX-NEXT: vpminsw %xmm3, %xmm2, %xmm1
|
||||||
; AVX-NEXT: vpminsw %xmm0, %xmm3, %xmm0
|
; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <8 x i16> %x0, %x1
|
%t0 = add <8 x i16> %x0, %x1
|
||||||
@ -792,8 +792,8 @@ define <4 x i32> @reassociate_smin_v4i32(<4 x i32> %x0, <4 x i32> %x1, <4 x i32>
|
|||||||
; AVX-LABEL: reassociate_smin_v4i32:
|
; AVX-LABEL: reassociate_smin_v4i32:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vpaddd %xmm1, %xmm0, %xmm0
|
; AVX-NEXT: vpaddd %xmm1, %xmm0, %xmm0
|
||||||
; AVX-NEXT: vpminsd %xmm0, %xmm2, %xmm0
|
; AVX-NEXT: vpminsd %xmm3, %xmm2, %xmm1
|
||||||
; AVX-NEXT: vpminsd %xmm0, %xmm3, %xmm0
|
; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <4 x i32> %x0, %x1
|
%t0 = add <4 x i32> %x0, %x1
|
||||||
@ -852,8 +852,8 @@ define <2 x i64> @reassociate_smin_v2i64(<2 x i64> %x0, <2 x i64> %x1, <2 x i64>
|
|||||||
; AVX512-LABEL: reassociate_smin_v2i64:
|
; AVX512-LABEL: reassociate_smin_v2i64:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vpaddq %xmm1, %xmm0, %xmm0
|
; AVX512-NEXT: vpaddq %xmm1, %xmm0, %xmm0
|
||||||
; AVX512-NEXT: vpminsq %xmm0, %xmm2, %xmm0
|
; AVX512-NEXT: vpminsq %xmm3, %xmm2, %xmm1
|
||||||
; AVX512-NEXT: vpminsq %xmm0, %xmm3, %xmm0
|
; AVX512-NEXT: vpminsq %xmm1, %xmm0, %xmm0
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <2 x i64> %x0, %x1
|
%t0 = add <2 x i64> %x0, %x1
|
||||||
@ -871,17 +871,17 @@ define <32 x i8> @reassociate_umax_v32i8(<32 x i8> %x0, <32 x i8> %x1, <32 x i8>
|
|||||||
; SSE: # %bb.0:
|
; SSE: # %bb.0:
|
||||||
; SSE-NEXT: paddb %xmm2, %xmm0
|
; SSE-NEXT: paddb %xmm2, %xmm0
|
||||||
; SSE-NEXT: paddb %xmm3, %xmm1
|
; SSE-NEXT: paddb %xmm3, %xmm1
|
||||||
; SSE-NEXT: pmaxub %xmm5, %xmm1
|
; SSE-NEXT: pmaxub %xmm6, %xmm4
|
||||||
; SSE-NEXT: pmaxub %xmm4, %xmm0
|
; SSE-NEXT: pmaxub %xmm4, %xmm0
|
||||||
; SSE-NEXT: pmaxub %xmm6, %xmm0
|
; SSE-NEXT: pmaxub %xmm7, %xmm5
|
||||||
; SSE-NEXT: pmaxub %xmm7, %xmm1
|
; SSE-NEXT: pmaxub %xmm5, %xmm1
|
||||||
; SSE-NEXT: retq
|
; SSE-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX-LABEL: reassociate_umax_v32i8:
|
; AVX-LABEL: reassociate_umax_v32i8:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vpaddb %ymm1, %ymm0, %ymm0
|
; AVX-NEXT: vpaddb %ymm1, %ymm0, %ymm0
|
||||||
; AVX-NEXT: vpmaxub %ymm0, %ymm2, %ymm0
|
; AVX-NEXT: vpmaxub %ymm3, %ymm2, %ymm1
|
||||||
; AVX-NEXT: vpmaxub %ymm0, %ymm3, %ymm0
|
; AVX-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <32 x i8> %x0, %x1
|
%t0 = add <32 x i8> %x0, %x1
|
||||||
@ -915,8 +915,8 @@ define <16 x i16> @reassociate_umax_v16i16(<16 x i16> %x0, <16 x i16> %x1, <16 x
|
|||||||
; AVX-LABEL: reassociate_umax_v16i16:
|
; AVX-LABEL: reassociate_umax_v16i16:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vpaddw %ymm1, %ymm0, %ymm0
|
; AVX-NEXT: vpaddw %ymm1, %ymm0, %ymm0
|
||||||
; AVX-NEXT: vpmaxuw %ymm0, %ymm2, %ymm0
|
; AVX-NEXT: vpmaxuw %ymm3, %ymm2, %ymm1
|
||||||
; AVX-NEXT: vpmaxuw %ymm0, %ymm3, %ymm0
|
; AVX-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <16 x i16> %x0, %x1
|
%t0 = add <16 x i16> %x0, %x1
|
||||||
@ -970,8 +970,8 @@ define <8 x i32> @reassociate_umax_v8i32(<8 x i32> %x0, <8 x i32> %x1, <8 x i32>
|
|||||||
; AVX-LABEL: reassociate_umax_v8i32:
|
; AVX-LABEL: reassociate_umax_v8i32:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vpaddd %ymm1, %ymm0, %ymm0
|
; AVX-NEXT: vpaddd %ymm1, %ymm0, %ymm0
|
||||||
; AVX-NEXT: vpmaxud %ymm0, %ymm2, %ymm0
|
; AVX-NEXT: vpmaxud %ymm3, %ymm2, %ymm1
|
||||||
; AVX-NEXT: vpmaxud %ymm0, %ymm3, %ymm0
|
; AVX-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <8 x i32> %x0, %x1
|
%t0 = add <8 x i32> %x0, %x1
|
||||||
@ -1066,8 +1066,8 @@ define <4 x i64> @reassociate_umax_v4i64(<4 x i64> %x0, <4 x i64> %x1, <4 x i64>
|
|||||||
; AVX512-LABEL: reassociate_umax_v4i64:
|
; AVX512-LABEL: reassociate_umax_v4i64:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vpaddq %ymm1, %ymm0, %ymm0
|
; AVX512-NEXT: vpaddq %ymm1, %ymm0, %ymm0
|
||||||
; AVX512-NEXT: vpmaxuq %ymm0, %ymm2, %ymm0
|
; AVX512-NEXT: vpmaxuq %ymm3, %ymm2, %ymm1
|
||||||
; AVX512-NEXT: vpmaxuq %ymm0, %ymm3, %ymm0
|
; AVX512-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <4 x i64> %x0, %x1
|
%t0 = add <4 x i64> %x0, %x1
|
||||||
@ -1108,8 +1108,8 @@ define <32 x i8> @reassociate_smax_v32i8(<32 x i8> %x0, <32 x i8> %x1, <32 x i8>
|
|||||||
; AVX-LABEL: reassociate_smax_v32i8:
|
; AVX-LABEL: reassociate_smax_v32i8:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vpaddb %ymm1, %ymm0, %ymm0
|
; AVX-NEXT: vpaddb %ymm1, %ymm0, %ymm0
|
||||||
; AVX-NEXT: vpmaxsb %ymm0, %ymm2, %ymm0
|
; AVX-NEXT: vpmaxsb %ymm3, %ymm2, %ymm1
|
||||||
; AVX-NEXT: vpmaxsb %ymm0, %ymm3, %ymm0
|
; AVX-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <32 x i8> %x0, %x1
|
%t0 = add <32 x i8> %x0, %x1
|
||||||
@ -1125,17 +1125,17 @@ define <16 x i16> @reassociate_smax_v16i16(<16 x i16> %x0, <16 x i16> %x1, <16 x
|
|||||||
; SSE: # %bb.0:
|
; SSE: # %bb.0:
|
||||||
; SSE-NEXT: paddw %xmm2, %xmm0
|
; SSE-NEXT: paddw %xmm2, %xmm0
|
||||||
; SSE-NEXT: paddw %xmm3, %xmm1
|
; SSE-NEXT: paddw %xmm3, %xmm1
|
||||||
; SSE-NEXT: pmaxsw %xmm5, %xmm1
|
; SSE-NEXT: pmaxsw %xmm6, %xmm4
|
||||||
; SSE-NEXT: pmaxsw %xmm4, %xmm0
|
; SSE-NEXT: pmaxsw %xmm4, %xmm0
|
||||||
; SSE-NEXT: pmaxsw %xmm6, %xmm0
|
; SSE-NEXT: pmaxsw %xmm7, %xmm5
|
||||||
; SSE-NEXT: pmaxsw %xmm7, %xmm1
|
; SSE-NEXT: pmaxsw %xmm5, %xmm1
|
||||||
; SSE-NEXT: retq
|
; SSE-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX-LABEL: reassociate_smax_v16i16:
|
; AVX-LABEL: reassociate_smax_v16i16:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vpaddw %ymm1, %ymm0, %ymm0
|
; AVX-NEXT: vpaddw %ymm1, %ymm0, %ymm0
|
||||||
; AVX-NEXT: vpmaxsw %ymm0, %ymm2, %ymm0
|
; AVX-NEXT: vpmaxsw %ymm3, %ymm2, %ymm1
|
||||||
; AVX-NEXT: vpmaxsw %ymm0, %ymm3, %ymm0
|
; AVX-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <16 x i16> %x0, %x1
|
%t0 = add <16 x i16> %x0, %x1
|
||||||
@ -1176,8 +1176,8 @@ define <8 x i32> @reassociate_smax_v8i32(<8 x i32> %x0, <8 x i32> %x1, <8 x i32>
|
|||||||
; AVX-LABEL: reassociate_smax_v8i32:
|
; AVX-LABEL: reassociate_smax_v8i32:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vpaddd %ymm1, %ymm0, %ymm0
|
; AVX-NEXT: vpaddd %ymm1, %ymm0, %ymm0
|
||||||
; AVX-NEXT: vpmaxsd %ymm0, %ymm2, %ymm0
|
; AVX-NEXT: vpmaxsd %ymm3, %ymm2, %ymm1
|
||||||
; AVX-NEXT: vpmaxsd %ymm0, %ymm3, %ymm0
|
; AVX-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <8 x i32> %x0, %x1
|
%t0 = add <8 x i32> %x0, %x1
|
||||||
@ -1267,8 +1267,8 @@ define <4 x i64> @reassociate_smax_v4i64(<4 x i64> %x0, <4 x i64> %x1, <4 x i64>
|
|||||||
; AVX512-LABEL: reassociate_smax_v4i64:
|
; AVX512-LABEL: reassociate_smax_v4i64:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vpaddq %ymm1, %ymm0, %ymm0
|
; AVX512-NEXT: vpaddq %ymm1, %ymm0, %ymm0
|
||||||
; AVX512-NEXT: vpmaxsq %ymm0, %ymm2, %ymm0
|
; AVX512-NEXT: vpmaxsq %ymm3, %ymm2, %ymm1
|
||||||
; AVX512-NEXT: vpmaxsq %ymm0, %ymm3, %ymm0
|
; AVX512-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <4 x i64> %x0, %x1
|
%t0 = add <4 x i64> %x0, %x1
|
||||||
@ -1284,17 +1284,17 @@ define <32 x i8> @reassociate_umin_v32i8(<32 x i8> %x0, <32 x i8> %x1, <32 x i8>
|
|||||||
; SSE: # %bb.0:
|
; SSE: # %bb.0:
|
||||||
; SSE-NEXT: paddb %xmm2, %xmm0
|
; SSE-NEXT: paddb %xmm2, %xmm0
|
||||||
; SSE-NEXT: paddb %xmm3, %xmm1
|
; SSE-NEXT: paddb %xmm3, %xmm1
|
||||||
; SSE-NEXT: pminub %xmm5, %xmm1
|
; SSE-NEXT: pminub %xmm6, %xmm4
|
||||||
; SSE-NEXT: pminub %xmm4, %xmm0
|
; SSE-NEXT: pminub %xmm4, %xmm0
|
||||||
; SSE-NEXT: pminub %xmm6, %xmm0
|
; SSE-NEXT: pminub %xmm7, %xmm5
|
||||||
; SSE-NEXT: pminub %xmm7, %xmm1
|
; SSE-NEXT: pminub %xmm5, %xmm1
|
||||||
; SSE-NEXT: retq
|
; SSE-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX-LABEL: reassociate_umin_v32i8:
|
; AVX-LABEL: reassociate_umin_v32i8:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vpaddb %ymm1, %ymm0, %ymm0
|
; AVX-NEXT: vpaddb %ymm1, %ymm0, %ymm0
|
||||||
; AVX-NEXT: vpminub %ymm0, %ymm2, %ymm0
|
; AVX-NEXT: vpminub %ymm3, %ymm2, %ymm1
|
||||||
; AVX-NEXT: vpminub %ymm0, %ymm3, %ymm0
|
; AVX-NEXT: vpminub %ymm1, %ymm0, %ymm0
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <32 x i8> %x0, %x1
|
%t0 = add <32 x i8> %x0, %x1
|
||||||
@ -1328,8 +1328,8 @@ define <16 x i16> @reassociate_umin_v16i16(<16 x i16> %x0, <16 x i16> %x1, <16 x
|
|||||||
; AVX-LABEL: reassociate_umin_v16i16:
|
; AVX-LABEL: reassociate_umin_v16i16:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vpaddw %ymm1, %ymm0, %ymm0
|
; AVX-NEXT: vpaddw %ymm1, %ymm0, %ymm0
|
||||||
; AVX-NEXT: vpminuw %ymm0, %ymm2, %ymm0
|
; AVX-NEXT: vpminuw %ymm3, %ymm2, %ymm1
|
||||||
; AVX-NEXT: vpminuw %ymm0, %ymm3, %ymm0
|
; AVX-NEXT: vpminuw %ymm1, %ymm0, %ymm0
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <16 x i16> %x0, %x1
|
%t0 = add <16 x i16> %x0, %x1
|
||||||
@ -1382,8 +1382,8 @@ define <8 x i32> @reassociate_umin_v8i32(<8 x i32> %x0, <8 x i32> %x1, <8 x i32>
|
|||||||
; AVX-LABEL: reassociate_umin_v8i32:
|
; AVX-LABEL: reassociate_umin_v8i32:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vpaddd %ymm1, %ymm0, %ymm0
|
; AVX-NEXT: vpaddd %ymm1, %ymm0, %ymm0
|
||||||
; AVX-NEXT: vpminud %ymm0, %ymm2, %ymm0
|
; AVX-NEXT: vpminud %ymm3, %ymm2, %ymm1
|
||||||
; AVX-NEXT: vpminud %ymm0, %ymm3, %ymm0
|
; AVX-NEXT: vpminud %ymm1, %ymm0, %ymm0
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <8 x i32> %x0, %x1
|
%t0 = add <8 x i32> %x0, %x1
|
||||||
@ -1478,8 +1478,8 @@ define <4 x i64> @reassociate_umin_v4i64(<4 x i64> %x0, <4 x i64> %x1, <4 x i64>
|
|||||||
; AVX512-LABEL: reassociate_umin_v4i64:
|
; AVX512-LABEL: reassociate_umin_v4i64:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vpaddq %ymm1, %ymm0, %ymm0
|
; AVX512-NEXT: vpaddq %ymm1, %ymm0, %ymm0
|
||||||
; AVX512-NEXT: vpminuq %ymm0, %ymm2, %ymm0
|
; AVX512-NEXT: vpminuq %ymm3, %ymm2, %ymm1
|
||||||
; AVX512-NEXT: vpminuq %ymm0, %ymm3, %ymm0
|
; AVX512-NEXT: vpminuq %ymm1, %ymm0, %ymm0
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <4 x i64> %x0, %x1
|
%t0 = add <4 x i64> %x0, %x1
|
||||||
@ -1520,8 +1520,8 @@ define <32 x i8> @reassociate_smin_v32i8(<32 x i8> %x0, <32 x i8> %x1, <32 x i8>
|
|||||||
; AVX-LABEL: reassociate_smin_v32i8:
|
; AVX-LABEL: reassociate_smin_v32i8:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vpaddb %ymm1, %ymm0, %ymm0
|
; AVX-NEXT: vpaddb %ymm1, %ymm0, %ymm0
|
||||||
; AVX-NEXT: vpminsb %ymm0, %ymm2, %ymm0
|
; AVX-NEXT: vpminsb %ymm3, %ymm2, %ymm1
|
||||||
; AVX-NEXT: vpminsb %ymm0, %ymm3, %ymm0
|
; AVX-NEXT: vpminsb %ymm1, %ymm0, %ymm0
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <32 x i8> %x0, %x1
|
%t0 = add <32 x i8> %x0, %x1
|
||||||
@ -1537,17 +1537,17 @@ define <16 x i16> @reassociate_smin_v16i16(<16 x i16> %x0, <16 x i16> %x1, <16 x
|
|||||||
; SSE: # %bb.0:
|
; SSE: # %bb.0:
|
||||||
; SSE-NEXT: paddw %xmm2, %xmm0
|
; SSE-NEXT: paddw %xmm2, %xmm0
|
||||||
; SSE-NEXT: paddw %xmm3, %xmm1
|
; SSE-NEXT: paddw %xmm3, %xmm1
|
||||||
; SSE-NEXT: pminsw %xmm5, %xmm1
|
; SSE-NEXT: pminsw %xmm6, %xmm4
|
||||||
; SSE-NEXT: pminsw %xmm4, %xmm0
|
; SSE-NEXT: pminsw %xmm4, %xmm0
|
||||||
; SSE-NEXT: pminsw %xmm6, %xmm0
|
; SSE-NEXT: pminsw %xmm7, %xmm5
|
||||||
; SSE-NEXT: pminsw %xmm7, %xmm1
|
; SSE-NEXT: pminsw %xmm5, %xmm1
|
||||||
; SSE-NEXT: retq
|
; SSE-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX-LABEL: reassociate_smin_v16i16:
|
; AVX-LABEL: reassociate_smin_v16i16:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vpaddw %ymm1, %ymm0, %ymm0
|
; AVX-NEXT: vpaddw %ymm1, %ymm0, %ymm0
|
||||||
; AVX-NEXT: vpminsw %ymm0, %ymm2, %ymm0
|
; AVX-NEXT: vpminsw %ymm3, %ymm2, %ymm1
|
||||||
; AVX-NEXT: vpminsw %ymm0, %ymm3, %ymm0
|
; AVX-NEXT: vpminsw %ymm1, %ymm0, %ymm0
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <16 x i16> %x0, %x1
|
%t0 = add <16 x i16> %x0, %x1
|
||||||
@ -1588,8 +1588,8 @@ define <8 x i32> @reassociate_smin_v8i32(<8 x i32> %x0, <8 x i32> %x1, <8 x i32>
|
|||||||
; AVX-LABEL: reassociate_smin_v8i32:
|
; AVX-LABEL: reassociate_smin_v8i32:
|
||||||
; AVX: # %bb.0:
|
; AVX: # %bb.0:
|
||||||
; AVX-NEXT: vpaddd %ymm1, %ymm0, %ymm0
|
; AVX-NEXT: vpaddd %ymm1, %ymm0, %ymm0
|
||||||
; AVX-NEXT: vpminsd %ymm0, %ymm2, %ymm0
|
; AVX-NEXT: vpminsd %ymm3, %ymm2, %ymm1
|
||||||
; AVX-NEXT: vpminsd %ymm0, %ymm3, %ymm0
|
; AVX-NEXT: vpminsd %ymm1, %ymm0, %ymm0
|
||||||
; AVX-NEXT: retq
|
; AVX-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <8 x i32> %x0, %x1
|
%t0 = add <8 x i32> %x0, %x1
|
||||||
@ -1679,8 +1679,8 @@ define <4 x i64> @reassociate_smin_v4i64(<4 x i64> %x0, <4 x i64> %x1, <4 x i64>
|
|||||||
; AVX512-LABEL: reassociate_smin_v4i64:
|
; AVX512-LABEL: reassociate_smin_v4i64:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vpaddq %ymm1, %ymm0, %ymm0
|
; AVX512-NEXT: vpaddq %ymm1, %ymm0, %ymm0
|
||||||
; AVX512-NEXT: vpminsq %ymm0, %ymm2, %ymm0
|
; AVX512-NEXT: vpminsq %ymm3, %ymm2, %ymm1
|
||||||
; AVX512-NEXT: vpminsq %ymm0, %ymm3, %ymm0
|
; AVX512-NEXT: vpminsq %ymm1, %ymm0, %ymm0
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <4 x i64> %x0, %x1
|
%t0 = add <4 x i64> %x0, %x1
|
||||||
@ -1714,17 +1714,17 @@ define <64 x i8> @reassociate_umax_v64i8(<64 x i8> %x0, <64 x i8> %x1, <64 x i8>
|
|||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vpaddb %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpaddb %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpmaxub %ymm1, %ymm5, %ymm1
|
; AVX2-NEXT: vpmaxub %ymm6, %ymm4, %ymm2
|
||||||
; AVX2-NEXT: vpmaxub %ymm0, %ymm4, %ymm0
|
; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vpmaxub %ymm0, %ymm6, %ymm0
|
; AVX2-NEXT: vpmaxub %ymm7, %ymm5, %ymm2
|
||||||
; AVX2-NEXT: vpmaxub %ymm1, %ymm7, %ymm1
|
; AVX2-NEXT: vpmaxub %ymm2, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: retq
|
; AVX2-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX512-LABEL: reassociate_umax_v64i8:
|
; AVX512-LABEL: reassociate_umax_v64i8:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vpaddb %zmm1, %zmm0, %zmm0
|
; AVX512-NEXT: vpaddb %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: vpmaxub %zmm0, %zmm2, %zmm0
|
; AVX512-NEXT: vpmaxub %zmm3, %zmm2, %zmm1
|
||||||
; AVX512-NEXT: vpmaxub %zmm0, %zmm3, %zmm0
|
; AVX512-NEXT: vpmaxub %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <64 x i8> %x0, %x1
|
%t0 = add <64 x i8> %x0, %x1
|
||||||
@ -1781,17 +1781,17 @@ define <32 x i16> @reassociate_umax_v32i16(<32 x i16> %x0, <32 x i16> %x1, <32 x
|
|||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpaddw %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpaddw %ymm2, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vpaddw %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpaddw %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpmaxuw %ymm1, %ymm5, %ymm1
|
; AVX2-NEXT: vpmaxuw %ymm6, %ymm4, %ymm2
|
||||||
; AVX2-NEXT: vpmaxuw %ymm0, %ymm4, %ymm0
|
; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vpmaxuw %ymm0, %ymm6, %ymm0
|
; AVX2-NEXT: vpmaxuw %ymm7, %ymm5, %ymm2
|
||||||
; AVX2-NEXT: vpmaxuw %ymm1, %ymm7, %ymm1
|
; AVX2-NEXT: vpmaxuw %ymm2, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: retq
|
; AVX2-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX512-LABEL: reassociate_umax_v32i16:
|
; AVX512-LABEL: reassociate_umax_v32i16:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vpaddw %zmm1, %zmm0, %zmm0
|
; AVX512-NEXT: vpaddw %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: vpmaxuw %zmm0, %zmm2, %zmm0
|
; AVX512-NEXT: vpmaxuw %zmm3, %zmm2, %zmm1
|
||||||
; AVX512-NEXT: vpmaxuw %zmm0, %zmm3, %zmm0
|
; AVX512-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <32 x i16> %x0, %x1
|
%t0 = add <32 x i16> %x0, %x1
|
||||||
@ -1890,17 +1890,17 @@ define <16 x i32> @reassociate_umax_v16i32(<16 x i32> %x0, <16 x i32> %x1, <16 x
|
|||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpaddd %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpaddd %ymm2, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vpaddd %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpaddd %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpmaxud %ymm1, %ymm5, %ymm1
|
; AVX2-NEXT: vpmaxud %ymm6, %ymm4, %ymm2
|
||||||
; AVX2-NEXT: vpmaxud %ymm0, %ymm4, %ymm0
|
; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vpmaxud %ymm0, %ymm6, %ymm0
|
; AVX2-NEXT: vpmaxud %ymm7, %ymm5, %ymm2
|
||||||
; AVX2-NEXT: vpmaxud %ymm1, %ymm7, %ymm1
|
; AVX2-NEXT: vpmaxud %ymm2, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: retq
|
; AVX2-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX512-LABEL: reassociate_umax_v16i32:
|
; AVX512-LABEL: reassociate_umax_v16i32:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vpaddd %zmm1, %zmm0, %zmm0
|
; AVX512-NEXT: vpaddd %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: vpmaxud %zmm0, %zmm2, %zmm0
|
; AVX512-NEXT: vpmaxud %zmm3, %zmm2, %zmm1
|
||||||
; AVX512-NEXT: vpmaxud %zmm0, %zmm3, %zmm0
|
; AVX512-NEXT: vpmaxud %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <16 x i32> %x0, %x1
|
%t0 = add <16 x i32> %x0, %x1
|
||||||
@ -2074,8 +2074,8 @@ define <8 x i64> @reassociate_umax_v8i64(<8 x i64> %x0, <8 x i64> %x1, <8 x i64>
|
|||||||
; AVX512-LABEL: reassociate_umax_v8i64:
|
; AVX512-LABEL: reassociate_umax_v8i64:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vpaddq %zmm1, %zmm0, %zmm0
|
; AVX512-NEXT: vpaddq %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: vpmaxuq %zmm0, %zmm2, %zmm0
|
; AVX512-NEXT: vpmaxuq %zmm3, %zmm2, %zmm1
|
||||||
; AVX512-NEXT: vpmaxuq %zmm0, %zmm3, %zmm0
|
; AVX512-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <8 x i64> %x0, %x1
|
%t0 = add <8 x i64> %x0, %x1
|
||||||
@ -2147,17 +2147,17 @@ define <64 x i8> @reassociate_smax_v64i8(<64 x i8> %x0, <64 x i8> %x1, <64 x i8>
|
|||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vpaddb %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpaddb %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpmaxsb %ymm1, %ymm5, %ymm1
|
; AVX2-NEXT: vpmaxsb %ymm6, %ymm4, %ymm2
|
||||||
; AVX2-NEXT: vpmaxsb %ymm0, %ymm4, %ymm0
|
; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vpmaxsb %ymm0, %ymm6, %ymm0
|
; AVX2-NEXT: vpmaxsb %ymm7, %ymm5, %ymm2
|
||||||
; AVX2-NEXT: vpmaxsb %ymm1, %ymm7, %ymm1
|
; AVX2-NEXT: vpmaxsb %ymm2, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: retq
|
; AVX2-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX512-LABEL: reassociate_smax_v64i8:
|
; AVX512-LABEL: reassociate_smax_v64i8:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vpaddb %zmm1, %zmm0, %zmm0
|
; AVX512-NEXT: vpaddb %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: vpmaxsb %zmm0, %zmm2, %zmm0
|
; AVX512-NEXT: vpmaxsb %zmm3, %zmm2, %zmm1
|
||||||
; AVX512-NEXT: vpmaxsb %zmm0, %zmm3, %zmm0
|
; AVX512-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <64 x i8> %x0, %x1
|
%t0 = add <64 x i8> %x0, %x1
|
||||||
@ -2189,17 +2189,17 @@ define <32 x i16> @reassociate_smax_v32i16(<32 x i16> %x0, <32 x i16> %x1, <32 x
|
|||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpaddw %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpaddw %ymm2, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vpaddw %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpaddw %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpmaxsw %ymm1, %ymm5, %ymm1
|
; AVX2-NEXT: vpmaxsw %ymm6, %ymm4, %ymm2
|
||||||
; AVX2-NEXT: vpmaxsw %ymm0, %ymm4, %ymm0
|
; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vpmaxsw %ymm0, %ymm6, %ymm0
|
; AVX2-NEXT: vpmaxsw %ymm7, %ymm5, %ymm2
|
||||||
; AVX2-NEXT: vpmaxsw %ymm1, %ymm7, %ymm1
|
; AVX2-NEXT: vpmaxsw %ymm2, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: retq
|
; AVX2-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX512-LABEL: reassociate_smax_v32i16:
|
; AVX512-LABEL: reassociate_smax_v32i16:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vpaddw %zmm1, %zmm0, %zmm0
|
; AVX512-NEXT: vpaddw %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: vpmaxsw %zmm0, %zmm2, %zmm0
|
; AVX512-NEXT: vpmaxsw %zmm3, %zmm2, %zmm1
|
||||||
; AVX512-NEXT: vpmaxsw %zmm0, %zmm3, %zmm0
|
; AVX512-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <32 x i16> %x0, %x1
|
%t0 = add <32 x i16> %x0, %x1
|
||||||
@ -2271,17 +2271,17 @@ define <16 x i32> @reassociate_smax_v16i32(<16 x i32> %x0, <16 x i32> %x1, <16 x
|
|||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpaddd %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpaddd %ymm2, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vpaddd %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpaddd %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpmaxsd %ymm1, %ymm5, %ymm1
|
; AVX2-NEXT: vpmaxsd %ymm6, %ymm4, %ymm2
|
||||||
; AVX2-NEXT: vpmaxsd %ymm0, %ymm4, %ymm0
|
; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vpmaxsd %ymm0, %ymm6, %ymm0
|
; AVX2-NEXT: vpmaxsd %ymm7, %ymm5, %ymm2
|
||||||
; AVX2-NEXT: vpmaxsd %ymm1, %ymm7, %ymm1
|
; AVX2-NEXT: vpmaxsd %ymm2, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: retq
|
; AVX2-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX512-LABEL: reassociate_smax_v16i32:
|
; AVX512-LABEL: reassociate_smax_v16i32:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vpaddd %zmm1, %zmm0, %zmm0
|
; AVX512-NEXT: vpaddd %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: vpmaxsd %zmm0, %zmm2, %zmm0
|
; AVX512-NEXT: vpmaxsd %zmm3, %zmm2, %zmm1
|
||||||
; AVX512-NEXT: vpmaxsd %zmm0, %zmm3, %zmm0
|
; AVX512-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <16 x i32> %x0, %x1
|
%t0 = add <16 x i32> %x0, %x1
|
||||||
@ -2446,8 +2446,8 @@ define <8 x i64> @reassociate_smax_v8i64(<8 x i64> %x0, <8 x i64> %x1, <8 x i64>
|
|||||||
; AVX512-LABEL: reassociate_smax_v8i64:
|
; AVX512-LABEL: reassociate_smax_v8i64:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vpaddq %zmm1, %zmm0, %zmm0
|
; AVX512-NEXT: vpaddq %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: vpmaxsq %zmm0, %zmm2, %zmm0
|
; AVX512-NEXT: vpmaxsq %zmm3, %zmm2, %zmm1
|
||||||
; AVX512-NEXT: vpmaxsq %zmm0, %zmm3, %zmm0
|
; AVX512-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <8 x i64> %x0, %x1
|
%t0 = add <8 x i64> %x0, %x1
|
||||||
@ -2479,17 +2479,17 @@ define <64 x i8> @reassociate_umin_v64i8(<64 x i8> %x0, <64 x i8> %x1, <64 x i8>
|
|||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vpaddb %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpaddb %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpminub %ymm1, %ymm5, %ymm1
|
; AVX2-NEXT: vpminub %ymm6, %ymm4, %ymm2
|
||||||
; AVX2-NEXT: vpminub %ymm0, %ymm4, %ymm0
|
; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vpminub %ymm0, %ymm6, %ymm0
|
; AVX2-NEXT: vpminub %ymm7, %ymm5, %ymm2
|
||||||
; AVX2-NEXT: vpminub %ymm1, %ymm7, %ymm1
|
; AVX2-NEXT: vpminub %ymm2, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: retq
|
; AVX2-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX512-LABEL: reassociate_umin_v64i8:
|
; AVX512-LABEL: reassociate_umin_v64i8:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vpaddb %zmm1, %zmm0, %zmm0
|
; AVX512-NEXT: vpaddb %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: vpminub %zmm0, %zmm2, %zmm0
|
; AVX512-NEXT: vpminub %zmm3, %zmm2, %zmm1
|
||||||
; AVX512-NEXT: vpminub %zmm0, %zmm3, %zmm0
|
; AVX512-NEXT: vpminub %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <64 x i8> %x0, %x1
|
%t0 = add <64 x i8> %x0, %x1
|
||||||
@ -2546,17 +2546,17 @@ define <32 x i16> @reassociate_umin_v32i16(<32 x i16> %x0, <32 x i16> %x1, <32 x
|
|||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpaddw %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpaddw %ymm2, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vpaddw %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpaddw %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpminuw %ymm1, %ymm5, %ymm1
|
; AVX2-NEXT: vpminuw %ymm6, %ymm4, %ymm2
|
||||||
; AVX2-NEXT: vpminuw %ymm0, %ymm4, %ymm0
|
; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vpminuw %ymm0, %ymm6, %ymm0
|
; AVX2-NEXT: vpminuw %ymm7, %ymm5, %ymm2
|
||||||
; AVX2-NEXT: vpminuw %ymm1, %ymm7, %ymm1
|
; AVX2-NEXT: vpminuw %ymm2, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: retq
|
; AVX2-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX512-LABEL: reassociate_umin_v32i16:
|
; AVX512-LABEL: reassociate_umin_v32i16:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vpaddw %zmm1, %zmm0, %zmm0
|
; AVX512-NEXT: vpaddw %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: vpminuw %zmm0, %zmm2, %zmm0
|
; AVX512-NEXT: vpminuw %zmm3, %zmm2, %zmm1
|
||||||
; AVX512-NEXT: vpminuw %zmm0, %zmm3, %zmm0
|
; AVX512-NEXT: vpminuw %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <32 x i16> %x0, %x1
|
%t0 = add <32 x i16> %x0, %x1
|
||||||
@ -2652,17 +2652,17 @@ define <16 x i32> @reassociate_umin_v16i32(<16 x i32> %x0, <16 x i32> %x1, <16 x
|
|||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpaddd %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpaddd %ymm2, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vpaddd %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpaddd %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpminud %ymm1, %ymm5, %ymm1
|
; AVX2-NEXT: vpminud %ymm6, %ymm4, %ymm2
|
||||||
; AVX2-NEXT: vpminud %ymm0, %ymm4, %ymm0
|
; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vpminud %ymm0, %ymm6, %ymm0
|
; AVX2-NEXT: vpminud %ymm7, %ymm5, %ymm2
|
||||||
; AVX2-NEXT: vpminud %ymm1, %ymm7, %ymm1
|
; AVX2-NEXT: vpminud %ymm2, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: retq
|
; AVX2-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX512-LABEL: reassociate_umin_v16i32:
|
; AVX512-LABEL: reassociate_umin_v16i32:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vpaddd %zmm1, %zmm0, %zmm0
|
; AVX512-NEXT: vpaddd %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: vpminud %zmm0, %zmm2, %zmm0
|
; AVX512-NEXT: vpminud %zmm3, %zmm2, %zmm1
|
||||||
; AVX512-NEXT: vpminud %zmm0, %zmm3, %zmm0
|
; AVX512-NEXT: vpminud %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <16 x i32> %x0, %x1
|
%t0 = add <16 x i32> %x0, %x1
|
||||||
@ -2836,8 +2836,8 @@ define <8 x i64> @reassociate_umin_v8i64(<8 x i64> %x0, <8 x i64> %x1, <8 x i64>
|
|||||||
; AVX512-LABEL: reassociate_umin_v8i64:
|
; AVX512-LABEL: reassociate_umin_v8i64:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vpaddq %zmm1, %zmm0, %zmm0
|
; AVX512-NEXT: vpaddq %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: vpminuq %zmm0, %zmm2, %zmm0
|
; AVX512-NEXT: vpminuq %zmm3, %zmm2, %zmm1
|
||||||
; AVX512-NEXT: vpminuq %zmm0, %zmm3, %zmm0
|
; AVX512-NEXT: vpminuq %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <8 x i64> %x0, %x1
|
%t0 = add <8 x i64> %x0, %x1
|
||||||
@ -2909,17 +2909,17 @@ define <64 x i8> @reassociate_smin_v64i8(<64 x i8> %x0, <64 x i8> %x1, <64 x i8>
|
|||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vpaddb %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpaddb %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpminsb %ymm1, %ymm5, %ymm1
|
; AVX2-NEXT: vpminsb %ymm6, %ymm4, %ymm2
|
||||||
; AVX2-NEXT: vpminsb %ymm0, %ymm4, %ymm0
|
; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vpminsb %ymm0, %ymm6, %ymm0
|
; AVX2-NEXT: vpminsb %ymm7, %ymm5, %ymm2
|
||||||
; AVX2-NEXT: vpminsb %ymm1, %ymm7, %ymm1
|
; AVX2-NEXT: vpminsb %ymm2, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: retq
|
; AVX2-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX512-LABEL: reassociate_smin_v64i8:
|
; AVX512-LABEL: reassociate_smin_v64i8:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vpaddb %zmm1, %zmm0, %zmm0
|
; AVX512-NEXT: vpaddb %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: vpminsb %zmm0, %zmm2, %zmm0
|
; AVX512-NEXT: vpminsb %zmm3, %zmm2, %zmm1
|
||||||
; AVX512-NEXT: vpminsb %zmm0, %zmm3, %zmm0
|
; AVX512-NEXT: vpminsb %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <64 x i8> %x0, %x1
|
%t0 = add <64 x i8> %x0, %x1
|
||||||
@ -2951,17 +2951,17 @@ define <32 x i16> @reassociate_smin_v32i16(<32 x i16> %x0, <32 x i16> %x1, <32 x
|
|||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpaddw %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpaddw %ymm2, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vpaddw %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpaddw %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpminsw %ymm1, %ymm5, %ymm1
|
; AVX2-NEXT: vpminsw %ymm6, %ymm4, %ymm2
|
||||||
; AVX2-NEXT: vpminsw %ymm0, %ymm4, %ymm0
|
; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vpminsw %ymm0, %ymm6, %ymm0
|
; AVX2-NEXT: vpminsw %ymm7, %ymm5, %ymm2
|
||||||
; AVX2-NEXT: vpminsw %ymm1, %ymm7, %ymm1
|
; AVX2-NEXT: vpminsw %ymm2, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: retq
|
; AVX2-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX512-LABEL: reassociate_smin_v32i16:
|
; AVX512-LABEL: reassociate_smin_v32i16:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vpaddw %zmm1, %zmm0, %zmm0
|
; AVX512-NEXT: vpaddw %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: vpminsw %zmm0, %zmm2, %zmm0
|
; AVX512-NEXT: vpminsw %zmm3, %zmm2, %zmm1
|
||||||
; AVX512-NEXT: vpminsw %zmm0, %zmm3, %zmm0
|
; AVX512-NEXT: vpminsw %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <32 x i16> %x0, %x1
|
%t0 = add <32 x i16> %x0, %x1
|
||||||
@ -3033,17 +3033,17 @@ define <16 x i32> @reassociate_smin_v16i32(<16 x i32> %x0, <16 x i32> %x1, <16 x
|
|||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpaddd %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpaddd %ymm2, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vpaddd %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpaddd %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpminsd %ymm1, %ymm5, %ymm1
|
; AVX2-NEXT: vpminsd %ymm6, %ymm4, %ymm2
|
||||||
; AVX2-NEXT: vpminsd %ymm0, %ymm4, %ymm0
|
; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vpminsd %ymm0, %ymm6, %ymm0
|
; AVX2-NEXT: vpminsd %ymm7, %ymm5, %ymm2
|
||||||
; AVX2-NEXT: vpminsd %ymm1, %ymm7, %ymm1
|
; AVX2-NEXT: vpminsd %ymm2, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: retq
|
; AVX2-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX512-LABEL: reassociate_smin_v16i32:
|
; AVX512-LABEL: reassociate_smin_v16i32:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vpaddd %zmm1, %zmm0, %zmm0
|
; AVX512-NEXT: vpaddd %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: vpminsd %zmm0, %zmm2, %zmm0
|
; AVX512-NEXT: vpminsd %zmm3, %zmm2, %zmm1
|
||||||
; AVX512-NEXT: vpminsd %zmm0, %zmm3, %zmm0
|
; AVX512-NEXT: vpminsd %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <16 x i32> %x0, %x1
|
%t0 = add <16 x i32> %x0, %x1
|
||||||
@ -3208,8 +3208,8 @@ define <8 x i64> @reassociate_smin_v8i64(<8 x i64> %x0, <8 x i64> %x1, <8 x i64>
|
|||||||
; AVX512-LABEL: reassociate_smin_v8i64:
|
; AVX512-LABEL: reassociate_smin_v8i64:
|
||||||
; AVX512: # %bb.0:
|
; AVX512: # %bb.0:
|
||||||
; AVX512-NEXT: vpaddq %zmm1, %zmm0, %zmm0
|
; AVX512-NEXT: vpaddq %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: vpminsq %zmm0, %zmm2, %zmm0
|
; AVX512-NEXT: vpminsq %zmm3, %zmm2, %zmm1
|
||||||
; AVX512-NEXT: vpminsq %zmm0, %zmm3, %zmm0
|
; AVX512-NEXT: vpminsq %zmm1, %zmm0, %zmm0
|
||||||
; AVX512-NEXT: retq
|
; AVX512-NEXT: retq
|
||||||
|
|
||||||
%t0 = add <8 x i64> %x0, %x1
|
%t0 = add <8 x i64> %x0, %x1
|
||||||
|
@ -884,13 +884,13 @@ define i32 @test_v16i32(<16 x i32> %a0) {
|
|||||||
; SSE41-LABEL: test_v16i32:
|
; SSE41-LABEL: test_v16i32:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pmaxsd %xmm3, %xmm1
|
; SSE41-NEXT: pmaxsd %xmm3, %xmm1
|
||||||
; SSE41-NEXT: pmaxsd %xmm2, %xmm0
|
; SSE41-NEXT: pmaxsd %xmm2, %xmm1
|
||||||
; SSE41-NEXT: pmaxsd %xmm1, %xmm0
|
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; SSE41-NEXT: pmaxsd %xmm0, %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: 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
|
; SSE41-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX1-LABEL: test_v16i32:
|
; AVX1-LABEL: test_v16i32:
|
||||||
@ -898,8 +898,8 @@ define i32 @test_v16i32(<16 x i32> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2
|
; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2
|
||||||
|
; AVX1-NEXT: vpmaxsd %xmm2, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
||||||
; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
@ -994,14 +994,14 @@ define i32 @test_v32i32(<32 x i32> %a0) {
|
|||||||
; SSE41-LABEL: test_v32i32:
|
; SSE41-LABEL: test_v32i32:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pmaxsd %xmm6, %xmm2
|
; SSE41-NEXT: pmaxsd %xmm6, %xmm2
|
||||||
; SSE41-NEXT: pmaxsd %xmm4, %xmm0
|
|
||||||
; SSE41-NEXT: pmaxsd %xmm2, %xmm0
|
|
||||||
; SSE41-NEXT: pmaxsd %xmm7, %xmm3
|
; SSE41-NEXT: pmaxsd %xmm7, %xmm3
|
||||||
; SSE41-NEXT: pmaxsd %xmm5, %xmm1
|
; SSE41-NEXT: pmaxsd %xmm5, %xmm3
|
||||||
; SSE41-NEXT: pmaxsd %xmm3, %xmm1
|
; SSE41-NEXT: pmaxsd %xmm1, %xmm3
|
||||||
; SSE41-NEXT: pmaxsd %xmm0, %xmm1
|
; SSE41-NEXT: pmaxsd %xmm4, %xmm2
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
; SSE41-NEXT: pmaxsd %xmm3, %xmm2
|
||||||
; SSE41-NEXT: pmaxsd %xmm1, %xmm0
|
; 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: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; SSE41-NEXT: pmaxsd %xmm0, %xmm1
|
; SSE41-NEXT: pmaxsd %xmm0, %xmm1
|
||||||
; SSE41-NEXT: movd %xmm1, %eax
|
; SSE41-NEXT: movd %xmm1, %eax
|
||||||
@ -1010,16 +1010,16 @@ define i32 @test_v32i32(<32 x i32> %a0) {
|
|||||||
; AVX1-LABEL: test_v32i32:
|
; AVX1-LABEL: test_v32i32:
|
||||||
; AVX1: # %bb.0:
|
; AVX1: # %bb.0:
|
||||||
; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm4
|
; 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, %ymm3, %xmm3
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
|
||||||
; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1
|
; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm3
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
|
; AVX1-NEXT: vpmaxsd %xmm1, %xmm3, %xmm1
|
||||||
; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0
|
; 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 %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpmaxsd %xmm0, %xmm4, %xmm0
|
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
||||||
; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
@ -1031,7 +1031,7 @@ define i32 @test_v32i32(<32 x i32> %a0) {
|
|||||||
; AVX2-LABEL: test_v32i32:
|
; AVX2-LABEL: test_v32i32:
|
||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1
|
; 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: vpmaxsd %ymm1, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
||||||
; AVX2-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
|
; AVX2-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
|
||||||
@ -1241,26 +1241,26 @@ define i16 @test_v32i16(<32 x i16> %a0) {
|
|||||||
; SSE2-LABEL: test_v32i16:
|
; SSE2-LABEL: test_v32i16:
|
||||||
; SSE2: # %bb.0:
|
; SSE2: # %bb.0:
|
||||||
; SSE2-NEXT: pmaxsw %xmm3, %xmm1
|
; SSE2-NEXT: pmaxsw %xmm3, %xmm1
|
||||||
; SSE2-NEXT: pmaxsw %xmm2, %xmm0
|
; SSE2-NEXT: pmaxsw %xmm2, %xmm1
|
||||||
; SSE2-NEXT: pmaxsw %xmm1, %xmm0
|
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; SSE2-NEXT: pmaxsw %xmm0, %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: pmaxsw %xmm1, %xmm0
|
||||||
; SSE2-NEXT: movdqa %xmm0, %xmm1
|
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; SSE2-NEXT: psrld $16, %xmm1
|
|
||||||
; SSE2-NEXT: pmaxsw %xmm0, %xmm1
|
; 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: # kill: def $ax killed $ax killed $eax
|
||||||
; SSE2-NEXT: retq
|
; SSE2-NEXT: retq
|
||||||
;
|
;
|
||||||
; SSE41-LABEL: test_v32i16:
|
; SSE41-LABEL: test_v32i16:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pmaxsw %xmm3, %xmm1
|
; SSE41-NEXT: pmaxsw %xmm3, %xmm1
|
||||||
; SSE41-NEXT: pmaxsw %xmm2, %xmm0
|
; SSE41-NEXT: pmaxsw %xmm2, %xmm1
|
||||||
; SSE41-NEXT: pmaxsw %xmm1, %xmm0
|
; SSE41-NEXT: pmaxsw %xmm0, %xmm1
|
||||||
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm0
|
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm1
|
||||||
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
; SSE41-NEXT: phminposuw %xmm1, %xmm0
|
||||||
; SSE41-NEXT: movd %xmm0, %eax
|
; SSE41-NEXT: movd %xmm0, %eax
|
||||||
; SSE41-NEXT: xorl $32767, %eax # imm = 0x7FFF
|
; SSE41-NEXT: xorl $32767, %eax # imm = 0x7FFF
|
||||||
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
||||||
@ -1271,8 +1271,8 @@ define i16 @test_v32i16(<32 x i16> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2
|
; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2
|
||||||
|
; AVX1-NEXT: vpmaxsw %xmm2, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vmovd %xmm0, %eax
|
; AVX1-NEXT: vmovd %xmm0, %eax
|
||||||
@ -1315,14 +1315,14 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; SSE2-LABEL: test_v64i16:
|
; SSE2-LABEL: test_v64i16:
|
||||||
; SSE2: # %bb.0:
|
; SSE2: # %bb.0:
|
||||||
; SSE2-NEXT: pmaxsw %xmm6, %xmm2
|
; SSE2-NEXT: pmaxsw %xmm6, %xmm2
|
||||||
; SSE2-NEXT: pmaxsw %xmm4, %xmm0
|
|
||||||
; SSE2-NEXT: pmaxsw %xmm2, %xmm0
|
|
||||||
; SSE2-NEXT: pmaxsw %xmm7, %xmm3
|
; SSE2-NEXT: pmaxsw %xmm7, %xmm3
|
||||||
; SSE2-NEXT: pmaxsw %xmm5, %xmm1
|
; SSE2-NEXT: pmaxsw %xmm5, %xmm3
|
||||||
; SSE2-NEXT: pmaxsw %xmm3, %xmm1
|
; SSE2-NEXT: pmaxsw %xmm1, %xmm3
|
||||||
; SSE2-NEXT: pmaxsw %xmm0, %xmm1
|
; SSE2-NEXT: pmaxsw %xmm4, %xmm2
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
; SSE2-NEXT: pmaxsw %xmm3, %xmm2
|
||||||
; SSE2-NEXT: pmaxsw %xmm1, %xmm0
|
; 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: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; SSE2-NEXT: pmaxsw %xmm0, %xmm1
|
; SSE2-NEXT: pmaxsw %xmm0, %xmm1
|
||||||
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
||||||
@ -1335,14 +1335,14 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; SSE41-LABEL: test_v64i16:
|
; SSE41-LABEL: test_v64i16:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pmaxsw %xmm7, %xmm3
|
; SSE41-NEXT: pmaxsw %xmm7, %xmm3
|
||||||
; SSE41-NEXT: pmaxsw %xmm5, %xmm1
|
; SSE41-NEXT: pmaxsw %xmm5, %xmm3
|
||||||
; SSE41-NEXT: pmaxsw %xmm3, %xmm1
|
; SSE41-NEXT: pmaxsw %xmm1, %xmm3
|
||||||
; SSE41-NEXT: pmaxsw %xmm6, %xmm2
|
; SSE41-NEXT: pmaxsw %xmm6, %xmm2
|
||||||
; SSE41-NEXT: pmaxsw %xmm4, %xmm0
|
; SSE41-NEXT: pmaxsw %xmm4, %xmm2
|
||||||
; SSE41-NEXT: pmaxsw %xmm2, %xmm0
|
; SSE41-NEXT: pmaxsw %xmm3, %xmm2
|
||||||
; SSE41-NEXT: pmaxsw %xmm1, %xmm0
|
; SSE41-NEXT: pmaxsw %xmm0, %xmm2
|
||||||
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm0
|
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm2
|
||||||
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
; SSE41-NEXT: phminposuw %xmm2, %xmm0
|
||||||
; SSE41-NEXT: movd %xmm0, %eax
|
; SSE41-NEXT: movd %xmm0, %eax
|
||||||
; SSE41-NEXT: xorl $32767, %eax # imm = 0x7FFF
|
; SSE41-NEXT: xorl $32767, %eax # imm = 0x7FFF
|
||||||
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
||||||
@ -1354,13 +1354,13 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
||||||
; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
|
; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpmaxsw %xmm5, %xmm6, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
|
||||||
; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1
|
; 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 %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpmaxsw %xmm4, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vmovd %xmm0, %eax
|
; AVX1-NEXT: vmovd %xmm0, %eax
|
||||||
@ -1372,7 +1372,7 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; AVX2-LABEL: test_v64i16:
|
; AVX2-LABEL: test_v64i16:
|
||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1
|
; 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: vpmaxsw %ymm1, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
||||||
; AVX2-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
|
; AVX2-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
|
||||||
@ -1789,13 +1789,13 @@ define i8 @test_v64i8(<64 x i8> %a0) {
|
|||||||
; SSE41-LABEL: test_v64i8:
|
; SSE41-LABEL: test_v64i8:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pmaxsb %xmm3, %xmm1
|
; SSE41-NEXT: pmaxsb %xmm3, %xmm1
|
||||||
; SSE41-NEXT: pmaxsb %xmm2, %xmm0
|
; SSE41-NEXT: pmaxsb %xmm2, %xmm1
|
||||||
; SSE41-NEXT: pmaxsb %xmm1, %xmm0
|
; SSE41-NEXT: pmaxsb %xmm0, %xmm1
|
||||||
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm0
|
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm1
|
||||||
; SSE41-NEXT: movdqa %xmm0, %xmm1
|
; SSE41-NEXT: movdqa %xmm1, %xmm0
|
||||||
; SSE41-NEXT: psrlw $8, %xmm1
|
; SSE41-NEXT: psrlw $8, %xmm0
|
||||||
; SSE41-NEXT: pminub %xmm0, %xmm1
|
; SSE41-NEXT: pminub %xmm1, %xmm0
|
||||||
; SSE41-NEXT: phminposuw %xmm1, %xmm0
|
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
||||||
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
||||||
; SSE41-NEXT: xorb $127, %al
|
; SSE41-NEXT: xorb $127, %al
|
||||||
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
||||||
@ -1806,8 +1806,8 @@ define i8 @test_v64i8(<64 x i8> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2
|
; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2
|
||||||
|
; AVX1-NEXT: vpmaxsb %xmm2, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
||||||
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
@ -1923,17 +1923,17 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; SSE41-LABEL: test_v128i8:
|
; SSE41-LABEL: test_v128i8:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pmaxsb %xmm7, %xmm3
|
; SSE41-NEXT: pmaxsb %xmm7, %xmm3
|
||||||
; SSE41-NEXT: pmaxsb %xmm5, %xmm1
|
; SSE41-NEXT: pmaxsb %xmm5, %xmm3
|
||||||
; SSE41-NEXT: pmaxsb %xmm3, %xmm1
|
; SSE41-NEXT: pmaxsb %xmm1, %xmm3
|
||||||
; SSE41-NEXT: pmaxsb %xmm6, %xmm2
|
; SSE41-NEXT: pmaxsb %xmm6, %xmm2
|
||||||
; SSE41-NEXT: pmaxsb %xmm4, %xmm0
|
; SSE41-NEXT: pmaxsb %xmm4, %xmm2
|
||||||
; SSE41-NEXT: pmaxsb %xmm2, %xmm0
|
; SSE41-NEXT: pmaxsb %xmm3, %xmm2
|
||||||
; SSE41-NEXT: pmaxsb %xmm1, %xmm0
|
; SSE41-NEXT: pmaxsb %xmm0, %xmm2
|
||||||
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm0
|
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm2
|
||||||
; SSE41-NEXT: movdqa %xmm0, %xmm1
|
; SSE41-NEXT: movdqa %xmm2, %xmm0
|
||||||
; SSE41-NEXT: psrlw $8, %xmm1
|
; SSE41-NEXT: psrlw $8, %xmm0
|
||||||
; SSE41-NEXT: pminub %xmm0, %xmm1
|
; SSE41-NEXT: pminub %xmm2, %xmm0
|
||||||
; SSE41-NEXT: phminposuw %xmm1, %xmm0
|
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
||||||
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
||||||
; SSE41-NEXT: xorb $127, %al
|
; SSE41-NEXT: xorb $127, %al
|
||||||
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
||||||
@ -1945,13 +1945,13 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
||||||
; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
|
; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpmaxsb %xmm5, %xmm6, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
|
||||||
; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1
|
; 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 %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpmaxsb %xmm4, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
||||||
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
@ -1965,7 +1965,7 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; AVX2-LABEL: test_v128i8:
|
; AVX2-LABEL: test_v128i8:
|
||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1
|
; 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: vpmaxsb %ymm1, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
||||||
; AVX2-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
|
; AVX2-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
|
||||||
|
@ -958,13 +958,13 @@ define i32 @test_v16i32(<16 x i32> %a0) {
|
|||||||
; SSE41-LABEL: test_v16i32:
|
; SSE41-LABEL: test_v16i32:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pmaxsd %xmm3, %xmm1
|
; SSE41-NEXT: pmaxsd %xmm3, %xmm1
|
||||||
; SSE41-NEXT: pmaxsd %xmm2, %xmm0
|
; SSE41-NEXT: pmaxsd %xmm2, %xmm1
|
||||||
; SSE41-NEXT: pmaxsd %xmm1, %xmm0
|
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; SSE41-NEXT: pmaxsd %xmm0, %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: 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
|
; SSE41-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX1-LABEL: test_v16i32:
|
; 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, %ymm1, %xmm2
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2
|
; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2
|
||||||
|
; AVX1-NEXT: vpmaxsd %xmm2, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
||||||
; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; 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-LABEL: test_v32i32:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pmaxsd %xmm6, %xmm2
|
; SSE41-NEXT: pmaxsd %xmm6, %xmm2
|
||||||
; SSE41-NEXT: pmaxsd %xmm4, %xmm0
|
|
||||||
; SSE41-NEXT: pmaxsd %xmm2, %xmm0
|
|
||||||
; SSE41-NEXT: pmaxsd %xmm7, %xmm3
|
; SSE41-NEXT: pmaxsd %xmm7, %xmm3
|
||||||
; SSE41-NEXT: pmaxsd %xmm5, %xmm1
|
; SSE41-NEXT: pmaxsd %xmm5, %xmm3
|
||||||
; SSE41-NEXT: pmaxsd %xmm3, %xmm1
|
; SSE41-NEXT: pmaxsd %xmm1, %xmm3
|
||||||
; SSE41-NEXT: pmaxsd %xmm0, %xmm1
|
; SSE41-NEXT: pmaxsd %xmm4, %xmm2
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
; SSE41-NEXT: pmaxsd %xmm3, %xmm2
|
||||||
; SSE41-NEXT: pmaxsd %xmm1, %xmm0
|
; 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: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; SSE41-NEXT: pmaxsd %xmm0, %xmm1
|
; SSE41-NEXT: pmaxsd %xmm0, %xmm1
|
||||||
; SSE41-NEXT: movd %xmm1, %eax
|
; SSE41-NEXT: movd %xmm1, %eax
|
||||||
@ -1084,16 +1084,16 @@ define i32 @test_v32i32(<32 x i32> %a0) {
|
|||||||
; AVX1-LABEL: test_v32i32:
|
; AVX1-LABEL: test_v32i32:
|
||||||
; AVX1: # %bb.0:
|
; AVX1: # %bb.0:
|
||||||
; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm4
|
; 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, %ymm3, %xmm3
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
|
||||||
; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1
|
; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm3
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
|
; AVX1-NEXT: vpmaxsd %xmm1, %xmm3, %xmm1
|
||||||
; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0
|
; 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 %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpmaxsd %xmm0, %xmm4, %xmm0
|
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
||||||
; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; 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-LABEL: test_v32i32:
|
||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1
|
; 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: vpmaxsd %ymm1, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
||||||
; AVX2-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
|
; AVX2-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
|
||||||
@ -1461,26 +1461,26 @@ define i16 @test_v32i16(<32 x i16> %a0) {
|
|||||||
; SSE2-LABEL: test_v32i16:
|
; SSE2-LABEL: test_v32i16:
|
||||||
; SSE2: # %bb.0:
|
; SSE2: # %bb.0:
|
||||||
; SSE2-NEXT: pmaxsw %xmm3, %xmm1
|
; SSE2-NEXT: pmaxsw %xmm3, %xmm1
|
||||||
; SSE2-NEXT: pmaxsw %xmm2, %xmm0
|
; SSE2-NEXT: pmaxsw %xmm2, %xmm1
|
||||||
; SSE2-NEXT: pmaxsw %xmm1, %xmm0
|
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; SSE2-NEXT: pmaxsw %xmm0, %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: pmaxsw %xmm1, %xmm0
|
||||||
; SSE2-NEXT: movdqa %xmm0, %xmm1
|
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; SSE2-NEXT: psrld $16, %xmm1
|
|
||||||
; SSE2-NEXT: pmaxsw %xmm0, %xmm1
|
; 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: # kill: def $ax killed $ax killed $eax
|
||||||
; SSE2-NEXT: retq
|
; SSE2-NEXT: retq
|
||||||
;
|
;
|
||||||
; SSE41-LABEL: test_v32i16:
|
; SSE41-LABEL: test_v32i16:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pmaxsw %xmm3, %xmm1
|
; SSE41-NEXT: pmaxsw %xmm3, %xmm1
|
||||||
; SSE41-NEXT: pmaxsw %xmm2, %xmm0
|
; SSE41-NEXT: pmaxsw %xmm2, %xmm1
|
||||||
; SSE41-NEXT: pmaxsw %xmm1, %xmm0
|
; SSE41-NEXT: pmaxsw %xmm0, %xmm1
|
||||||
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm0
|
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm1
|
||||||
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
; SSE41-NEXT: phminposuw %xmm1, %xmm0
|
||||||
; SSE41-NEXT: movd %xmm0, %eax
|
; SSE41-NEXT: movd %xmm0, %eax
|
||||||
; SSE41-NEXT: xorl $32767, %eax # imm = 0x7FFF
|
; SSE41-NEXT: xorl $32767, %eax # imm = 0x7FFF
|
||||||
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
; 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, %ymm1, %xmm2
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2
|
; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2
|
||||||
|
; AVX1-NEXT: vpmaxsw %xmm2, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vmovd %xmm0, %eax
|
; AVX1-NEXT: vmovd %xmm0, %eax
|
||||||
@ -1535,14 +1535,14 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; SSE2-LABEL: test_v64i16:
|
; SSE2-LABEL: test_v64i16:
|
||||||
; SSE2: # %bb.0:
|
; SSE2: # %bb.0:
|
||||||
; SSE2-NEXT: pmaxsw %xmm6, %xmm2
|
; SSE2-NEXT: pmaxsw %xmm6, %xmm2
|
||||||
; SSE2-NEXT: pmaxsw %xmm4, %xmm0
|
|
||||||
; SSE2-NEXT: pmaxsw %xmm2, %xmm0
|
|
||||||
; SSE2-NEXT: pmaxsw %xmm7, %xmm3
|
; SSE2-NEXT: pmaxsw %xmm7, %xmm3
|
||||||
; SSE2-NEXT: pmaxsw %xmm5, %xmm1
|
; SSE2-NEXT: pmaxsw %xmm5, %xmm3
|
||||||
; SSE2-NEXT: pmaxsw %xmm3, %xmm1
|
; SSE2-NEXT: pmaxsw %xmm1, %xmm3
|
||||||
; SSE2-NEXT: pmaxsw %xmm0, %xmm1
|
; SSE2-NEXT: pmaxsw %xmm4, %xmm2
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
; SSE2-NEXT: pmaxsw %xmm3, %xmm2
|
||||||
; SSE2-NEXT: pmaxsw %xmm1, %xmm0
|
; 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: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; SSE2-NEXT: pmaxsw %xmm0, %xmm1
|
; SSE2-NEXT: pmaxsw %xmm0, %xmm1
|
||||||
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
||||||
@ -1555,14 +1555,14 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; SSE41-LABEL: test_v64i16:
|
; SSE41-LABEL: test_v64i16:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pmaxsw %xmm7, %xmm3
|
; SSE41-NEXT: pmaxsw %xmm7, %xmm3
|
||||||
; SSE41-NEXT: pmaxsw %xmm5, %xmm1
|
; SSE41-NEXT: pmaxsw %xmm5, %xmm3
|
||||||
; SSE41-NEXT: pmaxsw %xmm3, %xmm1
|
; SSE41-NEXT: pmaxsw %xmm1, %xmm3
|
||||||
; SSE41-NEXT: pmaxsw %xmm6, %xmm2
|
; SSE41-NEXT: pmaxsw %xmm6, %xmm2
|
||||||
; SSE41-NEXT: pmaxsw %xmm4, %xmm0
|
; SSE41-NEXT: pmaxsw %xmm4, %xmm2
|
||||||
; SSE41-NEXT: pmaxsw %xmm2, %xmm0
|
; SSE41-NEXT: pmaxsw %xmm3, %xmm2
|
||||||
; SSE41-NEXT: pmaxsw %xmm1, %xmm0
|
; SSE41-NEXT: pmaxsw %xmm0, %xmm2
|
||||||
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm0
|
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm2
|
||||||
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
; SSE41-NEXT: phminposuw %xmm2, %xmm0
|
||||||
; SSE41-NEXT: movd %xmm0, %eax
|
; SSE41-NEXT: movd %xmm0, %eax
|
||||||
; SSE41-NEXT: xorl $32767, %eax # imm = 0x7FFF
|
; SSE41-NEXT: xorl $32767, %eax # imm = 0x7FFF
|
||||||
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
; 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: vextractf128 $1, %ymm1, %xmm5
|
||||||
; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
|
; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpmaxsw %xmm5, %xmm6, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
|
||||||
; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1
|
; 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 %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpmaxsw %xmm4, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vmovd %xmm0, %eax
|
; AVX1-NEXT: vmovd %xmm0, %eax
|
||||||
@ -1592,7 +1592,7 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; AVX2-LABEL: test_v64i16:
|
; AVX2-LABEL: test_v64i16:
|
||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1
|
; 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: vpmaxsw %ymm1, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
||||||
; AVX2-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
|
; AVX2-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
|
||||||
@ -2139,13 +2139,13 @@ define i8 @test_v64i8(<64 x i8> %a0) {
|
|||||||
; SSE41-LABEL: test_v64i8:
|
; SSE41-LABEL: test_v64i8:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pmaxsb %xmm3, %xmm1
|
; SSE41-NEXT: pmaxsb %xmm3, %xmm1
|
||||||
; SSE41-NEXT: pmaxsb %xmm2, %xmm0
|
; SSE41-NEXT: pmaxsb %xmm2, %xmm1
|
||||||
; SSE41-NEXT: pmaxsb %xmm1, %xmm0
|
; SSE41-NEXT: pmaxsb %xmm0, %xmm1
|
||||||
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm0
|
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm1
|
||||||
; SSE41-NEXT: movdqa %xmm0, %xmm1
|
; SSE41-NEXT: movdqa %xmm1, %xmm0
|
||||||
; SSE41-NEXT: psrlw $8, %xmm1
|
; SSE41-NEXT: psrlw $8, %xmm0
|
||||||
; SSE41-NEXT: pminub %xmm0, %xmm1
|
; SSE41-NEXT: pminub %xmm1, %xmm0
|
||||||
; SSE41-NEXT: phminposuw %xmm1, %xmm0
|
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
||||||
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
||||||
; SSE41-NEXT: xorb $127, %al
|
; SSE41-NEXT: xorb $127, %al
|
||||||
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
; 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, %ymm1, %xmm2
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2
|
; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2
|
||||||
|
; AVX1-NEXT: vpmaxsb %xmm2, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
||||||
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
@ -2273,17 +2273,17 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; SSE41-LABEL: test_v128i8:
|
; SSE41-LABEL: test_v128i8:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pmaxsb %xmm7, %xmm3
|
; SSE41-NEXT: pmaxsb %xmm7, %xmm3
|
||||||
; SSE41-NEXT: pmaxsb %xmm5, %xmm1
|
; SSE41-NEXT: pmaxsb %xmm5, %xmm3
|
||||||
; SSE41-NEXT: pmaxsb %xmm3, %xmm1
|
; SSE41-NEXT: pmaxsb %xmm1, %xmm3
|
||||||
; SSE41-NEXT: pmaxsb %xmm6, %xmm2
|
; SSE41-NEXT: pmaxsb %xmm6, %xmm2
|
||||||
; SSE41-NEXT: pmaxsb %xmm4, %xmm0
|
; SSE41-NEXT: pmaxsb %xmm4, %xmm2
|
||||||
; SSE41-NEXT: pmaxsb %xmm2, %xmm0
|
; SSE41-NEXT: pmaxsb %xmm3, %xmm2
|
||||||
; SSE41-NEXT: pmaxsb %xmm1, %xmm0
|
; SSE41-NEXT: pmaxsb %xmm0, %xmm2
|
||||||
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm0
|
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm2
|
||||||
; SSE41-NEXT: movdqa %xmm0, %xmm1
|
; SSE41-NEXT: movdqa %xmm2, %xmm0
|
||||||
; SSE41-NEXT: psrlw $8, %xmm1
|
; SSE41-NEXT: psrlw $8, %xmm0
|
||||||
; SSE41-NEXT: pminub %xmm0, %xmm1
|
; SSE41-NEXT: pminub %xmm2, %xmm0
|
||||||
; SSE41-NEXT: phminposuw %xmm1, %xmm0
|
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
||||||
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
||||||
; SSE41-NEXT: xorb $127, %al
|
; SSE41-NEXT: xorb $127, %al
|
||||||
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
; 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: vextractf128 $1, %ymm1, %xmm5
|
||||||
; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
|
; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpmaxsb %xmm5, %xmm6, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
|
||||||
; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1
|
; 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 %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpmaxsb %xmm4, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
||||||
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
@ -2315,7 +2315,7 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; AVX2-LABEL: test_v128i8:
|
; AVX2-LABEL: test_v128i8:
|
||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1
|
; 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: vpmaxsb %ymm1, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
||||||
; AVX2-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
|
; AVX2-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
|
||||||
|
@ -883,13 +883,13 @@ define i32 @test_v16i32(<16 x i32> %a0) {
|
|||||||
; SSE41-LABEL: test_v16i32:
|
; SSE41-LABEL: test_v16i32:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pminsd %xmm3, %xmm1
|
; SSE41-NEXT: pminsd %xmm3, %xmm1
|
||||||
; SSE41-NEXT: pminsd %xmm2, %xmm0
|
; SSE41-NEXT: pminsd %xmm2, %xmm1
|
||||||
; SSE41-NEXT: pminsd %xmm1, %xmm0
|
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; SSE41-NEXT: pminsd %xmm0, %xmm1
|
; SSE41-NEXT: pminsd %xmm0, %xmm1
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; SSE41-NEXT: pminsd %xmm1, %xmm0
|
; SSE41-NEXT: pminsd %xmm1, %xmm0
|
||||||
; SSE41-NEXT: movd %xmm0, %eax
|
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
|
; SSE41-NEXT: pminsd %xmm0, %xmm1
|
||||||
|
; SSE41-NEXT: movd %xmm1, %eax
|
||||||
; SSE41-NEXT: retq
|
; SSE41-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX1-LABEL: test_v16i32:
|
; AVX1-LABEL: test_v16i32:
|
||||||
@ -897,8 +897,8 @@ define i32 @test_v16i32(<16 x i32> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2
|
; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2
|
||||||
|
; AVX1-NEXT: vpminsd %xmm2, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
||||||
; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
@ -993,14 +993,14 @@ define i32 @test_v32i32(<32 x i32> %a0) {
|
|||||||
; SSE41-LABEL: test_v32i32:
|
; SSE41-LABEL: test_v32i32:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pminsd %xmm6, %xmm2
|
; SSE41-NEXT: pminsd %xmm6, %xmm2
|
||||||
; SSE41-NEXT: pminsd %xmm4, %xmm0
|
|
||||||
; SSE41-NEXT: pminsd %xmm2, %xmm0
|
|
||||||
; SSE41-NEXT: pminsd %xmm7, %xmm3
|
; SSE41-NEXT: pminsd %xmm7, %xmm3
|
||||||
; SSE41-NEXT: pminsd %xmm5, %xmm1
|
; SSE41-NEXT: pminsd %xmm5, %xmm3
|
||||||
; SSE41-NEXT: pminsd %xmm3, %xmm1
|
; SSE41-NEXT: pminsd %xmm1, %xmm3
|
||||||
; SSE41-NEXT: pminsd %xmm0, %xmm1
|
; SSE41-NEXT: pminsd %xmm4, %xmm2
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
; SSE41-NEXT: pminsd %xmm3, %xmm2
|
||||||
; SSE41-NEXT: pminsd %xmm1, %xmm0
|
; SSE41-NEXT: pminsd %xmm0, %xmm2
|
||||||
|
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[2,3,0,1]
|
||||||
|
; SSE41-NEXT: pminsd %xmm2, %xmm0
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; SSE41-NEXT: pminsd %xmm0, %xmm1
|
; SSE41-NEXT: pminsd %xmm0, %xmm1
|
||||||
; SSE41-NEXT: movd %xmm1, %eax
|
; SSE41-NEXT: movd %xmm1, %eax
|
||||||
@ -1009,16 +1009,16 @@ define i32 @test_v32i32(<32 x i32> %a0) {
|
|||||||
; AVX1-LABEL: test_v32i32:
|
; AVX1-LABEL: test_v32i32:
|
||||||
; AVX1: # %bb.0:
|
; AVX1: # %bb.0:
|
||||||
; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm4
|
; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm4
|
||||||
; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm5
|
|
||||||
; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4
|
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
|
||||||
; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1
|
; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm3
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
|
; AVX1-NEXT: vpminsd %xmm1, %xmm3, %xmm1
|
||||||
; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
|
; AVX1-NEXT: vpminsd %xmm1, %xmm3, %xmm1
|
||||||
|
; AVX1-NEXT: vpminsd %xmm4, %xmm2, %xmm2
|
||||||
|
; AVX1-NEXT: vpminsd %xmm1, %xmm2, %xmm1
|
||||||
; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpminsd %xmm0, %xmm4, %xmm0
|
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
||||||
; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
@ -1030,7 +1030,7 @@ define i32 @test_v32i32(<32 x i32> %a0) {
|
|||||||
; AVX2-LABEL: test_v32i32:
|
; AVX2-LABEL: test_v32i32:
|
||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpminsd %ymm1, %ymm2, %ymm1
|
||||||
; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0
|
; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
||||||
; AVX2-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
; AVX2-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
||||||
@ -1240,26 +1240,26 @@ define i16 @test_v32i16(<32 x i16> %a0) {
|
|||||||
; SSE2-LABEL: test_v32i16:
|
; SSE2-LABEL: test_v32i16:
|
||||||
; SSE2: # %bb.0:
|
; SSE2: # %bb.0:
|
||||||
; SSE2-NEXT: pminsw %xmm3, %xmm1
|
; SSE2-NEXT: pminsw %xmm3, %xmm1
|
||||||
; SSE2-NEXT: pminsw %xmm2, %xmm0
|
; SSE2-NEXT: pminsw %xmm2, %xmm1
|
||||||
; SSE2-NEXT: pminsw %xmm1, %xmm0
|
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; SSE2-NEXT: pminsw %xmm0, %xmm1
|
; SSE2-NEXT: pminsw %xmm0, %xmm1
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; SSE2-NEXT: pminsw %xmm1, %xmm0
|
; SSE2-NEXT: pminsw %xmm1, %xmm0
|
||||||
; SSE2-NEXT: movdqa %xmm0, %xmm1
|
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; SSE2-NEXT: psrld $16, %xmm1
|
|
||||||
; SSE2-NEXT: pminsw %xmm0, %xmm1
|
; SSE2-NEXT: pminsw %xmm0, %xmm1
|
||||||
; SSE2-NEXT: movd %xmm1, %eax
|
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
||||||
|
; SSE2-NEXT: psrld $16, %xmm0
|
||||||
|
; SSE2-NEXT: pminsw %xmm1, %xmm0
|
||||||
|
; SSE2-NEXT: movd %xmm0, %eax
|
||||||
; SSE2-NEXT: # kill: def $ax killed $ax killed $eax
|
; SSE2-NEXT: # kill: def $ax killed $ax killed $eax
|
||||||
; SSE2-NEXT: retq
|
; SSE2-NEXT: retq
|
||||||
;
|
;
|
||||||
; SSE41-LABEL: test_v32i16:
|
; SSE41-LABEL: test_v32i16:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pminsw %xmm3, %xmm1
|
; SSE41-NEXT: pminsw %xmm3, %xmm1
|
||||||
; SSE41-NEXT: pminsw %xmm2, %xmm0
|
; SSE41-NEXT: pminsw %xmm2, %xmm1
|
||||||
; SSE41-NEXT: pminsw %xmm1, %xmm0
|
; SSE41-NEXT: pminsw %xmm0, %xmm1
|
||||||
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm0
|
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm1
|
||||||
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
; SSE41-NEXT: phminposuw %xmm1, %xmm0
|
||||||
; SSE41-NEXT: movd %xmm0, %eax
|
; SSE41-NEXT: movd %xmm0, %eax
|
||||||
; SSE41-NEXT: xorl $32768, %eax # imm = 0x8000
|
; SSE41-NEXT: xorl $32768, %eax # imm = 0x8000
|
||||||
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
||||||
@ -1270,8 +1270,8 @@ define i16 @test_v32i16(<32 x i16> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2
|
; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2
|
||||||
|
; AVX1-NEXT: vpminsw %xmm2, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vmovd %xmm0, %eax
|
; AVX1-NEXT: vmovd %xmm0, %eax
|
||||||
@ -1314,14 +1314,14 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; SSE2-LABEL: test_v64i16:
|
; SSE2-LABEL: test_v64i16:
|
||||||
; SSE2: # %bb.0:
|
; SSE2: # %bb.0:
|
||||||
; SSE2-NEXT: pminsw %xmm6, %xmm2
|
; SSE2-NEXT: pminsw %xmm6, %xmm2
|
||||||
; SSE2-NEXT: pminsw %xmm4, %xmm0
|
|
||||||
; SSE2-NEXT: pminsw %xmm2, %xmm0
|
|
||||||
; SSE2-NEXT: pminsw %xmm7, %xmm3
|
; SSE2-NEXT: pminsw %xmm7, %xmm3
|
||||||
; SSE2-NEXT: pminsw %xmm5, %xmm1
|
; SSE2-NEXT: pminsw %xmm5, %xmm3
|
||||||
; SSE2-NEXT: pminsw %xmm3, %xmm1
|
; SSE2-NEXT: pminsw %xmm1, %xmm3
|
||||||
; SSE2-NEXT: pminsw %xmm0, %xmm1
|
; SSE2-NEXT: pminsw %xmm4, %xmm2
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
; SSE2-NEXT: pminsw %xmm3, %xmm2
|
||||||
; SSE2-NEXT: pminsw %xmm1, %xmm0
|
; SSE2-NEXT: pminsw %xmm0, %xmm2
|
||||||
|
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[2,3,0,1]
|
||||||
|
; SSE2-NEXT: pminsw %xmm2, %xmm0
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; SSE2-NEXT: pminsw %xmm0, %xmm1
|
; SSE2-NEXT: pminsw %xmm0, %xmm1
|
||||||
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
||||||
@ -1334,14 +1334,14 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; SSE41-LABEL: test_v64i16:
|
; SSE41-LABEL: test_v64i16:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pminsw %xmm7, %xmm3
|
; SSE41-NEXT: pminsw %xmm7, %xmm3
|
||||||
; SSE41-NEXT: pminsw %xmm5, %xmm1
|
; SSE41-NEXT: pminsw %xmm5, %xmm3
|
||||||
; SSE41-NEXT: pminsw %xmm3, %xmm1
|
; SSE41-NEXT: pminsw %xmm1, %xmm3
|
||||||
; SSE41-NEXT: pminsw %xmm6, %xmm2
|
; SSE41-NEXT: pminsw %xmm6, %xmm2
|
||||||
; SSE41-NEXT: pminsw %xmm4, %xmm0
|
; SSE41-NEXT: pminsw %xmm4, %xmm2
|
||||||
; SSE41-NEXT: pminsw %xmm2, %xmm0
|
; SSE41-NEXT: pminsw %xmm3, %xmm2
|
||||||
; SSE41-NEXT: pminsw %xmm1, %xmm0
|
; SSE41-NEXT: pminsw %xmm0, %xmm2
|
||||||
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm0
|
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm2
|
||||||
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
; SSE41-NEXT: phminposuw %xmm2, %xmm0
|
||||||
; SSE41-NEXT: movd %xmm0, %eax
|
; SSE41-NEXT: movd %xmm0, %eax
|
||||||
; SSE41-NEXT: xorl $32768, %eax # imm = 0x8000
|
; SSE41-NEXT: xorl $32768, %eax # imm = 0x8000
|
||||||
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
||||||
@ -1353,13 +1353,13 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
||||||
; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
|
; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpminsw %xmm5, %xmm6, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
|
||||||
; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1
|
; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0
|
; AVX1-NEXT: vpminsw %xmm1, %xmm2, %xmm1
|
||||||
|
; AVX1-NEXT: vpminsw %xmm4, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpminsw %xmm4, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vmovd %xmm0, %eax
|
; AVX1-NEXT: vmovd %xmm0, %eax
|
||||||
@ -1371,7 +1371,7 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; AVX2-LABEL: test_v64i16:
|
; AVX2-LABEL: test_v64i16:
|
||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpminsw %ymm1, %ymm2, %ymm1
|
||||||
; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0
|
; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
||||||
; AVX2-NEXT: vpminsw %xmm1, %xmm0, %xmm0
|
; AVX2-NEXT: vpminsw %xmm1, %xmm0, %xmm0
|
||||||
@ -1788,13 +1788,13 @@ define i8 @test_v64i8(<64 x i8> %a0) {
|
|||||||
; SSE41-LABEL: test_v64i8:
|
; SSE41-LABEL: test_v64i8:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pminsb %xmm3, %xmm1
|
; SSE41-NEXT: pminsb %xmm3, %xmm1
|
||||||
; SSE41-NEXT: pminsb %xmm2, %xmm0
|
; SSE41-NEXT: pminsb %xmm2, %xmm1
|
||||||
; SSE41-NEXT: pminsb %xmm1, %xmm0
|
; SSE41-NEXT: pminsb %xmm0, %xmm1
|
||||||
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm0
|
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm1
|
||||||
; SSE41-NEXT: movdqa %xmm0, %xmm1
|
; SSE41-NEXT: movdqa %xmm1, %xmm0
|
||||||
; SSE41-NEXT: psrlw $8, %xmm1
|
; SSE41-NEXT: psrlw $8, %xmm0
|
||||||
; SSE41-NEXT: pminub %xmm0, %xmm1
|
; SSE41-NEXT: pminub %xmm1, %xmm0
|
||||||
; SSE41-NEXT: phminposuw %xmm1, %xmm0
|
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
||||||
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
||||||
; SSE41-NEXT: xorb $-128, %al
|
; SSE41-NEXT: xorb $-128, %al
|
||||||
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
||||||
@ -1805,8 +1805,8 @@ define i8 @test_v64i8(<64 x i8> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2
|
; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2
|
||||||
|
; AVX1-NEXT: vpminsb %xmm2, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
||||||
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
@ -1922,17 +1922,17 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; SSE41-LABEL: test_v128i8:
|
; SSE41-LABEL: test_v128i8:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pminsb %xmm7, %xmm3
|
; SSE41-NEXT: pminsb %xmm7, %xmm3
|
||||||
; SSE41-NEXT: pminsb %xmm5, %xmm1
|
; SSE41-NEXT: pminsb %xmm5, %xmm3
|
||||||
; SSE41-NEXT: pminsb %xmm3, %xmm1
|
; SSE41-NEXT: pminsb %xmm1, %xmm3
|
||||||
; SSE41-NEXT: pminsb %xmm6, %xmm2
|
; SSE41-NEXT: pminsb %xmm6, %xmm2
|
||||||
; SSE41-NEXT: pminsb %xmm4, %xmm0
|
; SSE41-NEXT: pminsb %xmm4, %xmm2
|
||||||
; SSE41-NEXT: pminsb %xmm2, %xmm0
|
; SSE41-NEXT: pminsb %xmm3, %xmm2
|
||||||
; SSE41-NEXT: pminsb %xmm1, %xmm0
|
; SSE41-NEXT: pminsb %xmm0, %xmm2
|
||||||
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm0
|
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm2
|
||||||
; SSE41-NEXT: movdqa %xmm0, %xmm1
|
; SSE41-NEXT: movdqa %xmm2, %xmm0
|
||||||
; SSE41-NEXT: psrlw $8, %xmm1
|
; SSE41-NEXT: psrlw $8, %xmm0
|
||||||
; SSE41-NEXT: pminub %xmm0, %xmm1
|
; SSE41-NEXT: pminub %xmm2, %xmm0
|
||||||
; SSE41-NEXT: phminposuw %xmm1, %xmm0
|
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
||||||
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
||||||
; SSE41-NEXT: xorb $-128, %al
|
; SSE41-NEXT: xorb $-128, %al
|
||||||
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
||||||
@ -1944,13 +1944,13 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
||||||
; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
|
; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpminsb %xmm5, %xmm6, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
|
||||||
; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1
|
; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0
|
; AVX1-NEXT: vpminsb %xmm1, %xmm2, %xmm1
|
||||||
|
; AVX1-NEXT: vpminsb %xmm4, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpminsb %xmm4, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
||||||
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
@ -1964,7 +1964,7 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; AVX2-LABEL: test_v128i8:
|
; AVX2-LABEL: test_v128i8:
|
||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpminsb %ymm1, %ymm2, %ymm1
|
||||||
; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0
|
; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
||||||
; AVX2-NEXT: vpminsb %xmm1, %xmm0, %xmm0
|
; AVX2-NEXT: vpminsb %xmm1, %xmm0, %xmm0
|
||||||
|
@ -957,13 +957,13 @@ define i32 @test_v16i32(<16 x i32> %a0) {
|
|||||||
; SSE41-LABEL: test_v16i32:
|
; SSE41-LABEL: test_v16i32:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pminsd %xmm3, %xmm1
|
; SSE41-NEXT: pminsd %xmm3, %xmm1
|
||||||
; SSE41-NEXT: pminsd %xmm2, %xmm0
|
; SSE41-NEXT: pminsd %xmm2, %xmm1
|
||||||
; SSE41-NEXT: pminsd %xmm1, %xmm0
|
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; SSE41-NEXT: pminsd %xmm0, %xmm1
|
; SSE41-NEXT: pminsd %xmm0, %xmm1
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; SSE41-NEXT: pminsd %xmm1, %xmm0
|
; SSE41-NEXT: pminsd %xmm1, %xmm0
|
||||||
; SSE41-NEXT: movd %xmm0, %eax
|
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
|
; SSE41-NEXT: pminsd %xmm0, %xmm1
|
||||||
|
; SSE41-NEXT: movd %xmm1, %eax
|
||||||
; SSE41-NEXT: retq
|
; SSE41-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX1-LABEL: test_v16i32:
|
; AVX1-LABEL: test_v16i32:
|
||||||
@ -971,8 +971,8 @@ define i32 @test_v16i32(<16 x i32> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2
|
; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2
|
||||||
|
; AVX1-NEXT: vpminsd %xmm2, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
||||||
; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
@ -1067,14 +1067,14 @@ define i32 @test_v32i32(<32 x i32> %a0) {
|
|||||||
; SSE41-LABEL: test_v32i32:
|
; SSE41-LABEL: test_v32i32:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pminsd %xmm6, %xmm2
|
; SSE41-NEXT: pminsd %xmm6, %xmm2
|
||||||
; SSE41-NEXT: pminsd %xmm4, %xmm0
|
|
||||||
; SSE41-NEXT: pminsd %xmm2, %xmm0
|
|
||||||
; SSE41-NEXT: pminsd %xmm7, %xmm3
|
; SSE41-NEXT: pminsd %xmm7, %xmm3
|
||||||
; SSE41-NEXT: pminsd %xmm5, %xmm1
|
; SSE41-NEXT: pminsd %xmm5, %xmm3
|
||||||
; SSE41-NEXT: pminsd %xmm3, %xmm1
|
; SSE41-NEXT: pminsd %xmm1, %xmm3
|
||||||
; SSE41-NEXT: pminsd %xmm0, %xmm1
|
; SSE41-NEXT: pminsd %xmm4, %xmm2
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
; SSE41-NEXT: pminsd %xmm3, %xmm2
|
||||||
; SSE41-NEXT: pminsd %xmm1, %xmm0
|
; SSE41-NEXT: pminsd %xmm0, %xmm2
|
||||||
|
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[2,3,0,1]
|
||||||
|
; SSE41-NEXT: pminsd %xmm2, %xmm0
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; SSE41-NEXT: pminsd %xmm0, %xmm1
|
; SSE41-NEXT: pminsd %xmm0, %xmm1
|
||||||
; SSE41-NEXT: movd %xmm1, %eax
|
; SSE41-NEXT: movd %xmm1, %eax
|
||||||
@ -1083,16 +1083,16 @@ define i32 @test_v32i32(<32 x i32> %a0) {
|
|||||||
; AVX1-LABEL: test_v32i32:
|
; AVX1-LABEL: test_v32i32:
|
||||||
; AVX1: # %bb.0:
|
; AVX1: # %bb.0:
|
||||||
; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm4
|
; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm4
|
||||||
; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm5
|
|
||||||
; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4
|
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
|
||||||
; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1
|
; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm3
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
|
; AVX1-NEXT: vpminsd %xmm1, %xmm3, %xmm1
|
||||||
; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
|
; AVX1-NEXT: vpminsd %xmm1, %xmm3, %xmm1
|
||||||
|
; AVX1-NEXT: vpminsd %xmm4, %xmm2, %xmm2
|
||||||
|
; AVX1-NEXT: vpminsd %xmm1, %xmm2, %xmm1
|
||||||
; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpminsd %xmm0, %xmm4, %xmm0
|
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
||||||
; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
@ -1104,7 +1104,7 @@ define i32 @test_v32i32(<32 x i32> %a0) {
|
|||||||
; AVX2-LABEL: test_v32i32:
|
; AVX2-LABEL: test_v32i32:
|
||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpminsd %ymm1, %ymm2, %ymm1
|
||||||
; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0
|
; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
||||||
; AVX2-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
; AVX2-NEXT: vpminsd %xmm1, %xmm0, %xmm0
|
||||||
@ -1460,26 +1460,26 @@ define i16 @test_v32i16(<32 x i16> %a0) {
|
|||||||
; SSE2-LABEL: test_v32i16:
|
; SSE2-LABEL: test_v32i16:
|
||||||
; SSE2: # %bb.0:
|
; SSE2: # %bb.0:
|
||||||
; SSE2-NEXT: pminsw %xmm3, %xmm1
|
; SSE2-NEXT: pminsw %xmm3, %xmm1
|
||||||
; SSE2-NEXT: pminsw %xmm2, %xmm0
|
; SSE2-NEXT: pminsw %xmm2, %xmm1
|
||||||
; SSE2-NEXT: pminsw %xmm1, %xmm0
|
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; SSE2-NEXT: pminsw %xmm0, %xmm1
|
; SSE2-NEXT: pminsw %xmm0, %xmm1
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; SSE2-NEXT: pminsw %xmm1, %xmm0
|
; SSE2-NEXT: pminsw %xmm1, %xmm0
|
||||||
; SSE2-NEXT: movdqa %xmm0, %xmm1
|
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; SSE2-NEXT: psrld $16, %xmm1
|
|
||||||
; SSE2-NEXT: pminsw %xmm0, %xmm1
|
; SSE2-NEXT: pminsw %xmm0, %xmm1
|
||||||
; SSE2-NEXT: movd %xmm1, %eax
|
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
||||||
|
; SSE2-NEXT: psrld $16, %xmm0
|
||||||
|
; SSE2-NEXT: pminsw %xmm1, %xmm0
|
||||||
|
; SSE2-NEXT: movd %xmm0, %eax
|
||||||
; SSE2-NEXT: # kill: def $ax killed $ax killed $eax
|
; SSE2-NEXT: # kill: def $ax killed $ax killed $eax
|
||||||
; SSE2-NEXT: retq
|
; SSE2-NEXT: retq
|
||||||
;
|
;
|
||||||
; SSE41-LABEL: test_v32i16:
|
; SSE41-LABEL: test_v32i16:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pminsw %xmm3, %xmm1
|
; SSE41-NEXT: pminsw %xmm3, %xmm1
|
||||||
; SSE41-NEXT: pminsw %xmm2, %xmm0
|
; SSE41-NEXT: pminsw %xmm2, %xmm1
|
||||||
; SSE41-NEXT: pminsw %xmm1, %xmm0
|
; SSE41-NEXT: pminsw %xmm0, %xmm1
|
||||||
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm0
|
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm1
|
||||||
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
; SSE41-NEXT: phminposuw %xmm1, %xmm0
|
||||||
; SSE41-NEXT: movd %xmm0, %eax
|
; SSE41-NEXT: movd %xmm0, %eax
|
||||||
; SSE41-NEXT: xorl $32768, %eax # imm = 0x8000
|
; SSE41-NEXT: xorl $32768, %eax # imm = 0x8000
|
||||||
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
||||||
@ -1490,8 +1490,8 @@ define i16 @test_v32i16(<32 x i16> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2
|
; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2
|
||||||
|
; AVX1-NEXT: vpminsw %xmm2, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vmovd %xmm0, %eax
|
; AVX1-NEXT: vmovd %xmm0, %eax
|
||||||
@ -1534,14 +1534,14 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; SSE2-LABEL: test_v64i16:
|
; SSE2-LABEL: test_v64i16:
|
||||||
; SSE2: # %bb.0:
|
; SSE2: # %bb.0:
|
||||||
; SSE2-NEXT: pminsw %xmm6, %xmm2
|
; SSE2-NEXT: pminsw %xmm6, %xmm2
|
||||||
; SSE2-NEXT: pminsw %xmm4, %xmm0
|
|
||||||
; SSE2-NEXT: pminsw %xmm2, %xmm0
|
|
||||||
; SSE2-NEXT: pminsw %xmm7, %xmm3
|
; SSE2-NEXT: pminsw %xmm7, %xmm3
|
||||||
; SSE2-NEXT: pminsw %xmm5, %xmm1
|
; SSE2-NEXT: pminsw %xmm5, %xmm3
|
||||||
; SSE2-NEXT: pminsw %xmm3, %xmm1
|
; SSE2-NEXT: pminsw %xmm1, %xmm3
|
||||||
; SSE2-NEXT: pminsw %xmm0, %xmm1
|
; SSE2-NEXT: pminsw %xmm4, %xmm2
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
; SSE2-NEXT: pminsw %xmm3, %xmm2
|
||||||
; SSE2-NEXT: pminsw %xmm1, %xmm0
|
; SSE2-NEXT: pminsw %xmm0, %xmm2
|
||||||
|
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[2,3,0,1]
|
||||||
|
; SSE2-NEXT: pminsw %xmm2, %xmm0
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; SSE2-NEXT: pminsw %xmm0, %xmm1
|
; SSE2-NEXT: pminsw %xmm0, %xmm1
|
||||||
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
||||||
@ -1554,14 +1554,14 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; SSE41-LABEL: test_v64i16:
|
; SSE41-LABEL: test_v64i16:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pminsw %xmm7, %xmm3
|
; SSE41-NEXT: pminsw %xmm7, %xmm3
|
||||||
; SSE41-NEXT: pminsw %xmm5, %xmm1
|
; SSE41-NEXT: pminsw %xmm5, %xmm3
|
||||||
; SSE41-NEXT: pminsw %xmm3, %xmm1
|
; SSE41-NEXT: pminsw %xmm1, %xmm3
|
||||||
; SSE41-NEXT: pminsw %xmm6, %xmm2
|
; SSE41-NEXT: pminsw %xmm6, %xmm2
|
||||||
; SSE41-NEXT: pminsw %xmm4, %xmm0
|
; SSE41-NEXT: pminsw %xmm4, %xmm2
|
||||||
; SSE41-NEXT: pminsw %xmm2, %xmm0
|
; SSE41-NEXT: pminsw %xmm3, %xmm2
|
||||||
; SSE41-NEXT: pminsw %xmm1, %xmm0
|
; SSE41-NEXT: pminsw %xmm0, %xmm2
|
||||||
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm0
|
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm2
|
||||||
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
; SSE41-NEXT: phminposuw %xmm2, %xmm0
|
||||||
; SSE41-NEXT: movd %xmm0, %eax
|
; SSE41-NEXT: movd %xmm0, %eax
|
||||||
; SSE41-NEXT: xorl $32768, %eax # imm = 0x8000
|
; SSE41-NEXT: xorl $32768, %eax # imm = 0x8000
|
||||||
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
||||||
@ -1573,13 +1573,13 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
||||||
; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
|
; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpminsw %xmm5, %xmm6, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
|
||||||
; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1
|
; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0
|
; AVX1-NEXT: vpminsw %xmm1, %xmm2, %xmm1
|
||||||
|
; AVX1-NEXT: vpminsw %xmm4, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpminsw %xmm4, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vmovd %xmm0, %eax
|
; AVX1-NEXT: vmovd %xmm0, %eax
|
||||||
@ -1591,7 +1591,7 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; AVX2-LABEL: test_v64i16:
|
; AVX2-LABEL: test_v64i16:
|
||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpminsw %ymm1, %ymm2, %ymm1
|
||||||
; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0
|
; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
||||||
; AVX2-NEXT: vpminsw %xmm1, %xmm0, %xmm0
|
; AVX2-NEXT: vpminsw %xmm1, %xmm0, %xmm0
|
||||||
@ -2138,13 +2138,13 @@ define i8 @test_v64i8(<64 x i8> %a0) {
|
|||||||
; SSE41-LABEL: test_v64i8:
|
; SSE41-LABEL: test_v64i8:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pminsb %xmm3, %xmm1
|
; SSE41-NEXT: pminsb %xmm3, %xmm1
|
||||||
; SSE41-NEXT: pminsb %xmm2, %xmm0
|
; SSE41-NEXT: pminsb %xmm2, %xmm1
|
||||||
; SSE41-NEXT: pminsb %xmm1, %xmm0
|
; SSE41-NEXT: pminsb %xmm0, %xmm1
|
||||||
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm0
|
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm1
|
||||||
; SSE41-NEXT: movdqa %xmm0, %xmm1
|
; SSE41-NEXT: movdqa %xmm1, %xmm0
|
||||||
; SSE41-NEXT: psrlw $8, %xmm1
|
; SSE41-NEXT: psrlw $8, %xmm0
|
||||||
; SSE41-NEXT: pminub %xmm0, %xmm1
|
; SSE41-NEXT: pminub %xmm1, %xmm0
|
||||||
; SSE41-NEXT: phminposuw %xmm1, %xmm0
|
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
||||||
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
||||||
; SSE41-NEXT: xorb $-128, %al
|
; SSE41-NEXT: xorb $-128, %al
|
||||||
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
||||||
@ -2155,8 +2155,8 @@ define i8 @test_v64i8(<64 x i8> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2
|
; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2
|
||||||
|
; AVX1-NEXT: vpminsb %xmm2, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
||||||
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
@ -2272,17 +2272,17 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; SSE41-LABEL: test_v128i8:
|
; SSE41-LABEL: test_v128i8:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pminsb %xmm7, %xmm3
|
; SSE41-NEXT: pminsb %xmm7, %xmm3
|
||||||
; SSE41-NEXT: pminsb %xmm5, %xmm1
|
; SSE41-NEXT: pminsb %xmm5, %xmm3
|
||||||
; SSE41-NEXT: pminsb %xmm3, %xmm1
|
; SSE41-NEXT: pminsb %xmm1, %xmm3
|
||||||
; SSE41-NEXT: pminsb %xmm6, %xmm2
|
; SSE41-NEXT: pminsb %xmm6, %xmm2
|
||||||
; SSE41-NEXT: pminsb %xmm4, %xmm0
|
; SSE41-NEXT: pminsb %xmm4, %xmm2
|
||||||
; SSE41-NEXT: pminsb %xmm2, %xmm0
|
; SSE41-NEXT: pminsb %xmm3, %xmm2
|
||||||
; SSE41-NEXT: pminsb %xmm1, %xmm0
|
; SSE41-NEXT: pminsb %xmm0, %xmm2
|
||||||
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm0
|
; SSE41-NEXT: pxor {{.*}}(%rip), %xmm2
|
||||||
; SSE41-NEXT: movdqa %xmm0, %xmm1
|
; SSE41-NEXT: movdqa %xmm2, %xmm0
|
||||||
; SSE41-NEXT: psrlw $8, %xmm1
|
; SSE41-NEXT: psrlw $8, %xmm0
|
||||||
; SSE41-NEXT: pminub %xmm0, %xmm1
|
; SSE41-NEXT: pminub %xmm2, %xmm0
|
||||||
; SSE41-NEXT: phminposuw %xmm1, %xmm0
|
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
||||||
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
||||||
; SSE41-NEXT: xorb $-128, %al
|
; SSE41-NEXT: xorb $-128, %al
|
||||||
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
||||||
@ -2294,13 +2294,13 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
||||||
; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
|
; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpminsb %xmm5, %xmm6, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
|
||||||
; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1
|
; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0
|
; AVX1-NEXT: vpminsb %xmm1, %xmm2, %xmm1
|
||||||
|
; AVX1-NEXT: vpminsb %xmm4, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpminsb %xmm4, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
||||||
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
@ -2314,7 +2314,7 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; AVX2-LABEL: test_v128i8:
|
; AVX2-LABEL: test_v128i8:
|
||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpminsb %ymm1, %ymm2, %ymm1
|
||||||
; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0
|
; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
||||||
; AVX2-NEXT: vpminsb %xmm1, %xmm0, %xmm0
|
; AVX2-NEXT: vpminsb %xmm1, %xmm0, %xmm0
|
||||||
|
@ -974,13 +974,13 @@ define i32 @test_v16i32(<16 x i32> %a0) {
|
|||||||
; SSE41-LABEL: test_v16i32:
|
; SSE41-LABEL: test_v16i32:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pmaxud %xmm3, %xmm1
|
; SSE41-NEXT: pmaxud %xmm3, %xmm1
|
||||||
; SSE41-NEXT: pmaxud %xmm2, %xmm0
|
; SSE41-NEXT: pmaxud %xmm2, %xmm1
|
||||||
; SSE41-NEXT: pmaxud %xmm1, %xmm0
|
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; SSE41-NEXT: pmaxud %xmm0, %xmm1
|
; SSE41-NEXT: pmaxud %xmm0, %xmm1
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; SSE41-NEXT: pmaxud %xmm1, %xmm0
|
; SSE41-NEXT: pmaxud %xmm1, %xmm0
|
||||||
; SSE41-NEXT: movd %xmm0, %eax
|
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
|
; SSE41-NEXT: pmaxud %xmm0, %xmm1
|
||||||
|
; SSE41-NEXT: movd %xmm1, %eax
|
||||||
; SSE41-NEXT: retq
|
; SSE41-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX1-LABEL: test_v16i32:
|
; AVX1-LABEL: test_v16i32:
|
||||||
@ -988,8 +988,8 @@ define i32 @test_v16i32(<16 x i32> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2
|
; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2
|
||||||
|
; AVX1-NEXT: vpmaxud %xmm2, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
||||||
; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
@ -1111,14 +1111,14 @@ define i32 @test_v32i32(<32 x i32> %a0) {
|
|||||||
; SSE41-LABEL: test_v32i32:
|
; SSE41-LABEL: test_v32i32:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pmaxud %xmm6, %xmm2
|
; SSE41-NEXT: pmaxud %xmm6, %xmm2
|
||||||
; SSE41-NEXT: pmaxud %xmm4, %xmm0
|
|
||||||
; SSE41-NEXT: pmaxud %xmm2, %xmm0
|
|
||||||
; SSE41-NEXT: pmaxud %xmm7, %xmm3
|
; SSE41-NEXT: pmaxud %xmm7, %xmm3
|
||||||
; SSE41-NEXT: pmaxud %xmm5, %xmm1
|
; SSE41-NEXT: pmaxud %xmm5, %xmm3
|
||||||
; SSE41-NEXT: pmaxud %xmm3, %xmm1
|
; SSE41-NEXT: pmaxud %xmm1, %xmm3
|
||||||
; SSE41-NEXT: pmaxud %xmm0, %xmm1
|
; SSE41-NEXT: pmaxud %xmm4, %xmm2
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
; SSE41-NEXT: pmaxud %xmm3, %xmm2
|
||||||
; SSE41-NEXT: pmaxud %xmm1, %xmm0
|
; SSE41-NEXT: pmaxud %xmm0, %xmm2
|
||||||
|
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[2,3,0,1]
|
||||||
|
; SSE41-NEXT: pmaxud %xmm2, %xmm0
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; SSE41-NEXT: pmaxud %xmm0, %xmm1
|
; SSE41-NEXT: pmaxud %xmm0, %xmm1
|
||||||
; SSE41-NEXT: movd %xmm1, %eax
|
; SSE41-NEXT: movd %xmm1, %eax
|
||||||
@ -1127,16 +1127,16 @@ define i32 @test_v32i32(<32 x i32> %a0) {
|
|||||||
; AVX1-LABEL: test_v32i32:
|
; AVX1-LABEL: test_v32i32:
|
||||||
; AVX1: # %bb.0:
|
; AVX1: # %bb.0:
|
||||||
; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm4
|
; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm4
|
||||||
; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm5
|
|
||||||
; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4
|
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
|
||||||
; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1
|
; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm3
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
|
; AVX1-NEXT: vpmaxud %xmm1, %xmm3, %xmm1
|
||||||
; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
|
; AVX1-NEXT: vpmaxud %xmm1, %xmm3, %xmm1
|
||||||
|
; AVX1-NEXT: vpmaxud %xmm4, %xmm2, %xmm2
|
||||||
|
; AVX1-NEXT: vpmaxud %xmm1, %xmm2, %xmm1
|
||||||
; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpmaxud %xmm0, %xmm4, %xmm0
|
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
||||||
; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
@ -1148,7 +1148,7 @@ define i32 @test_v32i32(<32 x i32> %a0) {
|
|||||||
; AVX2-LABEL: test_v32i32:
|
; AVX2-LABEL: test_v32i32:
|
||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpmaxud %ymm1, %ymm2, %ymm1
|
||||||
; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
|
; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
||||||
; AVX2-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
; AVX2-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
||||||
@ -1441,9 +1441,9 @@ define i16 @test_v32i16(<32 x i16> %a0) {
|
|||||||
; SSE2-NEXT: pxor %xmm4, %xmm1
|
; SSE2-NEXT: pxor %xmm4, %xmm1
|
||||||
; SSE2-NEXT: pmaxsw %xmm3, %xmm1
|
; SSE2-NEXT: pmaxsw %xmm3, %xmm1
|
||||||
; SSE2-NEXT: pxor %xmm4, %xmm2
|
; SSE2-NEXT: pxor %xmm4, %xmm2
|
||||||
|
; SSE2-NEXT: pmaxsw %xmm1, %xmm2
|
||||||
; SSE2-NEXT: pxor %xmm4, %xmm0
|
; SSE2-NEXT: pxor %xmm4, %xmm0
|
||||||
; SSE2-NEXT: pmaxsw %xmm2, %xmm0
|
; SSE2-NEXT: pmaxsw %xmm2, %xmm0
|
||||||
; SSE2-NEXT: pmaxsw %xmm1, %xmm0
|
|
||||||
; SSE2-NEXT: movdqa %xmm0, %xmm1
|
; SSE2-NEXT: movdqa %xmm0, %xmm1
|
||||||
; SSE2-NEXT: pxor %xmm4, %xmm1
|
; SSE2-NEXT: pxor %xmm4, %xmm1
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
|
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
|
||||||
@ -1467,11 +1467,11 @@ define i16 @test_v32i16(<32 x i16> %a0) {
|
|||||||
; SSE41-LABEL: test_v32i16:
|
; SSE41-LABEL: test_v32i16:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pmaxuw %xmm3, %xmm1
|
; SSE41-NEXT: pmaxuw %xmm3, %xmm1
|
||||||
; SSE41-NEXT: pmaxuw %xmm2, %xmm0
|
; SSE41-NEXT: pmaxuw %xmm2, %xmm1
|
||||||
; SSE41-NEXT: pmaxuw %xmm1, %xmm0
|
; SSE41-NEXT: pmaxuw %xmm0, %xmm1
|
||||||
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
|
; SSE41-NEXT: pcmpeqd %xmm0, %xmm0
|
||||||
; SSE41-NEXT: pxor %xmm0, %xmm1
|
; SSE41-NEXT: pxor %xmm1, %xmm0
|
||||||
; SSE41-NEXT: phminposuw %xmm1, %xmm0
|
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
||||||
; SSE41-NEXT: movd %xmm0, %eax
|
; SSE41-NEXT: movd %xmm0, %eax
|
||||||
; SSE41-NEXT: notl %eax
|
; SSE41-NEXT: notl %eax
|
||||||
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
||||||
@ -1482,8 +1482,8 @@ define i16 @test_v32i16(<32 x i16> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2
|
; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2
|
||||||
|
; AVX1-NEXT: vpmaxuw %xmm2, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
|
; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
@ -1546,16 +1546,16 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; SSE2-NEXT: pxor %xmm8, %xmm2
|
; SSE2-NEXT: pxor %xmm8, %xmm2
|
||||||
; SSE2-NEXT: pmaxsw %xmm6, %xmm2
|
; SSE2-NEXT: pmaxsw %xmm6, %xmm2
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm4
|
; SSE2-NEXT: pxor %xmm8, %xmm4
|
||||||
|
; SSE2-NEXT: pmaxsw %xmm2, %xmm4
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm0
|
; SSE2-NEXT: pxor %xmm8, %xmm0
|
||||||
; SSE2-NEXT: pmaxsw %xmm4, %xmm0
|
|
||||||
; SSE2-NEXT: pmaxsw %xmm2, %xmm0
|
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm7
|
; SSE2-NEXT: pxor %xmm8, %xmm7
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm3
|
; SSE2-NEXT: pxor %xmm8, %xmm3
|
||||||
; SSE2-NEXT: pmaxsw %xmm7, %xmm3
|
; SSE2-NEXT: pmaxsw %xmm7, %xmm3
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm5
|
; SSE2-NEXT: pxor %xmm8, %xmm5
|
||||||
|
; SSE2-NEXT: pmaxsw %xmm3, %xmm5
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm1
|
; SSE2-NEXT: pxor %xmm8, %xmm1
|
||||||
; SSE2-NEXT: pmaxsw %xmm5, %xmm1
|
; SSE2-NEXT: pmaxsw %xmm5, %xmm1
|
||||||
; SSE2-NEXT: pmaxsw %xmm3, %xmm1
|
; SSE2-NEXT: pmaxsw %xmm4, %xmm1
|
||||||
; SSE2-NEXT: pmaxsw %xmm0, %xmm1
|
; SSE2-NEXT: pmaxsw %xmm0, %xmm1
|
||||||
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm0
|
; SSE2-NEXT: pxor %xmm8, %xmm0
|
||||||
@ -1580,15 +1580,15 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; SSE41-LABEL: test_v64i16:
|
; SSE41-LABEL: test_v64i16:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pmaxuw %xmm7, %xmm3
|
; SSE41-NEXT: pmaxuw %xmm7, %xmm3
|
||||||
; SSE41-NEXT: pmaxuw %xmm5, %xmm1
|
; SSE41-NEXT: pmaxuw %xmm5, %xmm3
|
||||||
; SSE41-NEXT: pmaxuw %xmm3, %xmm1
|
; SSE41-NEXT: pmaxuw %xmm1, %xmm3
|
||||||
; SSE41-NEXT: pmaxuw %xmm6, %xmm2
|
; SSE41-NEXT: pmaxuw %xmm6, %xmm2
|
||||||
; SSE41-NEXT: pmaxuw %xmm4, %xmm0
|
; SSE41-NEXT: pmaxuw %xmm4, %xmm2
|
||||||
; SSE41-NEXT: pmaxuw %xmm2, %xmm0
|
; SSE41-NEXT: pmaxuw %xmm3, %xmm2
|
||||||
; SSE41-NEXT: pmaxuw %xmm1, %xmm0
|
; SSE41-NEXT: pmaxuw %xmm0, %xmm2
|
||||||
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
|
; SSE41-NEXT: pcmpeqd %xmm0, %xmm0
|
||||||
; SSE41-NEXT: pxor %xmm0, %xmm1
|
; SSE41-NEXT: pxor %xmm2, %xmm0
|
||||||
; SSE41-NEXT: phminposuw %xmm1, %xmm0
|
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
||||||
; SSE41-NEXT: movd %xmm0, %eax
|
; SSE41-NEXT: movd %xmm0, %eax
|
||||||
; SSE41-NEXT: notl %eax
|
; SSE41-NEXT: notl %eax
|
||||||
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
||||||
@ -1600,13 +1600,13 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
||||||
; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
|
; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpmaxuw %xmm5, %xmm6, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
|
||||||
; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1
|
; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxuw %xmm1, %xmm2, %xmm1
|
||||||
|
; AVX1-NEXT: vpmaxuw %xmm4, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpmaxuw %xmm4, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
|
; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
@ -1619,7 +1619,7 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; AVX2-LABEL: test_v64i16:
|
; AVX2-LABEL: test_v64i16:
|
||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpmaxuw %ymm1, %ymm2, %ymm1
|
||||||
; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
|
; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
||||||
; AVX2-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
|
; AVX2-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
|
||||||
@ -1977,33 +1977,33 @@ define i8 @test_v64i8(<64 x i8> %a0) {
|
|||||||
; SSE2-LABEL: test_v64i8:
|
; SSE2-LABEL: test_v64i8:
|
||||||
; SSE2: # %bb.0:
|
; SSE2: # %bb.0:
|
||||||
; SSE2-NEXT: pmaxub %xmm3, %xmm1
|
; SSE2-NEXT: pmaxub %xmm3, %xmm1
|
||||||
; SSE2-NEXT: pmaxub %xmm2, %xmm0
|
; SSE2-NEXT: pmaxub %xmm2, %xmm1
|
||||||
; SSE2-NEXT: pmaxub %xmm1, %xmm0
|
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; SSE2-NEXT: pmaxub %xmm0, %xmm1
|
; SSE2-NEXT: pmaxub %xmm0, %xmm1
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; SSE2-NEXT: pmaxub %xmm1, %xmm0
|
; SSE2-NEXT: pmaxub %xmm1, %xmm0
|
||||||
; SSE2-NEXT: movdqa %xmm0, %xmm1
|
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; SSE2-NEXT: psrld $16, %xmm1
|
|
||||||
; SSE2-NEXT: pmaxub %xmm0, %xmm1
|
; SSE2-NEXT: pmaxub %xmm0, %xmm1
|
||||||
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
||||||
; SSE2-NEXT: psrlw $8, %xmm0
|
; SSE2-NEXT: psrld $16, %xmm0
|
||||||
; SSE2-NEXT: pmaxub %xmm1, %xmm0
|
; SSE2-NEXT: pmaxub %xmm1, %xmm0
|
||||||
; SSE2-NEXT: movd %xmm0, %eax
|
; SSE2-NEXT: movdqa %xmm0, %xmm1
|
||||||
|
; SSE2-NEXT: psrlw $8, %xmm1
|
||||||
|
; SSE2-NEXT: pmaxub %xmm0, %xmm1
|
||||||
|
; SSE2-NEXT: movd %xmm1, %eax
|
||||||
; SSE2-NEXT: # kill: def $al killed $al killed $eax
|
; SSE2-NEXT: # kill: def $al killed $al killed $eax
|
||||||
; SSE2-NEXT: retq
|
; SSE2-NEXT: retq
|
||||||
;
|
;
|
||||||
; SSE41-LABEL: test_v64i8:
|
; SSE41-LABEL: test_v64i8:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pmaxub %xmm3, %xmm1
|
; SSE41-NEXT: pmaxub %xmm3, %xmm1
|
||||||
; SSE41-NEXT: pmaxub %xmm2, %xmm0
|
; SSE41-NEXT: pmaxub %xmm2, %xmm1
|
||||||
; SSE41-NEXT: pmaxub %xmm1, %xmm0
|
; SSE41-NEXT: pmaxub %xmm0, %xmm1
|
||||||
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
|
; SSE41-NEXT: pcmpeqd %xmm0, %xmm0
|
||||||
; SSE41-NEXT: pxor %xmm0, %xmm1
|
; SSE41-NEXT: pxor %xmm1, %xmm0
|
||||||
; SSE41-NEXT: movdqa %xmm1, %xmm0
|
; SSE41-NEXT: movdqa %xmm0, %xmm1
|
||||||
; SSE41-NEXT: psrlw $8, %xmm0
|
; SSE41-NEXT: psrlw $8, %xmm1
|
||||||
; SSE41-NEXT: pminub %xmm1, %xmm0
|
; SSE41-NEXT: pminub %xmm0, %xmm1
|
||||||
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
; SSE41-NEXT: phminposuw %xmm1, %xmm0
|
||||||
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
||||||
; SSE41-NEXT: notb %al
|
; SSE41-NEXT: notb %al
|
||||||
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
||||||
@ -2014,8 +2014,8 @@ define i8 @test_v64i8(<64 x i8> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2
|
; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2
|
||||||
|
; AVX1-NEXT: vpmaxub %xmm2, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
|
; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
||||||
@ -2082,14 +2082,14 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; SSE2-LABEL: test_v128i8:
|
; SSE2-LABEL: test_v128i8:
|
||||||
; SSE2: # %bb.0:
|
; SSE2: # %bb.0:
|
||||||
; SSE2-NEXT: pmaxub %xmm6, %xmm2
|
; SSE2-NEXT: pmaxub %xmm6, %xmm2
|
||||||
; SSE2-NEXT: pmaxub %xmm4, %xmm0
|
|
||||||
; SSE2-NEXT: pmaxub %xmm2, %xmm0
|
|
||||||
; SSE2-NEXT: pmaxub %xmm7, %xmm3
|
; SSE2-NEXT: pmaxub %xmm7, %xmm3
|
||||||
; SSE2-NEXT: pmaxub %xmm5, %xmm1
|
; SSE2-NEXT: pmaxub %xmm5, %xmm3
|
||||||
; SSE2-NEXT: pmaxub %xmm3, %xmm1
|
; SSE2-NEXT: pmaxub %xmm1, %xmm3
|
||||||
; SSE2-NEXT: pmaxub %xmm0, %xmm1
|
; SSE2-NEXT: pmaxub %xmm4, %xmm2
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
; SSE2-NEXT: pmaxub %xmm3, %xmm2
|
||||||
; SSE2-NEXT: pmaxub %xmm1, %xmm0
|
; SSE2-NEXT: pmaxub %xmm0, %xmm2
|
||||||
|
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[2,3,0,1]
|
||||||
|
; SSE2-NEXT: pmaxub %xmm2, %xmm0
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; SSE2-NEXT: pmaxub %xmm0, %xmm1
|
; SSE2-NEXT: pmaxub %xmm0, %xmm1
|
||||||
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
||||||
@ -2105,18 +2105,18 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; SSE41-LABEL: test_v128i8:
|
; SSE41-LABEL: test_v128i8:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pmaxub %xmm7, %xmm3
|
; SSE41-NEXT: pmaxub %xmm7, %xmm3
|
||||||
; SSE41-NEXT: pmaxub %xmm5, %xmm1
|
; SSE41-NEXT: pmaxub %xmm5, %xmm3
|
||||||
; SSE41-NEXT: pmaxub %xmm3, %xmm1
|
; SSE41-NEXT: pmaxub %xmm1, %xmm3
|
||||||
; SSE41-NEXT: pmaxub %xmm6, %xmm2
|
; SSE41-NEXT: pmaxub %xmm6, %xmm2
|
||||||
; SSE41-NEXT: pmaxub %xmm4, %xmm0
|
; SSE41-NEXT: pmaxub %xmm4, %xmm2
|
||||||
; SSE41-NEXT: pmaxub %xmm2, %xmm0
|
; SSE41-NEXT: pmaxub %xmm3, %xmm2
|
||||||
; SSE41-NEXT: pmaxub %xmm1, %xmm0
|
; SSE41-NEXT: pmaxub %xmm0, %xmm2
|
||||||
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
|
; SSE41-NEXT: pcmpeqd %xmm0, %xmm0
|
||||||
; SSE41-NEXT: pxor %xmm0, %xmm1
|
; SSE41-NEXT: pxor %xmm2, %xmm0
|
||||||
; SSE41-NEXT: movdqa %xmm1, %xmm0
|
; SSE41-NEXT: movdqa %xmm0, %xmm1
|
||||||
; SSE41-NEXT: psrlw $8, %xmm0
|
; SSE41-NEXT: psrlw $8, %xmm1
|
||||||
; SSE41-NEXT: pminub %xmm1, %xmm0
|
; SSE41-NEXT: pminub %xmm0, %xmm1
|
||||||
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
; SSE41-NEXT: phminposuw %xmm1, %xmm0
|
||||||
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
||||||
; SSE41-NEXT: notb %al
|
; SSE41-NEXT: notb %al
|
||||||
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
||||||
@ -2128,13 +2128,13 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
||||||
; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
|
; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpmaxub %xmm5, %xmm6, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
|
||||||
; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1
|
; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxub %xmm1, %xmm2, %xmm1
|
||||||
|
; AVX1-NEXT: vpmaxub %xmm4, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpmaxub %xmm4, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
|
; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
||||||
@ -2149,7 +2149,7 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; AVX2-LABEL: test_v128i8:
|
; AVX2-LABEL: test_v128i8:
|
||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpmaxub %ymm1, %ymm2, %ymm1
|
||||||
; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
|
; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
||||||
; AVX2-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
|
; AVX2-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
|
||||||
|
@ -1023,13 +1023,13 @@ define i32 @test_v16i32(<16 x i32> %a0) {
|
|||||||
; SSE41-LABEL: test_v16i32:
|
; SSE41-LABEL: test_v16i32:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pmaxud %xmm3, %xmm1
|
; SSE41-NEXT: pmaxud %xmm3, %xmm1
|
||||||
; SSE41-NEXT: pmaxud %xmm2, %xmm0
|
; SSE41-NEXT: pmaxud %xmm2, %xmm1
|
||||||
; SSE41-NEXT: pmaxud %xmm1, %xmm0
|
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; SSE41-NEXT: pmaxud %xmm0, %xmm1
|
; SSE41-NEXT: pmaxud %xmm0, %xmm1
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; SSE41-NEXT: pmaxud %xmm1, %xmm0
|
; SSE41-NEXT: pmaxud %xmm1, %xmm0
|
||||||
; SSE41-NEXT: movd %xmm0, %eax
|
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
|
; SSE41-NEXT: pmaxud %xmm0, %xmm1
|
||||||
|
; SSE41-NEXT: movd %xmm1, %eax
|
||||||
; SSE41-NEXT: retq
|
; SSE41-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX1-LABEL: test_v16i32:
|
; AVX1-LABEL: test_v16i32:
|
||||||
@ -1037,8 +1037,8 @@ define i32 @test_v16i32(<16 x i32> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2
|
; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2
|
||||||
|
; AVX1-NEXT: vpmaxud %xmm2, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
||||||
; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
@ -1160,14 +1160,14 @@ define i32 @test_v32i32(<32 x i32> %a0) {
|
|||||||
; SSE41-LABEL: test_v32i32:
|
; SSE41-LABEL: test_v32i32:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pmaxud %xmm6, %xmm2
|
; SSE41-NEXT: pmaxud %xmm6, %xmm2
|
||||||
; SSE41-NEXT: pmaxud %xmm4, %xmm0
|
|
||||||
; SSE41-NEXT: pmaxud %xmm2, %xmm0
|
|
||||||
; SSE41-NEXT: pmaxud %xmm7, %xmm3
|
; SSE41-NEXT: pmaxud %xmm7, %xmm3
|
||||||
; SSE41-NEXT: pmaxud %xmm5, %xmm1
|
; SSE41-NEXT: pmaxud %xmm5, %xmm3
|
||||||
; SSE41-NEXT: pmaxud %xmm3, %xmm1
|
; SSE41-NEXT: pmaxud %xmm1, %xmm3
|
||||||
; SSE41-NEXT: pmaxud %xmm0, %xmm1
|
; SSE41-NEXT: pmaxud %xmm4, %xmm2
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
; SSE41-NEXT: pmaxud %xmm3, %xmm2
|
||||||
; SSE41-NEXT: pmaxud %xmm1, %xmm0
|
; SSE41-NEXT: pmaxud %xmm0, %xmm2
|
||||||
|
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[2,3,0,1]
|
||||||
|
; SSE41-NEXT: pmaxud %xmm2, %xmm0
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; SSE41-NEXT: pmaxud %xmm0, %xmm1
|
; SSE41-NEXT: pmaxud %xmm0, %xmm1
|
||||||
; SSE41-NEXT: movd %xmm1, %eax
|
; SSE41-NEXT: movd %xmm1, %eax
|
||||||
@ -1176,16 +1176,16 @@ define i32 @test_v32i32(<32 x i32> %a0) {
|
|||||||
; AVX1-LABEL: test_v32i32:
|
; AVX1-LABEL: test_v32i32:
|
||||||
; AVX1: # %bb.0:
|
; AVX1: # %bb.0:
|
||||||
; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm4
|
; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm4
|
||||||
; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm5
|
|
||||||
; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4
|
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
|
||||||
; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1
|
; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm3
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
|
; AVX1-NEXT: vpmaxud %xmm1, %xmm3, %xmm1
|
||||||
; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
|
; AVX1-NEXT: vpmaxud %xmm1, %xmm3, %xmm1
|
||||||
|
; AVX1-NEXT: vpmaxud %xmm4, %xmm2, %xmm2
|
||||||
|
; AVX1-NEXT: vpmaxud %xmm1, %xmm2, %xmm1
|
||||||
; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpmaxud %xmm0, %xmm4, %xmm0
|
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
||||||
; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
@ -1197,7 +1197,7 @@ define i32 @test_v32i32(<32 x i32> %a0) {
|
|||||||
; AVX2-LABEL: test_v32i32:
|
; AVX2-LABEL: test_v32i32:
|
||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpmaxud %ymm1, %ymm2, %ymm1
|
||||||
; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
|
; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
||||||
; AVX2-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
; AVX2-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
|
||||||
@ -1556,9 +1556,9 @@ define i16 @test_v32i16(<32 x i16> %a0) {
|
|||||||
; SSE2-NEXT: pxor %xmm4, %xmm1
|
; SSE2-NEXT: pxor %xmm4, %xmm1
|
||||||
; SSE2-NEXT: pmaxsw %xmm3, %xmm1
|
; SSE2-NEXT: pmaxsw %xmm3, %xmm1
|
||||||
; SSE2-NEXT: pxor %xmm4, %xmm2
|
; SSE2-NEXT: pxor %xmm4, %xmm2
|
||||||
|
; SSE2-NEXT: pmaxsw %xmm1, %xmm2
|
||||||
; SSE2-NEXT: pxor %xmm4, %xmm0
|
; SSE2-NEXT: pxor %xmm4, %xmm0
|
||||||
; SSE2-NEXT: pmaxsw %xmm2, %xmm0
|
; SSE2-NEXT: pmaxsw %xmm2, %xmm0
|
||||||
; SSE2-NEXT: pmaxsw %xmm1, %xmm0
|
|
||||||
; SSE2-NEXT: movdqa %xmm0, %xmm1
|
; SSE2-NEXT: movdqa %xmm0, %xmm1
|
||||||
; SSE2-NEXT: pxor %xmm4, %xmm1
|
; SSE2-NEXT: pxor %xmm4, %xmm1
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
|
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
|
||||||
@ -1582,11 +1582,11 @@ define i16 @test_v32i16(<32 x i16> %a0) {
|
|||||||
; SSE41-LABEL: test_v32i16:
|
; SSE41-LABEL: test_v32i16:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pmaxuw %xmm3, %xmm1
|
; SSE41-NEXT: pmaxuw %xmm3, %xmm1
|
||||||
; SSE41-NEXT: pmaxuw %xmm2, %xmm0
|
; SSE41-NEXT: pmaxuw %xmm2, %xmm1
|
||||||
; SSE41-NEXT: pmaxuw %xmm1, %xmm0
|
; SSE41-NEXT: pmaxuw %xmm0, %xmm1
|
||||||
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
|
; SSE41-NEXT: pcmpeqd %xmm0, %xmm0
|
||||||
; SSE41-NEXT: pxor %xmm0, %xmm1
|
; SSE41-NEXT: pxor %xmm1, %xmm0
|
||||||
; SSE41-NEXT: phminposuw %xmm1, %xmm0
|
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
||||||
; SSE41-NEXT: movd %xmm0, %eax
|
; SSE41-NEXT: movd %xmm0, %eax
|
||||||
; SSE41-NEXT: notl %eax
|
; SSE41-NEXT: notl %eax
|
||||||
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
||||||
@ -1597,8 +1597,8 @@ define i16 @test_v32i16(<32 x i16> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2
|
; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2
|
||||||
|
; AVX1-NEXT: vpmaxuw %xmm2, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
|
; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
@ -1661,16 +1661,16 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; SSE2-NEXT: pxor %xmm8, %xmm2
|
; SSE2-NEXT: pxor %xmm8, %xmm2
|
||||||
; SSE2-NEXT: pmaxsw %xmm6, %xmm2
|
; SSE2-NEXT: pmaxsw %xmm6, %xmm2
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm4
|
; SSE2-NEXT: pxor %xmm8, %xmm4
|
||||||
|
; SSE2-NEXT: pmaxsw %xmm2, %xmm4
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm0
|
; SSE2-NEXT: pxor %xmm8, %xmm0
|
||||||
; SSE2-NEXT: pmaxsw %xmm4, %xmm0
|
|
||||||
; SSE2-NEXT: pmaxsw %xmm2, %xmm0
|
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm7
|
; SSE2-NEXT: pxor %xmm8, %xmm7
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm3
|
; SSE2-NEXT: pxor %xmm8, %xmm3
|
||||||
; SSE2-NEXT: pmaxsw %xmm7, %xmm3
|
; SSE2-NEXT: pmaxsw %xmm7, %xmm3
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm5
|
; SSE2-NEXT: pxor %xmm8, %xmm5
|
||||||
|
; SSE2-NEXT: pmaxsw %xmm3, %xmm5
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm1
|
; SSE2-NEXT: pxor %xmm8, %xmm1
|
||||||
; SSE2-NEXT: pmaxsw %xmm5, %xmm1
|
; SSE2-NEXT: pmaxsw %xmm5, %xmm1
|
||||||
; SSE2-NEXT: pmaxsw %xmm3, %xmm1
|
; SSE2-NEXT: pmaxsw %xmm4, %xmm1
|
||||||
; SSE2-NEXT: pmaxsw %xmm0, %xmm1
|
; SSE2-NEXT: pmaxsw %xmm0, %xmm1
|
||||||
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm0
|
; SSE2-NEXT: pxor %xmm8, %xmm0
|
||||||
@ -1695,15 +1695,15 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; SSE41-LABEL: test_v64i16:
|
; SSE41-LABEL: test_v64i16:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pmaxuw %xmm7, %xmm3
|
; SSE41-NEXT: pmaxuw %xmm7, %xmm3
|
||||||
; SSE41-NEXT: pmaxuw %xmm5, %xmm1
|
; SSE41-NEXT: pmaxuw %xmm5, %xmm3
|
||||||
; SSE41-NEXT: pmaxuw %xmm3, %xmm1
|
; SSE41-NEXT: pmaxuw %xmm1, %xmm3
|
||||||
; SSE41-NEXT: pmaxuw %xmm6, %xmm2
|
; SSE41-NEXT: pmaxuw %xmm6, %xmm2
|
||||||
; SSE41-NEXT: pmaxuw %xmm4, %xmm0
|
; SSE41-NEXT: pmaxuw %xmm4, %xmm2
|
||||||
; SSE41-NEXT: pmaxuw %xmm2, %xmm0
|
; SSE41-NEXT: pmaxuw %xmm3, %xmm2
|
||||||
; SSE41-NEXT: pmaxuw %xmm1, %xmm0
|
; SSE41-NEXT: pmaxuw %xmm0, %xmm2
|
||||||
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
|
; SSE41-NEXT: pcmpeqd %xmm0, %xmm0
|
||||||
; SSE41-NEXT: pxor %xmm0, %xmm1
|
; SSE41-NEXT: pxor %xmm2, %xmm0
|
||||||
; SSE41-NEXT: phminposuw %xmm1, %xmm0
|
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
||||||
; SSE41-NEXT: movd %xmm0, %eax
|
; SSE41-NEXT: movd %xmm0, %eax
|
||||||
; SSE41-NEXT: notl %eax
|
; SSE41-NEXT: notl %eax
|
||||||
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
||||||
@ -1715,13 +1715,13 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
||||||
; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
|
; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpmaxuw %xmm5, %xmm6, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
|
||||||
; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1
|
; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxuw %xmm1, %xmm2, %xmm1
|
||||||
|
; AVX1-NEXT: vpmaxuw %xmm4, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpmaxuw %xmm4, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
|
; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
@ -1734,7 +1734,7 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; AVX2-LABEL: test_v64i16:
|
; AVX2-LABEL: test_v64i16:
|
||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpmaxuw %ymm1, %ymm2, %ymm1
|
||||||
; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
|
; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
||||||
; AVX2-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
|
; AVX2-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
|
||||||
@ -2217,33 +2217,33 @@ define i8 @test_v64i8(<64 x i8> %a0) {
|
|||||||
; SSE2-LABEL: test_v64i8:
|
; SSE2-LABEL: test_v64i8:
|
||||||
; SSE2: # %bb.0:
|
; SSE2: # %bb.0:
|
||||||
; SSE2-NEXT: pmaxub %xmm3, %xmm1
|
; SSE2-NEXT: pmaxub %xmm3, %xmm1
|
||||||
; SSE2-NEXT: pmaxub %xmm2, %xmm0
|
; SSE2-NEXT: pmaxub %xmm2, %xmm1
|
||||||
; SSE2-NEXT: pmaxub %xmm1, %xmm0
|
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; SSE2-NEXT: pmaxub %xmm0, %xmm1
|
; SSE2-NEXT: pmaxub %xmm0, %xmm1
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; SSE2-NEXT: pmaxub %xmm1, %xmm0
|
; SSE2-NEXT: pmaxub %xmm1, %xmm0
|
||||||
; SSE2-NEXT: movdqa %xmm0, %xmm1
|
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; SSE2-NEXT: psrld $16, %xmm1
|
|
||||||
; SSE2-NEXT: pmaxub %xmm0, %xmm1
|
; SSE2-NEXT: pmaxub %xmm0, %xmm1
|
||||||
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
||||||
; SSE2-NEXT: psrlw $8, %xmm0
|
; SSE2-NEXT: psrld $16, %xmm0
|
||||||
; SSE2-NEXT: pmaxub %xmm1, %xmm0
|
; SSE2-NEXT: pmaxub %xmm1, %xmm0
|
||||||
; SSE2-NEXT: movd %xmm0, %eax
|
; SSE2-NEXT: movdqa %xmm0, %xmm1
|
||||||
|
; SSE2-NEXT: psrlw $8, %xmm1
|
||||||
|
; SSE2-NEXT: pmaxub %xmm0, %xmm1
|
||||||
|
; SSE2-NEXT: movd %xmm1, %eax
|
||||||
; SSE2-NEXT: # kill: def $al killed $al killed $eax
|
; SSE2-NEXT: # kill: def $al killed $al killed $eax
|
||||||
; SSE2-NEXT: retq
|
; SSE2-NEXT: retq
|
||||||
;
|
;
|
||||||
; SSE41-LABEL: test_v64i8:
|
; SSE41-LABEL: test_v64i8:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pmaxub %xmm3, %xmm1
|
; SSE41-NEXT: pmaxub %xmm3, %xmm1
|
||||||
; SSE41-NEXT: pmaxub %xmm2, %xmm0
|
; SSE41-NEXT: pmaxub %xmm2, %xmm1
|
||||||
; SSE41-NEXT: pmaxub %xmm1, %xmm0
|
; SSE41-NEXT: pmaxub %xmm0, %xmm1
|
||||||
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
|
; SSE41-NEXT: pcmpeqd %xmm0, %xmm0
|
||||||
; SSE41-NEXT: pxor %xmm0, %xmm1
|
; SSE41-NEXT: pxor %xmm1, %xmm0
|
||||||
; SSE41-NEXT: movdqa %xmm1, %xmm0
|
; SSE41-NEXT: movdqa %xmm0, %xmm1
|
||||||
; SSE41-NEXT: psrlw $8, %xmm0
|
; SSE41-NEXT: psrlw $8, %xmm1
|
||||||
; SSE41-NEXT: pminub %xmm1, %xmm0
|
; SSE41-NEXT: pminub %xmm0, %xmm1
|
||||||
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
; SSE41-NEXT: phminposuw %xmm1, %xmm0
|
||||||
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
||||||
; SSE41-NEXT: notb %al
|
; SSE41-NEXT: notb %al
|
||||||
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
||||||
@ -2254,8 +2254,8 @@ define i8 @test_v64i8(<64 x i8> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2
|
; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2
|
||||||
|
; AVX1-NEXT: vpmaxub %xmm2, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
|
; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
||||||
@ -2322,14 +2322,14 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; SSE2-LABEL: test_v128i8:
|
; SSE2-LABEL: test_v128i8:
|
||||||
; SSE2: # %bb.0:
|
; SSE2: # %bb.0:
|
||||||
; SSE2-NEXT: pmaxub %xmm6, %xmm2
|
; SSE2-NEXT: pmaxub %xmm6, %xmm2
|
||||||
; SSE2-NEXT: pmaxub %xmm4, %xmm0
|
|
||||||
; SSE2-NEXT: pmaxub %xmm2, %xmm0
|
|
||||||
; SSE2-NEXT: pmaxub %xmm7, %xmm3
|
; SSE2-NEXT: pmaxub %xmm7, %xmm3
|
||||||
; SSE2-NEXT: pmaxub %xmm5, %xmm1
|
; SSE2-NEXT: pmaxub %xmm5, %xmm3
|
||||||
; SSE2-NEXT: pmaxub %xmm3, %xmm1
|
; SSE2-NEXT: pmaxub %xmm1, %xmm3
|
||||||
; SSE2-NEXT: pmaxub %xmm0, %xmm1
|
; SSE2-NEXT: pmaxub %xmm4, %xmm2
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
; SSE2-NEXT: pmaxub %xmm3, %xmm2
|
||||||
; SSE2-NEXT: pmaxub %xmm1, %xmm0
|
; SSE2-NEXT: pmaxub %xmm0, %xmm2
|
||||||
|
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[2,3,0,1]
|
||||||
|
; SSE2-NEXT: pmaxub %xmm2, %xmm0
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; SSE2-NEXT: pmaxub %xmm0, %xmm1
|
; SSE2-NEXT: pmaxub %xmm0, %xmm1
|
||||||
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
||||||
@ -2345,18 +2345,18 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; SSE41-LABEL: test_v128i8:
|
; SSE41-LABEL: test_v128i8:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pmaxub %xmm7, %xmm3
|
; SSE41-NEXT: pmaxub %xmm7, %xmm3
|
||||||
; SSE41-NEXT: pmaxub %xmm5, %xmm1
|
; SSE41-NEXT: pmaxub %xmm5, %xmm3
|
||||||
; SSE41-NEXT: pmaxub %xmm3, %xmm1
|
; SSE41-NEXT: pmaxub %xmm1, %xmm3
|
||||||
; SSE41-NEXT: pmaxub %xmm6, %xmm2
|
; SSE41-NEXT: pmaxub %xmm6, %xmm2
|
||||||
; SSE41-NEXT: pmaxub %xmm4, %xmm0
|
; SSE41-NEXT: pmaxub %xmm4, %xmm2
|
||||||
; SSE41-NEXT: pmaxub %xmm2, %xmm0
|
; SSE41-NEXT: pmaxub %xmm3, %xmm2
|
||||||
; SSE41-NEXT: pmaxub %xmm1, %xmm0
|
; SSE41-NEXT: pmaxub %xmm0, %xmm2
|
||||||
; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
|
; SSE41-NEXT: pcmpeqd %xmm0, %xmm0
|
||||||
; SSE41-NEXT: pxor %xmm0, %xmm1
|
; SSE41-NEXT: pxor %xmm2, %xmm0
|
||||||
; SSE41-NEXT: movdqa %xmm1, %xmm0
|
; SSE41-NEXT: movdqa %xmm0, %xmm1
|
||||||
; SSE41-NEXT: psrlw $8, %xmm0
|
; SSE41-NEXT: psrlw $8, %xmm1
|
||||||
; SSE41-NEXT: pminub %xmm1, %xmm0
|
; SSE41-NEXT: pminub %xmm0, %xmm1
|
||||||
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
; SSE41-NEXT: phminposuw %xmm1, %xmm0
|
||||||
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
||||||
; SSE41-NEXT: notb %al
|
; SSE41-NEXT: notb %al
|
||||||
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
||||||
@ -2368,13 +2368,13 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
||||||
; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
|
; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpmaxub %xmm5, %xmm6, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
|
||||||
; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1
|
; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxub %xmm1, %xmm2, %xmm1
|
||||||
|
; AVX1-NEXT: vpmaxub %xmm4, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpmaxub %xmm4, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
|
; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
||||||
@ -2389,7 +2389,7 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; AVX2-LABEL: test_v128i8:
|
; AVX2-LABEL: test_v128i8:
|
||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpmaxub %ymm1, %ymm2, %ymm1
|
||||||
; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
|
; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
||||||
; AVX2-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
|
; AVX2-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
|
||||||
|
@ -973,13 +973,13 @@ define i32 @test_v16i32(<16 x i32> %a0) {
|
|||||||
; SSE41-LABEL: test_v16i32:
|
; SSE41-LABEL: test_v16i32:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pminud %xmm3, %xmm1
|
; SSE41-NEXT: pminud %xmm3, %xmm1
|
||||||
; SSE41-NEXT: pminud %xmm2, %xmm0
|
; SSE41-NEXT: pminud %xmm2, %xmm1
|
||||||
; SSE41-NEXT: pminud %xmm1, %xmm0
|
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; SSE41-NEXT: pminud %xmm0, %xmm1
|
; SSE41-NEXT: pminud %xmm0, %xmm1
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; SSE41-NEXT: pminud %xmm1, %xmm0
|
; SSE41-NEXT: pminud %xmm1, %xmm0
|
||||||
; SSE41-NEXT: movd %xmm0, %eax
|
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
|
; SSE41-NEXT: pminud %xmm0, %xmm1
|
||||||
|
; SSE41-NEXT: movd %xmm1, %eax
|
||||||
; SSE41-NEXT: retq
|
; SSE41-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX1-LABEL: test_v16i32:
|
; AVX1-LABEL: test_v16i32:
|
||||||
@ -987,8 +987,8 @@ define i32 @test_v16i32(<16 x i32> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2
|
; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2
|
||||||
|
; AVX1-NEXT: vpminud %xmm2, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
||||||
; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
@ -1110,14 +1110,14 @@ define i32 @test_v32i32(<32 x i32> %a0) {
|
|||||||
; SSE41-LABEL: test_v32i32:
|
; SSE41-LABEL: test_v32i32:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pminud %xmm6, %xmm2
|
; SSE41-NEXT: pminud %xmm6, %xmm2
|
||||||
; SSE41-NEXT: pminud %xmm4, %xmm0
|
|
||||||
; SSE41-NEXT: pminud %xmm2, %xmm0
|
|
||||||
; SSE41-NEXT: pminud %xmm7, %xmm3
|
; SSE41-NEXT: pminud %xmm7, %xmm3
|
||||||
; SSE41-NEXT: pminud %xmm5, %xmm1
|
; SSE41-NEXT: pminud %xmm5, %xmm3
|
||||||
; SSE41-NEXT: pminud %xmm3, %xmm1
|
; SSE41-NEXT: pminud %xmm1, %xmm3
|
||||||
; SSE41-NEXT: pminud %xmm0, %xmm1
|
; SSE41-NEXT: pminud %xmm4, %xmm2
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
; SSE41-NEXT: pminud %xmm3, %xmm2
|
||||||
; SSE41-NEXT: pminud %xmm1, %xmm0
|
; SSE41-NEXT: pminud %xmm0, %xmm2
|
||||||
|
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[2,3,0,1]
|
||||||
|
; SSE41-NEXT: pminud %xmm2, %xmm0
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; SSE41-NEXT: pminud %xmm0, %xmm1
|
; SSE41-NEXT: pminud %xmm0, %xmm1
|
||||||
; SSE41-NEXT: movd %xmm1, %eax
|
; SSE41-NEXT: movd %xmm1, %eax
|
||||||
@ -1126,16 +1126,16 @@ define i32 @test_v32i32(<32 x i32> %a0) {
|
|||||||
; AVX1-LABEL: test_v32i32:
|
; AVX1-LABEL: test_v32i32:
|
||||||
; AVX1: # %bb.0:
|
; AVX1: # %bb.0:
|
||||||
; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm4
|
; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm4
|
||||||
; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm5
|
|
||||||
; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4
|
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
|
||||||
; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1
|
; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm3
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
|
; AVX1-NEXT: vpminud %xmm1, %xmm3, %xmm1
|
||||||
; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
|
; AVX1-NEXT: vpminud %xmm1, %xmm3, %xmm1
|
||||||
|
; AVX1-NEXT: vpminud %xmm4, %xmm2, %xmm2
|
||||||
|
; AVX1-NEXT: vpminud %xmm1, %xmm2, %xmm1
|
||||||
; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpminud %xmm0, %xmm4, %xmm0
|
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
||||||
; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
@ -1147,7 +1147,7 @@ define i32 @test_v32i32(<32 x i32> %a0) {
|
|||||||
; AVX2-LABEL: test_v32i32:
|
; AVX2-LABEL: test_v32i32:
|
||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpminud %ymm1, %ymm2, %ymm1
|
||||||
; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0
|
; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
||||||
; AVX2-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
; AVX2-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
||||||
@ -1398,9 +1398,9 @@ define i16 @test_v32i16(<32 x i16> %a0) {
|
|||||||
; SSE2-NEXT: pxor %xmm4, %xmm1
|
; SSE2-NEXT: pxor %xmm4, %xmm1
|
||||||
; SSE2-NEXT: pminsw %xmm3, %xmm1
|
; SSE2-NEXT: pminsw %xmm3, %xmm1
|
||||||
; SSE2-NEXT: pxor %xmm4, %xmm2
|
; SSE2-NEXT: pxor %xmm4, %xmm2
|
||||||
|
; SSE2-NEXT: pminsw %xmm1, %xmm2
|
||||||
; SSE2-NEXT: pxor %xmm4, %xmm0
|
; SSE2-NEXT: pxor %xmm4, %xmm0
|
||||||
; SSE2-NEXT: pminsw %xmm2, %xmm0
|
; SSE2-NEXT: pminsw %xmm2, %xmm0
|
||||||
; SSE2-NEXT: pminsw %xmm1, %xmm0
|
|
||||||
; SSE2-NEXT: movdqa %xmm0, %xmm1
|
; SSE2-NEXT: movdqa %xmm0, %xmm1
|
||||||
; SSE2-NEXT: pxor %xmm4, %xmm1
|
; SSE2-NEXT: pxor %xmm4, %xmm1
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
|
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
|
||||||
@ -1424,9 +1424,9 @@ define i16 @test_v32i16(<32 x i16> %a0) {
|
|||||||
; SSE41-LABEL: test_v32i16:
|
; SSE41-LABEL: test_v32i16:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pminuw %xmm3, %xmm1
|
; SSE41-NEXT: pminuw %xmm3, %xmm1
|
||||||
; SSE41-NEXT: pminuw %xmm2, %xmm0
|
; SSE41-NEXT: pminuw %xmm2, %xmm1
|
||||||
; SSE41-NEXT: pminuw %xmm1, %xmm0
|
; SSE41-NEXT: pminuw %xmm0, %xmm1
|
||||||
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
; SSE41-NEXT: phminposuw %xmm1, %xmm0
|
||||||
; SSE41-NEXT: movd %xmm0, %eax
|
; SSE41-NEXT: movd %xmm0, %eax
|
||||||
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
||||||
; SSE41-NEXT: retq
|
; SSE41-NEXT: retq
|
||||||
@ -1436,8 +1436,8 @@ define i16 @test_v32i16(<32 x i16> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2
|
; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2
|
||||||
|
; AVX1-NEXT: vpminuw %xmm2, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vmovd %xmm0, %eax
|
; AVX1-NEXT: vmovd %xmm0, %eax
|
||||||
; AVX1-NEXT: # kill: def $ax killed $ax killed $eax
|
; AVX1-NEXT: # kill: def $ax killed $ax killed $eax
|
||||||
@ -1478,16 +1478,16 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; SSE2-NEXT: pxor %xmm8, %xmm2
|
; SSE2-NEXT: pxor %xmm8, %xmm2
|
||||||
; SSE2-NEXT: pminsw %xmm6, %xmm2
|
; SSE2-NEXT: pminsw %xmm6, %xmm2
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm4
|
; SSE2-NEXT: pxor %xmm8, %xmm4
|
||||||
|
; SSE2-NEXT: pminsw %xmm2, %xmm4
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm0
|
; SSE2-NEXT: pxor %xmm8, %xmm0
|
||||||
; SSE2-NEXT: pminsw %xmm4, %xmm0
|
|
||||||
; SSE2-NEXT: pminsw %xmm2, %xmm0
|
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm7
|
; SSE2-NEXT: pxor %xmm8, %xmm7
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm3
|
; SSE2-NEXT: pxor %xmm8, %xmm3
|
||||||
; SSE2-NEXT: pminsw %xmm7, %xmm3
|
; SSE2-NEXT: pminsw %xmm7, %xmm3
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm5
|
; SSE2-NEXT: pxor %xmm8, %xmm5
|
||||||
|
; SSE2-NEXT: pminsw %xmm3, %xmm5
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm1
|
; SSE2-NEXT: pxor %xmm8, %xmm1
|
||||||
; SSE2-NEXT: pminsw %xmm5, %xmm1
|
; SSE2-NEXT: pminsw %xmm5, %xmm1
|
||||||
; SSE2-NEXT: pminsw %xmm3, %xmm1
|
; SSE2-NEXT: pminsw %xmm4, %xmm1
|
||||||
; SSE2-NEXT: pminsw %xmm0, %xmm1
|
; SSE2-NEXT: pminsw %xmm0, %xmm1
|
||||||
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm0
|
; SSE2-NEXT: pxor %xmm8, %xmm0
|
||||||
@ -1512,13 +1512,13 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; SSE41-LABEL: test_v64i16:
|
; SSE41-LABEL: test_v64i16:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pminuw %xmm7, %xmm3
|
; SSE41-NEXT: pminuw %xmm7, %xmm3
|
||||||
; SSE41-NEXT: pminuw %xmm5, %xmm1
|
; SSE41-NEXT: pminuw %xmm5, %xmm3
|
||||||
; SSE41-NEXT: pminuw %xmm3, %xmm1
|
; SSE41-NEXT: pminuw %xmm1, %xmm3
|
||||||
; SSE41-NEXT: pminuw %xmm6, %xmm2
|
; SSE41-NEXT: pminuw %xmm6, %xmm2
|
||||||
; SSE41-NEXT: pminuw %xmm4, %xmm0
|
; SSE41-NEXT: pminuw %xmm4, %xmm2
|
||||||
; SSE41-NEXT: pminuw %xmm2, %xmm0
|
; SSE41-NEXT: pminuw %xmm3, %xmm2
|
||||||
; SSE41-NEXT: pminuw %xmm1, %xmm0
|
; SSE41-NEXT: pminuw %xmm0, %xmm2
|
||||||
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
; SSE41-NEXT: phminposuw %xmm2, %xmm0
|
||||||
; SSE41-NEXT: movd %xmm0, %eax
|
; SSE41-NEXT: movd %xmm0, %eax
|
||||||
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
||||||
; SSE41-NEXT: retq
|
; SSE41-NEXT: retq
|
||||||
@ -1529,13 +1529,13 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
||||||
; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
|
; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpminuw %xmm5, %xmm6, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
|
||||||
; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1
|
; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0
|
; AVX1-NEXT: vpminuw %xmm1, %xmm2, %xmm1
|
||||||
|
; AVX1-NEXT: vpminuw %xmm4, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpminuw %xmm4, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vmovd %xmm0, %eax
|
; AVX1-NEXT: vmovd %xmm0, %eax
|
||||||
; AVX1-NEXT: # kill: def $ax killed $ax killed $eax
|
; AVX1-NEXT: # kill: def $ax killed $ax killed $eax
|
||||||
@ -1545,7 +1545,7 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; AVX2-LABEL: test_v64i16:
|
; AVX2-LABEL: test_v64i16:
|
||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpminuw %ymm1, %ymm2, %ymm1
|
||||||
; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0
|
; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
||||||
; AVX2-NEXT: vpminuw %xmm1, %xmm0, %xmm0
|
; AVX2-NEXT: vpminuw %xmm1, %xmm0, %xmm0
|
||||||
@ -1837,31 +1837,31 @@ define i8 @test_v64i8(<64 x i8> %a0) {
|
|||||||
; SSE2-LABEL: test_v64i8:
|
; SSE2-LABEL: test_v64i8:
|
||||||
; SSE2: # %bb.0:
|
; SSE2: # %bb.0:
|
||||||
; SSE2-NEXT: pminub %xmm3, %xmm1
|
; SSE2-NEXT: pminub %xmm3, %xmm1
|
||||||
; SSE2-NEXT: pminub %xmm2, %xmm0
|
; SSE2-NEXT: pminub %xmm2, %xmm1
|
||||||
; SSE2-NEXT: pminub %xmm1, %xmm0
|
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; SSE2-NEXT: pminub %xmm0, %xmm1
|
; SSE2-NEXT: pminub %xmm0, %xmm1
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; SSE2-NEXT: pminub %xmm1, %xmm0
|
; SSE2-NEXT: pminub %xmm1, %xmm0
|
||||||
; SSE2-NEXT: movdqa %xmm0, %xmm1
|
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; SSE2-NEXT: psrld $16, %xmm1
|
|
||||||
; SSE2-NEXT: pminub %xmm0, %xmm1
|
; SSE2-NEXT: pminub %xmm0, %xmm1
|
||||||
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
||||||
; SSE2-NEXT: psrlw $8, %xmm0
|
; SSE2-NEXT: psrld $16, %xmm0
|
||||||
; SSE2-NEXT: pminub %xmm1, %xmm0
|
; SSE2-NEXT: pminub %xmm1, %xmm0
|
||||||
; SSE2-NEXT: movd %xmm0, %eax
|
; SSE2-NEXT: movdqa %xmm0, %xmm1
|
||||||
|
; SSE2-NEXT: psrlw $8, %xmm1
|
||||||
|
; SSE2-NEXT: pminub %xmm0, %xmm1
|
||||||
|
; SSE2-NEXT: movd %xmm1, %eax
|
||||||
; SSE2-NEXT: # kill: def $al killed $al killed $eax
|
; SSE2-NEXT: # kill: def $al killed $al killed $eax
|
||||||
; SSE2-NEXT: retq
|
; SSE2-NEXT: retq
|
||||||
;
|
;
|
||||||
; SSE41-LABEL: test_v64i8:
|
; SSE41-LABEL: test_v64i8:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pminub %xmm3, %xmm1
|
; SSE41-NEXT: pminub %xmm3, %xmm1
|
||||||
; SSE41-NEXT: pminub %xmm2, %xmm0
|
; SSE41-NEXT: pminub %xmm2, %xmm1
|
||||||
; SSE41-NEXT: pminub %xmm1, %xmm0
|
|
||||||
; SSE41-NEXT: movdqa %xmm0, %xmm1
|
|
||||||
; SSE41-NEXT: psrlw $8, %xmm1
|
|
||||||
; SSE41-NEXT: pminub %xmm0, %xmm1
|
; SSE41-NEXT: pminub %xmm0, %xmm1
|
||||||
; SSE41-NEXT: phminposuw %xmm1, %xmm0
|
; 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: pextrb $0, %xmm0, %eax
|
||||||
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
||||||
; SSE41-NEXT: retq
|
; SSE41-NEXT: retq
|
||||||
@ -1871,8 +1871,8 @@ define i8 @test_v64i8(<64 x i8> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2
|
; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2
|
||||||
|
; AVX1-NEXT: vpminub %xmm2, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
||||||
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
@ -1915,14 +1915,14 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; SSE2-LABEL: test_v128i8:
|
; SSE2-LABEL: test_v128i8:
|
||||||
; SSE2: # %bb.0:
|
; SSE2: # %bb.0:
|
||||||
; SSE2-NEXT: pminub %xmm6, %xmm2
|
; SSE2-NEXT: pminub %xmm6, %xmm2
|
||||||
; SSE2-NEXT: pminub %xmm4, %xmm0
|
|
||||||
; SSE2-NEXT: pminub %xmm2, %xmm0
|
|
||||||
; SSE2-NEXT: pminub %xmm7, %xmm3
|
; SSE2-NEXT: pminub %xmm7, %xmm3
|
||||||
; SSE2-NEXT: pminub %xmm5, %xmm1
|
; SSE2-NEXT: pminub %xmm5, %xmm3
|
||||||
; SSE2-NEXT: pminub %xmm3, %xmm1
|
; SSE2-NEXT: pminub %xmm1, %xmm3
|
||||||
; SSE2-NEXT: pminub %xmm0, %xmm1
|
; SSE2-NEXT: pminub %xmm4, %xmm2
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
; SSE2-NEXT: pminub %xmm3, %xmm2
|
||||||
; SSE2-NEXT: pminub %xmm1, %xmm0
|
; SSE2-NEXT: pminub %xmm0, %xmm2
|
||||||
|
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[2,3,0,1]
|
||||||
|
; SSE2-NEXT: pminub %xmm2, %xmm0
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; SSE2-NEXT: pminub %xmm0, %xmm1
|
; SSE2-NEXT: pminub %xmm0, %xmm1
|
||||||
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
||||||
@ -1938,16 +1938,16 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; SSE41-LABEL: test_v128i8:
|
; SSE41-LABEL: test_v128i8:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pminub %xmm7, %xmm3
|
; SSE41-NEXT: pminub %xmm7, %xmm3
|
||||||
; SSE41-NEXT: pminub %xmm5, %xmm1
|
; SSE41-NEXT: pminub %xmm5, %xmm3
|
||||||
; SSE41-NEXT: pminub %xmm3, %xmm1
|
; SSE41-NEXT: pminub %xmm1, %xmm3
|
||||||
; SSE41-NEXT: pminub %xmm6, %xmm2
|
; SSE41-NEXT: pminub %xmm6, %xmm2
|
||||||
; SSE41-NEXT: pminub %xmm4, %xmm0
|
; SSE41-NEXT: pminub %xmm4, %xmm2
|
||||||
|
; SSE41-NEXT: pminub %xmm3, %xmm2
|
||||||
|
; SSE41-NEXT: pminub %xmm0, %xmm2
|
||||||
|
; SSE41-NEXT: movdqa %xmm2, %xmm0
|
||||||
|
; SSE41-NEXT: psrlw $8, %xmm0
|
||||||
; SSE41-NEXT: pminub %xmm2, %xmm0
|
; SSE41-NEXT: pminub %xmm2, %xmm0
|
||||||
; SSE41-NEXT: pminub %xmm1, %xmm0
|
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
||||||
; SSE41-NEXT: movdqa %xmm0, %xmm1
|
|
||||||
; SSE41-NEXT: psrlw $8, %xmm1
|
|
||||||
; SSE41-NEXT: pminub %xmm0, %xmm1
|
|
||||||
; SSE41-NEXT: phminposuw %xmm1, %xmm0
|
|
||||||
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
||||||
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
||||||
; SSE41-NEXT: retq
|
; SSE41-NEXT: retq
|
||||||
@ -1958,13 +1958,13 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
||||||
; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
|
; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpminub %xmm5, %xmm6, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
|
||||||
; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1
|
; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0
|
; AVX1-NEXT: vpminub %xmm1, %xmm2, %xmm1
|
||||||
|
; AVX1-NEXT: vpminub %xmm4, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpminub %xmm4, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
||||||
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
@ -1976,7 +1976,7 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; AVX2-LABEL: test_v128i8:
|
; AVX2-LABEL: test_v128i8:
|
||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpminub %ymm1, %ymm2, %ymm1
|
||||||
; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0
|
; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
||||||
; AVX2-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
; AVX2-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
|
@ -1022,13 +1022,13 @@ define i32 @test_v16i32(<16 x i32> %a0) {
|
|||||||
; SSE41-LABEL: test_v16i32:
|
; SSE41-LABEL: test_v16i32:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pminud %xmm3, %xmm1
|
; SSE41-NEXT: pminud %xmm3, %xmm1
|
||||||
; SSE41-NEXT: pminud %xmm2, %xmm0
|
; SSE41-NEXT: pminud %xmm2, %xmm1
|
||||||
; SSE41-NEXT: pminud %xmm1, %xmm0
|
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; SSE41-NEXT: pminud %xmm0, %xmm1
|
; SSE41-NEXT: pminud %xmm0, %xmm1
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; SSE41-NEXT: pminud %xmm1, %xmm0
|
; SSE41-NEXT: pminud %xmm1, %xmm0
|
||||||
; SSE41-NEXT: movd %xmm0, %eax
|
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
|
; SSE41-NEXT: pminud %xmm0, %xmm1
|
||||||
|
; SSE41-NEXT: movd %xmm1, %eax
|
||||||
; SSE41-NEXT: retq
|
; SSE41-NEXT: retq
|
||||||
;
|
;
|
||||||
; AVX1-LABEL: test_v16i32:
|
; AVX1-LABEL: test_v16i32:
|
||||||
@ -1036,8 +1036,8 @@ define i32 @test_v16i32(<16 x i32> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2
|
; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2
|
||||||
|
; AVX1-NEXT: vpminud %xmm2, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
||||||
; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
@ -1159,14 +1159,14 @@ define i32 @test_v32i32(<32 x i32> %a0) {
|
|||||||
; SSE41-LABEL: test_v32i32:
|
; SSE41-LABEL: test_v32i32:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pminud %xmm6, %xmm2
|
; SSE41-NEXT: pminud %xmm6, %xmm2
|
||||||
; SSE41-NEXT: pminud %xmm4, %xmm0
|
|
||||||
; SSE41-NEXT: pminud %xmm2, %xmm0
|
|
||||||
; SSE41-NEXT: pminud %xmm7, %xmm3
|
; SSE41-NEXT: pminud %xmm7, %xmm3
|
||||||
; SSE41-NEXT: pminud %xmm5, %xmm1
|
; SSE41-NEXT: pminud %xmm5, %xmm3
|
||||||
; SSE41-NEXT: pminud %xmm3, %xmm1
|
; SSE41-NEXT: pminud %xmm1, %xmm3
|
||||||
; SSE41-NEXT: pminud %xmm0, %xmm1
|
; SSE41-NEXT: pminud %xmm4, %xmm2
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
; SSE41-NEXT: pminud %xmm3, %xmm2
|
||||||
; SSE41-NEXT: pminud %xmm1, %xmm0
|
; SSE41-NEXT: pminud %xmm0, %xmm2
|
||||||
|
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[2,3,0,1]
|
||||||
|
; SSE41-NEXT: pminud %xmm2, %xmm0
|
||||||
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; SSE41-NEXT: pminud %xmm0, %xmm1
|
; SSE41-NEXT: pminud %xmm0, %xmm1
|
||||||
; SSE41-NEXT: movd %xmm1, %eax
|
; SSE41-NEXT: movd %xmm1, %eax
|
||||||
@ -1175,16 +1175,16 @@ define i32 @test_v32i32(<32 x i32> %a0) {
|
|||||||
; AVX1-LABEL: test_v32i32:
|
; AVX1-LABEL: test_v32i32:
|
||||||
; AVX1: # %bb.0:
|
; AVX1: # %bb.0:
|
||||||
; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm4
|
; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm4
|
||||||
; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm5
|
|
||||||
; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4
|
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
|
||||||
; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1
|
; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm3
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
|
; AVX1-NEXT: vpminud %xmm1, %xmm3, %xmm1
|
||||||
; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
|
; AVX1-NEXT: vpminud %xmm1, %xmm3, %xmm1
|
||||||
|
; AVX1-NEXT: vpminud %xmm4, %xmm2, %xmm2
|
||||||
|
; AVX1-NEXT: vpminud %xmm1, %xmm2, %xmm1
|
||||||
; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpminud %xmm0, %xmm4, %xmm0
|
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
||||||
; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
@ -1196,7 +1196,7 @@ define i32 @test_v32i32(<32 x i32> %a0) {
|
|||||||
; AVX2-LABEL: test_v32i32:
|
; AVX2-LABEL: test_v32i32:
|
||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpminud %ymm1, %ymm2, %ymm1
|
||||||
; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0
|
; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
||||||
; AVX2-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
; AVX2-NEXT: vpminud %xmm1, %xmm0, %xmm0
|
||||||
@ -1513,9 +1513,9 @@ define i16 @test_v32i16(<32 x i16> %a0) {
|
|||||||
; SSE2-NEXT: pxor %xmm4, %xmm1
|
; SSE2-NEXT: pxor %xmm4, %xmm1
|
||||||
; SSE2-NEXT: pminsw %xmm3, %xmm1
|
; SSE2-NEXT: pminsw %xmm3, %xmm1
|
||||||
; SSE2-NEXT: pxor %xmm4, %xmm2
|
; SSE2-NEXT: pxor %xmm4, %xmm2
|
||||||
|
; SSE2-NEXT: pminsw %xmm1, %xmm2
|
||||||
; SSE2-NEXT: pxor %xmm4, %xmm0
|
; SSE2-NEXT: pxor %xmm4, %xmm0
|
||||||
; SSE2-NEXT: pminsw %xmm2, %xmm0
|
; SSE2-NEXT: pminsw %xmm2, %xmm0
|
||||||
; SSE2-NEXT: pminsw %xmm1, %xmm0
|
|
||||||
; SSE2-NEXT: movdqa %xmm0, %xmm1
|
; SSE2-NEXT: movdqa %xmm0, %xmm1
|
||||||
; SSE2-NEXT: pxor %xmm4, %xmm1
|
; SSE2-NEXT: pxor %xmm4, %xmm1
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
|
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
|
||||||
@ -1539,9 +1539,9 @@ define i16 @test_v32i16(<32 x i16> %a0) {
|
|||||||
; SSE41-LABEL: test_v32i16:
|
; SSE41-LABEL: test_v32i16:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pminuw %xmm3, %xmm1
|
; SSE41-NEXT: pminuw %xmm3, %xmm1
|
||||||
; SSE41-NEXT: pminuw %xmm2, %xmm0
|
; SSE41-NEXT: pminuw %xmm2, %xmm1
|
||||||
; SSE41-NEXT: pminuw %xmm1, %xmm0
|
; SSE41-NEXT: pminuw %xmm0, %xmm1
|
||||||
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
; SSE41-NEXT: phminposuw %xmm1, %xmm0
|
||||||
; SSE41-NEXT: movd %xmm0, %eax
|
; SSE41-NEXT: movd %xmm0, %eax
|
||||||
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
||||||
; SSE41-NEXT: retq
|
; SSE41-NEXT: retq
|
||||||
@ -1551,8 +1551,8 @@ define i16 @test_v32i16(<32 x i16> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2
|
; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2
|
||||||
|
; AVX1-NEXT: vpminuw %xmm2, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vmovd %xmm0, %eax
|
; AVX1-NEXT: vmovd %xmm0, %eax
|
||||||
; AVX1-NEXT: # kill: def $ax killed $ax killed $eax
|
; AVX1-NEXT: # kill: def $ax killed $ax killed $eax
|
||||||
@ -1593,16 +1593,16 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; SSE2-NEXT: pxor %xmm8, %xmm2
|
; SSE2-NEXT: pxor %xmm8, %xmm2
|
||||||
; SSE2-NEXT: pminsw %xmm6, %xmm2
|
; SSE2-NEXT: pminsw %xmm6, %xmm2
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm4
|
; SSE2-NEXT: pxor %xmm8, %xmm4
|
||||||
|
; SSE2-NEXT: pminsw %xmm2, %xmm4
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm0
|
; SSE2-NEXT: pxor %xmm8, %xmm0
|
||||||
; SSE2-NEXT: pminsw %xmm4, %xmm0
|
|
||||||
; SSE2-NEXT: pminsw %xmm2, %xmm0
|
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm7
|
; SSE2-NEXT: pxor %xmm8, %xmm7
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm3
|
; SSE2-NEXT: pxor %xmm8, %xmm3
|
||||||
; SSE2-NEXT: pminsw %xmm7, %xmm3
|
; SSE2-NEXT: pminsw %xmm7, %xmm3
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm5
|
; SSE2-NEXT: pxor %xmm8, %xmm5
|
||||||
|
; SSE2-NEXT: pminsw %xmm3, %xmm5
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm1
|
; SSE2-NEXT: pxor %xmm8, %xmm1
|
||||||
; SSE2-NEXT: pminsw %xmm5, %xmm1
|
; SSE2-NEXT: pminsw %xmm5, %xmm1
|
||||||
; SSE2-NEXT: pminsw %xmm3, %xmm1
|
; SSE2-NEXT: pminsw %xmm4, %xmm1
|
||||||
; SSE2-NEXT: pminsw %xmm0, %xmm1
|
; SSE2-NEXT: pminsw %xmm0, %xmm1
|
||||||
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
||||||
; SSE2-NEXT: pxor %xmm8, %xmm0
|
; SSE2-NEXT: pxor %xmm8, %xmm0
|
||||||
@ -1627,13 +1627,13 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; SSE41-LABEL: test_v64i16:
|
; SSE41-LABEL: test_v64i16:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pminuw %xmm7, %xmm3
|
; SSE41-NEXT: pminuw %xmm7, %xmm3
|
||||||
; SSE41-NEXT: pminuw %xmm5, %xmm1
|
; SSE41-NEXT: pminuw %xmm5, %xmm3
|
||||||
; SSE41-NEXT: pminuw %xmm3, %xmm1
|
; SSE41-NEXT: pminuw %xmm1, %xmm3
|
||||||
; SSE41-NEXT: pminuw %xmm6, %xmm2
|
; SSE41-NEXT: pminuw %xmm6, %xmm2
|
||||||
; SSE41-NEXT: pminuw %xmm4, %xmm0
|
; SSE41-NEXT: pminuw %xmm4, %xmm2
|
||||||
; SSE41-NEXT: pminuw %xmm2, %xmm0
|
; SSE41-NEXT: pminuw %xmm3, %xmm2
|
||||||
; SSE41-NEXT: pminuw %xmm1, %xmm0
|
; SSE41-NEXT: pminuw %xmm0, %xmm2
|
||||||
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
; SSE41-NEXT: phminposuw %xmm2, %xmm0
|
||||||
; SSE41-NEXT: movd %xmm0, %eax
|
; SSE41-NEXT: movd %xmm0, %eax
|
||||||
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
; SSE41-NEXT: # kill: def $ax killed $ax killed $eax
|
||||||
; SSE41-NEXT: retq
|
; SSE41-NEXT: retq
|
||||||
@ -1644,13 +1644,13 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
||||||
; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
|
; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpminuw %xmm5, %xmm6, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
|
||||||
; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1
|
; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0
|
; AVX1-NEXT: vpminuw %xmm1, %xmm2, %xmm1
|
||||||
|
; AVX1-NEXT: vpminuw %xmm4, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpminuw %xmm4, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vmovd %xmm0, %eax
|
; AVX1-NEXT: vmovd %xmm0, %eax
|
||||||
; AVX1-NEXT: # kill: def $ax killed $ax killed $eax
|
; AVX1-NEXT: # kill: def $ax killed $ax killed $eax
|
||||||
@ -1660,7 +1660,7 @@ define i16 @test_v64i16(<64 x i16> %a0) {
|
|||||||
; AVX2-LABEL: test_v64i16:
|
; AVX2-LABEL: test_v64i16:
|
||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpminuw %ymm1, %ymm2, %ymm1
|
||||||
; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0
|
; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
||||||
; AVX2-NEXT: vpminuw %xmm1, %xmm0, %xmm0
|
; AVX2-NEXT: vpminuw %xmm1, %xmm0, %xmm0
|
||||||
@ -2077,31 +2077,31 @@ define i8 @test_v64i8(<64 x i8> %a0) {
|
|||||||
; SSE2-LABEL: test_v64i8:
|
; SSE2-LABEL: test_v64i8:
|
||||||
; SSE2: # %bb.0:
|
; SSE2: # %bb.0:
|
||||||
; SSE2-NEXT: pminub %xmm3, %xmm1
|
; SSE2-NEXT: pminub %xmm3, %xmm1
|
||||||
; SSE2-NEXT: pminub %xmm2, %xmm0
|
; SSE2-NEXT: pminub %xmm2, %xmm1
|
||||||
; SSE2-NEXT: pminub %xmm1, %xmm0
|
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
|
|
||||||
; SSE2-NEXT: pminub %xmm0, %xmm1
|
; SSE2-NEXT: pminub %xmm0, %xmm1
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,2,3]
|
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
||||||
; SSE2-NEXT: pminub %xmm1, %xmm0
|
; SSE2-NEXT: pminub %xmm1, %xmm0
|
||||||
; SSE2-NEXT: movdqa %xmm0, %xmm1
|
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; SSE2-NEXT: psrld $16, %xmm1
|
|
||||||
; SSE2-NEXT: pminub %xmm0, %xmm1
|
; SSE2-NEXT: pminub %xmm0, %xmm1
|
||||||
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
||||||
; SSE2-NEXT: psrlw $8, %xmm0
|
; SSE2-NEXT: psrld $16, %xmm0
|
||||||
; SSE2-NEXT: pminub %xmm1, %xmm0
|
; SSE2-NEXT: pminub %xmm1, %xmm0
|
||||||
; SSE2-NEXT: movd %xmm0, %eax
|
; SSE2-NEXT: movdqa %xmm0, %xmm1
|
||||||
|
; SSE2-NEXT: psrlw $8, %xmm1
|
||||||
|
; SSE2-NEXT: pminub %xmm0, %xmm1
|
||||||
|
; SSE2-NEXT: movd %xmm1, %eax
|
||||||
; SSE2-NEXT: # kill: def $al killed $al killed $eax
|
; SSE2-NEXT: # kill: def $al killed $al killed $eax
|
||||||
; SSE2-NEXT: retq
|
; SSE2-NEXT: retq
|
||||||
;
|
;
|
||||||
; SSE41-LABEL: test_v64i8:
|
; SSE41-LABEL: test_v64i8:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pminub %xmm3, %xmm1
|
; SSE41-NEXT: pminub %xmm3, %xmm1
|
||||||
; SSE41-NEXT: pminub %xmm2, %xmm0
|
; SSE41-NEXT: pminub %xmm2, %xmm1
|
||||||
; SSE41-NEXT: pminub %xmm1, %xmm0
|
|
||||||
; SSE41-NEXT: movdqa %xmm0, %xmm1
|
|
||||||
; SSE41-NEXT: psrlw $8, %xmm1
|
|
||||||
; SSE41-NEXT: pminub %xmm0, %xmm1
|
; SSE41-NEXT: pminub %xmm0, %xmm1
|
||||||
; SSE41-NEXT: phminposuw %xmm1, %xmm0
|
; 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: pextrb $0, %xmm0, %eax
|
||||||
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
||||||
; SSE41-NEXT: retq
|
; SSE41-NEXT: retq
|
||||||
@ -2111,8 +2111,8 @@ define i8 @test_v64i8(<64 x i8> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
|
||||||
; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2
|
; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2
|
||||||
|
; AVX1-NEXT: vpminub %xmm2, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
||||||
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
@ -2155,14 +2155,14 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; SSE2-LABEL: test_v128i8:
|
; SSE2-LABEL: test_v128i8:
|
||||||
; SSE2: # %bb.0:
|
; SSE2: # %bb.0:
|
||||||
; SSE2-NEXT: pminub %xmm6, %xmm2
|
; SSE2-NEXT: pminub %xmm6, %xmm2
|
||||||
; SSE2-NEXT: pminub %xmm4, %xmm0
|
|
||||||
; SSE2-NEXT: pminub %xmm2, %xmm0
|
|
||||||
; SSE2-NEXT: pminub %xmm7, %xmm3
|
; SSE2-NEXT: pminub %xmm7, %xmm3
|
||||||
; SSE2-NEXT: pminub %xmm5, %xmm1
|
; SSE2-NEXT: pminub %xmm5, %xmm3
|
||||||
; SSE2-NEXT: pminub %xmm3, %xmm1
|
; SSE2-NEXT: pminub %xmm1, %xmm3
|
||||||
; SSE2-NEXT: pminub %xmm0, %xmm1
|
; SSE2-NEXT: pminub %xmm4, %xmm2
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
|
; SSE2-NEXT: pminub %xmm3, %xmm2
|
||||||
; SSE2-NEXT: pminub %xmm1, %xmm0
|
; SSE2-NEXT: pminub %xmm0, %xmm2
|
||||||
|
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[2,3,0,1]
|
||||||
|
; SSE2-NEXT: pminub %xmm2, %xmm0
|
||||||
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
|
||||||
; SSE2-NEXT: pminub %xmm0, %xmm1
|
; SSE2-NEXT: pminub %xmm0, %xmm1
|
||||||
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
; SSE2-NEXT: movdqa %xmm1, %xmm0
|
||||||
@ -2178,16 +2178,16 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; SSE41-LABEL: test_v128i8:
|
; SSE41-LABEL: test_v128i8:
|
||||||
; SSE41: # %bb.0:
|
; SSE41: # %bb.0:
|
||||||
; SSE41-NEXT: pminub %xmm7, %xmm3
|
; SSE41-NEXT: pminub %xmm7, %xmm3
|
||||||
; SSE41-NEXT: pminub %xmm5, %xmm1
|
; SSE41-NEXT: pminub %xmm5, %xmm3
|
||||||
; SSE41-NEXT: pminub %xmm3, %xmm1
|
; SSE41-NEXT: pminub %xmm1, %xmm3
|
||||||
; SSE41-NEXT: pminub %xmm6, %xmm2
|
; SSE41-NEXT: pminub %xmm6, %xmm2
|
||||||
; SSE41-NEXT: pminub %xmm4, %xmm0
|
; SSE41-NEXT: pminub %xmm4, %xmm2
|
||||||
|
; SSE41-NEXT: pminub %xmm3, %xmm2
|
||||||
|
; SSE41-NEXT: pminub %xmm0, %xmm2
|
||||||
|
; SSE41-NEXT: movdqa %xmm2, %xmm0
|
||||||
|
; SSE41-NEXT: psrlw $8, %xmm0
|
||||||
; SSE41-NEXT: pminub %xmm2, %xmm0
|
; SSE41-NEXT: pminub %xmm2, %xmm0
|
||||||
; SSE41-NEXT: pminub %xmm1, %xmm0
|
; SSE41-NEXT: phminposuw %xmm0, %xmm0
|
||||||
; SSE41-NEXT: movdqa %xmm0, %xmm1
|
|
||||||
; SSE41-NEXT: psrlw $8, %xmm1
|
|
||||||
; SSE41-NEXT: pminub %xmm0, %xmm1
|
|
||||||
; SSE41-NEXT: phminposuw %xmm1, %xmm0
|
|
||||||
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
; SSE41-NEXT: pextrb $0, %xmm0, %eax
|
||||||
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
; SSE41-NEXT: # kill: def $al killed $al killed $eax
|
||||||
; SSE41-NEXT: retq
|
; SSE41-NEXT: retq
|
||||||
@ -2198,13 +2198,13 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
|
||||||
; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
|
||||||
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
|
; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpminub %xmm5, %xmm6, %xmm5
|
; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
|
||||||
; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4
|
; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4
|
||||||
; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1
|
; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0
|
; AVX1-NEXT: vpminub %xmm1, %xmm2, %xmm1
|
||||||
|
; AVX1-NEXT: vpminub %xmm4, %xmm1, %xmm1
|
||||||
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vpminub %xmm4, %xmm0, %xmm0
|
|
||||||
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm1
|
||||||
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
; AVX1-NEXT: vphminposuw %xmm0, %xmm0
|
||||||
@ -2216,7 +2216,7 @@ define i8 @test_v128i8(<128 x i8> %a0) {
|
|||||||
; AVX2-LABEL: test_v128i8:
|
; AVX2-LABEL: test_v128i8:
|
||||||
; AVX2: # %bb.0:
|
; AVX2: # %bb.0:
|
||||||
; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1
|
; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1
|
||||||
; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0
|
; AVX2-NEXT: vpminub %ymm1, %ymm2, %ymm1
|
||||||
; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0
|
; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0
|
||||||
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
|
||||||
; AVX2-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
; AVX2-NEXT: vpminub %xmm1, %xmm0, %xmm0
|
||||||
|
Loading…
Reference in New Issue
Block a user