mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
Teach instsimplify to simplify calls to undef.
llvm-svn: 143719
This commit is contained in:
parent
ed37686ef1
commit
19a8523a2f
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user