diff options
author | Craig Topper <craig.topper@sifive.com> | 2025-09-05 22:00:55 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-09-05 22:00:55 -0700 |
commit | 0335eba6e8d3c03f65d770cb9cfd38ae85868341 (patch) | |
tree | 57c2819b15016c94180b017d32ec250c673203eb /llvm/lib/CodeGen/ExpandVectorPredication.cpp | |
parent | 151c6edd4592b78984f80f22ced1fef52b5e7ab1 (diff) | |
download | llvm-0335eba6e8d3c03f65d770cb9cfd38ae85868341.zip llvm-0335eba6e8d3c03f65d770cb9cfd38ae85868341.tar.gz llvm-0335eba6e8d3c03f65d770cb9cfd38ae85868341.tar.bz2 |
[ExpandVectorPredication] Support vp.merge in foldEVLIntoMask. (#157195)
Partial fix for #157184. It still crashes later in SelectionDAG.
Diffstat (limited to 'llvm/lib/CodeGen/ExpandVectorPredication.cpp')
-rw-r--r-- | llvm/lib/CodeGen/ExpandVectorPredication.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/ExpandVectorPredication.cpp b/llvm/lib/CodeGen/ExpandVectorPredication.cpp index 753c656..5f79bd7 100644 --- a/llvm/lib/CodeGen/ExpandVectorPredication.cpp +++ b/llvm/lib/CodeGen/ExpandVectorPredication.cpp @@ -527,6 +527,12 @@ std::pair<Value *, bool> CachingVPExpander::foldEVLIntoMask(VPIntrinsic &VPI) { // Only VP intrinsics can have an %evl parameter. Value *OldMaskParam = VPI.getMaskParam(); + if (!OldMaskParam) { + assert(VPI.getIntrinsicID() == Intrinsic::vp_merge && + "Unexpected VP intrinsic without mask operand"); + OldMaskParam = VPI.getArgOperand(0); + } + Value *OldEVLParam = VPI.getVectorLengthParam(); assert(OldMaskParam && "no mask param to fold the vl param into"); assert(OldEVLParam && "no EVL param to fold away"); @@ -538,7 +544,10 @@ std::pair<Value *, bool> CachingVPExpander::foldEVLIntoMask(VPIntrinsic &VPI) { ElementCount ElemCount = VPI.getStaticVectorLength(); Value *VLMask = convertEVLToMask(Builder, OldEVLParam, ElemCount); Value *NewMaskParam = Builder.CreateAnd(VLMask, OldMaskParam); - VPI.setMaskParam(NewMaskParam); + if (VPI.getIntrinsicID() == Intrinsic::vp_merge) + VPI.setArgOperand(0, NewMaskParam); + else + VPI.setMaskParam(NewMaskParam); // Drop the %evl parameter. discardEVLParameter(VPI); |