diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -47351,9 +47351,10 @@ if (SDValue NotOp1 = IsNOT(Op1, DAG)) { if (peekThroughBitcasts(NotOp1) == peekThroughBitcasts(Op0)) { SDLoc DL(EFLAGS); - return DAG.getNode(EFLAGS.getOpcode(), DL, VT, - DAG.getBitcast(OpVT, NotOp1), - DAG.getAllOnesConstant(DL, OpVT)); + return DAG.getNode( + EFLAGS.getOpcode(), DL, VT, DAG.getBitcast(OpVT, NotOp1), + DAG.getBitcast(OpVT, + DAG.getAllOnesConstant(DL, NotOp1.getValueType()))); } } } diff --git a/llvm/test/CodeGen/X86/combine-testp-v8f32.ll b/llvm/test/CodeGen/X86/combine-testp-v8f32.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/X86/combine-testp-v8f32.ll @@ -0,0 +1,26 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx | FileCheck %s --check-prefix=AVX + +define void @test(<8 x i32> %ref.tmp.sroa.0.16.vec.expand.i.i.i.i.i.i.i) #0 personality ptr null { +; AVX-LABEL: test: +; AVX: # %bb.0: # %entry +; AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1 +; AVX-NEXT: vcmptrueps %ymm1, %ymm1, %ymm1 +; AVX-NEXT: vtestps %ymm1, %ymm0 +; AVX-NEXT: vzeroupper +; AVX-NEXT: retq +entry: + %xor.i.i.i.i.i.i.i.i.i = xor <8 x i32> %ref.tmp.sroa.0.16.vec.expand.i.i.i.i.i.i.i, + %.cast.i.i.i.i.i.i = bitcast <8 x i32> %xor.i.i.i.i.i.i.i.i.i to <8 x float> + %0 = call i32 @llvm.x86.avx.vtestz.ps.256(<8 x float> %.cast.i.i.i.i.i.i, <8 x float> %.cast.i.i.i.i.i.i) + %cmp.i.not.i.i.i.i.i.i = icmp eq i32 %0, 0 + br i1 %cmp.i.not.i.i.i.i.i.i, label %if.end3.i.i.i.i.i.i, label %end + +if.end3.i.i.i.i.i.i: ; preds = %entry + ret void + +end: ; preds = %entry + ret void +} + +declare i32 @llvm.x86.avx.vtestz.ps.256(<8 x float>, <8 x float>)