Skip to content

Commit 712b8f6

Browse files
committed
[InstCombine] Fold select + cload patterns
1 parent f9f700f commit 712b8f6

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4110,5 +4110,27 @@ Instruction *InstCombinerImpl::visitSelectInst(SelectInst &SI) {
41104110
}
41114111
}
41124112

4113+
// select mask, masked load (ptr, align, mask, V), FV -> masked load (ptr,
4114+
// align, mask, FV)
4115+
{
4116+
Value *Ptr, *MaskVec, *PassThru;
4117+
uint64_t Alignment;
4118+
if (CondVal->getType()->isIntegerTy(1) &&
4119+
match(TrueVal,
4120+
m_OneUse(m_ExtractElt(
4121+
m_OneUse(m_MaskedLoad(m_Value(Ptr), m_ConstantInt(Alignment),
4122+
m_Value(MaskVec), m_Value(PassThru))),
4123+
m_Zero()))) &&
4124+
match(MaskVec,
4125+
m_InsertElt(m_Poison(), m_Specific(CondVal), m_Zero())) &&
4126+
MaskVec->getType() == FixedVectorType::get(Builder.getInt1Ty(), 1)
4127+
// && isGuaranteedNotToBeUndef(Mask, &AC, &I, &DT)
4128+
) {
4129+
auto *NewPassThru = Builder.CreateBitCast(FalseVal, PassThru->getType());
4130+
auto *NewMaskedLoad = Builder.CreateMaskedLoad(
4131+
PassThru->getType(), Ptr, Align(Alignment), MaskVec, NewPassThru);
4132+
return ExtractElementInst::Create(NewMaskedLoad, Builder.getInt32(0));
4133+
}
4134+
}
41134135
return nullptr;
41144136
}

0 commit comments

Comments
 (0)