[llvm] [AMDGPU] In VectorLegalizer::Expand, if UnrollVectorOp returns Load, … (PR #88475)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 12 07:24:14 PDT 2024
================
@@ -1159,8 +1159,12 @@ void VectorLegalizer::Expand(SDNode *Node, SmallVectorImpl<SDValue> &Results) {
}
SDValue Unrolled = DAG.UnrollVectorOp(Node);
- for (unsigned I = 0, E = Unrolled->getNumValues(); I != E; ++I)
- Results.push_back(Unrolled.getValue(I));
+ const LoadSDNode *Ld = dyn_cast<LoadSDNode>(Unrolled.getNode());
+ if (Ld)
+ Results.push_back(Unrolled);
+ else
+ for (unsigned I = 0, E = Unrolled->getNumValues(); I != E; ++I)
+ Results.push_back(Unrolled.getValue(I));
----------------
choikwa wrote:
The SDag looks like this
t39: v2i32,ch = load<(dereferenceable invariant load (s64) from %ir..kernarg.offset, align 4, addrspace 4)> t0, t11, undef:i64
t37: i32 = extract_vector_elt t39, Constant:i32<0>
t38: i16 = truncate t37
t35: i32 = extract_vector_elt t39, Constant:i32<1>
t36: i16 = truncate t35
t20: v2i16 = BUILD_VECTOR t38, t36
t32: v2i32 = any_extend t20
It looks like the logic after 'assert(N->getNumValues() == 1 ' is responsible for returning load.
https://github.com/llvm/llvm-project/pull/88475
More information about the llvm-commits
mailing list