Index: lib/Target/X86/X86InstrInfo.cpp =================================================================== --- lib/Target/X86/X86InstrInfo.cpp +++ lib/Target/X86/X86InstrInfo.cpp @@ -8116,8 +8116,8 @@ // Return true for any instruction the copies the high bits of the first source // operand into the unused high bits of the destination operand. -static bool hasUndefRegUpdate(unsigned Opcode) { - switch (Opcode) { +static bool hasUndefRegUpdate(const MachineInstr &MI) { + switch (MI.getOpcode()) { case X86::VCVTSI2SSrr: case X86::VCVTSI2SSrm: case X86::Int_VCVTSI2SSrr: @@ -8237,6 +8237,8 @@ case X86::VSQRTSDZm: case X86::VSQRTSDZm_Int: return true; + case X86::VCMPPSYrri: + return (MI.getOperand(3).getImm() == 0xf); } return false; @@ -8259,7 +8261,7 @@ unsigned X86InstrInfo::getUndefRegClearance(const MachineInstr &MI, unsigned &OpNum, const TargetRegisterInfo *TRI) const { - if (!hasUndefRegUpdate(MI.getOpcode())) + if (!hasUndefRegUpdate(MI)) return 0; // Set the OpNum parameter to the first source operand. Index: lib/Target/X86/X86InstrSSE.td =================================================================== --- lib/Target/X86/X86InstrSSE.td +++ lib/Target/X86/X86InstrSSE.td @@ -486,10 +486,9 @@ isPseudo = 1, SchedRW = [WriteZero] in { def V_SETALLONES : I<0, Pseudo, (outs VR128:$dst), (ins), "", [(set VR128:$dst, (v4i32 immAllOnesV))]>; - let Predicates = [HasAVX1Only, OptForMinSize] in { + let Predicates = [HasAVX1Only] in def AVX1_SETALLONES: I<0, Pseudo, (outs VR256:$dst), (ins), "", [(set VR256:$dst, (v8i32 immAllOnesV))]>; - } let Predicates = [HasAVX2] in def AVX2_SETALLONES : I<0, Pseudo, (outs VR256:$dst), (ins), "", [(set VR256:$dst, (v8i32 immAllOnesV))]>; @@ -7759,13 +7758,6 @@ []>, Sched<[WriteFShuffleLd, ReadAfterLd]>, VEX_4V, VEX_L; } -// To create a 256-bit all ones value, we should produce VCMPTRUEPS -// with YMM register containing zero. -// FIXME: Avoid producing vxorps to clear the fake inputs. -let Predicates = [HasAVX1Only] in { -def : Pat<(v8i32 immAllOnesV), (VCMPPSYrri (AVX_SET0), (AVX_SET0), 0xf)>; -} - multiclass vinsert_lowering { def : Pat<(vinsert128_insert:$ins (To VR256:$src1), (From VR128:$src2), 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,6 @@ ; ; X32-AVX1-LABEL: allones_v32i8: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: retl ; @@ -174,7 +173,6 @@ ; ; X64-AVX1-LABEL: allones_v32i8: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: retq ; @@ -194,7 +192,6 @@ ; ; X32-AVX1-LABEL: allones_v16i16: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: retl ; @@ -211,7 +208,6 @@ ; ; X64-AVX1-LABEL: allones_v16i16: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: retq ; @@ -231,7 +227,6 @@ ; ; X32-AVX1-LABEL: allones_v8i32: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: retl ; @@ -248,7 +243,6 @@ ; ; X64-AVX1-LABEL: allones_v8i32: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: retq ; @@ -268,7 +262,6 @@ ; ; X32-AVX1-LABEL: allones_v4i64: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: retl ; @@ -285,7 +278,6 @@ ; ; X64-AVX1-LABEL: allones_v4i64: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: retq ; @@ -305,7 +297,6 @@ ; ; X32-AVX1-LABEL: allones_v4f64: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: retl ; @@ -322,7 +313,6 @@ ; ; X64-AVX1-LABEL: allones_v4f64: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: retq ; @@ -342,7 +332,6 @@ ; ; X32-AVX1-LABEL: allones_v4f64_optsize: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: retl ; @@ -359,7 +348,6 @@ ; ; X64-AVX1-LABEL: allones_v4f64_optsize: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: retq ; @@ -379,7 +367,6 @@ ; ; X32-AVX1-LABEL: allones_v8f32: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: retl ; @@ -396,7 +383,6 @@ ; ; X64-AVX1-LABEL: allones_v8f32: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: retq ; @@ -416,7 +402,6 @@ ; ; X32-AVX1-LABEL: allones_v8f32_optsize: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: retl ; @@ -433,7 +418,6 @@ ; ; X64-AVX1-LABEL: allones_v8f32_optsize: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: retq ; @@ -455,9 +439,8 @@ ; ; X32-AVX1-LABEL: allones_v64i8: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 -; X32-AVX1-NEXT: vmovaps %ymm0, %ymm1 +; X32-AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; X32-AVX1-NEXT: retl ; ; X32-AVX2-LABEL: allones_v64i8: @@ -487,9 +470,8 @@ ; ; X64-AVX1-LABEL: allones_v64i8: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 -; X64-AVX1-NEXT: vmovaps %ymm0, %ymm1 +; X64-AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: allones_v64i8: @@ -522,9 +504,8 @@ ; ; X32-AVX1-LABEL: allones_v32i16: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 -; X32-AVX1-NEXT: vmovaps %ymm0, %ymm1 +; X32-AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; X32-AVX1-NEXT: retl ; ; X32-AVX2-LABEL: allones_v32i16: @@ -554,9 +535,8 @@ ; ; X64-AVX1-LABEL: allones_v32i16: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 -; X64-AVX1-NEXT: vmovaps %ymm0, %ymm1 +; X64-AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: allones_v32i16: @@ -589,9 +569,8 @@ ; ; X32-AVX1-LABEL: allones_v16i32: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 -; X32-AVX1-NEXT: vmovaps %ymm0, %ymm1 +; X32-AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; X32-AVX1-NEXT: retl ; ; X32-AVX2-LABEL: allones_v16i32: @@ -615,9 +594,8 @@ ; ; X64-AVX1-LABEL: allones_v16i32: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 -; X64-AVX1-NEXT: vmovaps %ymm0, %ymm1 +; X64-AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: allones_v16i32: @@ -644,9 +622,8 @@ ; ; X32-AVX1-LABEL: allones_v8i64: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 -; X32-AVX1-NEXT: vmovaps %ymm0, %ymm1 +; X32-AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; X32-AVX1-NEXT: retl ; ; X32-AVX2-LABEL: allones_v8i64: @@ -670,9 +647,8 @@ ; ; X64-AVX1-LABEL: allones_v8i64: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 -; X64-AVX1-NEXT: vmovaps %ymm0, %ymm1 +; X64-AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: allones_v8i64: @@ -699,9 +675,8 @@ ; ; X32-AVX1-LABEL: allones_v8f64: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 -; X32-AVX1-NEXT: vmovaps %ymm0, %ymm1 +; X32-AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; X32-AVX1-NEXT: retl ; ; X32-AVX2-LABEL: allones_v8f64: @@ -725,9 +700,8 @@ ; ; X64-AVX1-LABEL: allones_v8f64: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 -; X64-AVX1-NEXT: vmovaps %ymm0, %ymm1 +; X64-AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: allones_v8f64: @@ -754,9 +728,8 @@ ; ; X32-AVX1-LABEL: allones_v16f32: ; X32-AVX1: # BB#0: -; X32-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 -; X32-AVX1-NEXT: vmovaps %ymm0, %ymm1 +; X32-AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; X32-AVX1-NEXT: retl ; ; X32-AVX2-LABEL: allones_v16f32: @@ -780,9 +753,8 @@ ; ; X64-AVX1-LABEL: allones_v16f32: ; X64-AVX1: # BB#0: -; X64-AVX1-NEXT: vxorps %ymm0, %ymm0, %ymm0 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0 -; X64-AVX1-NEXT: vmovaps %ymm0, %ymm1 +; X64-AVX1-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 ; X64-AVX1-NEXT: retq ; ; X64-AVX2-LABEL: allones_v16f32: Index: test/CodeGen/X86/avx-basic.ll =================================================================== --- test/CodeGen/X86/avx-basic.ll +++ test/CodeGen/X86/avx-basic.ll @@ -34,7 +34,6 @@ 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: vcmptrueps %ymm0, %ymm0, %ymm0 ; CHECK-NEXT: vmovaps %ymm0, (%rdi) ; CHECK-NEXT: vzeroupper @@ -51,7 +50,6 @@ 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: vcmptrueps %ymm0, %ymm0, %ymm0 ; CHECK-NEXT: vmovaps %ymm0, (%rdi) ; CHECK-NEXT: vzeroupper Index: test/CodeGen/X86/avx-cvt-3.ll =================================================================== --- test/CodeGen/X86/avx-cvt-3.ll +++ test/CodeGen/X86/avx-cvt-3.ll @@ -48,7 +48,6 @@ 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: 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 +55,6 @@ ; ; X64-LABEL: sitofp_insert_allbits_v8i32: ; X64: # BB#0: -; X64-NEXT: vxorps %ymm1, %ymm1, %ymm1 ; 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 +70,6 @@ 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: 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 +77,6 @@ ; ; X64-LABEL: sitofp_shuffle_allbits_v8i32: ; X64: # BB#0: -; X64-NEXT: vxorps %ymm1, %ymm1, %ymm1 ; 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 @@ -95,7 +91,7 @@ ; X86: # BB#0: ; X86-NEXT: vxorps %ymm1, %ymm1, %ymm1 ; X86-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3,4,5,6,7] -; X86-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 +; X86-NEXT: vcmptrueps %ymm1, %ymm2, %ymm1 ; X86-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2],ymm0[3,4,5,6,7] ; X86-NEXT: vextractf128 $1, %ymm0, %xmm1 ; X86-NEXT: movl $2, %eax @@ -110,7 +106,7 @@ ; X64: # BB#0: ; X64-NEXT: vxorps %ymm1, %ymm1, %ymm1 ; X64-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3,4,5,6,7] -; X64-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 +; X64-NEXT: vcmptrueps %ymm1, %ymm2, %ymm1 ; X64-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2],ymm0[3,4,5,6,7] ; X64-NEXT: vextractf128 $1, %ymm0, %xmm1 ; X64-NEXT: movl $2, %eax 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,6 @@ 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: vcmptrueps %ymm2, %ymm2, %ymm2 ; X32-NEXT: vxorps %ymm2, %ymm0, %ymm0 ; X32-NEXT: vandps %ymm1, %ymm0, %ymm0 @@ -107,7 +106,6 @@ ; ; X64-LABEL: test_mm256_andnot_pd: ; X64: # BB#0: -; X64-NEXT: vxorps %ymm2, %ymm2, %ymm2 ; X64-NEXT: vcmptrueps %ymm2, %ymm2, %ymm2 ; X64-NEXT: vxorps %ymm2, %ymm0, %ymm0 ; X64-NEXT: vandps %ymm1, %ymm0, %ymm0 Index: test/CodeGen/X86/pr28129.ll =================================================================== --- test/CodeGen/X86/pr28129.ll +++ test/CodeGen/X86/pr28129.ll @@ -5,14 +5,12 @@ 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: 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: vcmptrueps %ymm1, %ymm1, %ymm1 ; X64-NEXT: vaddpd %ymm1, %ymm0, %ymm0 ; X64-NEXT: retq @@ -26,14 +24,12 @@ 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: 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: vcmptrueps %ymm1, %ymm1, %ymm1 ; X64-NEXT: vaddpd %ymm1, %ymm0, %ymm0 ; X64-NEXT: retq @@ -47,14 +43,12 @@ 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: 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: vcmptrueps %ymm1, %ymm1, %ymm1 ; X64-NEXT: vaddps %ymm1, %ymm0, %ymm0 ; X64-NEXT: retq @@ -68,14 +62,12 @@ 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: 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: vcmptrueps %ymm1, %ymm1, %ymm1 ; X64-NEXT: vaddps %ymm1, %ymm0, %ymm0 ; X64-NEXT: retq Index: test/CodeGen/X86/vector-pcmp.ll =================================================================== --- test/CodeGen/X86/vector-pcmp.ll +++ test/CodeGen/X86/vector-pcmp.ll @@ -148,8 +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: vcmptrueps %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vcmptrueps %ymm1, %ymm3, %ymm1 ; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm0 ; AVX1-NEXT: retq ; @@ -177,8 +176,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: vcmptrueps %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vcmptrueps %ymm1, %ymm2, %ymm1 ; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm0 ; AVX1-NEXT: retq ; @@ -206,8 +204,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: vcmptrueps %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vcmptrueps %ymm1, %ymm2, %ymm1 ; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm0 ; AVX1-NEXT: retq ; @@ -247,8 +244,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: vcmptrueps %ymm1, %ymm1, %ymm1 +; AVX1-NEXT: vcmptrueps %ymm1, %ymm3, %ymm1 ; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm0 ; AVX1-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,6 @@ 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: vcmptrueps %ymm3, %ymm3, %ymm3 ; X32-NEXT: vxorps %ymm3, %ymm2, %ymm3 ; X32-NEXT: vandps %ymm2, %ymm0, %ymm0 @@ -509,7 +508,6 @@ ; ; X64-LABEL: test_mm256_cmov_si256: ; X64: # BB#0: -; X64-NEXT: vxorps %ymm3, %ymm3, %ymm3 ; X64-NEXT: vcmptrueps %ymm3, %ymm3, %ymm3 ; X64-NEXT: vxorps %ymm3, %ymm2, %ymm3 ; X64-NEXT: vandps %ymm2, %ymm0, %ymm0