Index: lib/Target/X86/X86InstrInfo.cpp =================================================================== --- lib/Target/X86/X86InstrInfo.cpp +++ lib/Target/X86/X86InstrInfo.cpp @@ -7705,9 +7705,14 @@ case X86::FsFLD0SS: case X86::FsFLD0SD: return Expand2AddrUndef(MIB, get(HasAVX ? X86::VXORPSrr : X86::XORPSrr)); - case X86::AVX_SET0: + case X86::AVX_SET0: { assert(HasAVX && "AVX not supported"); - return Expand2AddrUndef(MIB, get(X86::VXORPSYrr)); + const TargetRegisterInfo *TRI = &getRegisterInfo(); + unsigned SrcReg = MIB->getOperand(0).getReg(); + unsigned XReg = TRI->getSubReg(SrcReg, X86::sub_xmm); + MIB->getOperand(0).setReg(XReg); + return Expand2AddrUndef(MIB, get(X86::VXORPSrr)); + } case X86::AVX512_128_SET0: case X86::AVX512_FsFLD0SS: case X86::AVX512_FsFLD0SD: { Index: test/CodeGen/X86/2012-01-12-extract-sv.ll =================================================================== --- test/CodeGen/X86/2012-01-12-extract-sv.ll +++ test/CodeGen/X86/2012-01-12-extract-sv.ll @@ -8,7 +8,7 @@ ; CHECK-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,0,1,1] ; CHECK-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[0,1,0,1] ; CHECK-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm1 -; CHECK-NEXT: vxorps %ymm2, %ymm2, %ymm2 +; CHECK-NEXT: vxorps %xmm2, %xmm2, %xmm2 ; CHECK-NEXT: vblendps {{.*#+}} ymm1 = ymm2[0,1,2,3,4,5,6],ymm1[7] ; CHECK-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm2[1,2,3,4,5,6,7] ; CHECK-NEXT: vmovaps %ymm0, (%eax) Index: test/CodeGen/X86/2012-04-26-sdglue.ll =================================================================== --- test/CodeGen/X86/2012-04-26-sdglue.ll +++ test/CodeGen/X86/2012-04-26-sdglue.ll @@ -8,7 +8,7 @@ ; CHECK-LABEL: func: ; CHECK: ## BB#0: ; CHECK-NEXT: vmovups 0, %xmm0 -; CHECK-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; CHECK-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; CHECK-NEXT: vblendps {{.*#+}} ymm2 = ymm0[0,1,2,3],ymm1[4,5,6,7] ; CHECK-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[1,2,3,3] ; CHECK-NEXT: vbroadcastss 32, %xmm3 @@ -26,6 +26,7 @@ ; CHECK-NEXT: vmovaps %ymm0, (%rax) ; CHECK-NEXT: vzeroupper ; CHECK-NEXT: retq +; CHECK-NEXT: ## -- End function %tmp = load <4 x float>, <4 x float>* null, align 1 %tmp14 = getelementptr <4 x float>, <4 x float>* null, i32 2 %tmp15 = load <4 x float>, <4 x float>* %tmp14, align 1 Index: test/CodeGen/X86/2012-1-10-buildvector.ll =================================================================== --- test/CodeGen/X86/2012-1-10-buildvector.ll +++ test/CodeGen/X86/2012-1-10-buildvector.ll @@ -4,7 +4,7 @@ define void @bad_cast() { ; CHECK-LABEL: bad_cast: ; CHECK: # BB#0: -; CHECK-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; CHECK-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; CHECK-NEXT: vmovaps %xmm0, (%eax) ; CHECK-NEXT: movl $0, (%eax) ; CHECK-NEXT: vzeroupper Index: test/CodeGen/X86/all-ones-vector.ll =================================================================== --- test/CodeGen/X86/all-ones-vector.ll +++ test/CodeGen/X86/all-ones-vector.ll @@ -157,7 +157,7 @@ ; ; X32-AVX1-LABEL: allones_v32i8: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: retl ; @@ -174,7 +174,7 @@ ; ; X64-AVX1-LABEL: allones_v32i8: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: retq ; @@ -194,7 +194,7 @@ ; ; X32-AVX1-LABEL: allones_v16i16: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: retl ; @@ -211,7 +211,7 @@ ; ; X64-AVX1-LABEL: allones_v16i16: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: retq ; @@ -231,7 +231,7 @@ ; ; X32-AVX1-LABEL: allones_v8i32: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: retl ; @@ -248,7 +248,7 @@ ; ; X64-AVX1-LABEL: allones_v8i32: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: retq ; @@ -268,7 +268,7 @@ ; ; X32-AVX1-LABEL: allones_v4i64: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: retl ; @@ -285,7 +285,7 @@ ; ; X64-AVX1-LABEL: allones_v4i64: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: retq ; @@ -305,7 +305,7 @@ ; ; X32-AVX1-LABEL: allones_v4f64: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: retl ; @@ -322,7 +322,7 @@ ; ; X64-AVX1-LABEL: allones_v4f64: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: retq ; @@ -342,7 +342,7 @@ ; ; X32-AVX1-LABEL: allones_v4f64_optsize: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: retl ; @@ -359,7 +359,7 @@ ; ; X64-AVX1-LABEL: allones_v4f64_optsize: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: retq ; @@ -379,7 +379,7 @@ ; ; X32-AVX1-LABEL: allones_v8f32: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: retl ; @@ -396,7 +396,7 @@ ; ; X64-AVX1-LABEL: allones_v8f32: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: retq ; @@ -416,7 +416,7 @@ ; ; X32-AVX1-LABEL: allones_v8f32_optsize: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: retl ; @@ -433,7 +433,7 @@ ; ; X64-AVX1-LABEL: allones_v8f32_optsize: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: retq ; @@ -455,7 +455,7 @@ ; ; X32-AVX1-LABEL: allones_v64i8: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: vmovaps %ymm0, %ymm1 ; X32-AVX1-NEXT: retl @@ -487,7 +487,7 @@ ; ; X64-AVX1-LABEL: allones_v64i8: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: vmovaps %ymm0, %ymm1 ; X64-AVX1-NEXT: retq @@ -522,7 +522,7 @@ ; ; X32-AVX1-LABEL: allones_v32i16: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: vmovaps %ymm0, %ymm1 ; X32-AVX1-NEXT: retl @@ -554,7 +554,7 @@ ; ; X64-AVX1-LABEL: allones_v32i16: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: vmovaps %ymm0, %ymm1 ; X64-AVX1-NEXT: retq @@ -589,7 +589,7 @@ ; ; X32-AVX1-LABEL: allones_v16i32: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: vmovaps %ymm0, %ymm1 ; X32-AVX1-NEXT: retl @@ -615,7 +615,7 @@ ; ; X64-AVX1-LABEL: allones_v16i32: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: vmovaps %ymm0, %ymm1 ; X64-AVX1-NEXT: retq @@ -644,7 +644,7 @@ ; ; X32-AVX1-LABEL: allones_v8i64: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: vmovaps %ymm0, %ymm1 ; X32-AVX1-NEXT: retl @@ -670,7 +670,7 @@ ; ; X64-AVX1-LABEL: allones_v8i64: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: vmovaps %ymm0, %ymm1 ; X64-AVX1-NEXT: retq @@ -699,7 +699,7 @@ ; ; X32-AVX1-LABEL: allones_v8f64: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: vmovaps %ymm0, %ymm1 ; X32-AVX1-NEXT: retl @@ -725,7 +725,7 @@ ; ; X64-AVX1-LABEL: allones_v8f64: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: vmovaps %ymm0, %ymm1 ; X64-AVX1-NEXT: retq @@ -754,7 +754,7 @@ ; ; X32-AVX1-LABEL: allones_v16f32: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: vmovaps %ymm0, %ymm1 ; X32-AVX1-NEXT: retl @@ -780,7 +780,7 @@ ; ; X64-AVX1-LABEL: allones_v16f32: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: vmovaps %ymm0, %ymm1 ; X64-AVX1-NEXT: retq Index: test/CodeGen/X86/avx-basic.ll =================================================================== --- test/CodeGen/X86/avx-basic.ll +++ test/CodeGen/X86/avx-basic.ll @@ -21,7 +21,7 @@ ; CHECK-LABEL: zero256: ; CHECK: ## BB#0: ; CHECK-NEXT: movq _x@{{.*}}(%rip), %rax -; CHECK-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; CHECK-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; CHECK-NEXT: vmovaps %ymm0, (%rax) ; CHECK-NEXT: movq _y@{{.*}}(%rip), %rax ; CHECK-NEXT: vmovaps %ymm0, (%rax) @@ -36,7 +36,7 @@ define void @ones([0 x float]* nocapture %RET, [0 x float]* nocapture %aFOO) nounwind { ; CHECK-LABEL: ones: ; CHECK: ## BB#0: ## %allocas -; CHECK-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; CHECK-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; CHECK-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; CHECK-NEXT: vmovaps %ymm0, (%rdi) ; CHECK-NEXT: vzeroupper @@ -54,7 +54,7 @@ define void @ones2([0 x i32]* nocapture %RET, [0 x i32]* nocapture %aFOO) nounwind { ; CHECK-LABEL: ones2: ; CHECK: ## BB#0: ## %allocas -; CHECK-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; CHECK-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; CHECK-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; CHECK-NEXT: vmovaps %ymm0, (%rdi) ; CHECK-NEXT: vzeroupper Index: test/CodeGen/X86/avx-cast.ll =================================================================== --- test/CodeGen/X86/avx-cast.ll +++ test/CodeGen/X86/avx-cast.ll @@ -10,7 +10,7 @@ ; AVX-LABEL: castA: ; AVX: ## BB#0: ; AVX-NEXT: ## kill: %XMM0 %XMM0 %YMM0 -; AVX-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; AVX-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7] ; AVX-NEXT: retq %shuffle.i = shufflevector <4 x float> %m, <4 x float> zeroinitializer, <8 x i32> @@ -21,7 +21,7 @@ ; AVX-LABEL: castB: ; AVX: ## BB#0: ; AVX-NEXT: ## kill: %XMM0 %XMM0 %YMM0 -; AVX-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; AVX-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3] ; AVX-NEXT: retq %shuffle.i = shufflevector <2 x double> %m, <2 x double> zeroinitializer, <4 x i32> @@ -34,14 +34,14 @@ ; AVX1-LABEL: castC: ; AVX1: ## BB#0: ; AVX1-NEXT: ## kill: %XMM0 %XMM0 %YMM0 -; AVX1-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; AVX1-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3] ; AVX1-NEXT: retq ; ; AVX2-LABEL: castC: ; AVX2: ## BB#0: ; AVX2-NEXT: ## kill: %XMM0 %XMM0 %YMM0 -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7] ; AVX2-NEXT: retq %shuffle.i = shufflevector <2 x i64> %m, <2 x i64> zeroinitializer, <4 x i32> Index: test/CodeGen/X86/avx-cvt-3.ll =================================================================== --- test/CodeGen/X86/avx-cvt-3.ll +++ test/CodeGen/X86/avx-cvt-3.ll @@ -7,14 +7,14 @@ define <8 x float> @sitofp_insert_zero_v8i32(<8 x i32> %a0) { ; X86-LABEL: sitofp_insert_zero_v8i32: ; X86: # BB#0: -; X86-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X86-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X86-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4,5],ymm0[6,7] ; X86-NEXT: vcvtdq2ps %ymm0, %ymm0 ; X86-NEXT: retl ; ; X64-LABEL: sitofp_insert_zero_v8i32: ; X64: # BB#0: -; X64-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X64-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X64-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4,5],ymm0[6,7] ; X64-NEXT: vcvtdq2ps %ymm0, %ymm0 ; X64-NEXT: retq @@ -29,14 +29,14 @@ define <8 x float> @sitofp_shuffle_zero_v8i32(<8 x i32> %a0) { ; X86-LABEL: sitofp_shuffle_zero_v8i32: ; X86: # BB#0: -; X86-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X86-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X86-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7] ; X86-NEXT: vcvtdq2ps %ymm0, %ymm0 ; X86-NEXT: retl ; ; X64-LABEL: sitofp_shuffle_zero_v8i32: ; X64: # BB#0: -; X64-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X64-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X64-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7] ; X64-NEXT: vcvtdq2ps %ymm0, %ymm0 ; X64-NEXT: retq @@ -48,7 +48,7 @@ define <8 x float> @sitofp_insert_allbits_v8i32(<8 x i32> %a0) { ; X86-LABEL: sitofp_insert_allbits_v8i32: ; X86: # BB#0: -; X86-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X86-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X86-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; X86-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4,5],ymm0[6,7] ; X86-NEXT: vcvtdq2ps %ymm0, %ymm0 @@ -56,7 +56,7 @@ ; ; X64-LABEL: sitofp_insert_allbits_v8i32: ; X64: # BB#0: -; X64-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X64-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X64-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; X64-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4,5],ymm0[6,7] ; X64-NEXT: vcvtdq2ps %ymm0, %ymm0 @@ -72,7 +72,7 @@ define <8 x float> @sitofp_shuffle_allbits_v8i32(<8 x i32> %a0) { ; X86-LABEL: sitofp_shuffle_allbits_v8i32: ; X86: # BB#0: -; X86-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X86-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X86-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; X86-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7] ; X86-NEXT: vcvtdq2ps %ymm0, %ymm0 @@ -80,7 +80,7 @@ ; ; X64-LABEL: sitofp_shuffle_allbits_v8i32: ; X64: # BB#0: -; X64-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X64-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X64-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; X64-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7] ; X64-NEXT: vcvtdq2ps %ymm0, %ymm0 @@ -93,7 +93,7 @@ define <8 x float> @sitofp_insert_constants_v8i32(<8 x i32> %a0) { ; X86-LABEL: sitofp_insert_constants_v8i32: ; X86: # BB#0: -; X86-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X86-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X86-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3,4,5,6,7] ; X86-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; X86-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2],ymm0[3,4,5,6,7] @@ -108,7 +108,7 @@ ; ; X64-LABEL: sitofp_insert_constants_v8i32: ; X64: # BB#0: -; X64-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X64-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X64-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3,4,5,6,7] ; X64-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; X64-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2],ymm0[3,4,5,6,7] Index: test/CodeGen/X86/avx-intrinsics-fast-isel.ll =================================================================== --- test/CodeGen/X86/avx-intrinsics-fast-isel.ll +++ test/CodeGen/X86/avx-intrinsics-fast-isel.ll @@ -99,7 +99,7 @@ define <4 x double> @test_mm256_andnot_pd(<4 x double> %a0, <4 x double> %a1) nounwind { ; X32-LABEL: test_mm256_andnot_pd: ; X32: # BB#0: -; X32-NEXT: vxorps %ymm2, %ymm2, %ymm2 +; X32-NEXT: vxorps %xmm2, %xmm2, %xmm2 ; X32-NEXT: vcmptrueps %ymm2, %ymm2, %ymm2 ; X32-NEXT: vxorps %ymm2, %ymm0, %ymm0 ; X32-NEXT: vandps %ymm1, %ymm0, %ymm0 @@ -107,7 +107,7 @@ ; ; X64-LABEL: test_mm256_andnot_pd: ; X64: # BB#0: -; X64-NEXT: vxorps %ymm2, %ymm2, %ymm2 +; X64-NEXT: vxorps %xmm2, %xmm2, %xmm2 ; X64-NEXT: vcmptrueps %ymm2, %ymm2, %ymm2 ; X64-NEXT: vxorps %ymm2, %ymm0, %ymm0 ; X64-NEXT: vandps %ymm1, %ymm0, %ymm0 @@ -2945,12 +2945,12 @@ define <4 x double> @test_mm256_setzero_pd() nounwind { ; X32-LABEL: test_mm256_setzero_pd: ; X32: # BB#0: -; X32-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-NEXT: retl ; ; X64-LABEL: test_mm256_setzero_pd: ; X64: # BB#0: -; X64-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X64-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-NEXT: retq ret <4 x double> zeroinitializer } @@ -2958,12 +2958,12 @@ define <8 x float> @test_mm256_setzero_ps() nounwind { ; X32-LABEL: test_mm256_setzero_ps: ; X32: # BB#0: -; X32-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-NEXT: retl ; ; X64-LABEL: test_mm256_setzero_ps: ; X64: # BB#0: -; X64-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X64-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-NEXT: retq ret <8 x float> zeroinitializer } @@ -2971,12 +2971,12 @@ define <4 x i64> @test_mm256_setzero_si256() nounwind { ; X32-LABEL: test_mm256_setzero_si256: ; X32: # BB#0: -; X32-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-NEXT: retl ; ; X64-LABEL: test_mm256_setzero_si256: ; X64: # BB#0: -; X64-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X64-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-NEXT: retq ret <4 x i64> zeroinitializer } Index: test/CodeGen/X86/avx-intrinsics-x86-upgrade.ll =================================================================== --- test/CodeGen/X86/avx-intrinsics-x86-upgrade.ll +++ test/CodeGen/X86/avx-intrinsics-x86-upgrade.ll @@ -661,7 +661,7 @@ ; X86-LABEL: test_x86_avx_storeu_pd_256: ; X86: # BB#0: ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax -; X86-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; X86-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; X86-NEXT: vaddpd %ymm1, %ymm0, %ymm0 ; X86-NEXT: vmovupd %ymm0, (%eax) ; X86-NEXT: vzeroupper @@ -669,7 +669,7 @@ ; ; X64-LABEL: test_x86_avx_storeu_pd_256: ; X64: # BB#0: -; X64-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; X64-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; X64-NEXT: vaddpd %ymm1, %ymm0, %ymm0 ; X64-NEXT: vmovupd %ymm0, (%rdi) ; X64-NEXT: vzeroupper Index: test/CodeGen/X86/avx-intrinsics-x86.ll =================================================================== --- test/CodeGen/X86/avx-intrinsics-x86.ll +++ test/CodeGen/X86/avx-intrinsics-x86.ll @@ -975,7 +975,7 @@ ; AVX-LABEL: movnt_pd: ; AVX: # BB#0: ; AVX-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04] -; AVX-NEXT: vxorpd %ymm1, %ymm1, %ymm1 # encoding: [0xc5,0xf5,0x57,0xc9] +; AVX-NEXT: vxorpd %xmm1, %xmm1, %xmm1 # encoding: [0xc5,0xf1,0x57,0xc9] ; AVX-NEXT: vaddpd %ymm1, %ymm0, %ymm0 # encoding: [0xc5,0xfd,0x58,0xc1] ; AVX-NEXT: vmovntpd %ymm0, (%eax) # encoding: [0xc5,0xfd,0x2b,0x00] ; AVX-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77] Index: test/CodeGen/X86/avx-load-store.ll =================================================================== --- test/CodeGen/X86/avx-load-store.ll +++ test/CodeGen/X86/avx-load-store.ll @@ -87,7 +87,7 @@ ; CHECK_O0-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero ; CHECK_O0-NEXT: # implicit-def: %YMM1 ; CHECK_O0-NEXT: vmovaps %xmm0, %xmm1 -; CHECK_O0-NEXT: vxorps %ymm2, %ymm2, %ymm2 +; CHECK_O0-NEXT: vxorps %xmm2, %xmm2, %xmm2 ; CHECK_O0-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm2[1,2,3,4,5,6,7] ; CHECK_O0-NEXT: retq %val = load float, float* %ptr @@ -106,7 +106,7 @@ ; CHECK_O0-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero ; CHECK_O0-NEXT: # implicit-def: %YMM1 ; CHECK_O0-NEXT: vmovaps %xmm0, %xmm1 -; CHECK_O0-NEXT: vxorps %ymm2, %ymm2, %ymm2 +; CHECK_O0-NEXT: vxorps %xmm2, %xmm2, %xmm2 ; CHECK_O0-NEXT: vblendpd {{.*#+}} ymm0 = ymm1[0],ymm2[1,2,3] ; CHECK_O0-NEXT: retq %val = load double, double* %ptr Index: test/CodeGen/X86/avx-logic.ll =================================================================== --- test/CodeGen/X86/avx-logic.ll +++ test/CodeGen/X86/avx-logic.ll @@ -3,12 +3,19 @@ ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=CHECK --check-prefix=AVX512 define <4 x double> @andpd256(<4 x double> %y, <4 x double> %x) nounwind uwtable readnone ssp { -; CHECK-LABEL: andpd256: -; CHECK: # BB#0: # %entry -; CHECK-NEXT: vandpd %ymm0, %ymm1, %ymm0 -; CHECK-NEXT: vxorpd %ymm1, %ymm1, %ymm1 -; CHECK-NEXT: vaddpd %ymm1, %ymm0, %ymm0 -; CHECK-NEXT: retq +; AVX-LABEL: andpd256: +; AVX: # BB#0: # %entry +; AVX-NEXT: vandpd %ymm0, %ymm1, %ymm0 +; AVX-NEXT: vxorpd %xmm1, %xmm1, %xmm1 +; AVX-NEXT: vaddpd %ymm1, %ymm0, %ymm0 +; AVX-NEXT: retq +; +; AVX512-LABEL: andpd256: +; AVX512: # BB#0: # %entry +; AVX512-NEXT: vandpd %ymm0, %ymm1, %ymm0 +; AVX512-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX512-NEXT: vaddpd %ymm1, %ymm0, %ymm0 +; AVX512-NEXT: retq entry: %0 = bitcast <4 x double> %x to <4 x i64> %1 = bitcast <4 x double> %y to <4 x i64> @@ -20,12 +27,19 @@ } define <4 x double> @andpd256fold(<4 x double> %y) nounwind uwtable readnone ssp { -; CHECK-LABEL: andpd256fold: -; CHECK: # BB#0: # %entry -; CHECK-NEXT: vandpd {{.*}}(%rip), %ymm0, %ymm0 -; CHECK-NEXT: vxorpd %ymm1, %ymm1, %ymm1 -; CHECK-NEXT: vaddpd %ymm1, %ymm0, %ymm0 -; CHECK-NEXT: retq +; AVX-LABEL: andpd256fold: +; AVX: # BB#0: # %entry +; AVX-NEXT: vandpd {{.*}}(%rip), %ymm0, %ymm0 +; AVX-NEXT: vxorpd %xmm1, %xmm1, %xmm1 +; AVX-NEXT: vaddpd %ymm1, %ymm0, %ymm0 +; AVX-NEXT: retq +; +; AVX512-LABEL: andpd256fold: +; AVX512: # BB#0: # %entry +; AVX512-NEXT: vandpd {{.*}}(%rip), %ymm0, %ymm0 +; AVX512-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX512-NEXT: vaddpd %ymm1, %ymm0, %ymm0 +; AVX512-NEXT: retq entry: %0 = bitcast <4 x double> %y to <4 x i64> %and.i = and <4 x i64> %0, @@ -61,12 +75,19 @@ } define <4 x double> @xorpd256(<4 x double> %y, <4 x double> %x) nounwind uwtable readnone ssp { -; CHECK-LABEL: xorpd256: -; CHECK: # BB#0: # %entry -; CHECK-NEXT: vxorpd %ymm0, %ymm1, %ymm0 -; CHECK-NEXT: vxorpd %ymm1, %ymm1, %ymm1 -; CHECK-NEXT: vaddpd %ymm1, %ymm0, %ymm0 -; CHECK-NEXT: retq +; AVX-LABEL: xorpd256: +; AVX: # BB#0: # %entry +; AVX-NEXT: vxorpd %ymm0, %ymm1, %ymm0 +; AVX-NEXT: vxorpd %xmm1, %xmm1, %xmm1 +; AVX-NEXT: vaddpd %ymm1, %ymm0, %ymm0 +; AVX-NEXT: retq +; +; AVX512-LABEL: xorpd256: +; AVX512: # BB#0: # %entry +; AVX512-NEXT: vxorpd %ymm0, %ymm1, %ymm0 +; AVX512-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX512-NEXT: vaddpd %ymm1, %ymm0, %ymm0 +; AVX512-NEXT: retq entry: %0 = bitcast <4 x double> %x to <4 x i64> %1 = bitcast <4 x double> %y to <4 x i64> @@ -78,12 +99,19 @@ } define <4 x double> @xorpd256fold(<4 x double> %y) nounwind uwtable readnone ssp { -; CHECK-LABEL: xorpd256fold: -; CHECK: # BB#0: # %entry -; CHECK-NEXT: vxorpd {{.*}}(%rip), %ymm0, %ymm0 -; CHECK-NEXT: vxorpd %ymm1, %ymm1, %ymm1 -; CHECK-NEXT: vaddpd %ymm1, %ymm0, %ymm0 -; CHECK-NEXT: retq +; AVX-LABEL: xorpd256fold: +; AVX: # BB#0: # %entry +; AVX-NEXT: vxorpd {{.*}}(%rip), %ymm0, %ymm0 +; AVX-NEXT: vxorpd %xmm1, %xmm1, %xmm1 +; AVX-NEXT: vaddpd %ymm1, %ymm0, %ymm0 +; AVX-NEXT: retq +; +; AVX512-LABEL: xorpd256fold: +; AVX512: # BB#0: # %entry +; AVX512-NEXT: vxorpd {{.*}}(%rip), %ymm0, %ymm0 +; AVX512-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX512-NEXT: vaddpd %ymm1, %ymm0, %ymm0 +; AVX512-NEXT: retq entry: %0 = bitcast <4 x double> %y to <4 x i64> %xor.i = xor <4 x i64> %0, @@ -119,12 +147,19 @@ } define <4 x double> @orpd256(<4 x double> %y, <4 x double> %x) nounwind uwtable readnone ssp { -; CHECK-LABEL: orpd256: -; CHECK: # BB#0: # %entry -; CHECK-NEXT: vorpd %ymm0, %ymm1, %ymm0 -; CHECK-NEXT: vxorpd %ymm1, %ymm1, %ymm1 -; CHECK-NEXT: vaddpd %ymm1, %ymm0, %ymm0 -; CHECK-NEXT: retq +; AVX-LABEL: orpd256: +; AVX: # BB#0: # %entry +; AVX-NEXT: vorpd %ymm0, %ymm1, %ymm0 +; AVX-NEXT: vxorpd %xmm1, %xmm1, %xmm1 +; AVX-NEXT: vaddpd %ymm1, %ymm0, %ymm0 +; AVX-NEXT: retq +; +; AVX512-LABEL: orpd256: +; AVX512: # BB#0: # %entry +; AVX512-NEXT: vorpd %ymm0, %ymm1, %ymm0 +; AVX512-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX512-NEXT: vaddpd %ymm1, %ymm0, %ymm0 +; AVX512-NEXT: retq entry: %0 = bitcast <4 x double> %x to <4 x i64> %1 = bitcast <4 x double> %y to <4 x i64> @@ -136,12 +171,19 @@ } define <4 x double> @orpd256fold(<4 x double> %y) nounwind uwtable readnone ssp { -; CHECK-LABEL: orpd256fold: -; CHECK: # BB#0: # %entry -; CHECK-NEXT: vorpd {{.*}}(%rip), %ymm0, %ymm0 -; CHECK-NEXT: vxorpd %ymm1, %ymm1, %ymm1 -; CHECK-NEXT: vaddpd %ymm1, %ymm0, %ymm0 -; CHECK-NEXT: retq +; AVX-LABEL: orpd256fold: +; AVX: # BB#0: # %entry +; AVX-NEXT: vorpd {{.*}}(%rip), %ymm0, %ymm0 +; AVX-NEXT: vxorpd %xmm1, %xmm1, %xmm1 +; AVX-NEXT: vaddpd %ymm1, %ymm0, %ymm0 +; AVX-NEXT: retq +; +; AVX512-LABEL: orpd256fold: +; AVX512: # BB#0: # %entry +; AVX512-NEXT: vorpd {{.*}}(%rip), %ymm0, %ymm0 +; AVX512-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX512-NEXT: vaddpd %ymm1, %ymm0, %ymm0 +; AVX512-NEXT: retq entry: %0 = bitcast <4 x double> %y to <4 x i64> %or.i = or <4 x i64> %0, @@ -177,12 +219,19 @@ } define <4 x double> @andnotpd256(<4 x double> %y, <4 x double> %x) nounwind uwtable readnone ssp { -; CHECK-LABEL: andnotpd256: -; CHECK: # BB#0: # %entry -; CHECK-NEXT: vandnpd %ymm0, %ymm1, %ymm0 -; CHECK-NEXT: vxorpd %ymm1, %ymm1, %ymm1 -; CHECK-NEXT: vaddpd %ymm1, %ymm0, %ymm0 -; CHECK-NEXT: retq +; AVX-LABEL: andnotpd256: +; AVX: # BB#0: # %entry +; AVX-NEXT: vandnpd %ymm0, %ymm1, %ymm0 +; AVX-NEXT: vxorpd %xmm1, %xmm1, %xmm1 +; AVX-NEXT: vaddpd %ymm1, %ymm0, %ymm0 +; AVX-NEXT: retq +; +; AVX512-LABEL: andnotpd256: +; AVX512: # BB#0: # %entry +; AVX512-NEXT: vandnpd %ymm0, %ymm1, %ymm0 +; AVX512-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX512-NEXT: vaddpd %ymm1, %ymm0, %ymm0 +; AVX512-NEXT: retq entry: %0 = bitcast <4 x double> %x to <4 x i64> %neg.i = xor <4 x i64> %0, @@ -195,12 +244,19 @@ } define <4 x double> @andnotpd256fold(<4 x double> %y, <4 x double>* nocapture %x) nounwind uwtable readonly ssp { -; CHECK-LABEL: andnotpd256fold: -; CHECK: # BB#0: # %entry -; CHECK-NEXT: vandnpd (%rdi), %ymm0, %ymm0 -; CHECK-NEXT: vxorpd %ymm1, %ymm1, %ymm1 -; CHECK-NEXT: vaddpd %ymm1, %ymm0, %ymm0 -; CHECK-NEXT: retq +; AVX-LABEL: andnotpd256fold: +; AVX: # BB#0: # %entry +; AVX-NEXT: vandnpd (%rdi), %ymm0, %ymm0 +; AVX-NEXT: vxorpd %xmm1, %xmm1, %xmm1 +; AVX-NEXT: vaddpd %ymm1, %ymm0, %ymm0 +; AVX-NEXT: retq +; +; AVX512-LABEL: andnotpd256fold: +; AVX512: # BB#0: # %entry +; AVX512-NEXT: vandnpd (%rdi), %ymm0, %ymm0 +; AVX512-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX512-NEXT: vaddpd %ymm1, %ymm0, %ymm0 +; AVX512-NEXT: retq entry: %tmp2 = load <4 x double>, <4 x double>* %x, align 32 %0 = bitcast <4 x double> %y to <4 x i64> @@ -281,7 +337,7 @@ ; ; AVX512-LABEL: and_xor_splat1_v4i32: ; AVX512: # BB#0: -; AVX512-NEXT: vbroadcastss {{.*}}(%rip), %xmm1 +; AVX512-NEXT: vbroadcastss {{.*#+}} xmm1 = [1,1,1,1] ; AVX512-NEXT: vandnps %xmm1, %xmm0, %xmm0 ; AVX512-NEXT: retq %xor = xor <4 x i32> %x, @@ -297,7 +353,7 @@ ; ; AVX512-LABEL: and_xor_splat1_v4i64: ; AVX512: # BB#0: -; AVX512-NEXT: vbroadcastsd {{.*}}(%rip), %ymm1 +; AVX512-NEXT: vbroadcastsd {{.*#+}} ymm1 = [1,1,1,1] ; AVX512-NEXT: vandnps %ymm1, %ymm0, %ymm0 ; AVX512-NEXT: retq %xor = xor <4 x i64> %x, Index: test/CodeGen/X86/avx-select.ll =================================================================== --- test/CodeGen/X86/avx-select.ll +++ test/CodeGen/X86/avx-select.ll @@ -6,7 +6,7 @@ ; X86-LABEL: select00: ; X86: # BB#0: ; X86-NEXT: cmpl $255, {{[0-9]+}}(%esp) -; X86-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X86-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X86-NEXT: je .LBB0_2 ; X86-NEXT: # BB#1: ; X86-NEXT: vmovaps %ymm0, %ymm1 @@ -16,7 +16,7 @@ ; ; X64-LABEL: select00: ; X64: # BB#0: -; X64-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X64-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X64-NEXT: cmpl $255, %edi ; X64-NEXT: je .LBB0_2 ; X64-NEXT: # BB#1: @@ -34,7 +34,7 @@ ; X86-LABEL: select01: ; X86: # BB#0: ; X86-NEXT: cmpl $255, {{[0-9]+}}(%esp) -; X86-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X86-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X86-NEXT: je .LBB1_2 ; X86-NEXT: # BB#1: ; X86-NEXT: vmovaps %ymm0, %ymm1 @@ -44,7 +44,7 @@ ; ; X64-LABEL: select01: ; X64: # BB#0: -; X64-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X64-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X64-NEXT: cmpl $255, %edi ; X64-NEXT: je .LBB1_2 ; X64-NEXT: # BB#1: Index: test/CodeGen/X86/avx-vbroadcastf128.ll =================================================================== --- test/CodeGen/X86/avx-vbroadcastf128.ll +++ test/CodeGen/X86/avx-vbroadcastf128.ll @@ -236,7 +236,7 @@ ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax ; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx ; X32-NEXT: vmovaps (%ecx), %xmm0 -; X32-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X32-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X32-NEXT: vmovaps %ymm1, (%eax) ; X32-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 ; X32-NEXT: retl @@ -244,7 +244,7 @@ ; X64-LABEL: PR29088: ; X64: # BB#0: ; X64-NEXT: vmovaps (%rdi), %xmm0 -; X64-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X64-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X64-NEXT: vmovaps %ymm1, (%rsi) ; X64-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 ; X64-NEXT: retq Index: test/CodeGen/X86/avx-vextractf128.ll =================================================================== --- test/CodeGen/X86/avx-vextractf128.ll +++ test/CodeGen/X86/avx-vextractf128.ll @@ -119,7 +119,7 @@ define void @t9(i64* %p) { ; CHECK-LABEL: t9: ; CHECK: ## BB#0: -; CHECK-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; CHECK-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; CHECK-NEXT: vmovups %ymm0, (%rdi) ; CHECK-NEXT: vzeroupper ; CHECK-NEXT: retq Index: test/CodeGen/X86/avx-vperm2x128.ll =================================================================== --- test/CodeGen/X86/avx-vperm2x128.ll +++ test/CodeGen/X86/avx-vperm2x128.ll @@ -335,7 +335,7 @@ define <4 x double> @shuffle_v4f64_zz23(<4 x double> %a) { ; ALL-LABEL: shuffle_v4f64_zz23: ; ALL: # BB#0: -; ALL-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; ALL-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; ALL-NEXT: vblendpd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3] ; ALL-NEXT: retq %s = shufflevector <4 x double> %a, <4 x double> , <4 x i32> @@ -344,7 +344,7 @@ define <4 x double> @shuffle_v4f64_zz23_optsize(<4 x double> %a) optsize { ; ALL-LABEL: shuffle_v4f64_zz23_optsize: ; ALL: # BB#0: -; ALL-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; ALL-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; ALL-NEXT: vblendpd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3] ; ALL-NEXT: retq %s = shufflevector <4 x double> %a, <4 x double> , <4 x i32> @@ -371,7 +371,7 @@ define <4 x double> @shuffle_v4f64_zz67(<4 x double> %a) { ; ALL-LABEL: shuffle_v4f64_zz67: ; ALL: # BB#0: -; ALL-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; ALL-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; ALL-NEXT: vblendpd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3] ; ALL-NEXT: retq %s = shufflevector <4 x double> , <4 x double> %a, <4 x i32> @@ -380,7 +380,7 @@ define <4 x double> @shuffle_v4f64_zz67_optsize(<4 x double> %a) optsize { ; ALL-LABEL: shuffle_v4f64_zz67_optsize: ; ALL: # BB#0: -; ALL-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; ALL-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; ALL-NEXT: vblendpd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3] ; ALL-NEXT: retq %s = shufflevector <4 x double> , <4 x double> %a, <4 x i32> @@ -390,7 +390,7 @@ define <4 x double> @shuffle_v4f64_01zz(<4 x double> %a) { ; ALL-LABEL: shuffle_v4f64_01zz: ; ALL: # BB#0: -; ALL-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; ALL-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; ALL-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3] ; ALL-NEXT: retq %s = shufflevector <4 x double> %a, <4 x double> , <4 x i32> @@ -399,7 +399,7 @@ define <4 x double> @shuffle_v4f64_01zz_optsize(<4 x double> %a) optsize { ; ALL-LABEL: shuffle_v4f64_01zz_optsize: ; ALL: # BB#0: -; ALL-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; ALL-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; ALL-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3] ; ALL-NEXT: retq %s = shufflevector <4 x double> %a, <4 x double> , <4 x i32> @@ -426,7 +426,7 @@ define <4 x double> @shuffle_v4f64_45zz(<4 x double> %a) { ; ALL-LABEL: shuffle_v4f64_45zz: ; ALL: # BB#0: -; ALL-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; ALL-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; ALL-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3] ; ALL-NEXT: retq %s = shufflevector <4 x double> , <4 x double> %a, <4 x i32> @@ -435,7 +435,7 @@ define <4 x double> @shuffle_v4f64_45zz_optsize(<4 x double> %a) optsize { ; ALL-LABEL: shuffle_v4f64_45zz_optsize: ; ALL: # BB#0: -; ALL-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; ALL-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; ALL-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3] ; ALL-NEXT: retq %s = shufflevector <4 x double> , <4 x double> %a, <4 x i32> Index: test/CodeGen/X86/avx2-arith.ll =================================================================== --- test/CodeGen/X86/avx2-arith.ll +++ test/CodeGen/X86/avx2-arith.ll @@ -293,13 +293,13 @@ define <4 x i64> @mul_const4(<4 x i64> %x) { ; X32-LABEL: mul_const4: ; X32: # BB#0: -; X32-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X32-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; X32-NEXT: vpsubq %ymm0, %ymm1, %ymm0 ; X32-NEXT: retl ; ; X64-LABEL: mul_const4: ; X64: # BB#0: -; X64-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X64-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; X64-NEXT: vpsubq %ymm0, %ymm1, %ymm0 ; X64-NEXT: retq %y = mul <4 x i64> %x, @@ -309,12 +309,12 @@ define <8 x i32> @mul_const5(<8 x i32> %x) { ; X32-LABEL: mul_const5: ; X32: # BB#0: -; X32-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-NEXT: retl ; ; X64-LABEL: mul_const5: ; X64: # BB#0: -; X64-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X64-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-NEXT: retq %y = mul <8 x i32> %x, ret <8 x i32> %y Index: test/CodeGen/X86/avx2-gather.ll =================================================================== --- test/CodeGen/X86/avx2-gather.ll +++ test/CodeGen/X86/avx2-gather.ll @@ -55,14 +55,14 @@ ; X32-LABEL: test_x86_avx2_gather_d_ps_256: ; X32: # BB#0: ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax -; X32-NEXT: vxorps %ymm2, %ymm2, %ymm2 +; X32-NEXT: vxorps %xmm2, %xmm2, %xmm2 ; X32-NEXT: vgatherdps %ymm1, (%eax,%ymm0,4), %ymm2 ; X32-NEXT: vmovaps %ymm2, %ymm0 ; X32-NEXT: retl ; ; X64-LABEL: test_x86_avx2_gather_d_ps_256: ; X64: # BB#0: -; X64-NEXT: vxorps %ymm2, %ymm2, %ymm2 +; X64-NEXT: vxorps %xmm2, %xmm2, %xmm2 ; X64-NEXT: vgatherdps %ymm1, (%rdi,%ymm0,4), %ymm2 ; X64-NEXT: vmovaps %ymm2, %ymm0 ; X64-NEXT: retq @@ -78,14 +78,14 @@ ; X32-LABEL: test_x86_avx2_gather_d_pd_256: ; X32: # BB#0: ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax -; X32-NEXT: vxorpd %ymm2, %ymm2, %ymm2 +; X32-NEXT: vxorpd %xmm2, %xmm2, %xmm2 ; X32-NEXT: vgatherdpd %ymm1, (%eax,%xmm0,8), %ymm2 ; X32-NEXT: vmovapd %ymm2, %ymm0 ; X32-NEXT: retl ; ; X64-LABEL: test_x86_avx2_gather_d_pd_256: ; X64: # BB#0: -; X64-NEXT: vxorpd %ymm2, %ymm2, %ymm2 +; X64-NEXT: vxorpd %xmm2, %xmm2, %xmm2 ; X64-NEXT: vgatherdpd %ymm1, (%rdi,%xmm0,8), %ymm2 ; X64-NEXT: vmovapd %ymm2, %ymm0 ; X64-NEXT: retq Index: test/CodeGen/X86/avx2-intrinsics-fast-isel.ll =================================================================== --- test/CodeGen/X86/avx2-intrinsics-fast-isel.ll +++ test/CodeGen/X86/avx2-intrinsics-fast-isel.ll @@ -1114,7 +1114,7 @@ ; X32: # BB#0: ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax ; X32-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2 -; X32-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X32-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; X32-NEXT: vpgatherdd %ymm2, (%eax,%ymm0,2), %ymm1 ; X32-NEXT: vmovdqa %ymm1, %ymm0 ; X32-NEXT: retl @@ -1122,7 +1122,7 @@ ; X64-LABEL: test_mm256_i32gather_epi32: ; X64: # BB#0: ; X64-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2 -; X64-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X64-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; X64-NEXT: vpgatherdd %ymm2, (%rdi,%ymm0,2), %ymm1 ; X64-NEXT: vmovdqa %ymm1, %ymm0 ; X64-NEXT: retq @@ -1201,7 +1201,7 @@ ; X32: # BB#0: ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax ; X32-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2 -; X32-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X32-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; X32-NEXT: vpgatherdq %ymm2, (%eax,%xmm0,2), %ymm1 ; X32-NEXT: vmovdqa %ymm1, %ymm0 ; X32-NEXT: retl @@ -1209,7 +1209,7 @@ ; X64-LABEL: test_mm256_i32gather_epi64: ; X64: # BB#0: ; X64-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2 -; X64-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X64-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; X64-NEXT: vpgatherdq %ymm2, (%rdi,%xmm0,2), %ymm1 ; X64-NEXT: vmovdqa %ymm1, %ymm0 ; X64-NEXT: retq @@ -1285,7 +1285,7 @@ ; X32-LABEL: test_mm256_i32gather_pd: ; X32: # BB#0: ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax -; X32-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; X32-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; X32-NEXT: vcmpeqpd %ymm1, %ymm1, %ymm2 ; X32-NEXT: vgatherdpd %ymm2, (%eax,%xmm0,2), %ymm1 ; X32-NEXT: vmovapd %ymm1, %ymm0 @@ -1293,7 +1293,7 @@ ; ; X64-LABEL: test_mm256_i32gather_pd: ; X64: # BB#0: -; X64-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; X64-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; X64-NEXT: vcmpeqpd %ymm1, %ymm1, %ymm2 ; X64-NEXT: vgatherdpd %ymm2, (%rdi,%xmm0,2), %ymm1 ; X64-NEXT: vmovapd %ymm1, %ymm0 @@ -1371,7 +1371,7 @@ ; X32-LABEL: test_mm256_i32gather_ps: ; X32: # BB#0: ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax -; X32-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X32-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X32-NEXT: vcmpeqps %ymm1, %ymm1, %ymm2 ; X32-NEXT: vgatherdps %ymm2, (%eax,%ymm0,2), %ymm1 ; X32-NEXT: vmovaps %ymm1, %ymm0 @@ -1379,7 +1379,7 @@ ; ; X64-LABEL: test_mm256_i32gather_ps: ; X64: # BB#0: -; X64-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X64-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X64-NEXT: vcmpeqps %ymm1, %ymm1, %ymm2 ; X64-NEXT: vgatherdps %ymm2, (%rdi,%ymm0,2), %ymm1 ; X64-NEXT: vmovaps %ymm1, %ymm0 @@ -1545,7 +1545,7 @@ ; X32: # BB#0: ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax ; X32-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2 -; X32-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X32-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; X32-NEXT: vpgatherqq %ymm2, (%eax,%ymm0,2), %ymm1 ; X32-NEXT: vmovdqa %ymm1, %ymm0 ; X32-NEXT: retl @@ -1553,7 +1553,7 @@ ; X64-LABEL: test_mm256_i64gather_epi64: ; X64: # BB#0: ; X64-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2 -; X64-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X64-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; X64-NEXT: vpgatherqq %ymm2, (%rdi,%ymm0,2), %ymm1 ; X64-NEXT: vmovdqa %ymm1, %ymm0 ; X64-NEXT: retq @@ -1625,7 +1625,7 @@ ; X32-LABEL: test_mm256_i64gather_pd: ; X32: # BB#0: ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax -; X32-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; X32-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; X32-NEXT: vcmpeqpd %ymm1, %ymm1, %ymm2 ; X32-NEXT: vgatherqpd %ymm2, (%eax,%ymm0,2), %ymm1 ; X32-NEXT: vmovapd %ymm1, %ymm0 @@ -1633,7 +1633,7 @@ ; ; X64-LABEL: test_mm256_i64gather_pd: ; X64: # BB#0: -; X64-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; X64-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; X64-NEXT: vcmpeqpd %ymm1, %ymm1, %ymm2 ; X64-NEXT: vgatherqpd %ymm2, (%rdi,%ymm0,2), %ymm1 ; X64-NEXT: vmovapd %ymm1, %ymm0 Index: test/CodeGen/X86/avx2-shift.ll =================================================================== --- test/CodeGen/X86/avx2-shift.ll +++ test/CodeGen/X86/avx2-shift.ll @@ -455,13 +455,13 @@ define <32 x i8> @sra_v32i8_7(<32 x i8> %A) nounwind { ; X32-LABEL: sra_v32i8_7: ; X32: # BB#0: -; X32-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X32-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; X32-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0 ; X32-NEXT: retl ; ; X64-LABEL: sra_v32i8_7: ; X64: # BB#0: -; X64-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X64-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; X64-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0 ; X64-NEXT: retq %B = ashr <32 x i8> %A, Index: test/CodeGen/X86/avx2-vbroadcast.ll =================================================================== --- test/CodeGen/X86/avx2-vbroadcast.ll +++ test/CodeGen/X86/avx2-vbroadcast.ll @@ -1135,52 +1135,99 @@ } define void @isel_crash_32b(i8* %cV_R.addr) { -; X32-LABEL: isel_crash_32b: -; X32: ## BB#0: ## %eintry -; X32-NEXT: pushl %ebp -; X32-NEXT: Lcfi1: -; X32-NEXT: .cfi_def_cfa_offset 8 -; X32-NEXT: Lcfi2: -; X32-NEXT: .cfi_offset %ebp, -8 -; X32-NEXT: movl %esp, %ebp -; X32-NEXT: Lcfi3: -; X32-NEXT: .cfi_def_cfa_register %ebp -; X32-NEXT: andl $-32, %esp -; X32-NEXT: subl $128, %esp -; X32-NEXT: movl 8(%ebp), %eax -; X32-NEXT: vxorps %ymm0, %ymm0, %ymm0 -; X32-NEXT: vmovaps %ymm0, (%esp) -; X32-NEXT: vpbroadcastb (%eax), %ymm1 -; X32-NEXT: vmovaps %ymm0, {{[0-9]+}}(%esp) -; X32-NEXT: vmovdqa %ymm1, {{[0-9]+}}(%esp) -; X32-NEXT: movl %ebp, %esp -; X32-NEXT: popl %ebp -; X32-NEXT: vzeroupper -; X32-NEXT: retl +; X32-AVX2-LABEL: isel_crash_32b: +; X32-AVX2: ## BB#0: ## %eintry +; X32-AVX2-NEXT: pushl %ebp +; X32-AVX2-NEXT: Lcfi1: +; X32-AVX2-NEXT: .cfi_def_cfa_offset 8 +; X32-AVX2-NEXT: Lcfi2: +; X32-AVX2-NEXT: .cfi_offset %ebp, -8 +; X32-AVX2-NEXT: movl %esp, %ebp +; X32-AVX2-NEXT: Lcfi3: +; X32-AVX2-NEXT: .cfi_def_cfa_register %ebp +; X32-AVX2-NEXT: andl $-32, %esp +; X32-AVX2-NEXT: subl $128, %esp +; X32-AVX2-NEXT: movl 8(%ebp), %eax +; X32-AVX2-NEXT: vxorps %xmm0, %xmm0, %xmm0 +; X32-AVX2-NEXT: vmovaps %ymm0, (%esp) +; X32-AVX2-NEXT: vpbroadcastb (%eax), %ymm1 +; X32-AVX2-NEXT: vmovaps %ymm0, {{[0-9]+}}(%esp) +; X32-AVX2-NEXT: vmovdqa %ymm1, {{[0-9]+}}(%esp) +; X32-AVX2-NEXT: movl %ebp, %esp +; X32-AVX2-NEXT: popl %ebp +; X32-AVX2-NEXT: vzeroupper +; X32-AVX2-NEXT: retl ; -; X64-LABEL: isel_crash_32b: -; X64: ## BB#0: ## %eintry -; X64-NEXT: pushq %rbp -; X64-NEXT: Lcfi0: -; X64-NEXT: .cfi_def_cfa_offset 16 -; X64-NEXT: Lcfi1: -; X64-NEXT: .cfi_offset %rbp, -16 -; X64-NEXT: movq %rsp, %rbp -; X64-NEXT: Lcfi2: -; X64-NEXT: .cfi_def_cfa_register %rbp -; X64-NEXT: andq $-32, %rsp -; X64-NEXT: subq $128, %rsp -; X64-NEXT: vxorps %ymm0, %ymm0, %ymm0 -; X64-NEXT: vmovaps %ymm0, (%rsp) -; X64-NEXT: movb (%rdi), %al -; X64-NEXT: vmovd %eax, %xmm1 -; X64-NEXT: vpbroadcastb %xmm1, %ymm1 -; X64-NEXT: vmovaps %ymm0, {{[0-9]+}}(%rsp) -; X64-NEXT: vmovdqa %ymm1, {{[0-9]+}}(%rsp) -; X64-NEXT: movq %rbp, %rsp -; X64-NEXT: popq %rbp -; X64-NEXT: vzeroupper -; X64-NEXT: retq +; X64-AVX2-LABEL: isel_crash_32b: +; X64-AVX2: ## BB#0: ## %eintry +; X64-AVX2-NEXT: pushq %rbp +; X64-AVX2-NEXT: Lcfi0: +; X64-AVX2-NEXT: .cfi_def_cfa_offset 16 +; X64-AVX2-NEXT: Lcfi1: +; X64-AVX2-NEXT: .cfi_offset %rbp, -16 +; X64-AVX2-NEXT: movq %rsp, %rbp +; X64-AVX2-NEXT: Lcfi2: +; X64-AVX2-NEXT: .cfi_def_cfa_register %rbp +; X64-AVX2-NEXT: andq $-32, %rsp +; X64-AVX2-NEXT: subq $128, %rsp +; X64-AVX2-NEXT: vxorps %xmm0, %xmm0, %xmm0 +; X64-AVX2-NEXT: vmovaps %ymm0, (%rsp) +; X64-AVX2-NEXT: movb (%rdi), %al +; X64-AVX2-NEXT: vmovd %eax, %xmm1 +; X64-AVX2-NEXT: vpbroadcastb %xmm1, %ymm1 +; X64-AVX2-NEXT: vmovaps %ymm0, {{[0-9]+}}(%rsp) +; X64-AVX2-NEXT: vmovdqa %ymm1, {{[0-9]+}}(%rsp) +; X64-AVX2-NEXT: movq %rbp, %rsp +; X64-AVX2-NEXT: popq %rbp +; X64-AVX2-NEXT: vzeroupper +; X64-AVX2-NEXT: retq +; +; X32-AVX512VL-LABEL: isel_crash_32b: +; X32-AVX512VL: ## BB#0: ## %eintry +; X32-AVX512VL-NEXT: pushl %ebp +; X32-AVX512VL-NEXT: Lcfi1: +; X32-AVX512VL-NEXT: .cfi_def_cfa_offset 8 +; X32-AVX512VL-NEXT: Lcfi2: +; X32-AVX512VL-NEXT: .cfi_offset %ebp, -8 +; X32-AVX512VL-NEXT: movl %esp, %ebp +; X32-AVX512VL-NEXT: Lcfi3: +; X32-AVX512VL-NEXT: .cfi_def_cfa_register %ebp +; X32-AVX512VL-NEXT: andl $-32, %esp +; X32-AVX512VL-NEXT: subl $128, %esp +; X32-AVX512VL-NEXT: movl 8(%ebp), %eax +; X32-AVX512VL-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-AVX512VL-NEXT: vmovaps %ymm0, (%esp) +; X32-AVX512VL-NEXT: vpbroadcastb (%eax), %ymm1 +; X32-AVX512VL-NEXT: vmovaps %ymm0, {{[0-9]+}}(%esp) +; X32-AVX512VL-NEXT: vmovdqa %ymm1, {{[0-9]+}}(%esp) +; X32-AVX512VL-NEXT: movl %ebp, %esp +; X32-AVX512VL-NEXT: popl %ebp +; X32-AVX512VL-NEXT: vzeroupper +; X32-AVX512VL-NEXT: retl +; +; X64-AVX512VL-LABEL: isel_crash_32b: +; X64-AVX512VL: ## BB#0: ## %eintry +; X64-AVX512VL-NEXT: pushq %rbp +; X64-AVX512VL-NEXT: Lcfi0: +; X64-AVX512VL-NEXT: .cfi_def_cfa_offset 16 +; X64-AVX512VL-NEXT: Lcfi1: +; X64-AVX512VL-NEXT: .cfi_offset %rbp, -16 +; X64-AVX512VL-NEXT: movq %rsp, %rbp +; X64-AVX512VL-NEXT: Lcfi2: +; X64-AVX512VL-NEXT: .cfi_def_cfa_register %rbp +; X64-AVX512VL-NEXT: andq $-32, %rsp +; X64-AVX512VL-NEXT: subq $128, %rsp +; X64-AVX512VL-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X64-AVX512VL-NEXT: vmovaps %ymm0, (%rsp) +; X64-AVX512VL-NEXT: movb (%rdi), %al +; X64-AVX512VL-NEXT: vmovd %eax, %xmm1 +; X64-AVX512VL-NEXT: vpbroadcastb %xmm1, %ymm1 +; X64-AVX512VL-NEXT: vmovaps %ymm0, {{[0-9]+}}(%rsp) +; X64-AVX512VL-NEXT: vmovdqa %ymm1, {{[0-9]+}}(%rsp) +; X64-AVX512VL-NEXT: movq %rbp, %rsp +; X64-AVX512VL-NEXT: popq %rbp +; X64-AVX512VL-NEXT: vzeroupper +; X64-AVX512VL-NEXT: retq eintry: %__a.addr.i = alloca <4 x i64>, align 16 %__b.addr.i = alloca <4 x i64>, align 16 @@ -1237,52 +1284,99 @@ } define void @isel_crash_16w(i16* %cV_R.addr) { -; X32-LABEL: isel_crash_16w: -; X32: ## BB#0: ## %eintry -; X32-NEXT: pushl %ebp -; X32-NEXT: Lcfi5: -; X32-NEXT: .cfi_def_cfa_offset 8 -; X32-NEXT: Lcfi6: -; X32-NEXT: .cfi_offset %ebp, -8 -; X32-NEXT: movl %esp, %ebp -; X32-NEXT: Lcfi7: -; X32-NEXT: .cfi_def_cfa_register %ebp -; X32-NEXT: andl $-32, %esp -; X32-NEXT: subl $128, %esp -; X32-NEXT: movl 8(%ebp), %eax -; X32-NEXT: vxorps %ymm0, %ymm0, %ymm0 -; X32-NEXT: vmovaps %ymm0, (%esp) -; X32-NEXT: vpbroadcastw (%eax), %ymm1 -; X32-NEXT: vmovaps %ymm0, {{[0-9]+}}(%esp) -; X32-NEXT: vmovdqa %ymm1, {{[0-9]+}}(%esp) -; X32-NEXT: movl %ebp, %esp -; X32-NEXT: popl %ebp -; X32-NEXT: vzeroupper -; X32-NEXT: retl +; X32-AVX2-LABEL: isel_crash_16w: +; X32-AVX2: ## BB#0: ## %eintry +; X32-AVX2-NEXT: pushl %ebp +; X32-AVX2-NEXT: Lcfi5: +; X32-AVX2-NEXT: .cfi_def_cfa_offset 8 +; X32-AVX2-NEXT: Lcfi6: +; X32-AVX2-NEXT: .cfi_offset %ebp, -8 +; X32-AVX2-NEXT: movl %esp, %ebp +; X32-AVX2-NEXT: Lcfi7: +; X32-AVX2-NEXT: .cfi_def_cfa_register %ebp +; X32-AVX2-NEXT: andl $-32, %esp +; X32-AVX2-NEXT: subl $128, %esp +; X32-AVX2-NEXT: movl 8(%ebp), %eax +; X32-AVX2-NEXT: vxorps %xmm0, %xmm0, %xmm0 +; X32-AVX2-NEXT: vmovaps %ymm0, (%esp) +; X32-AVX2-NEXT: vpbroadcastw (%eax), %ymm1 +; X32-AVX2-NEXT: vmovaps %ymm0, {{[0-9]+}}(%esp) +; X32-AVX2-NEXT: vmovdqa %ymm1, {{[0-9]+}}(%esp) +; X32-AVX2-NEXT: movl %ebp, %esp +; X32-AVX2-NEXT: popl %ebp +; X32-AVX2-NEXT: vzeroupper +; X32-AVX2-NEXT: retl ; -; X64-LABEL: isel_crash_16w: -; X64: ## BB#0: ## %eintry -; X64-NEXT: pushq %rbp -; X64-NEXT: Lcfi3: -; X64-NEXT: .cfi_def_cfa_offset 16 -; X64-NEXT: Lcfi4: -; X64-NEXT: .cfi_offset %rbp, -16 -; X64-NEXT: movq %rsp, %rbp -; X64-NEXT: Lcfi5: -; X64-NEXT: .cfi_def_cfa_register %rbp -; X64-NEXT: andq $-32, %rsp -; X64-NEXT: subq $128, %rsp -; X64-NEXT: vxorps %ymm0, %ymm0, %ymm0 -; X64-NEXT: vmovaps %ymm0, (%rsp) -; X64-NEXT: movw (%rdi), %ax -; X64-NEXT: vmovd %eax, %xmm1 -; X64-NEXT: vpbroadcastw %xmm1, %ymm1 -; X64-NEXT: vmovaps %ymm0, {{[0-9]+}}(%rsp) -; X64-NEXT: vmovdqa %ymm1, {{[0-9]+}}(%rsp) -; X64-NEXT: movq %rbp, %rsp -; X64-NEXT: popq %rbp -; X64-NEXT: vzeroupper -; X64-NEXT: retq +; X64-AVX2-LABEL: isel_crash_16w: +; X64-AVX2: ## BB#0: ## %eintry +; X64-AVX2-NEXT: pushq %rbp +; X64-AVX2-NEXT: Lcfi3: +; X64-AVX2-NEXT: .cfi_def_cfa_offset 16 +; X64-AVX2-NEXT: Lcfi4: +; X64-AVX2-NEXT: .cfi_offset %rbp, -16 +; X64-AVX2-NEXT: movq %rsp, %rbp +; X64-AVX2-NEXT: Lcfi5: +; X64-AVX2-NEXT: .cfi_def_cfa_register %rbp +; X64-AVX2-NEXT: andq $-32, %rsp +; X64-AVX2-NEXT: subq $128, %rsp +; X64-AVX2-NEXT: vxorps %xmm0, %xmm0, %xmm0 +; X64-AVX2-NEXT: vmovaps %ymm0, (%rsp) +; X64-AVX2-NEXT: movw (%rdi), %ax +; X64-AVX2-NEXT: vmovd %eax, %xmm1 +; X64-AVX2-NEXT: vpbroadcastw %xmm1, %ymm1 +; X64-AVX2-NEXT: vmovaps %ymm0, {{[0-9]+}}(%rsp) +; X64-AVX2-NEXT: vmovdqa %ymm1, {{[0-9]+}}(%rsp) +; X64-AVX2-NEXT: movq %rbp, %rsp +; X64-AVX2-NEXT: popq %rbp +; X64-AVX2-NEXT: vzeroupper +; X64-AVX2-NEXT: retq +; +; X32-AVX512VL-LABEL: isel_crash_16w: +; X32-AVX512VL: ## BB#0: ## %eintry +; X32-AVX512VL-NEXT: pushl %ebp +; X32-AVX512VL-NEXT: Lcfi5: +; X32-AVX512VL-NEXT: .cfi_def_cfa_offset 8 +; X32-AVX512VL-NEXT: Lcfi6: +; X32-AVX512VL-NEXT: .cfi_offset %ebp, -8 +; X32-AVX512VL-NEXT: movl %esp, %ebp +; X32-AVX512VL-NEXT: Lcfi7: +; X32-AVX512VL-NEXT: .cfi_def_cfa_register %ebp +; X32-AVX512VL-NEXT: andl $-32, %esp +; X32-AVX512VL-NEXT: subl $128, %esp +; X32-AVX512VL-NEXT: movl 8(%ebp), %eax +; X32-AVX512VL-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-AVX512VL-NEXT: vmovaps %ymm0, (%esp) +; X32-AVX512VL-NEXT: vpbroadcastw (%eax), %ymm1 +; X32-AVX512VL-NEXT: vmovaps %ymm0, {{[0-9]+}}(%esp) +; X32-AVX512VL-NEXT: vmovdqa %ymm1, {{[0-9]+}}(%esp) +; X32-AVX512VL-NEXT: movl %ebp, %esp +; X32-AVX512VL-NEXT: popl %ebp +; X32-AVX512VL-NEXT: vzeroupper +; X32-AVX512VL-NEXT: retl +; +; X64-AVX512VL-LABEL: isel_crash_16w: +; X64-AVX512VL: ## BB#0: ## %eintry +; X64-AVX512VL-NEXT: pushq %rbp +; X64-AVX512VL-NEXT: Lcfi3: +; X64-AVX512VL-NEXT: .cfi_def_cfa_offset 16 +; X64-AVX512VL-NEXT: Lcfi4: +; X64-AVX512VL-NEXT: .cfi_offset %rbp, -16 +; X64-AVX512VL-NEXT: movq %rsp, %rbp +; X64-AVX512VL-NEXT: Lcfi5: +; X64-AVX512VL-NEXT: .cfi_def_cfa_register %rbp +; X64-AVX512VL-NEXT: andq $-32, %rsp +; X64-AVX512VL-NEXT: subq $128, %rsp +; X64-AVX512VL-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X64-AVX512VL-NEXT: vmovaps %ymm0, (%rsp) +; X64-AVX512VL-NEXT: movw (%rdi), %ax +; X64-AVX512VL-NEXT: vmovd %eax, %xmm1 +; X64-AVX512VL-NEXT: vpbroadcastw %xmm1, %ymm1 +; X64-AVX512VL-NEXT: vmovaps %ymm0, {{[0-9]+}}(%rsp) +; X64-AVX512VL-NEXT: vmovdqa %ymm1, {{[0-9]+}}(%rsp) +; X64-AVX512VL-NEXT: movq %rbp, %rsp +; X64-AVX512VL-NEXT: popq %rbp +; X64-AVX512VL-NEXT: vzeroupper +; X64-AVX512VL-NEXT: retq eintry: %__a.addr.i = alloca <4 x i64>, align 16 %__b.addr.i = alloca <4 x i64>, align 16 @@ -1349,28 +1443,28 @@ } define void @isel_crash_8d(i32* %cV_R.addr) { -; X32-LABEL: isel_crash_8d: -; X32: ## BB#0: ## %eintry -; X32-NEXT: pushl %ebp -; X32-NEXT: Lcfi9: -; X32-NEXT: .cfi_def_cfa_offset 8 -; X32-NEXT: Lcfi10: -; X32-NEXT: .cfi_offset %ebp, -8 -; X32-NEXT: movl %esp, %ebp -; X32-NEXT: Lcfi11: -; X32-NEXT: .cfi_def_cfa_register %ebp -; X32-NEXT: andl $-32, %esp -; X32-NEXT: subl $128, %esp -; X32-NEXT: movl 8(%ebp), %eax -; X32-NEXT: vxorps %ymm0, %ymm0, %ymm0 -; X32-NEXT: vmovaps %ymm0, (%esp) -; X32-NEXT: vbroadcastss (%eax), %ymm1 -; X32-NEXT: vmovaps %ymm0, {{[0-9]+}}(%esp) -; X32-NEXT: vmovaps %ymm1, {{[0-9]+}}(%esp) -; X32-NEXT: movl %ebp, %esp -; X32-NEXT: popl %ebp -; X32-NEXT: vzeroupper -; X32-NEXT: retl +; X32-AVX2-LABEL: isel_crash_8d: +; X32-AVX2: ## BB#0: ## %eintry +; X32-AVX2-NEXT: pushl %ebp +; X32-AVX2-NEXT: Lcfi9: +; X32-AVX2-NEXT: .cfi_def_cfa_offset 8 +; X32-AVX2-NEXT: Lcfi10: +; X32-AVX2-NEXT: .cfi_offset %ebp, -8 +; X32-AVX2-NEXT: movl %esp, %ebp +; X32-AVX2-NEXT: Lcfi11: +; X32-AVX2-NEXT: .cfi_def_cfa_register %ebp +; X32-AVX2-NEXT: andl $-32, %esp +; X32-AVX2-NEXT: subl $128, %esp +; X32-AVX2-NEXT: movl 8(%ebp), %eax +; X32-AVX2-NEXT: vxorps %xmm0, %xmm0, %xmm0 +; X32-AVX2-NEXT: vmovaps %ymm0, (%esp) +; X32-AVX2-NEXT: vbroadcastss (%eax), %ymm1 +; X32-AVX2-NEXT: vmovaps %ymm0, {{[0-9]+}}(%esp) +; X32-AVX2-NEXT: vmovaps %ymm1, {{[0-9]+}}(%esp) +; X32-AVX2-NEXT: movl %ebp, %esp +; X32-AVX2-NEXT: popl %ebp +; X32-AVX2-NEXT: vzeroupper +; X32-AVX2-NEXT: retl ; ; X64-AVX2-LABEL: isel_crash_8d: ; X64-AVX2: ## BB#0: ## %eintry @@ -1384,7 +1478,7 @@ ; X64-AVX2-NEXT: .cfi_def_cfa_register %rbp ; X64-AVX2-NEXT: andq $-32, %rsp ; X64-AVX2-NEXT: subq $128, %rsp -; X64-AVX2-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X64-AVX2-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-AVX2-NEXT: vmovaps %ymm0, (%rsp) ; X64-AVX2-NEXT: movl (%rdi), %eax ; X64-AVX2-NEXT: vmovd %eax, %xmm1 @@ -1396,6 +1490,29 @@ ; X64-AVX2-NEXT: vzeroupper ; X64-AVX2-NEXT: retq ; +; X32-AVX512VL-LABEL: isel_crash_8d: +; X32-AVX512VL: ## BB#0: ## %eintry +; X32-AVX512VL-NEXT: pushl %ebp +; X32-AVX512VL-NEXT: Lcfi9: +; X32-AVX512VL-NEXT: .cfi_def_cfa_offset 8 +; X32-AVX512VL-NEXT: Lcfi10: +; X32-AVX512VL-NEXT: .cfi_offset %ebp, -8 +; X32-AVX512VL-NEXT: movl %esp, %ebp +; X32-AVX512VL-NEXT: Lcfi11: +; X32-AVX512VL-NEXT: .cfi_def_cfa_register %ebp +; X32-AVX512VL-NEXT: andl $-32, %esp +; X32-AVX512VL-NEXT: subl $128, %esp +; X32-AVX512VL-NEXT: movl 8(%ebp), %eax +; X32-AVX512VL-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-AVX512VL-NEXT: vmovaps %ymm0, (%esp) +; X32-AVX512VL-NEXT: vbroadcastss (%eax), %ymm1 +; X32-AVX512VL-NEXT: vmovaps %ymm0, {{[0-9]+}}(%esp) +; X32-AVX512VL-NEXT: vmovaps %ymm1, {{[0-9]+}}(%esp) +; X32-AVX512VL-NEXT: movl %ebp, %esp +; X32-AVX512VL-NEXT: popl %ebp +; X32-AVX512VL-NEXT: vzeroupper +; X32-AVX512VL-NEXT: retl +; ; X64-AVX512VL-LABEL: isel_crash_8d: ; X64-AVX512VL: ## BB#0: ## %eintry ; X64-AVX512VL-NEXT: pushq %rbp @@ -1488,34 +1605,34 @@ } define void @isel_crash_4q(i64* %cV_R.addr) { -; X32-LABEL: isel_crash_4q: -; X32: ## BB#0: ## %eintry -; X32-NEXT: pushl %ebp -; X32-NEXT: Lcfi13: -; X32-NEXT: .cfi_def_cfa_offset 8 -; X32-NEXT: Lcfi14: -; X32-NEXT: .cfi_offset %ebp, -8 -; X32-NEXT: movl %esp, %ebp -; X32-NEXT: Lcfi15: -; X32-NEXT: .cfi_def_cfa_register %ebp -; X32-NEXT: andl $-32, %esp -; X32-NEXT: subl $128, %esp -; X32-NEXT: movl 8(%ebp), %eax -; X32-NEXT: vxorps %ymm0, %ymm0, %ymm0 -; X32-NEXT: vmovaps %ymm0, (%esp) -; X32-NEXT: movl (%eax), %ecx -; X32-NEXT: movl 4(%eax), %eax -; X32-NEXT: vmovd %ecx, %xmm1 -; X32-NEXT: vpinsrd $1, %eax, %xmm1, %xmm1 -; X32-NEXT: vpinsrd $2, %ecx, %xmm1, %xmm1 -; X32-NEXT: vpinsrd $3, %eax, %xmm1, %xmm1 -; X32-NEXT: vinserti128 $1, %xmm1, %ymm1, %ymm1 -; X32-NEXT: vmovaps %ymm0, {{[0-9]+}}(%esp) -; X32-NEXT: vmovdqa %ymm1, {{[0-9]+}}(%esp) -; X32-NEXT: movl %ebp, %esp -; X32-NEXT: popl %ebp -; X32-NEXT: vzeroupper -; X32-NEXT: retl +; X32-AVX2-LABEL: isel_crash_4q: +; X32-AVX2: ## BB#0: ## %eintry +; X32-AVX2-NEXT: pushl %ebp +; X32-AVX2-NEXT: Lcfi13: +; X32-AVX2-NEXT: .cfi_def_cfa_offset 8 +; X32-AVX2-NEXT: Lcfi14: +; X32-AVX2-NEXT: .cfi_offset %ebp, -8 +; X32-AVX2-NEXT: movl %esp, %ebp +; X32-AVX2-NEXT: Lcfi15: +; X32-AVX2-NEXT: .cfi_def_cfa_register %ebp +; X32-AVX2-NEXT: andl $-32, %esp +; X32-AVX2-NEXT: subl $128, %esp +; X32-AVX2-NEXT: movl 8(%ebp), %eax +; X32-AVX2-NEXT: vxorps %xmm0, %xmm0, %xmm0 +; X32-AVX2-NEXT: vmovaps %ymm0, (%esp) +; X32-AVX2-NEXT: movl (%eax), %ecx +; X32-AVX2-NEXT: movl 4(%eax), %eax +; X32-AVX2-NEXT: vmovd %ecx, %xmm1 +; X32-AVX2-NEXT: vpinsrd $1, %eax, %xmm1, %xmm1 +; X32-AVX2-NEXT: vpinsrd $2, %ecx, %xmm1, %xmm1 +; X32-AVX2-NEXT: vpinsrd $3, %eax, %xmm1, %xmm1 +; X32-AVX2-NEXT: vinserti128 $1, %xmm1, %ymm1, %ymm1 +; X32-AVX2-NEXT: vmovaps %ymm0, {{[0-9]+}}(%esp) +; X32-AVX2-NEXT: vmovdqa %ymm1, {{[0-9]+}}(%esp) +; X32-AVX2-NEXT: movl %ebp, %esp +; X32-AVX2-NEXT: popl %ebp +; X32-AVX2-NEXT: vzeroupper +; X32-AVX2-NEXT: retl ; ; X64-AVX2-LABEL: isel_crash_4q: ; X64-AVX2: ## BB#0: ## %eintry @@ -1529,7 +1646,7 @@ ; X64-AVX2-NEXT: .cfi_def_cfa_register %rbp ; X64-AVX2-NEXT: andq $-32, %rsp ; X64-AVX2-NEXT: subq $128, %rsp -; X64-AVX2-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X64-AVX2-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-AVX2-NEXT: vmovaps %ymm0, (%rsp) ; X64-AVX2-NEXT: movq (%rdi), %rax ; X64-AVX2-NEXT: vmovq %rax, %xmm1 @@ -1541,6 +1658,35 @@ ; X64-AVX2-NEXT: vzeroupper ; X64-AVX2-NEXT: retq ; +; X32-AVX512VL-LABEL: isel_crash_4q: +; X32-AVX512VL: ## BB#0: ## %eintry +; X32-AVX512VL-NEXT: pushl %ebp +; X32-AVX512VL-NEXT: Lcfi13: +; X32-AVX512VL-NEXT: .cfi_def_cfa_offset 8 +; X32-AVX512VL-NEXT: Lcfi14: +; X32-AVX512VL-NEXT: .cfi_offset %ebp, -8 +; X32-AVX512VL-NEXT: movl %esp, %ebp +; X32-AVX512VL-NEXT: Lcfi15: +; X32-AVX512VL-NEXT: .cfi_def_cfa_register %ebp +; X32-AVX512VL-NEXT: andl $-32, %esp +; X32-AVX512VL-NEXT: subl $128, %esp +; X32-AVX512VL-NEXT: movl 8(%ebp), %eax +; X32-AVX512VL-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-AVX512VL-NEXT: vmovaps %ymm0, (%esp) +; X32-AVX512VL-NEXT: movl (%eax), %ecx +; X32-AVX512VL-NEXT: movl 4(%eax), %eax +; X32-AVX512VL-NEXT: vmovd %ecx, %xmm1 +; X32-AVX512VL-NEXT: vpinsrd $1, %eax, %xmm1, %xmm1 +; X32-AVX512VL-NEXT: vpinsrd $2, %ecx, %xmm1, %xmm1 +; X32-AVX512VL-NEXT: vpinsrd $3, %eax, %xmm1, %xmm1 +; X32-AVX512VL-NEXT: vinserti128 $1, %xmm1, %ymm1, %ymm1 +; X32-AVX512VL-NEXT: vmovaps %ymm0, {{[0-9]+}}(%esp) +; X32-AVX512VL-NEXT: vmovdqa %ymm1, {{[0-9]+}}(%esp) +; X32-AVX512VL-NEXT: movl %ebp, %esp +; X32-AVX512VL-NEXT: popl %ebp +; X32-AVX512VL-NEXT: vzeroupper +; X32-AVX512VL-NEXT: retl +; ; X64-AVX512VL-LABEL: isel_crash_4q: ; X64-AVX512VL: ## BB#0: ## %eintry ; X64-AVX512VL-NEXT: pushq %rbp Index: test/CodeGen/X86/avx2-vbroadcasti128.ll =================================================================== --- test/CodeGen/X86/avx2-vbroadcasti128.ll +++ test/CodeGen/X86/avx2-vbroadcasti128.ll @@ -272,7 +272,7 @@ ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax ; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx ; X32-NEXT: vmovaps (%ecx), %xmm0 -; X32-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X32-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X32-NEXT: vmovaps %ymm1, (%eax) ; X32-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 ; X32-NEXT: retl @@ -280,7 +280,7 @@ ; X64-LABEL: PR29088: ; X64: # BB#0: ; X64-NEXT: vmovaps (%rdi), %xmm0 -; X64-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X64-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X64-NEXT: vmovaps %ymm1, (%rsi) ; X64-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 ; X64-NEXT: retq Index: test/CodeGen/X86/avx2-vector-shifts.ll =================================================================== --- test/CodeGen/X86/avx2-vector-shifts.ll +++ test/CodeGen/X86/avx2-vector-shifts.ll @@ -430,7 +430,7 @@ define <16 x i16> @shl_16i16(<16 x i16> %r, <16 x i16> %a) nounwind { ; X32-LABEL: shl_16i16: ; X32: # BB#0: -; X32-NEXT: vpxor %ymm2, %ymm2, %ymm2 +; X32-NEXT: vpxor %xmm2, %xmm2, %xmm2 ; X32-NEXT: vpunpckhwd {{.*#+}} ymm3 = ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15] ; X32-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15] ; X32-NEXT: vpsllvd %ymm3, %ymm4, %ymm3 @@ -444,7 +444,7 @@ ; ; X64-LABEL: shl_16i16: ; X64: # BB#0: -; X64-NEXT: vpxor %ymm2, %ymm2, %ymm2 +; X64-NEXT: vpxor %xmm2, %xmm2, %xmm2 ; X64-NEXT: vpunpckhwd {{.*#+}} ymm3 = ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15] ; X64-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15] ; X64-NEXT: vpsllvd %ymm3, %ymm4, %ymm3 @@ -522,7 +522,7 @@ define <16 x i16> @ashr_16i16(<16 x i16> %r, <16 x i16> %a) nounwind { ; X32-LABEL: ashr_16i16: ; X32: # BB#0: -; X32-NEXT: vpxor %ymm2, %ymm2, %ymm2 +; X32-NEXT: vpxor %xmm2, %xmm2, %xmm2 ; X32-NEXT: vpunpckhwd {{.*#+}} ymm3 = ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15] ; X32-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15] ; X32-NEXT: vpsravd %ymm3, %ymm4, %ymm3 @@ -536,7 +536,7 @@ ; ; X64-LABEL: ashr_16i16: ; X64: # BB#0: -; X64-NEXT: vpxor %ymm2, %ymm2, %ymm2 +; X64-NEXT: vpxor %xmm2, %xmm2, %xmm2 ; X64-NEXT: vpunpckhwd {{.*#+}} ymm3 = ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15] ; X64-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15] ; X64-NEXT: vpsravd %ymm3, %ymm4, %ymm3 @@ -640,7 +640,7 @@ define <16 x i16> @lshr_16i16(<16 x i16> %r, <16 x i16> %a) nounwind { ; X32-LABEL: lshr_16i16: ; X32: # BB#0: -; X32-NEXT: vpxor %ymm2, %ymm2, %ymm2 +; X32-NEXT: vpxor %xmm2, %xmm2, %xmm2 ; X32-NEXT: vpunpckhwd {{.*#+}} ymm3 = ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15] ; X32-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15] ; X32-NEXT: vpsrlvd %ymm3, %ymm4, %ymm3 @@ -654,7 +654,7 @@ ; ; X64-LABEL: lshr_16i16: ; X64: # BB#0: -; X64-NEXT: vpxor %ymm2, %ymm2, %ymm2 +; X64-NEXT: vpxor %xmm2, %xmm2, %xmm2 ; X64-NEXT: vpunpckhwd {{.*#+}} ymm3 = ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15] ; X64-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15] ; X64-NEXT: vpsrlvd %ymm3, %ymm4, %ymm3 Index: test/CodeGen/X86/bitcast-and-setcc-512.ll =================================================================== --- test/CodeGen/X86/bitcast-and-setcc-512.ll +++ test/CodeGen/X86/bitcast-and-setcc-512.ll @@ -356,7 +356,7 @@ ; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 ; AVX2-NEXT: vpsllw $7, %ymm0, %ymm0 ; AVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0 -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpcmpgtb %ymm0, %ymm1, %ymm0 ; AVX2-NEXT: vpmovmskb %ymm0, %eax ; AVX2-NEXT: vzeroupper Index: test/CodeGen/X86/clear_upper_vector_element_bits.ll =================================================================== --- test/CodeGen/X86/clear_upper_vector_element_bits.ll +++ test/CodeGen/X86/clear_upper_vector_element_bits.ll @@ -45,13 +45,13 @@ ; ; AVX1-LABEL: _clearupper4xi64a: ; AVX1: # BB#0: -; AVX1-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7] ; AVX1-NEXT: retq ; ; AVX2-LABEL: _clearupper4xi64a: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7] ; AVX2-NEXT: retq %x0 = extractelement <4 x i64> %0, i32 0 @@ -118,7 +118,7 @@ ; ; AVX2-LABEL: _clearupper8xi32a: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7],ymm0[8],ymm1[9],ymm0[10],ymm1[11],ymm0[12],ymm1[13],ymm0[14],ymm1[15] ; AVX2-NEXT: retq %x0 = extractelement <8 x i32> %0, i32 0 @@ -666,13 +666,13 @@ ; ; AVX1-LABEL: _clearupper4xi64b: ; AVX1: # BB#0: -; AVX1-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7] ; AVX1-NEXT: retq ; ; AVX2-LABEL: _clearupper4xi64b: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7] ; AVX2-NEXT: retq %x32 = bitcast <4 x i64> %0 to <8 x i32> @@ -719,7 +719,7 @@ ; ; AVX2-LABEL: _clearupper8xi32b: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7],ymm0[8],ymm1[9],ymm0[10],ymm1[11],ymm0[12],ymm1[13],ymm0[14],ymm1[15] ; AVX2-NEXT: retq %x16 = bitcast <8 x i32> %0 to <16 x i16> @@ -1468,13 +1468,13 @@ ; ; AVX1-LABEL: _clearupper4xi64c: ; AVX1: # BB#0: -; AVX1-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7] ; AVX1-NEXT: retq ; ; AVX2-LABEL: _clearupper4xi64c: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7] ; AVX2-NEXT: retq %r = and <4 x i64> , %0 @@ -1511,7 +1511,7 @@ ; ; AVX2-LABEL: _clearupper8xi32c: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7],ymm0[8],ymm1[9],ymm0[10],ymm1[11],ymm0[12],ymm1[13],ymm0[14],ymm1[15] ; AVX2-NEXT: retq %r = and <8 x i32> , %0 Index: test/CodeGen/X86/combine-abs.ll =================================================================== --- test/CodeGen/X86/combine-abs.ll +++ test/CodeGen/X86/combine-abs.ll @@ -50,7 +50,7 @@ define <4 x i64> @combine_v4i64_abs_abs(<4 x i64> %a) { ; AVX2-LABEL: combine_v4i64_abs_abs: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2 ; AVX2-NEXT: vpaddq %ymm2, %ymm0, %ymm0 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm0 Index: test/CodeGen/X86/combine-pmuldq.ll =================================================================== --- test/CodeGen/X86/combine-pmuldq.ll +++ test/CodeGen/X86/combine-pmuldq.ll @@ -96,7 +96,7 @@ ; ; AVX-LABEL: combine_shuffle_zero_pmuludq_256: ; AVX: # BB#0: -; AVX-NEXT: vpxor %ymm2, %ymm2, %ymm2 +; AVX-NEXT: vpxor %xmm2, %xmm2, %xmm2 ; AVX-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm2[1],ymm0[2],ymm2[3],ymm0[4],ymm2[5],ymm0[6],ymm2[7] ; AVX-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0],ymm2[1],ymm1[2],ymm2[3],ymm1[4],ymm2[5],ymm1[6],ymm2[7] ; AVX-NEXT: vpmuludq %ymm1, %ymm0, %ymm0 Index: test/CodeGen/X86/fma_patterns.ll =================================================================== --- test/CodeGen/X86/fma_patterns.ll +++ test/CodeGen/X86/fma_patterns.ll @@ -1517,13 +1517,13 @@ define <4 x double> @test_v4f64_fneg_fmul(<4 x double> %x, <4 x double> %y) #0 { ; FMA-LABEL: test_v4f64_fneg_fmul: ; FMA: # BB#0: -; FMA-NEXT: vxorpd %ymm2, %ymm2, %ymm2 +; FMA-NEXT: vxorpd %xmm2, %xmm2, %xmm2 ; FMA-NEXT: vfnmsub213pd %ymm2, %ymm1, %ymm0 ; FMA-NEXT: retq ; ; FMA4-LABEL: test_v4f64_fneg_fmul: ; FMA4: # BB#0: -; FMA4-NEXT: vxorpd %ymm2, %ymm2, %ymm2 +; FMA4-NEXT: vxorpd %xmm2, %xmm2, %xmm2 ; FMA4-NEXT: vfnmsubpd %ymm2, %ymm1, %ymm0, %ymm0 ; FMA4-NEXT: retq ; Index: test/CodeGen/X86/fma_patterns_wide.ll =================================================================== --- test/CodeGen/X86/fma_patterns_wide.ll +++ test/CodeGen/X86/fma_patterns_wide.ll @@ -1091,14 +1091,14 @@ define <16 x float> @test_v16f32_fneg_fmul(<16 x float> %x, <16 x float> %y) #0 { ; FMA-LABEL: test_v16f32_fneg_fmul: ; FMA: # BB#0: -; FMA-NEXT: vxorps %ymm4, %ymm4, %ymm4 +; FMA-NEXT: vxorps %xmm4, %xmm4, %xmm4 ; FMA-NEXT: vfnmsub213ps %ymm4, %ymm2, %ymm0 ; FMA-NEXT: vfnmsub213ps %ymm4, %ymm3, %ymm1 ; FMA-NEXT: retq ; ; FMA4-LABEL: test_v16f32_fneg_fmul: ; FMA4: # BB#0: -; FMA4-NEXT: vxorps %ymm4, %ymm4, %ymm4 +; FMA4-NEXT: vxorps %xmm4, %xmm4, %xmm4 ; FMA4-NEXT: vfnmsubps %ymm4, %ymm2, %ymm0, %ymm0 ; FMA4-NEXT: vfnmsubps %ymm4, %ymm3, %ymm1, %ymm1 ; FMA4-NEXT: retq @@ -1116,14 +1116,14 @@ define <8 x double> @test_v8f64_fneg_fmul(<8 x double> %x, <8 x double> %y) #0 { ; FMA-LABEL: test_v8f64_fneg_fmul: ; FMA: # BB#0: -; FMA-NEXT: vxorpd %ymm4, %ymm4, %ymm4 +; FMA-NEXT: vxorpd %xmm4, %xmm4, %xmm4 ; FMA-NEXT: vfnmsub213pd %ymm4, %ymm2, %ymm0 ; FMA-NEXT: vfnmsub213pd %ymm4, %ymm3, %ymm1 ; FMA-NEXT: retq ; ; FMA4-LABEL: test_v8f64_fneg_fmul: ; FMA4: # BB#0: -; FMA4-NEXT: vxorpd %ymm4, %ymm4, %ymm4 +; FMA4-NEXT: vxorpd %xmm4, %xmm4, %xmm4 ; FMA4-NEXT: vfnmsubpd %ymm4, %ymm2, %ymm0, %ymm0 ; FMA4-NEXT: vfnmsubpd %ymm4, %ymm3, %ymm1, %ymm1 ; FMA4-NEXT: retq Index: test/CodeGen/X86/insertelement-duplicates.ll =================================================================== --- test/CodeGen/X86/insertelement-duplicates.ll +++ test/CodeGen/X86/insertelement-duplicates.ll @@ -32,7 +32,7 @@ ; AVX-32-NEXT: movl {{[0-9]+}}(%esp), %eax ; AVX-32-NEXT: movl {{[0-9]+}}(%esp), %ecx ; AVX-32-NEXT: vbroadcastss 304(%ecx), %xmm0 -; AVX-32-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; AVX-32-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; AVX-32-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2],ymm1[3,4,5,6,7] ; AVX-32-NEXT: vmovups %ymm0, 608(%eax) ; AVX-32-NEXT: vzeroupper @@ -41,7 +41,7 @@ ; AVX-64-LABEL: PR15298: ; AVX-64: # BB#0: # %L.entry ; AVX-64-NEXT: vbroadcastss 304(%rdi), %xmm0 -; AVX-64-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; AVX-64-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; AVX-64-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2],ymm1[3,4,5,6,7] ; AVX-64-NEXT: vmovups %ymm0, 608(%rsi) ; AVX-64-NEXT: vzeroupper Index: test/CodeGen/X86/insertelement-zero.ll =================================================================== --- test/CodeGen/X86/insertelement-zero.ll +++ test/CodeGen/X86/insertelement-zero.ll @@ -71,7 +71,7 @@ ; ; AVX-LABEL: insert_v4f64_0zz3: ; AVX: # BB#0: -; AVX-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; AVX-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2],ymm0[3] ; AVX-NEXT: retq %1 = insertelement <4 x double> %a, double 0.0, i32 1 @@ -146,13 +146,13 @@ ; ; AVX1-LABEL: insert_v4i64_01z3: ; AVX1: # BB#0: -; AVX1-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; AVX1-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2],ymm0[3] ; AVX1-NEXT: retq ; ; AVX2-LABEL: insert_v4i64_01z3: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5],ymm0[6,7] ; AVX2-NEXT: retq %1 = insertelement <4 x i64> %a, i64 0, i32 2 @@ -230,7 +230,7 @@ ; ; AVX-LABEL: insert_v8f32_z12345z7: ; AVX: # BB#0: -; AVX-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; AVX-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3,4,5],ymm1[6],ymm0[7] ; AVX-NEXT: retq %1 = insertelement <8 x float> %a, float 0.0, i32 0 @@ -318,13 +318,13 @@ ; ; AVX1-LABEL: insert_v8i32_z12345z7: ; AVX1: # BB#0: -; AVX1-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3,4,5],ymm1[6],ymm0[7] ; AVX1-NEXT: retq ; ; AVX2-LABEL: insert_v8i32_z12345z7: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3,4,5],ymm1[6],ymm0[7] ; AVX2-NEXT: retq %1 = insertelement <8 x i32> %a, i32 0, i32 0 Index: test/CodeGen/X86/madd.ll =================================================================== --- test/CodeGen/X86/madd.ll +++ test/CodeGen/X86/madd.ll @@ -33,7 +33,7 @@ ; AVX2-LABEL: _Z10test_shortPsS_i: ; AVX2: # BB#0: # %entry ; AVX2-NEXT: movl %edx, %eax -; AVX2-NEXT: vpxor %ymm0, %ymm0, %ymm0 +; AVX2-NEXT: vpxor %xmm0, %xmm0, %xmm0 ; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: .p2align 4, 0x90 ; AVX2-NEXT: .LBB0_1: # %vector.body @@ -148,7 +148,7 @@ ; AVX2-LABEL: test_unsigned_short: ; AVX2: # BB#0: # %entry ; AVX2-NEXT: movl %edx, %eax -; AVX2-NEXT: vpxor %ymm0, %ymm0, %ymm0 +; AVX2-NEXT: vpxor %xmm0, %xmm0, %xmm0 ; AVX2-NEXT: .p2align 4, 0x90 ; AVX2-NEXT: .LBB1_1: # %vector.body ; AVX2-NEXT: # =>This Inner Loop Header: Depth=1 @@ -281,8 +281,8 @@ ; AVX2-LABEL: _Z9test_charPcS_i: ; AVX2: # BB#0: # %entry ; AVX2-NEXT: movl %edx, %eax -; AVX2-NEXT: vpxor %ymm0, %ymm0, %ymm0 -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm0, %xmm0, %xmm0 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: .p2align 4, 0x90 ; AVX2-NEXT: .LBB2_1: # %vector.body ; AVX2-NEXT: # =>This Inner Loop Header: Depth=1 Index: test/CodeGen/X86/masked_memop.ll =================================================================== --- test/CodeGen/X86/masked_memop.ll +++ test/CodeGen/X86/masked_memop.ll @@ -228,7 +228,7 @@ ; ; AVX2-LABEL: test11a: ; AVX2: ## BB#0: -; AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2 +; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 ; AVX2-NEXT: vpcmpeqd %ymm2, %ymm0, %ymm0 ; AVX2-NEXT: vmaskmovps (%rdi), %ymm0, %ymm2 ; AVX2-NEXT: vblendvps %ymm0, %ymm2, %ymm1, %ymm0 @@ -400,7 +400,7 @@ ; ; AVX2-LABEL: test12: ; AVX2: ## BB#0: -; AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2 +; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 ; AVX2-NEXT: vpcmpeqd %ymm2, %ymm0, %ymm0 ; AVX2-NEXT: vpmaskmovd %ymm1, %ymm0, (%rdi) ; AVX2-NEXT: vzeroupper Index: test/CodeGen/X86/memset.ll =================================================================== --- test/CodeGen/X86/memset.ll +++ test/CodeGen/X86/memset.ll @@ -43,7 +43,7 @@ ; YMM-NEXT: movl %esp, %ebp ; YMM-NEXT: andl $-32, %esp ; YMM-NEXT: subl $96, %esp -; YMM-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; YMM-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; YMM-NEXT: vmovaps %ymm0, {{[0-9]+}}(%esp) ; YMM-NEXT: leal {{[0-9]+}}(%esp), %eax ; YMM-NEXT: movl %eax, (%esp) Index: test/CodeGen/X86/merge-consecutive-loads-256.ll =================================================================== --- test/CodeGen/X86/merge-consecutive-loads-256.ll +++ test/CodeGen/X86/merge-consecutive-loads-256.ll @@ -135,16 +135,28 @@ } define <4 x double> @merge_4f64_f64_34z6(double* %ptr) nounwind uwtable noinline ssp { -; AVX-LABEL: merge_4f64_f64_34z6: -; AVX: # BB#0: -; AVX-NEXT: vxorpd %ymm0, %ymm0, %ymm0 -; AVX-NEXT: vblendpd {{.*#+}} ymm0 = mem[0,1],ymm0[2],mem[3] -; AVX-NEXT: retq +; AVX1-LABEL: merge_4f64_f64_34z6: +; AVX1: # BB#0: +; AVX1-NEXT: vxorpd %xmm0, %xmm0, %xmm0 +; AVX1-NEXT: vblendpd {{.*#+}} ymm0 = mem[0,1],ymm0[2],mem[3] +; AVX1-NEXT: retq +; +; AVX2-LABEL: merge_4f64_f64_34z6: +; AVX2: # BB#0: +; AVX2-NEXT: vxorpd %xmm0, %xmm0, %xmm0 +; AVX2-NEXT: vblendpd {{.*#+}} ymm0 = mem[0,1],ymm0[2],mem[3] +; AVX2-NEXT: retq +; +; AVX512F-LABEL: merge_4f64_f64_34z6: +; AVX512F: # BB#0: +; AVX512F-NEXT: vxorpd %ymm0, %ymm0, %ymm0 +; AVX512F-NEXT: vblendpd {{.*#+}} ymm0 = mem[0,1],ymm0[2],mem[3] +; AVX512F-NEXT: retq ; ; X32-AVX-LABEL: merge_4f64_f64_34z6: ; X32-AVX: # BB#0: ; X32-AVX-NEXT: movl {{[0-9]+}}(%esp), %eax -; X32-AVX-NEXT: vxorpd %ymm0, %ymm0, %ymm0 +; X32-AVX-NEXT: vxorpd %xmm0, %xmm0, %xmm0 ; X32-AVX-NEXT: vblendpd {{.*#+}} ymm0 = mem[0,1],ymm0[2],mem[3] ; X32-AVX-NEXT: retl %ptr0 = getelementptr inbounds double, double* %ptr, i64 3 @@ -278,7 +290,7 @@ ; X32-AVX-LABEL: merge_8f32_2f32_23z5: ; X32-AVX: # BB#0: ; X32-AVX-NEXT: movl {{[0-9]+}}(%esp), %eax -; X32-AVX-NEXT: vxorpd %ymm0, %ymm0, %ymm0 +; X32-AVX-NEXT: vxorpd %xmm0, %xmm0, %xmm0 ; X32-AVX-NEXT: vblendpd {{.*#+}} ymm0 = mem[0,1],ymm0[2],mem[3] ; X32-AVX-NEXT: retl %ptr0 = getelementptr inbounds <2 x float>, <2 x float>* %ptr, i64 2 @@ -337,16 +349,28 @@ } define <8 x float> @merge_8f32_f32_1u3u5zu8(float* %ptr) nounwind uwtable noinline ssp { -; AVX-LABEL: merge_8f32_f32_1u3u5zu8: -; AVX: # BB#0: -; AVX-NEXT: vxorps %ymm0, %ymm0, %ymm0 -; AVX-NEXT: vblendps {{.*#+}} ymm0 = mem[0,1,2,3,4],ymm0[5],mem[6,7] -; AVX-NEXT: retq +; AVX1-LABEL: merge_8f32_f32_1u3u5zu8: +; AVX1: # BB#0: +; AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 +; AVX1-NEXT: vblendps {{.*#+}} ymm0 = mem[0,1,2,3,4],ymm0[5],mem[6,7] +; AVX1-NEXT: retq +; +; AVX2-LABEL: merge_8f32_f32_1u3u5zu8: +; AVX2: # BB#0: +; AVX2-NEXT: vxorps %xmm0, %xmm0, %xmm0 +; AVX2-NEXT: vblendps {{.*#+}} ymm0 = mem[0,1,2,3,4],ymm0[5],mem[6,7] +; AVX2-NEXT: retq +; +; AVX512F-LABEL: merge_8f32_f32_1u3u5zu8: +; AVX512F: # BB#0: +; AVX512F-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; AVX512F-NEXT: vblendps {{.*#+}} ymm0 = mem[0,1,2,3,4],ymm0[5],mem[6,7] +; AVX512F-NEXT: retq ; ; X32-AVX-LABEL: merge_8f32_f32_1u3u5zu8: ; X32-AVX: # BB#0: ; X32-AVX-NEXT: movl {{[0-9]+}}(%esp), %eax -; X32-AVX-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-AVX-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-AVX-NEXT: vblendps {{.*#+}} ymm0 = mem[0,1,2,3,4],ymm0[5],mem[6,7] ; X32-AVX-NEXT: retl %ptr0 = getelementptr inbounds float, float* %ptr, i64 1 @@ -418,13 +442,13 @@ define <8 x i32> @merge_8i32_i32_1u3u5zu8(i32* %ptr) nounwind uwtable noinline ssp { ; AVX1-LABEL: merge_8i32_i32_1u3u5zu8: ; AVX1: # BB#0: -; AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; AVX1-NEXT: vblendps {{.*#+}} ymm0 = mem[0,1,2,3,4],ymm0[5],mem[6,7] ; AVX1-NEXT: retq ; ; AVX2-LABEL: merge_8i32_i32_1u3u5zu8: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm0, %ymm0, %ymm0 +; AVX2-NEXT: vpxor %xmm0, %xmm0, %xmm0 ; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = mem[0,1,2,3,4],ymm0[5],mem[6,7] ; AVX2-NEXT: retq ; @@ -437,7 +461,7 @@ ; X32-AVX-LABEL: merge_8i32_i32_1u3u5zu8: ; X32-AVX: # BB#0: ; X32-AVX-NEXT: movl {{[0-9]+}}(%esp), %eax -; X32-AVX-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-AVX-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-AVX-NEXT: vblendps {{.*#+}} ymm0 = mem[0,1,2,3,4],ymm0[5],mem[6,7] ; X32-AVX-NEXT: retl %ptr0 = getelementptr inbounds i32, i32* %ptr, i64 1 Index: test/CodeGen/X86/nontemporal-2.ll =================================================================== --- test/CodeGen/X86/nontemporal-2.ll +++ test/CodeGen/X86/nontemporal-2.ll @@ -246,7 +246,7 @@ ; ; AVX-LABEL: test_zero_v8f32: ; AVX: # BB#0: -; AVX-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; AVX-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; AVX-NEXT: vmovntps %ymm0, (%rdi) ; AVX-NEXT: vzeroupper ; AVX-NEXT: retq @@ -271,7 +271,7 @@ ; ; AVX-LABEL: test_zero_v8i32: ; AVX: # BB#0: -; AVX-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; AVX-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; AVX-NEXT: vmovntps %ymm0, (%rdi) ; AVX-NEXT: vzeroupper ; AVX-NEXT: retq @@ -296,7 +296,7 @@ ; ; AVX-LABEL: test_zero_v4f64: ; AVX: # BB#0: -; AVX-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; AVX-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; AVX-NEXT: vmovntps %ymm0, (%rdi) ; AVX-NEXT: vzeroupper ; AVX-NEXT: retq @@ -321,7 +321,7 @@ ; ; AVX-LABEL: test_zero_v4i64: ; AVX: # BB#0: -; AVX-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; AVX-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; AVX-NEXT: vmovntps %ymm0, (%rdi) ; AVX-NEXT: vzeroupper ; AVX-NEXT: retq @@ -346,7 +346,7 @@ ; ; AVX-LABEL: test_zero_v16i16: ; AVX: # BB#0: -; AVX-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; AVX-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; AVX-NEXT: vmovntps %ymm0, (%rdi) ; AVX-NEXT: vzeroupper ; AVX-NEXT: retq @@ -371,7 +371,7 @@ ; ; AVX-LABEL: test_zero_v32i8: ; AVX: # BB#0: -; AVX-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; AVX-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; AVX-NEXT: vmovntps %ymm0, (%rdi) ; AVX-NEXT: vzeroupper ; AVX-NEXT: retq Index: test/CodeGen/X86/nontemporal-loads.ll =================================================================== --- test/CodeGen/X86/nontemporal-loads.ll +++ test/CodeGen/X86/nontemporal-loads.ll @@ -1886,7 +1886,7 @@ ; ; AVX2-LABEL: test_masked_v16i32: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm4, %ymm4, %ymm4 +; AVX2-NEXT: vpxor %xmm4, %xmm4, %xmm4 ; AVX2-NEXT: vpcmpeqd %ymm4, %ymm3, %ymm3 ; AVX2-NEXT: vpcmpeqd %ymm5, %ymm5, %ymm5 ; AVX2-NEXT: vpxor %ymm5, %ymm3, %ymm3 Index: test/CodeGen/X86/packss.ll =================================================================== --- test/CodeGen/X86/packss.ll +++ test/CodeGen/X86/packss.ll @@ -35,7 +35,7 @@ ; ; X64-AVX2-LABEL: trunc_ashr_v4i64: ; X64-AVX2: # BB#0: -; X64-AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X64-AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; X64-AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm0 ; X64-AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 ; X64-AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0 Index: test/CodeGen/X86/pmovsx-inreg.ll =================================================================== --- test/CodeGen/X86/pmovsx-inreg.ll +++ test/CodeGen/X86/pmovsx-inreg.ll @@ -58,8 +58,8 @@ ; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] ; AVX1-NEXT: vpmovsxdq %xmm0, %xmm0 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 -; AVX1-NEXT: vxorps %ymm1, %ymm1, %ymm1 -; AVX1-NEXT: vmovups %ymm1, (%rax) +; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 +; AVX1-NEXT: vmovdqu %ymm1, (%rax) ; AVX1-NEXT: vmovups %ymm0, (%rsi) ; AVX1-NEXT: vzeroupper ; AVX1-NEXT: retq @@ -67,7 +67,7 @@ ; AVX2-LABEL: test2: ; AVX2: # BB#0: ; AVX2-NEXT: vpmovsxbq (%rdi), %ymm0 -; AVX2-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vmovups %ymm1, (%rax) ; AVX2-NEXT: vmovdqu %ymm0, (%rsi) ; AVX2-NEXT: vzeroupper @@ -78,7 +78,7 @@ ; X32-AVX2-NEXT: movl {{[0-9]+}}(%esp), %eax ; X32-AVX2-NEXT: movl {{[0-9]+}}(%esp), %ecx ; X32-AVX2-NEXT: vpmovsxbq (%ecx), %ymm0 -; X32-AVX2-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X32-AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X32-AVX2-NEXT: vmovups %ymm1, (%eax) ; X32-AVX2-NEXT: vmovdqu %ymm0, (%eax) ; X32-AVX2-NEXT: vzeroupper @@ -141,8 +141,8 @@ ; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] ; AVX1-NEXT: vpmovsxwd %xmm0, %xmm0 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 -; AVX1-NEXT: vxorps %ymm1, %ymm1, %ymm1 -; AVX1-NEXT: vmovups %ymm1, (%rax) +; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 +; AVX1-NEXT: vmovdqu %ymm1, (%rax) ; AVX1-NEXT: vmovups %ymm0, (%rsi) ; AVX1-NEXT: vzeroupper ; AVX1-NEXT: retq @@ -150,7 +150,7 @@ ; AVX2-LABEL: test4: ; AVX2: # BB#0: ; AVX2-NEXT: vpmovsxbd (%rdi), %ymm0 -; AVX2-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vmovups %ymm1, (%rax) ; AVX2-NEXT: vmovdqu %ymm0, (%rsi) ; AVX2-NEXT: vzeroupper @@ -161,7 +161,7 @@ ; X32-AVX2-NEXT: movl {{[0-9]+}}(%esp), %eax ; X32-AVX2-NEXT: movl {{[0-9]+}}(%esp), %ecx ; X32-AVX2-NEXT: vpmovsxbd (%ecx), %ymm0 -; X32-AVX2-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X32-AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X32-AVX2-NEXT: vmovups %ymm1, (%eax) ; X32-AVX2-NEXT: vmovdqu %ymm0, (%eax) ; X32-AVX2-NEXT: vzeroupper @@ -222,8 +222,8 @@ ; AVX1-NEXT: vpmovsxbw (%rdi), %xmm0 ; AVX1-NEXT: vpmovsxbw 8(%rdi), %xmm1 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 -; AVX1-NEXT: vxorps %ymm1, %ymm1, %ymm1 -; AVX1-NEXT: vmovups %ymm1, (%rax) +; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 +; AVX1-NEXT: vmovdqu %ymm1, (%rax) ; AVX1-NEXT: vmovups %ymm0, (%rsi) ; AVX1-NEXT: vzeroupper ; AVX1-NEXT: retq @@ -231,7 +231,7 @@ ; AVX2-LABEL: test6: ; AVX2: # BB#0: ; AVX2-NEXT: vpmovsxbw (%rdi), %ymm0 -; AVX2-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vmovups %ymm1, (%rax) ; AVX2-NEXT: vmovdqu %ymm0, (%rsi) ; AVX2-NEXT: vzeroupper @@ -242,7 +242,7 @@ ; X32-AVX2-NEXT: movl {{[0-9]+}}(%esp), %eax ; X32-AVX2-NEXT: movl {{[0-9]+}}(%esp), %ecx ; X32-AVX2-NEXT: vpmovsxbw (%ecx), %ymm0 -; X32-AVX2-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X32-AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X32-AVX2-NEXT: vmovups %ymm1, (%eax) ; X32-AVX2-NEXT: vmovdqu %ymm0, (%eax) ; X32-AVX2-NEXT: vzeroupper @@ -305,8 +305,8 @@ ; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] ; AVX1-NEXT: vpmovsxdq %xmm0, %xmm0 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 -; AVX1-NEXT: vxorps %ymm1, %ymm1, %ymm1 -; AVX1-NEXT: vmovups %ymm1, (%rax) +; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 +; AVX1-NEXT: vmovdqu %ymm1, (%rax) ; AVX1-NEXT: vmovups %ymm0, (%rsi) ; AVX1-NEXT: vzeroupper ; AVX1-NEXT: retq @@ -314,7 +314,7 @@ ; AVX2-LABEL: test8: ; AVX2: # BB#0: ; AVX2-NEXT: vpmovsxwq (%rdi), %ymm0 -; AVX2-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vmovups %ymm1, (%rax) ; AVX2-NEXT: vmovdqu %ymm0, (%rsi) ; AVX2-NEXT: vzeroupper @@ -325,7 +325,7 @@ ; X32-AVX2-NEXT: movl {{[0-9]+}}(%esp), %eax ; X32-AVX2-NEXT: movl {{[0-9]+}}(%esp), %ecx ; X32-AVX2-NEXT: vpmovsxwq (%ecx), %ymm0 -; X32-AVX2-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X32-AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X32-AVX2-NEXT: vmovups %ymm1, (%eax) ; X32-AVX2-NEXT: vmovdqu %ymm0, (%eax) ; X32-AVX2-NEXT: vzeroupper @@ -386,8 +386,8 @@ ; AVX1-NEXT: vpmovsxwd (%rdi), %xmm0 ; AVX1-NEXT: vpmovsxwd 8(%rdi), %xmm1 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 -; AVX1-NEXT: vxorps %ymm1, %ymm1, %ymm1 -; AVX1-NEXT: vmovups %ymm1, (%rax) +; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 +; AVX1-NEXT: vmovdqu %ymm1, (%rax) ; AVX1-NEXT: vmovups %ymm0, (%rsi) ; AVX1-NEXT: vzeroupper ; AVX1-NEXT: retq @@ -395,7 +395,7 @@ ; AVX2-LABEL: test10: ; AVX2: # BB#0: ; AVX2-NEXT: vpmovsxwd (%rdi), %ymm0 -; AVX2-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vmovups %ymm1, (%rax) ; AVX2-NEXT: vmovdqu %ymm0, (%rsi) ; AVX2-NEXT: vzeroupper @@ -406,7 +406,7 @@ ; X32-AVX2-NEXT: movl {{[0-9]+}}(%esp), %eax ; X32-AVX2-NEXT: movl {{[0-9]+}}(%esp), %ecx ; X32-AVX2-NEXT: vpmovsxwd (%ecx), %ymm0 -; X32-AVX2-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X32-AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X32-AVX2-NEXT: vmovups %ymm1, (%eax) ; X32-AVX2-NEXT: vmovdqu %ymm0, (%eax) ; X32-AVX2-NEXT: vzeroupper @@ -467,8 +467,8 @@ ; AVX1-NEXT: vpmovsxdq (%rdi), %xmm0 ; AVX1-NEXT: vpmovsxdq 8(%rdi), %xmm1 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 -; AVX1-NEXT: vxorps %ymm1, %ymm1, %ymm1 -; AVX1-NEXT: vmovups %ymm1, (%rax) +; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 +; AVX1-NEXT: vmovdqu %ymm1, (%rax) ; AVX1-NEXT: vmovups %ymm0, (%rsi) ; AVX1-NEXT: vzeroupper ; AVX1-NEXT: retq @@ -476,7 +476,7 @@ ; AVX2-LABEL: test12: ; AVX2: # BB#0: ; AVX2-NEXT: vpmovsxdq (%rdi), %ymm0 -; AVX2-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vmovups %ymm1, (%rax) ; AVX2-NEXT: vmovdqu %ymm0, (%rsi) ; AVX2-NEXT: vzeroupper @@ -487,7 +487,7 @@ ; X32-AVX2-NEXT: movl {{[0-9]+}}(%esp), %eax ; X32-AVX2-NEXT: movl {{[0-9]+}}(%esp), %ecx ; X32-AVX2-NEXT: vpmovsxdq (%ecx), %ymm0 -; X32-AVX2-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X32-AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X32-AVX2-NEXT: vmovups %ymm1, (%eax) ; X32-AVX2-NEXT: vmovdqu %ymm0, (%eax) ; X32-AVX2-NEXT: vzeroupper Index: test/CodeGen/X86/pr28129.ll =================================================================== --- test/CodeGen/X86/pr28129.ll +++ test/CodeGen/X86/pr28129.ll @@ -5,14 +5,14 @@ define <4 x double> @cmp4f64_domain(<4 x double> %a) { ; X86-LABEL: cmp4f64_domain: ; X86: # BB#0: -; X86-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X86-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X86-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; X86-NEXT: vaddpd %ymm1, %ymm0, %ymm0 ; X86-NEXT: retl ; ; X64-LABEL: cmp4f64_domain: ; X64: # BB#0: -; X64-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X64-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X64-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; X64-NEXT: vaddpd %ymm1, %ymm0, %ymm0 ; X64-NEXT: retq @@ -26,14 +26,14 @@ define <4 x double> @cmp4f64_domain_optsize(<4 x double> %a) optsize { ; X86-LABEL: cmp4f64_domain_optsize: ; X86: # BB#0: -; X86-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X86-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X86-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; X86-NEXT: vaddpd %ymm1, %ymm0, %ymm0 ; X86-NEXT: retl ; ; X64-LABEL: cmp4f64_domain_optsize: ; X64: # BB#0: -; X64-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X64-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X64-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; X64-NEXT: vaddpd %ymm1, %ymm0, %ymm0 ; X64-NEXT: retq @@ -47,14 +47,14 @@ define <8 x float> @cmp8f32_domain(<8 x float> %a) { ; X86-LABEL: cmp8f32_domain: ; X86: # BB#0: -; X86-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X86-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X86-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; X86-NEXT: vaddps %ymm1, %ymm0, %ymm0 ; X86-NEXT: retl ; ; X64-LABEL: cmp8f32_domain: ; X64: # BB#0: -; X64-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X64-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X64-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; X64-NEXT: vaddps %ymm1, %ymm0, %ymm0 ; X64-NEXT: retq @@ -68,14 +68,14 @@ define <8 x float> @cmp8f32_domain_optsize(<8 x float> %a) optsize { ; X86-LABEL: cmp8f32_domain_optsize: ; X86: # BB#0: -; X86-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X86-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X86-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; X86-NEXT: vaddps %ymm1, %ymm0, %ymm0 ; X86-NEXT: retl ; ; X64-LABEL: cmp8f32_domain_optsize: ; X64: # BB#0: -; X64-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X64-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X64-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; X64-NEXT: vaddps %ymm1, %ymm0, %ymm0 ; X64-NEXT: retq Index: test/CodeGen/X86/sad.ll =================================================================== --- test/CodeGen/X86/sad.ll +++ test/CodeGen/X86/sad.ll @@ -35,9 +35,9 @@ ; ; AVX2-LABEL: sad_16i8: ; AVX2: # BB#0: # %entry -; AVX2-NEXT: vpxor %ymm0, %ymm0, %ymm0 +; AVX2-NEXT: vpxor %xmm0, %xmm0, %xmm0 ; AVX2-NEXT: movq $-1024, %rax # imm = 0xFC00 -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: .p2align 4, 0x90 ; AVX2-NEXT: .LBB0_1: # %vector.body ; AVX2-NEXT: # =>This Inner Loop Header: Depth=1 @@ -281,9 +281,9 @@ ; ; AVX2-LABEL: sad_32i8: ; AVX2: # BB#0: # %entry -; AVX2-NEXT: vpxor %ymm0, %ymm0, %ymm0 +; AVX2-NEXT: vpxor %xmm0, %xmm0, %xmm0 ; AVX2-NEXT: movq $-1024, %rax # imm = 0xFC00 -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: .p2align 4, 0x90 ; AVX2-NEXT: .LBB1_1: # %vector.body ; AVX2-NEXT: # =>This Inner Loop Header: Depth=1 @@ -684,15 +684,15 @@ ; ; AVX2-LABEL: sad_avx64i8: ; AVX2: # BB#0: # %entry -; AVX2-NEXT: vpxor %ymm0, %ymm0, %ymm0 +; AVX2-NEXT: vpxor %xmm0, %xmm0, %xmm0 ; AVX2-NEXT: movq $-1024, %rax # imm = 0xFC00 -; AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2 -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 -; AVX2-NEXT: vpxor %ymm4, %ymm4, %ymm4 -; AVX2-NEXT: vpxor %ymm3, %ymm3, %ymm3 -; AVX2-NEXT: vpxor %ymm6, %ymm6, %ymm6 -; AVX2-NEXT: vpxor %ymm5, %ymm5, %ymm5 -; AVX2-NEXT: vpxor %ymm7, %ymm7, %ymm7 +; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 +; AVX2-NEXT: vpxor %xmm4, %xmm4, %xmm4 +; AVX2-NEXT: vpxor %xmm3, %xmm3, %xmm3 +; AVX2-NEXT: vpxor %xmm6, %xmm6, %xmm6 +; AVX2-NEXT: vpxor %xmm5, %xmm5, %xmm5 +; AVX2-NEXT: vpxor %xmm7, %xmm7, %xmm7 ; AVX2-NEXT: .p2align 4, 0x90 ; AVX2-NEXT: .LBB2_1: # %vector.body ; AVX2-NEXT: # =>This Inner Loop Header: Depth=1 Index: test/CodeGen/X86/split-extend-vector-inreg.ll =================================================================== --- test/CodeGen/X86/split-extend-vector-inreg.ll +++ test/CodeGen/X86/split-extend-vector-inreg.ll @@ -7,7 +7,7 @@ ; X32: # BB#0: # %BB ; X32-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] ; X32-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 -; X32-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; X32-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; X32-NEXT: vblendpd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2],ymm1[3] ; X32-NEXT: movb $1, %al ; X32-NEXT: .p2align 4, 0x90 @@ -22,7 +22,7 @@ ; X64: # BB#0: # %BB ; X64-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] ; X64-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 -; X64-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; X64-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; X64-NEXT: vblendpd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2],ymm1[3] ; X64-NEXT: movb $1, %al ; X64-NEXT: .p2align 4, 0x90 Index: test/CodeGen/X86/sse-fsignum.ll =================================================================== --- test/CodeGen/X86/sse-fsignum.ll +++ test/CodeGen/X86/sse-fsignum.ll @@ -65,7 +65,7 @@ ; AVX1-LABEL: signum32b: ; AVX1: # BB#0: # %entry ; AVX1-NEXT: vmovaps (%rdi), %ymm0 -; AVX1-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; AVX1-NEXT: vcmpltps %ymm1, %ymm0, %ymm2 ; AVX1-NEXT: vcvtdq2ps %ymm2, %ymm2 ; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm0 @@ -78,7 +78,7 @@ ; AVX2-LABEL: signum32b: ; AVX2: # BB#0: # %entry ; AVX2-NEXT: vmovaps (%rdi), %ymm0 -; AVX2-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vcmpltps %ymm1, %ymm0, %ymm2 ; AVX2-NEXT: vcvtdq2ps %ymm2, %ymm2 ; AVX2-NEXT: vcmpltps %ymm0, %ymm1, %ymm0 @@ -119,7 +119,7 @@ ; AVX1-LABEL: signum64b: ; AVX1: # BB#0: # %entry ; AVX1-NEXT: vmovapd (%rdi), %ymm0 -; AVX1-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; AVX1-NEXT: vcmpltpd %ymm1, %ymm0, %ymm2 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm3 ; AVX1-NEXT: vpacksswb %xmm3, %xmm2, %xmm2 @@ -136,7 +136,7 @@ ; AVX2-LABEL: signum64b: ; AVX2: # BB#0: # %entry ; AVX2-NEXT: vmovapd (%rdi), %ymm0 -; AVX2-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vcmpltpd %ymm1, %ymm0, %ymm2 ; AVX2-NEXT: vextractf128 $1, %ymm2, %xmm3 ; AVX2-NEXT: vpacksswb %xmm3, %xmm2, %xmm2 @@ -180,18 +180,44 @@ ; define void @signum32c(<8 x float>*) { -; AVX-LABEL: signum32c: -; AVX: # BB#0: # %entry -; AVX-NEXT: vmovaps (%rdi), %ymm0 -; AVX-NEXT: vxorps %ymm1, %ymm1, %ymm1 -; AVX-NEXT: vcmpltps %ymm1, %ymm0, %ymm2 -; AVX-NEXT: vcvtdq2ps %ymm2, %ymm2 -; AVX-NEXT: vcmpltps %ymm0, %ymm1, %ymm0 -; AVX-NEXT: vcvtdq2ps %ymm0, %ymm0 -; AVX-NEXT: vsubps %ymm0, %ymm2, %ymm0 -; AVX-NEXT: vmovaps %ymm0, (%rdi) -; AVX-NEXT: vzeroupper -; AVX-NEXT: retq +; AVX1-LABEL: signum32c: +; AVX1: # BB#0: # %entry +; AVX1-NEXT: vmovaps (%rdi), %ymm0 +; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1 +; AVX1-NEXT: vcmpltps %ymm1, %ymm0, %ymm2 +; AVX1-NEXT: vcvtdq2ps %ymm2, %ymm2 +; AVX1-NEXT: vcmpltps %ymm0, %ymm1, %ymm0 +; AVX1-NEXT: vcvtdq2ps %ymm0, %ymm0 +; AVX1-NEXT: vsubps %ymm0, %ymm2, %ymm0 +; AVX1-NEXT: vmovaps %ymm0, (%rdi) +; AVX1-NEXT: vzeroupper +; AVX1-NEXT: retq +; +; AVX2-LABEL: signum32c: +; AVX2: # BB#0: # %entry +; AVX2-NEXT: vmovaps (%rdi), %ymm0 +; AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 +; AVX2-NEXT: vcmpltps %ymm1, %ymm0, %ymm2 +; AVX2-NEXT: vcvtdq2ps %ymm2, %ymm2 +; AVX2-NEXT: vcmpltps %ymm0, %ymm1, %ymm0 +; AVX2-NEXT: vcvtdq2ps %ymm0, %ymm0 +; AVX2-NEXT: vsubps %ymm0, %ymm2, %ymm0 +; AVX2-NEXT: vmovaps %ymm0, (%rdi) +; AVX2-NEXT: vzeroupper +; AVX2-NEXT: retq +; +; AVX512F-LABEL: signum32c: +; AVX512F: # BB#0: # %entry +; AVX512F-NEXT: vmovaps (%rdi), %ymm0 +; AVX512F-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; AVX512F-NEXT: vcmpltps %ymm1, %ymm0, %ymm2 +; AVX512F-NEXT: vcvtdq2ps %ymm2, %ymm2 +; AVX512F-NEXT: vcmpltps %ymm0, %ymm1, %ymm0 +; AVX512F-NEXT: vcvtdq2ps %ymm0, %ymm0 +; AVX512F-NEXT: vsubps %ymm0, %ymm2, %ymm0 +; AVX512F-NEXT: vmovaps %ymm0, (%rdi) +; AVX512F-NEXT: vzeroupper +; AVX512F-NEXT: retq entry: %1 = load <8 x float>, <8 x float>* %0 %2 = tail call <8 x float> @llvm.x86.avx.cmp.ps.256(<8 x float> %1, <8 x float> zeroinitializer, i8 1) @@ -209,7 +235,7 @@ ; AVX1-LABEL: signum64c: ; AVX1: # BB#0: # %entry ; AVX1-NEXT: vmovapd (%rdi), %ymm0 -; AVX1-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; AVX1-NEXT: vcmpltpd %ymm1, %ymm0, %ymm2 ; AVX1-NEXT: vcmpltpd %ymm0, %ymm1, %ymm0 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 @@ -225,7 +251,7 @@ ; AVX2-LABEL: signum64c: ; AVX2: # BB#0: # %entry ; AVX2-NEXT: vmovapd (%rdi), %ymm0 -; AVX2-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vcmpltpd %ymm1, %ymm0, %ymm2 ; AVX2-NEXT: vcmpltpd %ymm0, %ymm1, %ymm0 ; AVX2-NEXT: vpsubd %ymm0, %ymm2, %ymm0 Index: test/CodeGen/X86/vec_ext_inreg.ll =================================================================== --- test/CodeGen/X86/vec_ext_inreg.ll +++ test/CodeGen/X86/vec_ext_inreg.ll @@ -74,7 +74,7 @@ ; ; AVX2-LABEL: d: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7],ymm0[8],ymm1[9],ymm0[10],ymm1[11],ymm0[12],ymm1[13],ymm0[14],ymm1[15] ; AVX2-NEXT: retq %b = trunc <8 x i32> %a to <8 x i16> Index: test/CodeGen/X86/vec_extract-avx.ll =================================================================== --- test/CodeGen/X86/vec_extract-avx.ll +++ test/CodeGen/X86/vec_extract-avx.ll @@ -118,7 +118,7 @@ ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax ; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx ; X32-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero -; X32-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X32-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X32-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4,5,6,7] ; X32-NEXT: vmovaps %ymm0, (%eax) ; X32-NEXT: vzeroupper @@ -127,7 +127,7 @@ ; X64-LABEL: legal_vzmovl_2i32_8i32: ; X64: # BB#0: ; X64-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero -; X64-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X64-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X64-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4,5,6,7] ; X64-NEXT: vmovaps %ymm0, (%rsi) ; X64-NEXT: vzeroupper @@ -145,7 +145,7 @@ ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax ; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx ; X32-NEXT: vmovupd (%ecx), %xmm0 -; X32-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; X32-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; X32-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3] ; X32-NEXT: vmovapd %ymm0, (%eax) ; X32-NEXT: vzeroupper @@ -154,7 +154,7 @@ ; X64-LABEL: legal_vzmovl_2i64_4i64: ; X64: # BB#0: ; X64-NEXT: vmovupd (%rdi), %xmm0 -; X64-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; X64-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; X64-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3] ; X64-NEXT: vmovapd %ymm0, (%rsi) ; X64-NEXT: vzeroupper @@ -179,7 +179,7 @@ ; X64-LABEL: legal_vzmovl_2f32_8f32: ; X64: # BB#0: ; X64-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero -; X64-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X64-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X64-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4,5,6,7] ; X64-NEXT: vmovaps %ymm0, (%rsi) ; X64-NEXT: vzeroupper @@ -197,7 +197,7 @@ ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax ; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx ; X32-NEXT: vmovupd (%ecx), %xmm0 -; X32-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; X32-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; X32-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3] ; X32-NEXT: vmovapd %ymm0, (%eax) ; X32-NEXT: vzeroupper @@ -206,7 +206,7 @@ ; X64-LABEL: legal_vzmovl_2f64_4f64: ; X64: # BB#0: ; X64-NEXT: vmovupd (%rdi), %xmm0 -; X64-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; X64-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; X64-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3] ; X64-NEXT: vmovapd %ymm0, (%rsi) ; X64-NEXT: vzeroupper Index: test/CodeGen/X86/vec_uint_to_fp-fastmath.ll =================================================================== --- test/CodeGen/X86/vec_uint_to_fp-fastmath.ll +++ test/CodeGen/X86/vec_uint_to_fp-fastmath.ll @@ -163,7 +163,7 @@ ; AVX2-NEXT: vcvtdq2ps %ymm1, %ymm1 ; AVX2-NEXT: vbroadcastss [[FPMASKCSTADDR_v8]](%rip), %ymm2 ; AVX2-NEXT: vmulps %ymm2, %ymm1, %ymm1 -; AVX2-NEXT: vxorps %ymm2, %ymm2, %ymm2 +; AVX2-NEXT: vxorps %xmm2, %xmm2, %xmm2 ; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm2[1],ymm0[2],ymm2[3],ymm0[4],ymm2[5],ymm0[6],ymm2[7],ymm0[8],ymm2[9],ymm0[10],ymm2[11],ymm0[12],ymm2[13],ymm0[14],ymm2[15] ; AVX2-NEXT: vcvtdq2ps %ymm0, %ymm0 ; AVX2-NEXT: vaddps %ymm0, %ymm1, %ymm0 Index: test/CodeGen/X86/vector-extend-inreg.ll =================================================================== --- test/CodeGen/X86/vector-extend-inreg.ll +++ test/CodeGen/X86/vector-extend-inreg.ll @@ -72,7 +72,7 @@ ; X32-AVX-NEXT: subl $384, %esp # imm = 0x180 ; X32-AVX-NEXT: movl 40(%ebp), %ecx ; X32-AVX-NEXT: vbroadcastsd 32(%ebp), %ymm0 -; X32-AVX-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; X32-AVX-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; X32-AVX-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3] ; X32-AVX-NEXT: vmovapd %ymm1, {{[0-9]+}}(%esp) ; X32-AVX-NEXT: vmovapd %ymm1, {{[0-9]+}}(%esp) @@ -101,7 +101,7 @@ ; X64-AVX-NEXT: subq $256, %rsp # imm = 0x100 ; X64-AVX-NEXT: # kill: %EDI %EDI %RDI ; X64-AVX-NEXT: vpermq {{.*#+}} ymm0 = ymm3[3,1,2,3] -; X64-AVX-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; X64-AVX-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; X64-AVX-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3] ; X64-AVX-NEXT: vmovapd %ymm1, {{[0-9]+}}(%rsp) ; X64-AVX-NEXT: vmovapd %ymm1, {{[0-9]+}}(%rsp) Index: test/CodeGen/X86/vector-lzcnt-256.ll =================================================================== --- test/CodeGen/X86/vector-lzcnt-256.ll +++ test/CodeGen/X86/vector-lzcnt-256.ll @@ -73,7 +73,7 @@ ; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 ; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm4 ; AVX2-NEXT: vpand %ymm1, %ymm4, %ymm1 -; AVX2-NEXT: vpxor %ymm4, %ymm4, %ymm4 +; AVX2-NEXT: vpxor %xmm4, %xmm4, %xmm4 ; AVX2-NEXT: vpcmpeqb %ymm4, %ymm1, %ymm5 ; AVX2-NEXT: vpand %ymm5, %ymm2, %ymm2 ; AVX2-NEXT: vpshufb %ymm1, %ymm3, %ymm1 @@ -175,7 +175,7 @@ ; X32-AVX-NEXT: vpshufb %ymm2, %ymm3, %ymm2 ; X32-AVX-NEXT: vpsrlw $4, %ymm0, %ymm4 ; X32-AVX-NEXT: vpand %ymm1, %ymm4, %ymm1 -; X32-AVX-NEXT: vpxor %ymm4, %ymm4, %ymm4 +; X32-AVX-NEXT: vpxor %xmm4, %xmm4, %xmm4 ; X32-AVX-NEXT: vpcmpeqb %ymm4, %ymm1, %ymm5 ; X32-AVX-NEXT: vpand %ymm5, %ymm2, %ymm2 ; X32-AVX-NEXT: vpshufb %ymm1, %ymm3, %ymm1 @@ -265,7 +265,7 @@ ; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 ; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm4 ; AVX2-NEXT: vpand %ymm1, %ymm4, %ymm1 -; AVX2-NEXT: vpxor %ymm4, %ymm4, %ymm4 +; AVX2-NEXT: vpxor %xmm4, %xmm4, %xmm4 ; AVX2-NEXT: vpcmpeqb %ymm4, %ymm1, %ymm5 ; AVX2-NEXT: vpand %ymm5, %ymm2, %ymm2 ; AVX2-NEXT: vpshufb %ymm1, %ymm3, %ymm1 @@ -367,7 +367,7 @@ ; X32-AVX-NEXT: vpshufb %ymm2, %ymm3, %ymm2 ; X32-AVX-NEXT: vpsrlw $4, %ymm0, %ymm4 ; X32-AVX-NEXT: vpand %ymm1, %ymm4, %ymm1 -; X32-AVX-NEXT: vpxor %ymm4, %ymm4, %ymm4 +; X32-AVX-NEXT: vpxor %xmm4, %xmm4, %xmm4 ; X32-AVX-NEXT: vpcmpeqb %ymm4, %ymm1, %ymm5 ; X32-AVX-NEXT: vpand %ymm5, %ymm2, %ymm2 ; X32-AVX-NEXT: vpshufb %ymm1, %ymm3, %ymm1 @@ -447,7 +447,7 @@ ; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 ; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm4 ; AVX2-NEXT: vpand %ymm1, %ymm4, %ymm1 -; AVX2-NEXT: vpxor %ymm4, %ymm4, %ymm4 +; AVX2-NEXT: vpxor %xmm4, %xmm4, %xmm4 ; AVX2-NEXT: vpcmpeqb %ymm4, %ymm1, %ymm5 ; AVX2-NEXT: vpand %ymm5, %ymm2, %ymm2 ; AVX2-NEXT: vpshufb %ymm1, %ymm3, %ymm1 @@ -534,7 +534,7 @@ ; X32-AVX-NEXT: vpshufb %ymm2, %ymm3, %ymm2 ; X32-AVX-NEXT: vpsrlw $4, %ymm0, %ymm4 ; X32-AVX-NEXT: vpand %ymm1, %ymm4, %ymm1 -; X32-AVX-NEXT: vpxor %ymm4, %ymm4, %ymm4 +; X32-AVX-NEXT: vpxor %xmm4, %xmm4, %xmm4 ; X32-AVX-NEXT: vpcmpeqb %ymm4, %ymm1, %ymm5 ; X32-AVX-NEXT: vpand %ymm5, %ymm2, %ymm2 ; X32-AVX-NEXT: vpshufb %ymm1, %ymm3, %ymm1 @@ -609,7 +609,7 @@ ; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 ; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm4 ; AVX2-NEXT: vpand %ymm1, %ymm4, %ymm1 -; AVX2-NEXT: vpxor %ymm4, %ymm4, %ymm4 +; AVX2-NEXT: vpxor %xmm4, %xmm4, %xmm4 ; AVX2-NEXT: vpcmpeqb %ymm4, %ymm1, %ymm5 ; AVX2-NEXT: vpand %ymm5, %ymm2, %ymm2 ; AVX2-NEXT: vpshufb %ymm1, %ymm3, %ymm1 @@ -696,7 +696,7 @@ ; X32-AVX-NEXT: vpshufb %ymm2, %ymm3, %ymm2 ; X32-AVX-NEXT: vpsrlw $4, %ymm0, %ymm4 ; X32-AVX-NEXT: vpand %ymm1, %ymm4, %ymm1 -; X32-AVX-NEXT: vpxor %ymm4, %ymm4, %ymm4 +; X32-AVX-NEXT: vpxor %xmm4, %xmm4, %xmm4 ; X32-AVX-NEXT: vpcmpeqb %ymm4, %ymm1, %ymm5 ; X32-AVX-NEXT: vpand %ymm5, %ymm2, %ymm2 ; X32-AVX-NEXT: vpshufb %ymm1, %ymm3, %ymm1 @@ -761,7 +761,7 @@ ; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 ; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm4 ; AVX2-NEXT: vpand %ymm1, %ymm4, %ymm1 -; AVX2-NEXT: vpxor %ymm4, %ymm4, %ymm4 +; AVX2-NEXT: vpxor %xmm4, %xmm4, %xmm4 ; AVX2-NEXT: vpcmpeqb %ymm4, %ymm1, %ymm5 ; AVX2-NEXT: vpand %ymm5, %ymm2, %ymm2 ; AVX2-NEXT: vpshufb %ymm1, %ymm3, %ymm1 @@ -829,7 +829,7 @@ ; X32-AVX-NEXT: vpshufb %ymm2, %ymm3, %ymm2 ; X32-AVX-NEXT: vpsrlw $4, %ymm0, %ymm4 ; X32-AVX-NEXT: vpand %ymm1, %ymm4, %ymm1 -; X32-AVX-NEXT: vpxor %ymm4, %ymm4, %ymm4 +; X32-AVX-NEXT: vpxor %xmm4, %xmm4, %xmm4 ; X32-AVX-NEXT: vpcmpeqb %ymm4, %ymm1, %ymm5 ; X32-AVX-NEXT: vpand %ymm5, %ymm2, %ymm2 ; X32-AVX-NEXT: vpshufb %ymm1, %ymm3, %ymm1 @@ -888,7 +888,7 @@ ; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 ; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm4 ; AVX2-NEXT: vpand %ymm1, %ymm4, %ymm1 -; AVX2-NEXT: vpxor %ymm4, %ymm4, %ymm4 +; AVX2-NEXT: vpxor %xmm4, %xmm4, %xmm4 ; AVX2-NEXT: vpcmpeqb %ymm4, %ymm1, %ymm5 ; AVX2-NEXT: vpand %ymm5, %ymm2, %ymm2 ; AVX2-NEXT: vpshufb %ymm1, %ymm3, %ymm1 @@ -956,7 +956,7 @@ ; X32-AVX-NEXT: vpshufb %ymm2, %ymm3, %ymm2 ; X32-AVX-NEXT: vpsrlw $4, %ymm0, %ymm4 ; X32-AVX-NEXT: vpand %ymm1, %ymm4, %ymm1 -; X32-AVX-NEXT: vpxor %ymm4, %ymm4, %ymm4 +; X32-AVX-NEXT: vpxor %xmm4, %xmm4, %xmm4 ; X32-AVX-NEXT: vpcmpeqb %ymm4, %ymm1, %ymm5 ; X32-AVX-NEXT: vpand %ymm5, %ymm2, %ymm2 ; X32-AVX-NEXT: vpshufb %ymm1, %ymm3, %ymm1 @@ -1005,7 +1005,7 @@ ; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 ; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 ; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm1 ; AVX2-NEXT: vpand %ymm1, %ymm2, %ymm1 ; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 @@ -1065,7 +1065,7 @@ ; X32-AVX-NEXT: vpshufb %ymm2, %ymm3, %ymm2 ; X32-AVX-NEXT: vpsrlw $4, %ymm0, %ymm0 ; X32-AVX-NEXT: vpand %ymm1, %ymm0, %ymm0 -; X32-AVX-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X32-AVX-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; X32-AVX-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm1 ; X32-AVX-NEXT: vpand %ymm1, %ymm2, %ymm1 ; X32-AVX-NEXT: vpshufb %ymm0, %ymm3, %ymm0 @@ -1109,7 +1109,7 @@ ; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 ; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 ; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm1 ; AVX2-NEXT: vpand %ymm1, %ymm2, %ymm1 ; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 @@ -1169,7 +1169,7 @@ ; X32-AVX-NEXT: vpshufb %ymm2, %ymm3, %ymm2 ; X32-AVX-NEXT: vpsrlw $4, %ymm0, %ymm0 ; X32-AVX-NEXT: vpand %ymm1, %ymm0, %ymm0 -; X32-AVX-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X32-AVX-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; X32-AVX-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm1 ; X32-AVX-NEXT: vpand %ymm1, %ymm2, %ymm1 ; X32-AVX-NEXT: vpshufb %ymm0, %ymm3, %ymm0 Index: test/CodeGen/X86/vector-pcmp.ll =================================================================== --- test/CodeGen/X86/vector-pcmp.ll +++ test/CodeGen/X86/vector-pcmp.ll @@ -148,7 +148,7 @@ ; AVX1-NEXT: vpcmpgtb %xmm1, %xmm2, %xmm1 ; AVX1-NEXT: vpcmpgtb %xmm0, %xmm2, %xmm0 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 -; AVX1-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm0 ; AVX1-NEXT: retq @@ -177,7 +177,7 @@ ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 ; AVX1-NEXT: vpsraw $15, %xmm0, %xmm0 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 -; AVX1-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm0 ; AVX1-NEXT: retq @@ -206,7 +206,7 @@ ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 ; AVX1-NEXT: vpsrad $31, %xmm0, %xmm0 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 -; AVX1-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm0 ; AVX1-NEXT: retq @@ -247,7 +247,7 @@ ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm2, %xmm1 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm0 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 -; AVX1-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm0 ; AVX1-NEXT: retq Index: test/CodeGen/X86/vector-popcnt-256.ll =================================================================== --- test/CodeGen/X86/vector-popcnt-256.ll +++ test/CodeGen/X86/vector-popcnt-256.ll @@ -37,7 +37,7 @@ ; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 ; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 ; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 ; AVX2-NEXT: retq ; @@ -93,7 +93,7 @@ ; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 ; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 ; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] ; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 ; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] Index: test/CodeGen/X86/vector-rotate-256.ll =================================================================== --- test/CodeGen/X86/vector-rotate-256.ll +++ test/CodeGen/X86/vector-rotate-256.ll @@ -249,7 +249,7 @@ ; AVX2: # BB#0: ; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16] ; AVX2-NEXT: vpsubw %ymm1, %ymm2, %ymm2 -; AVX2-NEXT: vpxor %ymm3, %ymm3, %ymm3 +; AVX2-NEXT: vpxor %xmm3, %xmm3, %xmm3 ; AVX2-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm1[4],ymm3[4],ymm1[5],ymm3[5],ymm1[6],ymm3[6],ymm1[7],ymm3[7],ymm1[12],ymm3[12],ymm1[13],ymm3[13],ymm1[14],ymm3[14],ymm1[15],ymm3[15] ; AVX2-NEXT: vpunpckhwd {{.*#+}} ymm5 = ymm3[4],ymm0[4],ymm3[5],ymm0[5],ymm3[6],ymm0[6],ymm3[7],ymm0[7],ymm3[12],ymm0[12],ymm3[13],ymm0[13],ymm3[14],ymm0[14],ymm3[15],ymm0[15] ; AVX2-NEXT: vpsllvd %ymm4, %ymm5, %ymm4 @@ -621,7 +621,7 @@ ; AVX2-LABEL: constant_rotate_v16i16: ; AVX2: # BB#0: ; AVX2-NEXT: vpmullw {{.*}}(%rip), %ymm0, %ymm1 -; AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2 +; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm3 = [16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1] ; AVX2-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm3[4],ymm2[4],ymm3[5],ymm2[5],ymm3[6],ymm2[6],ymm3[7],ymm2[7],ymm3[12],ymm2[12],ymm3[13],ymm2[13],ymm3[14],ymm2[14],ymm3[15],ymm2[15] ; AVX2-NEXT: vpunpckhwd {{.*#+}} ymm5 = ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15] Index: test/CodeGen/X86/vector-shift-ashr-256.ll =================================================================== --- test/CodeGen/X86/vector-shift-ashr-256.ll +++ test/CodeGen/X86/vector-shift-ashr-256.ll @@ -263,7 +263,7 @@ ; ; AVX2-LABEL: var_shift_v16i16: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2 +; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 ; AVX2-NEXT: vpunpckhwd {{.*#+}} ymm3 = ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15] ; AVX2-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15] ; AVX2-NEXT: vpsravd %ymm3, %ymm4, %ymm3 @@ -365,7 +365,7 @@ ; ; X32-AVX2-LABEL: var_shift_v16i16: ; X32-AVX2: # BB#0: -; X32-AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2 +; X32-AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 ; X32-AVX2-NEXT: vpunpckhwd {{.*#+}} ymm3 = ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15] ; X32-AVX2-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15] ; X32-AVX2-NEXT: vpsravd %ymm3, %ymm4, %ymm3 @@ -1316,7 +1316,7 @@ ; ; AVX2-LABEL: constant_shift_v16i16: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] ; AVX2-NEXT: vpunpckhwd {{.*#+}} ymm3 = ymm2[4],ymm1[4],ymm2[5],ymm1[5],ymm2[6],ymm1[6],ymm2[7],ymm1[7],ymm2[12],ymm1[12],ymm2[13],ymm1[13],ymm2[14],ymm1[14],ymm2[15],ymm1[15] ; AVX2-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm1[4],ymm0[4],ymm1[5],ymm0[5],ymm1[6],ymm0[6],ymm1[7],ymm0[7],ymm1[12],ymm0[12],ymm1[13],ymm0[13],ymm1[14],ymm0[14],ymm1[15],ymm0[15] @@ -1399,7 +1399,7 @@ ; ; X32-AVX2-LABEL: constant_shift_v16i16: ; X32-AVX2: # BB#0: -; X32-AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X32-AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; X32-AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] ; X32-AVX2-NEXT: vpunpckhwd {{.*#+}} ymm3 = ymm2[4],ymm1[4],ymm2[5],ymm1[5],ymm2[6],ymm1[6],ymm2[7],ymm1[7],ymm2[12],ymm1[12],ymm2[13],ymm1[13],ymm2[14],ymm1[14],ymm2[15],ymm1[15] ; X32-AVX2-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm1[4],ymm0[4],ymm1[5],ymm0[5],ymm1[6],ymm0[6],ymm1[7],ymm0[7],ymm1[12],ymm0[12],ymm1[13],ymm0[13],ymm1[14],ymm0[14],ymm1[15],ymm0[15] Index: test/CodeGen/X86/vector-shift-lshr-256.ll =================================================================== --- test/CodeGen/X86/vector-shift-lshr-256.ll +++ test/CodeGen/X86/vector-shift-lshr-256.ll @@ -226,7 +226,7 @@ ; ; AVX2-LABEL: var_shift_v16i16: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2 +; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 ; AVX2-NEXT: vpunpckhwd {{.*#+}} ymm3 = ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15] ; AVX2-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15] ; AVX2-NEXT: vpsrlvd %ymm3, %ymm4, %ymm3 @@ -328,7 +328,7 @@ ; ; X32-AVX2-LABEL: var_shift_v16i16: ; X32-AVX2: # BB#0: -; X32-AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2 +; X32-AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 ; X32-AVX2-NEXT: vpunpckhwd {{.*#+}} ymm3 = ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15] ; X32-AVX2-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15] ; X32-AVX2-NEXT: vpsrlvd %ymm3, %ymm4, %ymm3 @@ -1047,7 +1047,7 @@ ; ; AVX2-LABEL: constant_shift_v16i16: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] ; AVX2-NEXT: vpunpckhwd {{.*#+}} ymm3 = ymm2[4],ymm1[4],ymm2[5],ymm1[5],ymm2[6],ymm1[6],ymm2[7],ymm1[7],ymm2[12],ymm1[12],ymm2[13],ymm1[13],ymm2[14],ymm1[14],ymm2[15],ymm1[15] ; AVX2-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm1[4],ymm0[4],ymm1[5],ymm0[5],ymm1[6],ymm0[6],ymm1[7],ymm0[7],ymm1[12],ymm0[12],ymm1[13],ymm0[13],ymm1[14],ymm0[14],ymm1[15],ymm0[15] @@ -1130,7 +1130,7 @@ ; ; X32-AVX2-LABEL: constant_shift_v16i16: ; X32-AVX2: # BB#0: -; X32-AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X32-AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; X32-AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] ; X32-AVX2-NEXT: vpunpckhwd {{.*#+}} ymm3 = ymm2[4],ymm1[4],ymm2[5],ymm1[5],ymm2[6],ymm1[6],ymm2[7],ymm1[7],ymm2[12],ymm1[12],ymm2[13],ymm1[13],ymm2[14],ymm1[14],ymm2[15],ymm1[15] ; X32-AVX2-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm1[4],ymm0[4],ymm1[5],ymm0[5],ymm1[6],ymm0[6],ymm1[7],ymm0[7],ymm1[12],ymm0[12],ymm1[13],ymm0[13],ymm1[14],ymm0[14],ymm1[15],ymm0[15] Index: test/CodeGen/X86/vector-shift-shl-256.ll =================================================================== --- test/CodeGen/X86/vector-shift-shl-256.ll +++ test/CodeGen/X86/vector-shift-shl-256.ll @@ -192,7 +192,7 @@ ; ; AVX2-LABEL: var_shift_v16i16: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2 +; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 ; AVX2-NEXT: vpunpckhwd {{.*#+}} ymm3 = ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15] ; AVX2-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15] ; AVX2-NEXT: vpsllvd %ymm3, %ymm4, %ymm3 @@ -288,7 +288,7 @@ ; ; X32-AVX2-LABEL: var_shift_v16i16: ; X32-AVX2: # BB#0: -; X32-AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2 +; X32-AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 ; X32-AVX2-NEXT: vpunpckhwd {{.*#+}} ymm3 = ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15] ; X32-AVX2-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15] ; X32-AVX2-NEXT: vpsllvd %ymm3, %ymm4, %ymm3 Index: test/CodeGen/X86/vector-shuffle-256-v16.ll =================================================================== --- test/CodeGen/X86/vector-shuffle-256-v16.ll +++ test/CodeGen/X86/vector-shuffle-256-v16.ll @@ -1633,7 +1633,7 @@ define <16 x i16> @shuffle_v16i16_02_03_zz_zz_06_07_zz_zz_10_11_zz_zz_14_15_zz_zz(<16 x i16> %a) { ; AVX1-LABEL: shuffle_v16i16_02_03_zz_zz_06_07_zz_zz_10_11_zz_zz_14_15_zz_zz: ; AVX1: # BB#0: -; AVX1-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm1[1,3],ymm0[5,7],ymm1[5,7] ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,2,1,3,4,6,5,7] ; AVX1-NEXT: retq @@ -1699,7 +1699,7 @@ ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[3,1,2,3] ; AVX2-NEXT: vpmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero ; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0 -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7],ymm0[8],ymm1[9,10,11],ymm0[12],ymm1[13,14,15] ; AVX2-NEXT: retq ; Index: test/CodeGen/X86/vector-shuffle-256-v32.ll =================================================================== --- test/CodeGen/X86/vector-shuffle-256-v32.ll +++ test/CodeGen/X86/vector-shuffle-256-v32.ll @@ -305,7 +305,7 @@ ; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_16_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00: ; AVX2: # BB#0: ; AVX2-NEXT: vperm2i128 {{.*#+}} ymm1 = ymm0[2,3,0,1] -; AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2 +; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 ; AVX2-NEXT: vpshufb %ymm2, %ymm1, %ymm1 ; AVX2-NEXT: vpbroadcastb %xmm0, %xmm0 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255] @@ -744,11 +744,17 @@ ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; AVX1-NEXT: retq ; -; AVX2OR512VL-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_16_16_16_16_16_16_16_16_16_16_16_16_16_16_16_16: -; AVX2OR512VL: # BB#0: -; AVX2OR512VL-NEXT: vpxor %ymm1, %ymm1, %ymm1 -; AVX2OR512VL-NEXT: vpshufb %ymm1, %ymm0, %ymm0 -; AVX2OR512VL-NEXT: retq +; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_16_16_16_16_16_16_16_16_16_16_16_16_16_16_16_16: +; AVX2: # BB#0: +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 +; AVX2-NEXT: vpshufb %ymm1, %ymm0, %ymm0 +; AVX2-NEXT: retq +; +; AVX512VL-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_16_16_16_16_16_16_16_16_16_16_16_16_16_16_16_16: +; AVX512VL: # BB#0: +; AVX512VL-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX512VL-NEXT: vpshufb %ymm1, %ymm0, %ymm0 +; AVX512VL-NEXT: retq %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> ret <32 x i8> %shuffle } @@ -1132,7 +1138,7 @@ ; ; AVX2-LABEL: shuffle_v32i8_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_16_48_16_48_16_48_16_48_16_48_16_48_16_48_16_48: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2 +; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 ; AVX2-NEXT: vpshufb %ymm2, %ymm1, %ymm1 ; AVX2-NEXT: vpshuflw {{.*#+}} ymm0 = ymm0[0,0,0,0,4,5,6,7,8,8,8,8,12,13,14,15] ; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,0,1,1,4,4,5,5] @@ -1167,12 +1173,19 @@ ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 ; AVX1-NEXT: retq ; -; AVX2OR512VL-LABEL: shuffle_v32i8_32_32_32_32_32_32_32_32_08_09_10_11_12_13_14_15_48_48_48_48_48_48_48_48_24_25_26_27_28_29_30_31: -; AVX2OR512VL: # BB#0: -; AVX2OR512VL-NEXT: vpxor %ymm2, %ymm2, %ymm2 -; AVX2OR512VL-NEXT: vpshufb %ymm2, %ymm1, %ymm1 -; AVX2OR512VL-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7] -; AVX2OR512VL-NEXT: retq +; AVX2-LABEL: shuffle_v32i8_32_32_32_32_32_32_32_32_08_09_10_11_12_13_14_15_48_48_48_48_48_48_48_48_24_25_26_27_28_29_30_31: +; AVX2: # BB#0: +; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 +; AVX2-NEXT: vpshufb %ymm2, %ymm1, %ymm1 +; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7] +; AVX2-NEXT: retq +; +; AVX512VL-LABEL: shuffle_v32i8_32_32_32_32_32_32_32_32_08_09_10_11_12_13_14_15_48_48_48_48_48_48_48_48_24_25_26_27_28_29_30_31: +; AVX512VL: # BB#0: +; AVX512VL-NEXT: vpxor %ymm2, %ymm2, %ymm2 +; AVX512VL-NEXT: vpshufb %ymm2, %ymm1, %ymm1 +; AVX512VL-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7] +; AVX512VL-NEXT: retq %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> ret <32 x i8> %shuffle } Index: test/CodeGen/X86/vector-shuffle-256-v4.ll =================================================================== --- test/CodeGen/X86/vector-shuffle-256-v4.ll +++ test/CodeGen/X86/vector-shuffle-256-v4.ll @@ -521,14 +521,14 @@ ; AVX1-LABEL: shuffle_v4f64_0z3z: ; AVX1: # BB#0: ; AVX1-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[0,0,3,2] -; AVX1-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; AVX1-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3] ; AVX1-NEXT: retq ; ; AVX2-LABEL: shuffle_v4f64_0z3z: ; AVX2: # BB#0: ; AVX2-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[0,0,3,2] -; AVX2-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3] ; AVX2-NEXT: retq ; @@ -545,7 +545,7 @@ define <4 x double> @shuffle_v4f64_1z2z(<4 x double> %a, <4 x double> %b) { ; AVX1-LABEL: shuffle_v4f64_1z2z: ; AVX1: # BB#0: -; AVX1-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; AVX1-NEXT: vblendpd {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3] ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 ; AVX1-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm1[0],xmm0[0] @@ -555,7 +555,7 @@ ; ; AVX2-LABEL: shuffle_v4f64_1z2z: ; AVX2: # BB#0: -; AVX2-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vblendpd {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3] ; AVX2-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[1,0,2,0] ; AVX2-NEXT: retq @@ -1110,7 +1110,7 @@ define <4 x i64> @shuffle_v4i64_z4z6(<4 x i64> %a) { ; AVX1-LABEL: shuffle_v4i64_z4z6: ; AVX1: # BB#0: -; AVX1-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; AVX1-NEXT: vunpcklpd {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[2],ymm0[2] ; AVX1-NEXT: retq ; @@ -1130,7 +1130,7 @@ define <4 x i64> @shuffle_v4i64_5zuz(<4 x i64> %a) { ; AVX1-LABEL: shuffle_v4i64_5zuz: ; AVX1: # BB#0: -; AVX1-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; AVX1-NEXT: vunpckhpd {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3] ; AVX1-NEXT: retq ; @@ -1227,7 +1227,7 @@ define <4 x i64> @shuffle_v4i64_1z3z(<4 x i64> %a, <4 x i64> %b) { ; AVX1-LABEL: shuffle_v4i64_1z3z: ; AVX1: # BB#0: -; AVX1-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; AVX1-NEXT: vblendpd {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3] ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 ; AVX1-NEXT: vshufpd {{.*#+}} xmm1 = xmm1[1],xmm0[0] @@ -1284,14 +1284,14 @@ ; AVX1-LABEL: insert_reg_and_zero_v4f64: ; AVX1: # BB#0: ; AVX1-NEXT: # kill: %XMM0 %XMM0 %YMM0 -; AVX1-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; AVX1-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3] ; AVX1-NEXT: retq ; ; AVX2-LABEL: insert_reg_and_zero_v4f64: ; AVX2: # BB#0: ; AVX2-NEXT: # kill: %XMM0 %XMM0 %YMM0 -; AVX2-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3] ; AVX2-NEXT: retq ; @@ -1567,14 +1567,14 @@ ; AVX1-LABEL: shuffle_v4i64_z0z3: ; AVX1: # BB#0: ; AVX1-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[0,0,2,3] -; AVX1-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; AVX1-NEXT: vblendpd {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3] ; AVX1-NEXT: retq ; ; AVX2-LABEL: shuffle_v4i64_z0z3: ; AVX2: # BB#0: ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,0,2,3] -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7] ; AVX2-NEXT: retq ; @@ -1591,7 +1591,7 @@ define <4 x i64> @shuffle_v4i64_1z2z(<4 x i64> %a, <4 x i64> %b) { ; AVX1-LABEL: shuffle_v4i64_1z2z: ; AVX1: # BB#0: -; AVX1-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; AVX1-NEXT: vblendpd {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3] ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 ; AVX1-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm1[0],xmm0[0] @@ -1601,7 +1601,7 @@ ; ; AVX2-LABEL: shuffle_v4i64_1z2z: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3,4,5,6,7] ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[1,0,2,0] ; AVX2-NEXT: retq Index: test/CodeGen/X86/vector-shuffle-256-v8.ll =================================================================== --- test/CodeGen/X86/vector-shuffle-256-v8.ll +++ test/CodeGen/X86/vector-shuffle-256-v8.ll @@ -1938,7 +1938,7 @@ define <8 x i32> @shuffle_v8i32_zuu8zuuc(<8 x i32> %a) { ; AVX1-LABEL: shuffle_v8i32_zuu8zuuc: ; AVX1: # BB#0: -; AVX1-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,0],ymm1[4,5],ymm0[6,4] ; AVX1-NEXT: retq ; @@ -1953,7 +1953,7 @@ define <8 x i32> @shuffle_v8i32_9ubzdefz(<8 x i32> %a) { ; AVX1-LABEL: shuffle_v8i32_9ubzdefz: ; AVX1: # BB#0: -; AVX1-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; AVX1-NEXT: vshufps {{.*#+}} ymm1 = ymm1[3,0],ymm0[3,0],ymm1[7,4],ymm0[7,4] ; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,2],ymm1[2,0],ymm0[5,6],ymm1[6,4] ; AVX1-NEXT: retq @@ -2118,7 +2118,7 @@ define <8 x i32> @shuffle_v8i32_z0U2zUz6(<8 x i32> %a) { ; AVX1-LABEL: shuffle_v8i32_z0U2zUz6: ; AVX1: # BB#0: -; AVX1-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,2],ymm1[0,2],ymm0[4,6],ymm1[4,6] ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[2,0,3,1,6,4,7,5] ; AVX1-NEXT: retq @@ -2134,7 +2134,7 @@ define <8 x i32> @shuffle_v8i32_1U3z5zUU(<8 x i32> %a) { ; AVX1-LABEL: shuffle_v8i32_1U3z5zUU: ; AVX1: # BB#0: -; AVX1-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; AVX1-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm1[1,3],ymm0[5,7],ymm1[5,7] ; AVX1-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[0,2,1,3,4,6,5,7] ; AVX1-NEXT: retq Index: test/CodeGen/X86/vector-shuffle-combining-avx.ll =================================================================== --- test/CodeGen/X86/vector-shuffle-combining-avx.ll +++ test/CodeGen/X86/vector-shuffle-combining-avx.ll @@ -1,10 +1,8 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc < %s -mtriple=i686-unknown -mattr=+avx | FileCheck %s --check-prefix=X32 -; RUN: llc < %s -mtriple=i686-unknown -mattr=+avx2 | FileCheck %s --check-prefix=X32 -; RUN: llc < %s -mtriple=i686-unknown -mattr=+avx512f | FileCheck %s --check-prefix=X32 +; RUN: llc < %s -mtriple=i686-unknown -mattr=+avx512f | FileCheck %s --check-prefix=X32AVX512F ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx | FileCheck %s --check-prefix=X64 -; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx2 | FileCheck %s --check-prefix=X64 -; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx512f | FileCheck %s --check-prefix=X64 +; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx512f | FileCheck %s --check-prefix=X64AVX512F ; ; Combine tests involving AVX target shuffles @@ -27,9 +25,17 @@ ; X32: # BB#0: ; X32-NEXT: retl ; +; X32AVX512F-LABEL: combine_vpermilvar_4f32_identity: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: retl +; ; X64-LABEL: combine_vpermilvar_4f32_identity: ; X64: # BB#0: ; X64-NEXT: retq +; +; X64AVX512F-LABEL: combine_vpermilvar_4f32_identity: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: retq %1 = tail call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %a0, <4 x i32> ) %2 = tail call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %1, <4 x i32> ) ret <4 x float> %2 @@ -41,10 +47,20 @@ ; X32-NEXT: vmovddup {{.*#+}} xmm0 = xmm0[0,0] ; X32-NEXT: retl ; +; X32AVX512F-LABEL: combine_vpermilvar_4f32_movddup: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: vmovddup {{.*#+}} xmm0 = xmm0[0,0] +; X32AVX512F-NEXT: retl +; ; X64-LABEL: combine_vpermilvar_4f32_movddup: ; X64: # BB#0: ; X64-NEXT: vmovddup {{.*#+}} xmm0 = xmm0[0,0] ; X64-NEXT: retq +; +; X64AVX512F-LABEL: combine_vpermilvar_4f32_movddup: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: vmovddup {{.*#+}} xmm0 = xmm0[0,0] +; X64AVX512F-NEXT: retq %1 = tail call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %a0, <4 x i32> ) ret <4 x float> %1 } @@ -55,10 +71,21 @@ ; X32-NEXT: vmovddup {{.*#+}} xmm0 = mem[0,0] ; X32-NEXT: retl ; +; X32AVX512F-LABEL: combine_vpermilvar_4f32_movddup_load: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: movl {{[0-9]+}}(%esp), %eax +; X32AVX512F-NEXT: vmovddup {{.*#+}} xmm0 = mem[0,0] +; X32AVX512F-NEXT: retl +; ; X64-LABEL: combine_vpermilvar_4f32_movddup_load: ; X64: # BB#0: ; X64-NEXT: vmovddup {{.*#+}} xmm0 = mem[0,0] ; X64-NEXT: retq +; +; X64AVX512F-LABEL: combine_vpermilvar_4f32_movddup_load: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: vmovddup {{.*#+}} xmm0 = mem[0,0] +; X64AVX512F-NEXT: retq %1 = load <4 x float>, <4 x float> *%a0 %2 = tail call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %1, <4 x i32> ) ret <4 x float> %2 @@ -70,10 +97,20 @@ ; X32-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3] ; X32-NEXT: retl ; +; X32AVX512F-LABEL: combine_vpermilvar_4f32_movshdup: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3] +; X32AVX512F-NEXT: retl +; ; X64-LABEL: combine_vpermilvar_4f32_movshdup: ; X64: # BB#0: ; X64-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3] ; X64-NEXT: retq +; +; X64AVX512F-LABEL: combine_vpermilvar_4f32_movshdup: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3] +; X64AVX512F-NEXT: retq %1 = tail call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %a0, <4 x i32> ) ret <4 x float> %1 } @@ -84,10 +121,20 @@ ; X32-NEXT: vmovsldup {{.*#+}} xmm0 = xmm0[0,0,2,2] ; X32-NEXT: retl ; +; X32AVX512F-LABEL: combine_vpermilvar_4f32_movsldup: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: vmovsldup {{.*#+}} xmm0 = xmm0[0,0,2,2] +; X32AVX512F-NEXT: retl +; ; X64-LABEL: combine_vpermilvar_4f32_movsldup: ; X64: # BB#0: ; X64-NEXT: vmovsldup {{.*#+}} xmm0 = xmm0[0,0,2,2] ; X64-NEXT: retq +; +; X64AVX512F-LABEL: combine_vpermilvar_4f32_movsldup: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: vmovsldup {{.*#+}} xmm0 = xmm0[0,0,2,2] +; X64AVX512F-NEXT: retq %1 = tail call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %a0, <4 x i32> ) ret <4 x float> %1 } @@ -98,10 +145,20 @@ ; X32-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[2,2,3,3] ; X32-NEXT: retl ; +; X32AVX512F-LABEL: combine_vpermilvar_4f32_unpckh: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[2,2,3,3] +; X32AVX512F-NEXT: retl +; ; X64-LABEL: combine_vpermilvar_4f32_unpckh: ; X64: # BB#0: ; X64-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[2,2,3,3] ; X64-NEXT: retq +; +; X64AVX512F-LABEL: combine_vpermilvar_4f32_unpckh: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[2,2,3,3] +; X64AVX512F-NEXT: retq %1 = tail call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %a0, <4 x i32> ) ret <4 x float> %1 } @@ -112,10 +169,20 @@ ; X32-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[0,0,1,1] ; X32-NEXT: retl ; +; X32AVX512F-LABEL: combine_vpermilvar_4f32_unpckl: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[0,0,1,1] +; X32AVX512F-NEXT: retl +; ; X64-LABEL: combine_vpermilvar_4f32_unpckl: ; X64: # BB#0: ; X64-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[0,0,1,1] ; X64-NEXT: retq +; +; X64AVX512F-LABEL: combine_vpermilvar_4f32_unpckl: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[0,0,1,1] +; X64AVX512F-NEXT: retq %1 = tail call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %a0, <4 x i32> ) ret <4 x float> %1 } @@ -125,9 +192,17 @@ ; X32: # BB#0: ; X32-NEXT: retl ; +; X32AVX512F-LABEL: combine_vpermilvar_8f32_identity: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: retl +; ; X64-LABEL: combine_vpermilvar_8f32_identity: ; X64: # BB#0: ; X64-NEXT: retq +; +; X64AVX512F-LABEL: combine_vpermilvar_8f32_identity: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: retq %1 = tail call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %a0, <8 x i32> ) %2 = tail call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %1, <8 x i32> ) ret <8 x float> %2 @@ -139,10 +214,20 @@ ; X32-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,0,3,2,6,u,4,u] ; X32-NEXT: retl ; +; X32AVX512F-LABEL: combine_vpermilvar_8f32_10326u4u: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,0,3,2,6,u,4,u] +; X32AVX512F-NEXT: retl +; ; X64-LABEL: combine_vpermilvar_8f32_10326u4u: ; X64: # BB#0: ; X64-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,0,3,2,6,u,4,u] ; X64-NEXT: retq +; +; X64AVX512F-LABEL: combine_vpermilvar_8f32_10326u4u: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[1,0,3,2,6,u,4,u] +; X64AVX512F-NEXT: retq %1 = tail call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %a0, <8 x i32> ) %2 = tail call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %1, <8 x i32> ) ret <8 x float> %2 @@ -154,10 +239,20 @@ ; X32-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,0,1] ; X32-NEXT: retl ; +; X32AVX512F-LABEL: combine_vpermilvar_vperm2f128_8f32: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,0,1] +; X32AVX512F-NEXT: retl +; ; X64-LABEL: combine_vpermilvar_vperm2f128_8f32: ; X64: # BB#0: ; X64-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,0,1] ; X64-NEXT: retq +; +; X64AVX512F-LABEL: combine_vpermilvar_vperm2f128_8f32: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,0,1] +; X64AVX512F-NEXT: retq %1 = tail call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %a0, <8 x i32> ) %2 = shufflevector <8 x float> %1, <8 x float> undef, <8 x i32> %3 = tail call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %2, <8 x i32> ) @@ -170,10 +265,20 @@ ; X32-NEXT: vperm2f128 {{.*#+}} ymm0 = zero,zero,ymm0[0,1] ; X32-NEXT: retl ; +; X32AVX512F-LABEL: combine_vpermilvar_vperm2f128_zero_8f32: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: vperm2f128 {{.*#+}} ymm0 = zero,zero,ymm0[0,1] +; X32AVX512F-NEXT: retl +; ; X64-LABEL: combine_vpermilvar_vperm2f128_zero_8f32: ; X64: # BB#0: ; X64-NEXT: vperm2f128 {{.*#+}} ymm0 = zero,zero,ymm0[0,1] ; X64-NEXT: retq +; +; X64AVX512F-LABEL: combine_vpermilvar_vperm2f128_zero_8f32: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: vperm2f128 {{.*#+}} ymm0 = zero,zero,ymm0[0,1] +; X64AVX512F-NEXT: retq %1 = tail call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %a0, <8 x i32> ) %2 = shufflevector <8 x float> %1, <8 x float> zeroinitializer, <8 x i32> %3 = tail call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %2, <8 x i32> ) @@ -183,15 +288,27 @@ define <4 x double> @combine_vperm2f128_vpermilvar_as_vpblendpd(<4 x double> %a0) { ; X32-LABEL: combine_vperm2f128_vpermilvar_as_vpblendpd: ; X32: # BB#0: -; X32-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; X32-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; X32-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3] ; X32-NEXT: retl ; +; X32AVX512F-LABEL: combine_vperm2f128_vpermilvar_as_vpblendpd: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; X32AVX512F-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3] +; X32AVX512F-NEXT: retl +; ; X64-LABEL: combine_vperm2f128_vpermilvar_as_vpblendpd: ; X64: # BB#0: -; X64-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; X64-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; X64-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3] ; X64-NEXT: retq +; +; X64AVX512F-LABEL: combine_vperm2f128_vpermilvar_as_vpblendpd: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; X64AVX512F-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3] +; X64AVX512F-NEXT: retq %1 = tail call <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> %a0, <4 x i64> ) %2 = shufflevector <4 x double> %1, <4 x double> zeroinitializer, <4 x i32> %3 = tail call <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> %2, <4 x i64> ) @@ -204,10 +321,20 @@ ; X32-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2] ; X32-NEXT: retl ; +; X32AVX512F-LABEL: combine_vpermilvar_8f32_movddup: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2] +; X32AVX512F-NEXT: retl +; ; X64-LABEL: combine_vpermilvar_8f32_movddup: ; X64: # BB#0: ; X64-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2] ; X64-NEXT: retq +; +; X64AVX512F-LABEL: combine_vpermilvar_8f32_movddup: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2] +; X64AVX512F-NEXT: retq %1 = tail call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %a0, <8 x i32> ) ret <8 x float> %1 } @@ -218,10 +345,21 @@ ; X32-NEXT: vmovddup {{.*#+}} ymm0 = mem[0,0,2,2] ; X32-NEXT: retl ; +; X32AVX512F-LABEL: combine_vpermilvar_8f32_movddup_load: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: movl {{[0-9]+}}(%esp), %eax +; X32AVX512F-NEXT: vmovddup {{.*#+}} ymm0 = mem[0,0,2,2] +; X32AVX512F-NEXT: retl +; ; X64-LABEL: combine_vpermilvar_8f32_movddup_load: ; X64: # BB#0: ; X64-NEXT: vmovddup {{.*#+}} ymm0 = mem[0,0,2,2] ; X64-NEXT: retq +; +; X64AVX512F-LABEL: combine_vpermilvar_8f32_movddup_load: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: vmovddup {{.*#+}} ymm0 = mem[0,0,2,2] +; X64AVX512F-NEXT: retq %1 = load <8 x float>, <8 x float> *%a0 %2 = tail call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %1, <8 x i32> ) ret <8 x float> %2 @@ -233,10 +371,20 @@ ; X32-NEXT: vmovshdup {{.*#+}} ymm0 = ymm0[1,1,3,3,5,5,7,7] ; X32-NEXT: retl ; +; X32AVX512F-LABEL: combine_vpermilvar_8f32_movshdup: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: vmovshdup {{.*#+}} ymm0 = ymm0[1,1,3,3,5,5,7,7] +; X32AVX512F-NEXT: retl +; ; X64-LABEL: combine_vpermilvar_8f32_movshdup: ; X64: # BB#0: ; X64-NEXT: vmovshdup {{.*#+}} ymm0 = ymm0[1,1,3,3,5,5,7,7] ; X64-NEXT: retq +; +; X64AVX512F-LABEL: combine_vpermilvar_8f32_movshdup: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: vmovshdup {{.*#+}} ymm0 = ymm0[1,1,3,3,5,5,7,7] +; X64AVX512F-NEXT: retq %1 = tail call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %a0, <8 x i32> ) ret <8 x float> %1 } @@ -247,10 +395,20 @@ ; X32-NEXT: vmovsldup {{.*#+}} ymm0 = ymm0[0,0,2,2,4,4,6,6] ; X32-NEXT: retl ; +; X32AVX512F-LABEL: combine_vpermilvar_8f32_movsldup: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: vmovsldup {{.*#+}} ymm0 = ymm0[0,0,2,2,4,4,6,6] +; X32AVX512F-NEXT: retl +; ; X64-LABEL: combine_vpermilvar_8f32_movsldup: ; X64: # BB#0: ; X64-NEXT: vmovsldup {{.*#+}} ymm0 = ymm0[0,0,2,2,4,4,6,6] ; X64-NEXT: retq +; +; X64AVX512F-LABEL: combine_vpermilvar_8f32_movsldup: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: vmovsldup {{.*#+}} ymm0 = ymm0[0,0,2,2,4,4,6,6] +; X64AVX512F-NEXT: retq %1 = tail call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %a0, <8 x i32> ) ret <8 x float> %1 } @@ -260,9 +418,17 @@ ; X32: # BB#0: ; X32-NEXT: retl ; +; X32AVX512F-LABEL: combine_vpermilvar_2f64_identity: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: retl +; ; X64-LABEL: combine_vpermilvar_2f64_identity: ; X64: # BB#0: ; X64-NEXT: retq +; +; X64AVX512F-LABEL: combine_vpermilvar_2f64_identity: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: retq %1 = tail call <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double> %a0, <2 x i64> ) %2 = tail call <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double> %1, <2 x i64> ) ret <2 x double> %2 @@ -274,10 +440,20 @@ ; X32-NEXT: vmovddup {{.*#+}} xmm0 = xmm0[0,0] ; X32-NEXT: retl ; +; X32AVX512F-LABEL: combine_vpermilvar_2f64_movddup: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: vmovddup {{.*#+}} xmm0 = xmm0[0,0] +; X32AVX512F-NEXT: retl +; ; X64-LABEL: combine_vpermilvar_2f64_movddup: ; X64: # BB#0: ; X64-NEXT: vmovddup {{.*#+}} xmm0 = xmm0[0,0] ; X64-NEXT: retq +; +; X64AVX512F-LABEL: combine_vpermilvar_2f64_movddup: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: vmovddup {{.*#+}} xmm0 = xmm0[0,0] +; X64AVX512F-NEXT: retq %1 = tail call <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double> %a0, <2 x i64> ) ret <2 x double> %1 } @@ -287,9 +463,17 @@ ; X32: # BB#0: ; X32-NEXT: retl ; +; X32AVX512F-LABEL: combine_vpermilvar_4f64_identity: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: retl +; ; X64-LABEL: combine_vpermilvar_4f64_identity: ; X64: # BB#0: ; X64-NEXT: retq +; +; X64AVX512F-LABEL: combine_vpermilvar_4f64_identity: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: retq %1 = tail call <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> %a0, <4 x i64> ) %2 = tail call <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> %1, <4 x i64> ) ret <4 x double> %2 @@ -301,10 +485,20 @@ ; X32-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2] ; X32-NEXT: retl ; +; X32AVX512F-LABEL: combine_vpermilvar_4f64_movddup: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2] +; X32AVX512F-NEXT: retl +; ; X64-LABEL: combine_vpermilvar_4f64_movddup: ; X64: # BB#0: ; X64-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2] ; X64-NEXT: retq +; +; X64AVX512F-LABEL: combine_vpermilvar_4f64_movddup: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2] +; X64AVX512F-NEXT: retq %1 = tail call <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> %a0, <4 x i64> ) ret <4 x double> %1 } @@ -315,10 +509,20 @@ ; X32-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[2,0,3,1] ; X32-NEXT: retl ; +; X32AVX512F-LABEL: combine_vpermilvar_4f32_4stage: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[2,0,3,1] +; X32AVX512F-NEXT: retl +; ; X64-LABEL: combine_vpermilvar_4f32_4stage: ; X64: # BB#0: ; X64-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[2,0,3,1] ; X64-NEXT: retq +; +; X64AVX512F-LABEL: combine_vpermilvar_4f32_4stage: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: vpermilps {{.*#+}} xmm0 = xmm0[2,0,3,1] +; X64AVX512F-NEXT: retq %1 = tail call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %a0, <4 x i32> ) %2 = tail call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %1, <4 x i32> ) %3 = tail call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %2, <4 x i32> ) @@ -332,10 +536,20 @@ ; X32-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[2,0,3,1,6,4,7,5] ; X32-NEXT: retl ; +; X32AVX512F-LABEL: combine_vpermilvar_8f32_4stage: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[2,0,3,1,6,4,7,5] +; X32AVX512F-NEXT: retl +; ; X64-LABEL: combine_vpermilvar_8f32_4stage: ; X64: # BB#0: ; X64-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[2,0,3,1,6,4,7,5] ; X64-NEXT: retq +; +; X64AVX512F-LABEL: combine_vpermilvar_8f32_4stage: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: vpermilps {{.*#+}} ymm0 = ymm0[2,0,3,1,6,4,7,5] +; X64AVX512F-NEXT: retq %1 = tail call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %a0, <8 x i32> ) %2 = tail call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %1, <8 x i32> ) %3 = tail call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> %2, <8 x i32> ) @@ -349,10 +563,20 @@ ; X32-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[1],zero,xmm0[2],zero ; X32-NEXT: retl ; +; X32AVX512F-LABEL: combine_vpermilvar_4f32_as_insertps: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[1],zero,xmm0[2],zero +; X32AVX512F-NEXT: retl +; ; X64-LABEL: combine_vpermilvar_4f32_as_insertps: ; X64: # BB#0: ; X64-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[1],zero,xmm0[2],zero ; X64-NEXT: retq +; +; X64AVX512F-LABEL: combine_vpermilvar_4f32_as_insertps: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[1],zero,xmm0[2],zero +; X64AVX512F-NEXT: retq %1 = call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> %a0, <4 x i32> ) %2 = shufflevector <4 x float> %1, <4 x float> zeroinitializer, <4 x i32> ret <4 x float> %2 @@ -364,10 +588,20 @@ ; X32-NEXT: vmovaps {{.*#+}} xmm0 = [2.000000e+00,1.000000e+00] ; X32-NEXT: retl ; +; X32AVX512F-LABEL: constant_fold_vpermilvar_pd: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: vmovaps {{.*#+}} xmm0 = [2.000000e+00,1.000000e+00] +; X32AVX512F-NEXT: retl +; ; X64-LABEL: constant_fold_vpermilvar_pd: ; X64: # BB#0: ; X64-NEXT: vmovaps {{.*#+}} xmm0 = [2.000000e+00,1.000000e+00] ; X64-NEXT: retq +; +; X64AVX512F-LABEL: constant_fold_vpermilvar_pd: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: vmovaps {{.*#+}} xmm0 = [2.000000e+00,1.000000e+00] +; X64AVX512F-NEXT: retq %1 = call <2 x double> @llvm.x86.avx.vpermilvar.pd(<2 x double> , <2 x i64> ) ret <2 x double> %1 } @@ -378,10 +612,20 @@ ; X32-NEXT: vmovaps {{.*#+}} ymm0 = [2.000000e+00,1.000000e+00,3.000000e+00,4.000000e+00] ; X32-NEXT: retl ; +; X32AVX512F-LABEL: constant_fold_vpermilvar_pd_256: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: vmovaps {{.*#+}} ymm0 = [2.000000e+00,1.000000e+00,3.000000e+00,4.000000e+00] +; X32AVX512F-NEXT: retl +; ; X64-LABEL: constant_fold_vpermilvar_pd_256: ; X64: # BB#0: ; X64-NEXT: vmovaps {{.*#+}} ymm0 = [2.000000e+00,1.000000e+00,3.000000e+00,4.000000e+00] ; X64-NEXT: retq +; +; X64AVX512F-LABEL: constant_fold_vpermilvar_pd_256: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: vmovaps {{.*#+}} ymm0 = [2.000000e+00,1.000000e+00,3.000000e+00,4.000000e+00] +; X64AVX512F-NEXT: retq %1 = call <4 x double> @llvm.x86.avx.vpermilvar.pd.256(<4 x double> , <4 x i64> ) ret <4 x double> %1 } @@ -392,10 +636,20 @@ ; X32-NEXT: vmovaps {{.*#+}} xmm0 = [4.000000e+00,1.000000e+00,3.000000e+00,2.000000e+00] ; X32-NEXT: retl ; +; X32AVX512F-LABEL: constant_fold_vpermilvar_ps: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: vmovaps {{.*#+}} xmm0 = [4.000000e+00,1.000000e+00,3.000000e+00,2.000000e+00] +; X32AVX512F-NEXT: retl +; ; X64-LABEL: constant_fold_vpermilvar_ps: ; X64: # BB#0: ; X64-NEXT: vmovaps {{.*#+}} xmm0 = [4.000000e+00,1.000000e+00,3.000000e+00,2.000000e+00] ; X64-NEXT: retq +; +; X64AVX512F-LABEL: constant_fold_vpermilvar_ps: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: vmovaps {{.*#+}} xmm0 = [4.000000e+00,1.000000e+00,3.000000e+00,2.000000e+00] +; X64AVX512F-NEXT: retq %1 = call <4 x float> @llvm.x86.avx.vpermilvar.ps(<4 x float> , <4 x i32> ) ret <4 x float> %1 } @@ -406,10 +660,20 @@ ; X32-NEXT: vmovaps {{.*#+}} ymm0 = [1.000000e+00,1.000000e+00,3.000000e+00,2.000000e+00,5.000000e+00,6.000000e+00,6.000000e+00,6.000000e+00] ; X32-NEXT: retl ; +; X32AVX512F-LABEL: constant_fold_vpermilvar_ps_256: +; X32AVX512F: # BB#0: +; X32AVX512F-NEXT: vmovaps {{.*#+}} ymm0 = [1.000000e+00,1.000000e+00,3.000000e+00,2.000000e+00,5.000000e+00,6.000000e+00,6.000000e+00,6.000000e+00] +; X32AVX512F-NEXT: retl +; ; X64-LABEL: constant_fold_vpermilvar_ps_256: ; X64: # BB#0: ; X64-NEXT: vmovaps {{.*#+}} ymm0 = [1.000000e+00,1.000000e+00,3.000000e+00,2.000000e+00,5.000000e+00,6.000000e+00,6.000000e+00,6.000000e+00] ; X64-NEXT: retq +; +; X64AVX512F-LABEL: constant_fold_vpermilvar_ps_256: +; X64AVX512F: # BB#0: +; X64AVX512F-NEXT: vmovaps {{.*#+}} ymm0 = [1.000000e+00,1.000000e+00,3.000000e+00,2.000000e+00,5.000000e+00,6.000000e+00,6.000000e+00,6.000000e+00] +; X64AVX512F-NEXT: retq %1 = call <8 x float> @llvm.x86.avx.vpermilvar.ps.256(<8 x float> , <8 x i32> ) ret <8 x float> %1 } Index: test/CodeGen/X86/vector-shuffle-combining-avx2.ll =================================================================== --- test/CodeGen/X86/vector-shuffle-combining-avx2.ll +++ test/CodeGen/X86/vector-shuffle-combining-avx2.ll @@ -10,30 +10,50 @@ declare <32 x i8> @llvm.x86.avx2.pshuf.b(<32 x i8>, <32 x i8>) define <32 x i8> @combine_pshufb_pslldq(<32 x i8> %a0) { -; X32-LABEL: combine_pshufb_pslldq: -; X32: # BB#0: -; X32-NEXT: vxorps %ymm0, %ymm0, %ymm0 -; X32-NEXT: retl +; X32-AVX2-LABEL: combine_pshufb_pslldq: +; X32-AVX2: # BB#0: +; X32-AVX2-NEXT: vxorps %xmm0, %xmm0, %xmm0 +; X32-AVX2-NEXT: retl ; -; X64-LABEL: combine_pshufb_pslldq: -; X64: # BB#0: -; X64-NEXT: vxorps %ymm0, %ymm0, %ymm0 -; X64-NEXT: retq +; X32-AVX512-LABEL: combine_pshufb_pslldq: +; X32-AVX512: # BB#0: +; X32-AVX512-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-AVX512-NEXT: retl +; +; X64-AVX2-LABEL: combine_pshufb_pslldq: +; X64-AVX2: # BB#0: +; X64-AVX2-NEXT: vxorps %xmm0, %xmm0, %xmm0 +; X64-AVX2-NEXT: retq +; +; X64-AVX512-LABEL: combine_pshufb_pslldq: +; X64-AVX512: # BB#0: +; X64-AVX512-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X64-AVX512-NEXT: retq %1 = tail call <32 x i8> @llvm.x86.avx2.pshuf.b(<32 x i8> %a0, <32 x i8> ) %2 = shufflevector <32 x i8> %1, <32 x i8> zeroinitializer, <32 x i32> ret <32 x i8> %2 } define <32 x i8> @combine_pshufb_psrldq(<32 x i8> %a0) { -; X32-LABEL: combine_pshufb_psrldq: -; X32: # BB#0: -; X32-NEXT: vxorps %ymm0, %ymm0, %ymm0 -; X32-NEXT: retl +; X32-AVX2-LABEL: combine_pshufb_psrldq: +; X32-AVX2: # BB#0: +; X32-AVX2-NEXT: vxorps %xmm0, %xmm0, %xmm0 +; X32-AVX2-NEXT: retl ; -; X64-LABEL: combine_pshufb_psrldq: -; X64: # BB#0: -; X64-NEXT: vxorps %ymm0, %ymm0, %ymm0 -; X64-NEXT: retq +; X32-AVX512-LABEL: combine_pshufb_psrldq: +; X32-AVX512: # BB#0: +; X32-AVX512-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-AVX512-NEXT: retl +; +; X64-AVX2-LABEL: combine_pshufb_psrldq: +; X64-AVX2: # BB#0: +; X64-AVX2-NEXT: vxorps %xmm0, %xmm0, %xmm0 +; X64-AVX2-NEXT: retq +; +; X64-AVX512-LABEL: combine_pshufb_psrldq: +; X64-AVX512: # BB#0: +; X64-AVX512-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X64-AVX512-NEXT: retq %1 = tail call <32 x i8> @llvm.x86.avx2.pshuf.b(<32 x i8> %a0, <32 x i8> ) %2 = shufflevector <32 x i8> %1, <32 x i8> zeroinitializer, <32 x i32> ret <32 x i8> %2 @@ -72,34 +92,58 @@ } define <32 x i8> @combine_and_pshufb(<32 x i8> %a0) { -; X32-LABEL: combine_and_pshufb: -; X32: # BB#0: -; X32-NEXT: vpxor %ymm1, %ymm1, %ymm1 -; X32-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7],ymm0[8],ymm1[9,10,11],ymm0[12],ymm1[13,14,15] -; X32-NEXT: retl +; X32-AVX2-LABEL: combine_and_pshufb: +; X32-AVX2: # BB#0: +; X32-AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 +; X32-AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7],ymm0[8],ymm1[9,10,11],ymm0[12],ymm1[13,14,15] +; X32-AVX2-NEXT: retl ; -; X64-LABEL: combine_and_pshufb: -; X64: # BB#0: -; X64-NEXT: vpxor %ymm1, %ymm1, %ymm1 -; X64-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7],ymm0[8],ymm1[9,10,11],ymm0[12],ymm1[13,14,15] -; X64-NEXT: retq +; X32-AVX512-LABEL: combine_and_pshufb: +; X32-AVX512: # BB#0: +; X32-AVX512-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X32-AVX512-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7],ymm0[8],ymm1[9,10,11],ymm0[12],ymm1[13,14,15] +; X32-AVX512-NEXT: retl +; +; X64-AVX2-LABEL: combine_and_pshufb: +; X64-AVX2: # BB#0: +; X64-AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 +; X64-AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7],ymm0[8],ymm1[9,10,11],ymm0[12],ymm1[13,14,15] +; X64-AVX2-NEXT: retq +; +; X64-AVX512-LABEL: combine_and_pshufb: +; X64-AVX512: # BB#0: +; X64-AVX512-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X64-AVX512-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7],ymm0[8],ymm1[9,10,11],ymm0[12],ymm1[13,14,15] +; X64-AVX512-NEXT: retq %1 = shufflevector <32 x i8> %a0, <32 x i8> zeroinitializer, <32 x i32> %2 = call <32 x i8> @llvm.x86.avx2.pshuf.b(<32 x i8> %1, <32 x i8> ) ret <32 x i8> %2 } define <32 x i8> @combine_pshufb_and(<32 x i8> %a0) { -; X32-LABEL: combine_pshufb_and: -; X32: # BB#0: -; X32-NEXT: vpxor %ymm1, %ymm1, %ymm1 -; X32-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7],ymm0[8],ymm1[9,10,11],ymm0[12],ymm1[13,14,15] -; X32-NEXT: retl +; X32-AVX2-LABEL: combine_pshufb_and: +; X32-AVX2: # BB#0: +; X32-AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 +; X32-AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7],ymm0[8],ymm1[9,10,11],ymm0[12],ymm1[13,14,15] +; X32-AVX2-NEXT: retl ; -; X64-LABEL: combine_pshufb_and: -; X64: # BB#0: -; X64-NEXT: vpxor %ymm1, %ymm1, %ymm1 -; X64-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7],ymm0[8],ymm1[9,10,11],ymm0[12],ymm1[13,14,15] -; X64-NEXT: retq +; X32-AVX512-LABEL: combine_pshufb_and: +; X32-AVX512: # BB#0: +; X32-AVX512-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X32-AVX512-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7],ymm0[8],ymm1[9,10,11],ymm0[12],ymm1[13,14,15] +; X32-AVX512-NEXT: retl +; +; X64-AVX2-LABEL: combine_pshufb_and: +; X64-AVX2: # BB#0: +; X64-AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 +; X64-AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7],ymm0[8],ymm1[9,10,11],ymm0[12],ymm1[13,14,15] +; X64-AVX2-NEXT: retq +; +; X64-AVX512-LABEL: combine_pshufb_and: +; X64-AVX512: # BB#0: +; X64-AVX512-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X64-AVX512-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3],ymm0[4],ymm1[5,6,7],ymm0[8],ymm1[9,10,11],ymm0[12],ymm1[13,14,15] +; X64-AVX512-NEXT: retq %1 = call <32 x i8> @llvm.x86.avx2.pshuf.b(<32 x i8> %a0, <32 x i8> ) %2 = shufflevector <32 x i8> %1, <32 x i8> zeroinitializer, <32 x i32> ret <32 x i8> %2 @@ -162,17 +206,29 @@ } define <32 x i8> @combine_permq_pshufb_as_vpblendd(<4 x i64> %a0) { -; X32-LABEL: combine_permq_pshufb_as_vpblendd: -; X32: # BB#0: -; X32-NEXT: vpxor %ymm1, %ymm1, %ymm1 -; X32-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7] -; X32-NEXT: retl +; X32-AVX2-LABEL: combine_permq_pshufb_as_vpblendd: +; X32-AVX2: # BB#0: +; X32-AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 +; X32-AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7] +; X32-AVX2-NEXT: retl ; -; X64-LABEL: combine_permq_pshufb_as_vpblendd: -; X64: # BB#0: -; X64-NEXT: vpxor %ymm1, %ymm1, %ymm1 -; X64-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7] -; X64-NEXT: retq +; X32-AVX512-LABEL: combine_permq_pshufb_as_vpblendd: +; X32-AVX512: # BB#0: +; X32-AVX512-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X32-AVX512-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7] +; X32-AVX512-NEXT: retl +; +; X64-AVX2-LABEL: combine_permq_pshufb_as_vpblendd: +; X64-AVX2: # BB#0: +; X64-AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 +; X64-AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7] +; X64-AVX2-NEXT: retq +; +; X64-AVX512-LABEL: combine_permq_pshufb_as_vpblendd: +; X64-AVX512: # BB#0: +; X64-AVX512-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X64-AVX512-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7] +; X64-AVX512-NEXT: retq %1 = shufflevector <4 x i64> %a0, <4 x i64> undef, <4 x i32> %2 = bitcast <4 x i64> %1 to <32 x i8> %3 = call <32 x i8> @llvm.x86.avx2.pshuf.b(<32 x i8> %2, <32 x i8> ) @@ -522,7 +578,7 @@ define <4 x double> @combine_pshufb_as_vzmovl_64(<4 x double> %a0) { ; X32-AVX2-LABEL: combine_pshufb_as_vzmovl_64: ; X32-AVX2: # BB#0: -; X32-AVX2-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; X32-AVX2-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; X32-AVX2-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3] ; X32-AVX2-NEXT: retl ; @@ -534,7 +590,7 @@ ; ; X64-AVX2-LABEL: combine_pshufb_as_vzmovl_64: ; X64-AVX2: # BB#0: -; X64-AVX2-NEXT: vxorpd %ymm1, %ymm1, %ymm1 +; X64-AVX2-NEXT: vxorpd %xmm1, %xmm1, %xmm1 ; X64-AVX2-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3] ; X64-AVX2-NEXT: retq ; @@ -552,7 +608,7 @@ define <8 x float> @combine_pshufb_as_vzmovl_32(<8 x float> %a0) { ; X32-AVX2-LABEL: combine_pshufb_as_vzmovl_32: ; X32-AVX2: # BB#0: -; X32-AVX2-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X32-AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X32-AVX2-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4,5,6,7] ; X32-AVX2-NEXT: retl ; @@ -564,7 +620,7 @@ ; ; X64-AVX2-LABEL: combine_pshufb_as_vzmovl_32: ; X64-AVX2: # BB#0: -; X64-AVX2-NEXT: vxorps %ymm1, %ymm1, %ymm1 +; X64-AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1 ; X64-AVX2-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4,5,6,7] ; X64-AVX2-NEXT: retq ; @@ -706,33 +762,57 @@ } define <32 x i8> @combine_pshufb_as_unpacklo_zero(<32 x i8> %a0) { -; X32-LABEL: combine_pshufb_as_unpacklo_zero: -; X32: # BB#0: -; X32-NEXT: vpxor %ymm1, %ymm1, %ymm1 -; X32-NEXT: vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11] -; X32-NEXT: retl +; X32-AVX2-LABEL: combine_pshufb_as_unpacklo_zero: +; X32-AVX2: # BB#0: +; X32-AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 +; X32-AVX2-NEXT: vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11] +; X32-AVX2-NEXT: retl ; -; X64-LABEL: combine_pshufb_as_unpacklo_zero: -; X64: # BB#0: -; X64-NEXT: vpxor %ymm1, %ymm1, %ymm1 -; X64-NEXT: vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11] -; X64-NEXT: retq +; X32-AVX512-LABEL: combine_pshufb_as_unpacklo_zero: +; X32-AVX512: # BB#0: +; X32-AVX512-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X32-AVX512-NEXT: vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11] +; X32-AVX512-NEXT: retl +; +; X64-AVX2-LABEL: combine_pshufb_as_unpacklo_zero: +; X64-AVX2: # BB#0: +; X64-AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 +; X64-AVX2-NEXT: vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11] +; X64-AVX2-NEXT: retq +; +; X64-AVX512-LABEL: combine_pshufb_as_unpacklo_zero: +; X64-AVX512: # BB#0: +; X64-AVX512-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X64-AVX512-NEXT: vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11] +; X64-AVX512-NEXT: retq %1 = tail call <32 x i8> @llvm.x86.avx2.pshuf.b(<32 x i8> %a0, <32 x i8> ) ret <32 x i8> %1 } define <32 x i8> @combine_pshufb_as_unpackhi_zero(<32 x i8> %a0) { -; X32-LABEL: combine_pshufb_as_unpackhi_zero: -; X32: # BB#0: -; X32-NEXT: vpxor %ymm1, %ymm1, %ymm1 -; X32-NEXT: vpunpckhbw {{.*#+}} ymm0 = ymm1[8],ymm0[8],ymm1[9],ymm0[9],ymm1[10],ymm0[10],ymm1[11],ymm0[11],ymm1[12],ymm0[12],ymm1[13],ymm0[13],ymm1[14],ymm0[14],ymm1[15],ymm0[15],ymm1[24],ymm0[24],ymm1[25],ymm0[25],ymm1[26],ymm0[26],ymm1[27],ymm0[27],ymm1[28],ymm0[28],ymm1[29],ymm0[29],ymm1[30],ymm0[30],ymm1[31],ymm0[31] -; X32-NEXT: retl +; X32-AVX2-LABEL: combine_pshufb_as_unpackhi_zero: +; X32-AVX2: # BB#0: +; X32-AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 +; X32-AVX2-NEXT: vpunpckhbw {{.*#+}} ymm0 = ymm1[8],ymm0[8],ymm1[9],ymm0[9],ymm1[10],ymm0[10],ymm1[11],ymm0[11],ymm1[12],ymm0[12],ymm1[13],ymm0[13],ymm1[14],ymm0[14],ymm1[15],ymm0[15],ymm1[24],ymm0[24],ymm1[25],ymm0[25],ymm1[26],ymm0[26],ymm1[27],ymm0[27],ymm1[28],ymm0[28],ymm1[29],ymm0[29],ymm1[30],ymm0[30],ymm1[31],ymm0[31] +; X32-AVX2-NEXT: retl ; -; X64-LABEL: combine_pshufb_as_unpackhi_zero: -; X64: # BB#0: -; X64-NEXT: vpxor %ymm1, %ymm1, %ymm1 -; X64-NEXT: vpunpckhbw {{.*#+}} ymm0 = ymm1[8],ymm0[8],ymm1[9],ymm0[9],ymm1[10],ymm0[10],ymm1[11],ymm0[11],ymm1[12],ymm0[12],ymm1[13],ymm0[13],ymm1[14],ymm0[14],ymm1[15],ymm0[15],ymm1[24],ymm0[24],ymm1[25],ymm0[25],ymm1[26],ymm0[26],ymm1[27],ymm0[27],ymm1[28],ymm0[28],ymm1[29],ymm0[29],ymm1[30],ymm0[30],ymm1[31],ymm0[31] -; X64-NEXT: retq +; X32-AVX512-LABEL: combine_pshufb_as_unpackhi_zero: +; X32-AVX512: # BB#0: +; X32-AVX512-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X32-AVX512-NEXT: vpunpckhbw {{.*#+}} ymm0 = ymm1[8],ymm0[8],ymm1[9],ymm0[9],ymm1[10],ymm0[10],ymm1[11],ymm0[11],ymm1[12],ymm0[12],ymm1[13],ymm0[13],ymm1[14],ymm0[14],ymm1[15],ymm0[15],ymm1[24],ymm0[24],ymm1[25],ymm0[25],ymm1[26],ymm0[26],ymm1[27],ymm0[27],ymm1[28],ymm0[28],ymm1[29],ymm0[29],ymm1[30],ymm0[30],ymm1[31],ymm0[31] +; X32-AVX512-NEXT: retl +; +; X64-AVX2-LABEL: combine_pshufb_as_unpackhi_zero: +; X64-AVX2: # BB#0: +; X64-AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 +; X64-AVX2-NEXT: vpunpckhbw {{.*#+}} ymm0 = ymm1[8],ymm0[8],ymm1[9],ymm0[9],ymm1[10],ymm0[10],ymm1[11],ymm0[11],ymm1[12],ymm0[12],ymm1[13],ymm0[13],ymm1[14],ymm0[14],ymm1[15],ymm0[15],ymm1[24],ymm0[24],ymm1[25],ymm0[25],ymm1[26],ymm0[26],ymm1[27],ymm0[27],ymm1[28],ymm0[28],ymm1[29],ymm0[29],ymm1[30],ymm0[30],ymm1[31],ymm0[31] +; X64-AVX2-NEXT: retq +; +; X64-AVX512-LABEL: combine_pshufb_as_unpackhi_zero: +; X64-AVX512: # BB#0: +; X64-AVX512-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X64-AVX512-NEXT: vpunpckhbw {{.*#+}} ymm0 = ymm1[8],ymm0[8],ymm1[9],ymm0[9],ymm1[10],ymm0[10],ymm1[11],ymm0[11],ymm1[12],ymm0[12],ymm1[13],ymm0[13],ymm1[14],ymm0[14],ymm1[15],ymm0[15],ymm1[24],ymm0[24],ymm1[25],ymm0[25],ymm1[26],ymm0[26],ymm1[27],ymm0[27],ymm1[28],ymm0[28],ymm1[29],ymm0[29],ymm1[30],ymm0[30],ymm1[31],ymm0[31] +; X64-AVX512-NEXT: retq %1 = tail call <32 x i8> @llvm.x86.avx2.pshuf.b(<32 x i8> %a0, <32 x i8> ) ret <32 x i8> %1 } Index: test/CodeGen/X86/vector-shuffle-combining-xop.ll =================================================================== --- test/CodeGen/X86/vector-shuffle-combining-xop.ll +++ test/CodeGen/X86/vector-shuffle-combining-xop.ll @@ -138,12 +138,12 @@ define <8 x float> @combine_vpermil2ps256_zero(<8 x float> %a0, <8 x float> %a1) { ; X32-LABEL: combine_vpermil2ps256_zero: ; X32: # BB#0: -; X32-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X32-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X32-NEXT: retl ; ; X64-LABEL: combine_vpermil2ps256_zero: ; X64: # BB#0: -; X64-NEXT: vxorps %ymm0, %ymm0, %ymm0 +; X64-NEXT: vxorps %xmm0, %xmm0, %xmm0 ; X64-NEXT: retq %res0 = call <8 x float> @llvm.x86.xop.vpermil2ps.256(<8 x float> %a1, <8 x float> %a0, <8 x i32> , i8 2) ret <8 x float> %res0 Index: test/CodeGen/X86/vector-tzcnt-256.ll =================================================================== --- test/CodeGen/X86/vector-tzcnt-256.ll +++ test/CodeGen/X86/vector-tzcnt-256.ll @@ -41,7 +41,7 @@ ; ; AVX2-LABEL: testv4i64: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpsubq %ymm0, %ymm1, %ymm2 ; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0 ; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2 @@ -106,7 +106,7 @@ ; ; X32-AVX-LABEL: testv4i64: ; X32-AVX: # BB#0: -; X32-AVX-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X32-AVX-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; X32-AVX-NEXT: vpsubq %ymm0, %ymm1, %ymm2 ; X32-AVX-NEXT: vpand %ymm2, %ymm0, %ymm0 ; X32-AVX-NEXT: vpsubq {{\.LCPI.*}}, %ymm0, %ymm0 @@ -157,7 +157,7 @@ ; ; AVX2-LABEL: testv4i64u: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpsubq %ymm0, %ymm1, %ymm2 ; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0 ; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2 @@ -206,7 +206,7 @@ ; ; X32-AVX-LABEL: testv4i64u: ; X32-AVX: # BB#0: -; X32-AVX-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X32-AVX-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; X32-AVX-NEXT: vpsubq %ymm0, %ymm1, %ymm2 ; X32-AVX-NEXT: vpand %ymm2, %ymm0, %ymm0 ; X32-AVX-NEXT: vpsubq {{\.LCPI.*}}, %ymm0, %ymm0 @@ -265,7 +265,7 @@ ; ; AVX2-LABEL: testv8i32: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpsubd %ymm0, %ymm1, %ymm2 ; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0 ; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2 @@ -342,7 +342,7 @@ ; ; X32-AVX-LABEL: testv8i32: ; X32-AVX: # BB#0: -; X32-AVX-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X32-AVX-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; X32-AVX-NEXT: vpsubd %ymm0, %ymm1, %ymm2 ; X32-AVX-NEXT: vpand %ymm2, %ymm0, %ymm0 ; X32-AVX-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2 @@ -406,7 +406,7 @@ ; ; AVX2-LABEL: testv8i32u: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpsubd %ymm0, %ymm1, %ymm2 ; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0 ; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2 @@ -459,7 +459,7 @@ ; ; X32-AVX-LABEL: testv8i32u: ; X32-AVX: # BB#0: -; X32-AVX-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X32-AVX-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; X32-AVX-NEXT: vpsubd %ymm0, %ymm1, %ymm2 ; X32-AVX-NEXT: vpand %ymm2, %ymm0, %ymm0 ; X32-AVX-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2 @@ -519,7 +519,7 @@ ; ; AVX2-LABEL: testv16i16: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpsubw %ymm0, %ymm1, %ymm1 ; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 ; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 @@ -591,7 +591,7 @@ ; ; X32-AVX-LABEL: testv16i16: ; X32-AVX: # BB#0: -; X32-AVX-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X32-AVX-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; X32-AVX-NEXT: vpsubw %ymm0, %ymm1, %ymm1 ; X32-AVX-NEXT: vpand %ymm1, %ymm0, %ymm0 ; X32-AVX-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 @@ -649,7 +649,7 @@ ; ; AVX2-LABEL: testv16i16u: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpsubw %ymm0, %ymm1, %ymm1 ; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 ; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 @@ -721,7 +721,7 @@ ; ; X32-AVX-LABEL: testv16i16u: ; X32-AVX: # BB#0: -; X32-AVX-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X32-AVX-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; X32-AVX-NEXT: vpsubw %ymm0, %ymm1, %ymm1 ; X32-AVX-NEXT: vpand %ymm1, %ymm0, %ymm0 ; X32-AVX-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 @@ -773,7 +773,7 @@ ; ; AVX2-LABEL: testv32i8: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpsubb %ymm0, %ymm1, %ymm1 ; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 ; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 @@ -841,7 +841,7 @@ ; ; X32-AVX-LABEL: testv32i8: ; X32-AVX: # BB#0: -; X32-AVX-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X32-AVX-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; X32-AVX-NEXT: vpsubb %ymm0, %ymm1, %ymm1 ; X32-AVX-NEXT: vpand %ymm1, %ymm0, %ymm0 ; X32-AVX-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 @@ -890,7 +890,7 @@ ; ; AVX2-LABEL: testv32i8u: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpsubb %ymm0, %ymm1, %ymm1 ; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 ; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 @@ -958,7 +958,7 @@ ; ; X32-AVX-LABEL: testv32i8u: ; X32-AVX: # BB#0: -; X32-AVX-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; X32-AVX-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; X32-AVX-NEXT: vpsubb %ymm0, %ymm1, %ymm1 ; X32-AVX-NEXT: vpand %ymm1, %ymm0, %ymm0 ; X32-AVX-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 Index: test/CodeGen/X86/viabs.ll =================================================================== --- test/CodeGen/X86/viabs.ll +++ test/CodeGen/X86/viabs.ll @@ -459,7 +459,7 @@ ; ; AVX2-LABEL: test_abs_gt_v4i64: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm1 ; AVX2-NEXT: vpaddq %ymm1, %ymm0, %ymm0 ; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0 @@ -523,7 +523,7 @@ ; ; AVX2-LABEL: test_abs_le_v8i64: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2 +; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm3 ; AVX2-NEXT: vpaddq %ymm3, %ymm0, %ymm0 ; AVX2-NEXT: vpxor %ymm3, %ymm0, %ymm0 @@ -598,7 +598,7 @@ ; AVX2: # BB#0: ; AVX2-NEXT: vmovdqu (%rdi), %ymm0 ; AVX2-NEXT: vmovdqu 32(%rdi), %ymm1 -; AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2 +; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm3 ; AVX2-NEXT: vpaddq %ymm3, %ymm0, %ymm0 ; AVX2-NEXT: vpxor %ymm3, %ymm0, %ymm0 Index: test/CodeGen/X86/vselect-pcmp.ll =================================================================== --- test/CodeGen/X86/vselect-pcmp.ll +++ test/CodeGen/X86/vselect-pcmp.ll @@ -158,7 +158,7 @@ ; ; AVX2-LABEL: signbit_sel_v16i16: ; AVX2: # BB#0: -; AVX2-NEXT: vpxor %ymm3, %ymm3, %ymm3 +; AVX2-NEXT: vpxor %xmm3, %xmm3, %xmm3 ; AVX2-NEXT: vpcmpgtw %ymm2, %ymm3, %ymm2 ; AVX2-NEXT: vpblendvb %ymm2, %ymm0, %ymm1, %ymm0 ; AVX2-NEXT: retq Index: test/CodeGen/X86/xop-intrinsics-fast-isel.ll =================================================================== --- test/CodeGen/X86/xop-intrinsics-fast-isel.ll +++ test/CodeGen/X86/xop-intrinsics-fast-isel.ll @@ -499,7 +499,7 @@ define <4 x i64> @test_mm256_cmov_si256(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> %a2) { ; X32-LABEL: test_mm256_cmov_si256: ; X32: # BB#0: -; X32-NEXT: vxorps %ymm3, %ymm3, %ymm3 +; X32-NEXT: vxorps %xmm3, %xmm3, %xmm3 ; X32-NEXT: vcmptrueps %ymm3, %ymm3, %ymm3 ; X32-NEXT: vxorps %ymm3, %ymm2, %ymm3 ; X32-NEXT: vandps %ymm2, %ymm0, %ymm0 @@ -509,7 +509,7 @@ ; ; X64-LABEL: test_mm256_cmov_si256: ; X64: # BB#0: -; X64-NEXT: vxorps %ymm3, %ymm3, %ymm3 +; X64-NEXT: vxorps %xmm3, %xmm3, %xmm3 ; X64-NEXT: vcmptrueps %ymm3, %ymm3, %ymm3 ; X64-NEXT: vxorps %ymm3, %ymm2, %ymm3 ; X64-NEXT: vandps %ymm2, %ymm0, %ymm0