[llvm] 1234754 - [DAGCombine] `BUILD_VECTOR` can not create undef or poison
Roman Lebedev via llvm-commits
llvm-commits at lists.llvm.org
Thu Dec 22 15:27:11 PST 2022
Author: Roman Lebedev
Date: 2022-12-23T02:26:36+03:00
New Revision: 1234754bbca77c74d78d2200a42dcdf55804856f
URL: https://github.com/llvm/llvm-project/commit/1234754bbca77c74d78d2200a42dcdf55804856f
DIFF: https://github.com/llvm/llvm-project/commit/1234754bbca77c74d78d2200a42dcdf55804856f.diff
LOG: [DAGCombine] `BUILD_VECTOR` can not create undef or poison
Added:
Modified:
llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
llvm/test/CodeGen/X86/freeze-vector.ll
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index a39d0a50bd87..928e61d5ceea 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -4736,6 +4736,7 @@ bool SelectionDAG::canCreateUndefOrPoison(SDValue Op, const APInt &DemandedElts,
case ISD::SIGN_EXTEND_VECTOR_INREG:
case ISD::ZERO_EXTEND_VECTOR_INREG:
case ISD::BITCAST:
+ case ISD::BUILD_VECTOR:
return false;
case ISD::ADD:
diff --git a/llvm/test/CodeGen/X86/freeze-vector.ll b/llvm/test/CodeGen/X86/freeze-vector.ll
index d6eb0f9308db..4604416e98e4 100644
--- a/llvm/test/CodeGen/X86/freeze-vector.ll
+++ b/llvm/test/CodeGen/X86/freeze-vector.ll
@@ -268,20 +268,16 @@ define void @freeze_buildvector_single_maybe_poison_operand(ptr %origin, ptr %ds
; X86: # %bb.0:
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT: movl (%ecx), %ecx
-; X86-NEXT: andl $15, %ecx
; X86-NEXT: vmovdqa {{.*#+}} xmm0 = <u,42,42,42>
-; X86-NEXT: vpinsrd $0, %ecx, %xmm0, %xmm0
+; X86-NEXT: vpinsrd $0, (%ecx), %xmm0, %xmm0
; X86-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0
; X86-NEXT: vmovdqa %xmm0, (%eax)
; X86-NEXT: retl
;
; X64-LABEL: freeze_buildvector_single_maybe_poison_operand:
; X64: # %bb.0:
-; X64-NEXT: movl (%rdi), %eax
-; X64-NEXT: andl $15, %eax
; X64-NEXT: vmovdqa {{.*#+}} xmm0 = <u,42,42,42>
-; X64-NEXT: vpinsrd $0, %eax, %xmm0, %xmm0
+; X64-NEXT: vpinsrd $0, (%rdi), %xmm0, %xmm0
; X64-NEXT: vpbroadcastd {{.*#+}} xmm1 = [7,7,7,7]
; X64-NEXT: vpand %xmm1, %xmm0, %xmm0
; X64-NEXT: vmovdqa %xmm0, (%rsi)
@@ -314,10 +310,8 @@ define void @freeze_buildvector_single_repeated_maybe_poison_operand(ptr %origin
;
; X64-LABEL: freeze_buildvector_single_repeated_maybe_poison_operand:
; X64: # %bb.0:
-; X64-NEXT: movl (%rdi), %eax
-; X64-NEXT: andl $15, %eax
; X64-NEXT: vmovdqa {{.*#+}} xmm0 = <u,42,u,u>
-; X64-NEXT: vpinsrd $0, %eax, %xmm0, %xmm0
+; X64-NEXT: vpinsrd $0, (%rdi), %xmm0, %xmm0
; X64-NEXT: vpbroadcastq %xmm0, %xmm0
; X64-NEXT: vpbroadcastd {{.*#+}} xmm1 = [7,7,7,7]
; X64-NEXT: vpand %xmm1, %xmm0, %xmm0
More information about the llvm-commits
mailing list