Teach instsimplify to simplify calls to undef.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@143719 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman 2011-11-04 18:32:42 +00:00
parent 73a1ad8f05
commit 71d0503157
2 changed files with 18 additions and 0 deletions

View File

@ -2474,6 +2474,14 @@ Value *llvm::SimplifyCmpInst(unsigned Predicate, Value *LHS, Value *RHS,
return ::SimplifyCmpInst(Predicate, LHS, RHS, TD, DT, RecursionLimit);
}
static Value *SimplifyCallInst(CallInst *CI) {
// call undef -> undef
if (isa<UndefValue>(CI->getCalledValue()))
return UndefValue::get(CI->getType());
return 0;
}
/// SimplifyInstruction - See if we can compute a simplified version of this
/// instruction. If not, this returns null.
Value *llvm::SimplifyInstruction(Instruction *I, const TargetData *TD,
@ -2569,6 +2577,9 @@ Value *llvm::SimplifyInstruction(Instruction *I, const TargetData *TD,
case Instruction::PHI:
Result = SimplifyPHINode(cast<PHINode>(I), DT);
break;
case Instruction::Call:
Result = SimplifyCallInst(cast<CallInst>(I));
break;
}
/// If called on unreachable code, the above logic may report that the

View File

@ -125,3 +125,10 @@ define i64 @test17(i64 %a) {
%r = select i1 undef, i64 undef, i64 %a
ret i64 %r
}
; @test18
; CHECK: ret i64 undef
define i64 @test18(i64 %a) {
%r = call i64 (i64)* undef(i64 %a)
ret i64 %r
}