mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-27 05:16:06 +00:00
[InstCombine] use 'match' to reduce code bloat; NFCI
I wrote this patch before seeing the comment in: https://reviews.llvm.org/D27114 ...that suggests we should actually be canonicalizing the other way. So just in case we decide this is the right way, we might as well have a cleaner implementation. llvm-svn: 290912
This commit is contained in:
parent
b2826a1ddc
commit
f0d1e77373
@ -2713,24 +2713,20 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) {
|
||||
|
||||
// assume( (load addr) != null ) -> add 'nonnull' metadata to load
|
||||
// (if assume is valid at the load)
|
||||
if (ICmpInst* ICmp = dyn_cast<ICmpInst>(IIOperand)) {
|
||||
Value *LHS = ICmp->getOperand(0);
|
||||
Value *RHS = ICmp->getOperand(1);
|
||||
if (ICmpInst::ICMP_NE == ICmp->getPredicate() &&
|
||||
isa<LoadInst>(LHS) &&
|
||||
isa<Constant>(RHS) &&
|
||||
RHS->getType()->isPointerTy() &&
|
||||
cast<Constant>(RHS)->isNullValue()) {
|
||||
LoadInst* LI = cast<LoadInst>(LHS);
|
||||
if (isValidAssumeForContext(II, LI, &DT)) {
|
||||
MDNode *MD = MDNode::get(II->getContext(), None);
|
||||
LI->setMetadata(LLVMContext::MD_nonnull, MD);
|
||||
return eraseInstFromFunction(*II);
|
||||
}
|
||||
}
|
||||
CmpInst::Predicate Pred;
|
||||
Instruction *LHS;
|
||||
if (match(IIOperand, m_ICmp(Pred, m_Instruction(LHS), m_Zero())) &&
|
||||
Pred == ICmpInst::ICMP_NE && LHS->getOpcode() == Instruction::Load &&
|
||||
LHS->getType()->isPointerTy() &&
|
||||
isValidAssumeForContext(II, LHS, &DT)) {
|
||||
MDNode *MD = MDNode::get(II->getContext(), None);
|
||||
LHS->setMetadata(LLVMContext::MD_nonnull, MD);
|
||||
return eraseInstFromFunction(*II);
|
||||
|
||||
// TODO: apply nonnull return attributes to calls and invokes
|
||||
// TODO: apply range metadata for range check patterns?
|
||||
}
|
||||
|
||||
// If there is a dominating assume with the same condition as this one,
|
||||
// then this one is redundant, and should be removed.
|
||||
APInt KnownZero(1, 0), KnownOne(1, 0);
|
||||
|
Loading…
x
Reference in New Issue
Block a user