[llvm] [DAG] visitFREEZE - always allow freezing multiple operands (PR #145939)
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 1 10:21:43 PDT 2025
================
@@ -23205,6 +23196,10 @@ SDValue DAGCombiner::visitINSERT_VECTOR_ELT(SDNode *N) {
if (CurVec.isUndef())
return CanonicalizeBuildVector(Ops);
+ // FREEZE(UNDEF) - build new BUILD_VECTOR from already inserted operands.
+ if (ISD::isFreezeUndef(CurVec.getNode()))
+ return CanonicalizeBuildVector(Ops, /*FreezeUndef=*/true);
----------------
RKSimon wrote:
```
define <4 x i4> @src(i4 %a0) {
#0:
%f = freeze <4 x i4> undef
%v0 = insertelement <4 x i4> %f, i4 %a0, i32 0
ret <4 x i4> %v0
}
=>
define <4 x i4> @tgt(i4 %a0) {
#0:
%f0 = freeze i4 undef
%v0 = insertelement <4 x i4> poison, i4 %a0, i32 0
%v1 = insertelement <4 x i4> %v0, i4 %f0, i32 1
%v2 = insertelement <4 x i4> %v1, i4 %f0, i32 2
%v3 = insertelement <4 x i4> %v2, i4 %f0, i32 3
ret <4 x i4> %v3
}
Transformation seems to be correct!
```
https://github.com/llvm/llvm-project/pull/145939
More information about the llvm-commits
mailing list