175 changes: 63 additions & 112 deletions llvm/test/CodeGen/X86/cast-vsel.ll
Original file line number Diff line number Diff line change
Expand Up @@ -12,38 +12,27 @@ define <8 x i32> @sext(<8 x float> %a, <8 x float> %b, <8 x i16> %c, <8 x i16> %
; SSE2-LABEL: sext:
; SSE2: # BB#0:
; SSE2-NEXT: cmpltps %xmm3, %xmm1
; SSE2-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7]
; SSE2-NEXT: pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
; SSE2-NEXT: cmpltps %xmm2, %xmm0
; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]
; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm0[0,2,2,3]
; SSE2-NEXT: punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm1[0]
; SSE2-NEXT: pand %xmm2, %xmm4
; SSE2-NEXT: pandn %xmm5, %xmm2
; SSE2-NEXT: por %xmm4, %xmm2
; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
; SSE2-NEXT: psrad $16, %xmm0
; SSE2-NEXT: punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
; SSE2-NEXT: packssdw %xmm1, %xmm0
; SSE2-NEXT: pand %xmm0, %xmm4
; SSE2-NEXT: pandn %xmm5, %xmm0
; SSE2-NEXT: por %xmm4, %xmm0
; SSE2-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3]
; SSE2-NEXT: psrad $16, %xmm2
; SSE2-NEXT: punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
; SSE2-NEXT: psrad $16, %xmm1
; SSE2-NEXT: movdqa %xmm2, %xmm0
; SSE2-NEXT: retq
;
; SSE41-LABEL: sext:
; SSE41: # BB#0:
; SSE41-NEXT: cmpltps %xmm3, %xmm1
; SSE41-NEXT: movdqa {{.*#+}} xmm3 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
; SSE41-NEXT: pshufb %xmm3, %xmm1
; SSE41-NEXT: cmpltps %xmm2, %xmm0
; SSE41-NEXT: pshufb %xmm3, %xmm0
; SSE41-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
; SSE41-NEXT: pand %xmm0, %xmm4
; SSE41-NEXT: pandn %xmm5, %xmm0
; SSE41-NEXT: por %xmm4, %xmm0
; SSE41-NEXT: pmovsxwd %xmm0, %xmm2
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
; SSE41-NEXT: pmovsxwd %xmm0, %xmm1
; SSE41-NEXT: movdqa %xmm2, %xmm0
; SSE41-NEXT: packssdw %xmm1, %xmm0
; SSE41-NEXT: pblendvb %xmm0, %xmm4, %xmm5
; SSE41-NEXT: pmovsxwd %xmm5, %xmm0
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm5[2,3,0,1]
; SSE41-NEXT: pmovsxwd %xmm1, %xmm1
; SSE41-NEXT: retq
;
; AVX1-LABEL: sext:
Expand Down Expand Up @@ -76,39 +65,29 @@ define <8 x i32> @sext(<8 x float> %a, <8 x float> %b, <8 x i16> %c, <8 x i16> %
define <8 x i32> @zext(<8 x float> %a, <8 x float> %b, <8 x i16> %c, <8 x i16> %d) {
; SSE2-LABEL: zext:
; SSE2: # BB#0:
; SSE2-NEXT: movaps %xmm0, %xmm6
; SSE2-NEXT: cmpltps %xmm3, %xmm1
; SSE2-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7]
; SSE2-NEXT: pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm1[0,2,2,3]
; SSE2-NEXT: cmpltps %xmm2, %xmm0
; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[0,2,2,3]
; SSE2-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm3[0]
; SSE2-NEXT: pand %xmm1, %xmm4
; SSE2-NEXT: pandn %xmm5, %xmm1
; SSE2-NEXT: por %xmm4, %xmm1
; SSE2-NEXT: xorps %xmm2, %xmm2
; SSE2-NEXT: movdqa %xmm1, %xmm0
; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
; SSE2-NEXT: punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
; SSE2-NEXT: cmpltps %xmm2, %xmm6
; SSE2-NEXT: packssdw %xmm1, %xmm6
; SSE2-NEXT: pand %xmm6, %xmm4
; SSE2-NEXT: pandn %xmm5, %xmm6
; SSE2-NEXT: por %xmm4, %xmm6
; SSE2-NEXT: pxor %xmm1, %xmm1
; SSE2-NEXT: movdqa %xmm6, %xmm0
; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
; SSE2-NEXT: punpckhwd {{.*#+}} xmm6 = xmm6[4],xmm1[4],xmm6[5],xmm1[5],xmm6[6],xmm1[6],xmm6[7],xmm1[7]
; SSE2-NEXT: movdqa %xmm6, %xmm1
; SSE2-NEXT: retq
;
; SSE41-LABEL: zext:
; SSE41: # BB#0:
; SSE41-NEXT: cmpltps %xmm3, %xmm1
; SSE41-NEXT: movdqa {{.*#+}} xmm3 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
; SSE41-NEXT: pshufb %xmm3, %xmm1
; SSE41-NEXT: cmpltps %xmm2, %xmm0
; SSE41-NEXT: pshufb %xmm3, %xmm0
; SSE41-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
; SSE41-NEXT: pand %xmm0, %xmm4
; SSE41-NEXT: pandn %xmm5, %xmm0
; SSE41-NEXT: por %xmm4, %xmm0
; SSE41-NEXT: pmovzxwd {{.*#+}} xmm2 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
; SSE41-NEXT: pmovzxwd {{.*#+}} xmm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
; SSE41-NEXT: movdqa %xmm2, %xmm0
; SSE41-NEXT: packssdw %xmm1, %xmm0
; SSE41-NEXT: pblendvb %xmm0, %xmm4, %xmm5
; SSE41-NEXT: pmovzxwd {{.*#+}} xmm0 = xmm5[0],zero,xmm5[1],zero,xmm5[2],zero,xmm5[3],zero
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm5[2,3,0,1]
; SSE41-NEXT: pmovzxwd {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero
; SSE41-NEXT: retq
;
; AVX1-LABEL: zext:
Expand Down Expand Up @@ -306,25 +285,13 @@ define void @example25() nounwind {
; SSE2-NEXT: movaps da+4096(%rax), %xmm1
; SSE2-NEXT: movaps da+4112(%rax), %xmm2
; SSE2-NEXT: cmpltps db+4112(%rax), %xmm2
; SSE2-NEXT: pshuflw {{.*#+}} xmm2 = xmm2[0,2,2,3,4,5,6,7]
; SSE2-NEXT: pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
; SSE2-NEXT: cmpltps db+4096(%rax), %xmm1
; SSE2-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7]
; SSE2-NEXT: pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
; SSE2-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
; SSE2-NEXT: packssdw %xmm2, %xmm1
; SSE2-NEXT: movaps dc+4096(%rax), %xmm2
; SSE2-NEXT: movaps dc+4112(%rax), %xmm3
; SSE2-NEXT: cmpltps dd+4112(%rax), %xmm3
; SSE2-NEXT: pshuflw {{.*#+}} xmm3 = xmm3[0,2,2,3,4,5,6,7]
; SSE2-NEXT: pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,4,6,6,7]
; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
; SSE2-NEXT: cmpltps dd+4096(%rax), %xmm2
; SSE2-NEXT: pshuflw {{.*#+}} xmm2 = xmm2[0,2,2,3,4,5,6,7]
; SSE2-NEXT: pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
; SSE2-NEXT: punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
; SSE2-NEXT: packssdw %xmm3, %xmm2
; SSE2-NEXT: pand %xmm1, %xmm2
; SSE2-NEXT: movdqa %xmm2, %xmm1
; SSE2-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
Expand All @@ -341,32 +308,27 @@ define void @example25() nounwind {
; SSE41-LABEL: example25:
; SSE41: # BB#0: # %vector.ph
; SSE41-NEXT: movq $-4096, %rax # imm = 0xF000
; SSE41-NEXT: movdqa {{.*#+}} xmm0 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
; SSE41-NEXT: movdqa {{.*#+}} xmm1 = [1,1,1,1]
; SSE41-NEXT: movdqa {{.*#+}} xmm0 = [1,1,1,1]
; SSE41-NEXT: .p2align 4, 0x90
; SSE41-NEXT: .LBB5_1: # %vector.body
; SSE41-NEXT: # =>This Inner Loop Header: Depth=1
; SSE41-NEXT: movaps da+4096(%rax), %xmm2
; SSE41-NEXT: movaps da+4112(%rax), %xmm3
; SSE41-NEXT: cmpltps db+4112(%rax), %xmm3
; SSE41-NEXT: pshufb %xmm0, %xmm3
; SSE41-NEXT: cmpltps db+4096(%rax), %xmm2
; SSE41-NEXT: pshufb %xmm0, %xmm2
; SSE41-NEXT: punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
; SSE41-NEXT: movaps dc+4096(%rax), %xmm3
; SSE41-NEXT: movaps dc+4112(%rax), %xmm4
; SSE41-NEXT: cmpltps dd+4112(%rax), %xmm4
; SSE41-NEXT: pshufb %xmm0, %xmm4
; SSE41-NEXT: cmpltps dd+4096(%rax), %xmm3
; SSE41-NEXT: pshufb %xmm0, %xmm3
; SSE41-NEXT: punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm4[0]
; SSE41-NEXT: pand %xmm2, %xmm3
; SSE41-NEXT: pmovzxwd {{.*#+}} xmm2 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero
; SSE41-NEXT: movaps da+4096(%rax), %xmm1
; SSE41-NEXT: movaps da+4112(%rax), %xmm2
; SSE41-NEXT: cmpltps db+4112(%rax), %xmm2
; SSE41-NEXT: cmpltps db+4096(%rax), %xmm1
; SSE41-NEXT: packssdw %xmm2, %xmm1
; SSE41-NEXT: movaps dc+4096(%rax), %xmm2
; SSE41-NEXT: movaps dc+4112(%rax), %xmm3
; SSE41-NEXT: cmpltps dd+4112(%rax), %xmm3
; SSE41-NEXT: cmpltps dd+4096(%rax), %xmm2
; SSE41-NEXT: packssdw %xmm3, %xmm2
; SSE41-NEXT: pand %xmm1, %xmm2
; SSE41-NEXT: punpckhwd {{.*#+}} xmm3 = xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
; SSE41-NEXT: pand %xmm1, %xmm3
; SSE41-NEXT: movdqa %xmm3, dj+4112(%rax)
; SSE41-NEXT: movdqa %xmm2, dj+4096(%rax)
; SSE41-NEXT: pmovzxwd {{.*#+}} xmm1 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero
; SSE41-NEXT: pand %xmm0, %xmm1
; SSE41-NEXT: punpckhwd {{.*#+}} xmm2 = xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
; SSE41-NEXT: pand %xmm0, %xmm2
; SSE41-NEXT: movdqa %xmm2, dj+4112(%rax)
; SSE41-NEXT: movdqa %xmm1, dj+4096(%rax)
; SSE41-NEXT: addq $32, %rax
; SSE41-NEXT: jne .LBB5_1
; SSE41-NEXT: # BB#2: # %for.end
Expand Down Expand Up @@ -459,14 +421,8 @@ define void @example24(i16 signext %x, i16 signext %y) nounwind {
; SSE2-NEXT: movaps da+4096(%rax), %xmm2
; SSE2-NEXT: movaps da+4112(%rax), %xmm3
; SSE2-NEXT: cmpltps db+4112(%rax), %xmm3
; SSE2-NEXT: pshuflw {{.*#+}} xmm3 = xmm3[0,2,2,3,4,5,6,7]
; SSE2-NEXT: pshufhw {{.*#+}} xmm3 = xmm3[0,1,2,3,4,6,6,7]
; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
; SSE2-NEXT: cmpltps db+4096(%rax), %xmm2
; SSE2-NEXT: pshuflw {{.*#+}} xmm2 = xmm2[0,2,2,3,4,5,6,7]
; SSE2-NEXT: pshufhw {{.*#+}} xmm2 = xmm2[0,1,2,3,4,6,6,7]
; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
; SSE2-NEXT: punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
; SSE2-NEXT: packssdw %xmm3, %xmm2
; SSE2-NEXT: movdqa %xmm0, %xmm3
; SSE2-NEXT: pand %xmm2, %xmm3
; SSE2-NEXT: pandn %xmm1, %xmm2
Expand All @@ -486,31 +442,26 @@ define void @example24(i16 signext %x, i16 signext %y) nounwind {
; SSE41: # BB#0: # %vector.ph
; SSE41-NEXT: movd %edi, %xmm0
; SSE41-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]
; SSE41-NEXT: movd %esi, %xmm1
; SSE41-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,0,1,1]
; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[0,0,1,1]
; SSE41-NEXT: movd %esi, %xmm0
; SSE41-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,0,0,0,4,5,6,7]
; SSE41-NEXT: pshufd {{.*#+}} xmm2 = xmm0[0,0,1,1]
; SSE41-NEXT: movq $-4096, %rax # imm = 0xF000
; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
; SSE41-NEXT: .p2align 4, 0x90
; SSE41-NEXT: .LBB6_1: # %vector.body
; SSE41-NEXT: # =>This Inner Loop Header: Depth=1
; SSE41-NEXT: movaps da+4096(%rax), %xmm3
; SSE41-NEXT: movaps da+4112(%rax), %xmm4
; SSE41-NEXT: cmpltps db+4112(%rax), %xmm4
; SSE41-NEXT: pshufb %xmm2, %xmm4
; SSE41-NEXT: cmpltps db+4096(%rax), %xmm3
; SSE41-NEXT: pshufb %xmm2, %xmm3
; SSE41-NEXT: punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm4[0]
; SSE41-NEXT: movdqa %xmm0, %xmm4
; SSE41-NEXT: pand %xmm3, %xmm4
; SSE41-NEXT: pandn %xmm1, %xmm3
; SSE41-NEXT: por %xmm4, %xmm3
; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm3[2,3,0,1]
; SSE41-NEXT: pmovsxwd %xmm4, %xmm4
; SSE41-NEXT: movaps da+4096(%rax), %xmm0
; SSE41-NEXT: movaps da+4112(%rax), %xmm3
; SSE41-NEXT: cmpltps db+4112(%rax), %xmm3
; SSE41-NEXT: cmpltps db+4096(%rax), %xmm0
; SSE41-NEXT: packssdw %xmm3, %xmm0
; SSE41-NEXT: movdqa %xmm2, %xmm3
; SSE41-NEXT: pblendvb %xmm0, %xmm1, %xmm3
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm3[2,3,0,1]
; SSE41-NEXT: pmovsxwd %xmm0, %xmm0
; SSE41-NEXT: pmovsxwd %xmm3, %xmm3
; SSE41-NEXT: movdqa %xmm3, dj+4096(%rax)
; SSE41-NEXT: movdqa %xmm4, dj+4112(%rax)
; SSE41-NEXT: movdqa %xmm0, dj+4112(%rax)
; SSE41-NEXT: addq $32, %rax
; SSE41-NEXT: jne .LBB6_1
; SSE41-NEXT: # BB#2: # %for.end
Expand Down
11 changes: 3 additions & 8 deletions llvm/test/CodeGen/X86/combine-fcopysign.ll
Original file line number Diff line number Diff line change
Expand Up @@ -113,20 +113,15 @@ define <4 x float> @combine_vec_fcopysign_neg_constant1(<4 x float> %x) {
define <4 x float> @combine_vec_fcopysign_fneg_fabs_sgn(<4 x float> %x, <4 x float> %y) {
; SSE-LABEL: combine_vec_fcopysign_fneg_fabs_sgn:
; SSE: # BB#0:
; SSE-NEXT: movaps {{.*#+}} xmm2 = [-0.000000e+00,-0.000000e+00,-0.000000e+00,-0.000000e+00]
; SSE-NEXT: orps %xmm2, %xmm1
; SSE-NEXT: andps %xmm2, %xmm1
; SSE-NEXT: andps {{.*}}(%rip), %xmm0
; SSE-NEXT: orps %xmm1, %xmm0
; SSE-NEXT: orps {{.*}}(%rip), %xmm0
; SSE-NEXT: retq
;
; AVX-LABEL: combine_vec_fcopysign_fneg_fabs_sgn:
; AVX: # BB#0:
; AVX-NEXT: vbroadcastss {{.*}}(%rip), %xmm1
; AVX-NEXT: vbroadcastss {{.*}}(%rip), %xmm2
; AVX-NEXT: vorps %xmm2, %xmm1, %xmm1
; AVX-NEXT: vbroadcastss {{.*}}(%rip), %xmm3
; AVX-NEXT: vandps %xmm3, %xmm0, %xmm0
; AVX-NEXT: vandps %xmm2, %xmm1, %xmm1
; AVX-NEXT: vandps %xmm2, %xmm0, %xmm0
; AVX-NEXT: vorps %xmm1, %xmm0, %xmm0
; AVX-NEXT: retq
%1 = call <4 x float> @llvm.fabs.v4f32(<4 x float> %y)
Expand Down
97 changes: 41 additions & 56 deletions llvm/test/CodeGen/X86/machine-cp.ll
Original file line number Diff line number Diff line change
Expand Up @@ -99,100 +99,85 @@ while.end: ; preds = %while.body, %entry
define <16 x float> @foo(<16 x float> %x) {
; CHECK-LABEL: foo:
; CHECK: ## BB#0: ## %bb
; CHECK-NEXT: xorps %xmm4, %xmm4
; CHECK-NEXT: movaps %xmm3, %xmm8
; CHECK-NEXT: xorps %xmm3, %xmm3
; CHECK-NEXT: pxor %xmm6, %xmm6
; CHECK-NEXT: pcmpgtd %xmm0, %xmm6
; CHECK-NEXT: movdqa {{.*#+}} xmm5 = [255,255,255,255]
; CHECK-NEXT: pand %xmm6, %xmm5
; CHECK-NEXT: packuswb %xmm5, %xmm5
; CHECK-NEXT: packuswb %xmm5, %xmm5
; CHECK-NEXT: cvttps2dq %xmm0, %xmm13
; CHECK-NEXT: movdqa %xmm0, %xmm10
; CHECK-NEXT: cmpltps %xmm4, %xmm10
; CHECK-NEXT: movdqa %xmm6, %xmm8
; CHECK-NEXT: pxor %xmm10, %xmm8
; CHECK-NEXT: cmpltps %xmm3, %xmm10
; CHECK-NEXT: movdqa %xmm6, %xmm9
; CHECK-NEXT: pxor %xmm10, %xmm9
; CHECK-NEXT: cvttps2dq %xmm1, %xmm14
; CHECK-NEXT: movaps %xmm1, %xmm11
; CHECK-NEXT: cmpltps %xmm4, %xmm11
; CHECK-NEXT: movdqa %xmm6, %xmm9
; CHECK-NEXT: pxor %xmm11, %xmm9
; CHECK-NEXT: cvttps2dq %xmm2, %xmm1
; CHECK-NEXT: cmpltps %xmm4, %xmm2
; CHECK-NEXT: cmpltps %xmm3, %xmm11
; CHECK-NEXT: movdqa %xmm6, %xmm7
; CHECK-NEXT: pxor %xmm2, %xmm7
; CHECK-NEXT: cvttps2dq %xmm3, %xmm12
; CHECK-NEXT: cmpltps %xmm4, %xmm3
; CHECK-NEXT: pxor %xmm3, %xmm6
; CHECK-NEXT: pxor %xmm11, %xmm7
; CHECK-NEXT: cvttps2dq %xmm2, %xmm1
; CHECK-NEXT: cmpltps %xmm3, %xmm2
; CHECK-NEXT: movdqa %xmm6, %xmm4
; CHECK-NEXT: pxor %xmm2, %xmm4
; CHECK-NEXT: cvttps2dq %xmm8, %xmm12
; CHECK-NEXT: cmpltps %xmm3, %xmm8
; CHECK-NEXT: pxor %xmm8, %xmm6
; CHECK-NEXT: movdqa {{.*#+}} xmm0 = [1,1,1,1]
; CHECK-NEXT: pand %xmm0, %xmm6
; CHECK-NEXT: pand %xmm0, %xmm4
; CHECK-NEXT: pand %xmm0, %xmm7
; CHECK-NEXT: pand %xmm0, %xmm9
; CHECK-NEXT: pand %xmm0, %xmm8
; CHECK-NEXT: cvtdq2ps %xmm13, %xmm15
; CHECK-NEXT: cvtdq2ps %xmm14, %xmm14
; CHECK-NEXT: cvtdq2ps %xmm1, %xmm13
; CHECK-NEXT: cvtdq2ps %xmm12, %xmm12
; CHECK-NEXT: pxor %xmm0, %xmm0
; CHECK-NEXT: cmpltps %xmm12, %xmm0
; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]
; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
; CHECK-NEXT: xorps %xmm1, %xmm1
; CHECK-NEXT: cmpltps %xmm13, %xmm1
; CHECK-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7]
; CHECK-NEXT: pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7]
; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
; CHECK-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
; CHECK-NEXT: pxor %xmm0, %xmm0
; CHECK-NEXT: packssdw %xmm0, %xmm1
; CHECK-NEXT: xorps %xmm0, %xmm0
; CHECK-NEXT: cmpltps %xmm14, %xmm0
; CHECK-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
; CHECK-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7]
; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
; CHECK-NEXT: cmpltps %xmm15, %xmm4
; CHECK-NEXT: pshuflw {{.*#+}} xmm4 = xmm4[0,2,2,3,4,5,6,7]
; CHECK-NEXT: pshufhw {{.*#+}} xmm4 = xmm4[0,1,2,3,4,6,6,7]
; CHECK-NEXT: pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
; CHECK-NEXT: punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm0[0]
; CHECK-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255]
; CHECK-NEXT: pand %xmm0, %xmm1
; CHECK-NEXT: pand %xmm0, %xmm4
; CHECK-NEXT: packuswb %xmm5, %xmm5
; CHECK-NEXT: packuswb %xmm5, %xmm5
; CHECK-NEXT: packuswb %xmm1, %xmm4
; CHECK-NEXT: pand %xmm5, %xmm4
; CHECK-NEXT: movdqa %xmm4, %xmm1
; CHECK-NEXT: cmpltps %xmm15, %xmm3
; CHECK-NEXT: packssdw %xmm0, %xmm3
; CHECK-NEXT: packsswb %xmm1, %xmm3
; CHECK-NEXT: pand %xmm5, %xmm3
; CHECK-NEXT: movdqa %xmm3, %xmm1
; CHECK-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
; CHECK-NEXT: movdqa %xmm1, %xmm0
; CHECK-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
; CHECK-NEXT: pslld $31, %xmm0
; CHECK-NEXT: psrad $31, %xmm0
; CHECK-NEXT: pxor %xmm8, %xmm0
; CHECK-NEXT: pxor %xmm15, %xmm0
; CHECK-NEXT: punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
; CHECK-NEXT: pslld $31, %xmm1
; CHECK-NEXT: psrad $31, %xmm1
; CHECK-NEXT: punpckhbw {{.*#+}} xmm4 = xmm4[8],xmm0[8],xmm4[9],xmm0[9],xmm4[10],xmm0[10],xmm4[11],xmm0[11],xmm4[12],xmm0[12],xmm4[13],xmm0[13],xmm4[14],xmm0[14],xmm4[15],xmm0[15]
; CHECK-NEXT: pxor %xmm9, %xmm1
; CHECK-NEXT: pxor %xmm14, %xmm1
; CHECK-NEXT: movdqa %xmm4, %xmm5
; CHECK-NEXT: punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm0[8],xmm3[9],xmm0[9],xmm3[10],xmm0[10],xmm3[11],xmm0[11],xmm3[12],xmm0[12],xmm3[13],xmm0[13],xmm3[14],xmm0[14],xmm3[15],xmm0[15]
; CHECK-NEXT: movdqa %xmm3, %xmm5
; CHECK-NEXT: punpcklwd {{.*#+}} xmm5 = xmm5[0],xmm0[0],xmm5[1],xmm0[1],xmm5[2],xmm0[2],xmm5[3],xmm0[3]
; CHECK-NEXT: pslld $31, %xmm5
; CHECK-NEXT: psrad $31, %xmm5
; CHECK-NEXT: pxor %xmm7, %xmm5
; CHECK-NEXT: punpckhwd {{.*#+}} xmm3 = xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
; CHECK-NEXT: pslld $31, %xmm3
; CHECK-NEXT: psrad $31, %xmm3
; CHECK-NEXT: pxor %xmm9, %xmm0
; CHECK-NEXT: pxor %xmm15, %xmm0
; CHECK-NEXT: pxor %xmm7, %xmm1
; CHECK-NEXT: pxor %xmm14, %xmm1
; CHECK-NEXT: pxor %xmm4, %xmm5
; CHECK-NEXT: pxor %xmm13, %xmm5
; CHECK-NEXT: punpckhwd {{.*#+}} xmm4 = xmm4[4],xmm0[4],xmm4[5],xmm0[5],xmm4[6],xmm0[6],xmm4[7],xmm0[7]
; CHECK-NEXT: pslld $31, %xmm4
; CHECK-NEXT: psrad $31, %xmm4
; CHECK-NEXT: pxor %xmm6, %xmm4
; CHECK-NEXT: pxor %xmm12, %xmm4
; CHECK-NEXT: pand %xmm3, %xmm4
; CHECK-NEXT: pxor %xmm6, %xmm3
; CHECK-NEXT: pxor %xmm12, %xmm3
; CHECK-NEXT: pand %xmm8, %xmm3
; CHECK-NEXT: pand %xmm2, %xmm5
; CHECK-NEXT: pand %xmm11, %xmm1
; CHECK-NEXT: pand %xmm10, %xmm0
; CHECK-NEXT: pxor %xmm8, %xmm0
; CHECK-NEXT: pxor %xmm9, %xmm1
; CHECK-NEXT: pxor %xmm7, %xmm5
; CHECK-NEXT: pxor %xmm6, %xmm4
; CHECK-NEXT: pxor %xmm9, %xmm0
; CHECK-NEXT: pxor %xmm7, %xmm1
; CHECK-NEXT: pxor %xmm4, %xmm5
; CHECK-NEXT: pxor %xmm6, %xmm3
; CHECK-NEXT: movdqa %xmm5, %xmm2
; CHECK-NEXT: movdqa %xmm4, %xmm3
; CHECK-NEXT: retq
bb:
%v3 = icmp slt <16 x i32> undef, zeroinitializer
Expand Down
370 changes: 189 additions & 181 deletions llvm/test/CodeGen/X86/vector-compare-results.ll

Large diffs are not rendered by default.