diff options
author | Dan Gohman <gohman@apple.com> | 2011-11-04 18:32:42 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2011-11-04 18:32:42 +0000 |
commit | 71d050315704c23b235594d3fad5268c12d825e3 (patch) | |
tree | 15ddf159c60ed3223809791456baa648bfe4be69 | |
parent | 73a1ad8f0560f01830fd206e84d4a21e5b3b7f59 (diff) | |
download | llvm-71d050315704c23b235594d3fad5268c12d825e3.tar.gz llvm-71d050315704c23b235594d3fad5268c12d825e3.tar.bz2 llvm-71d050315704c23b235594d3fad5268c12d825e3.tar.xz |
Teach instsimplify to simplify calls to undef.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@143719 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Analysis/InstructionSimplify.cpp | 11 | ||||
-rw-r--r-- | test/Transforms/InstSimplify/undef.ll | 7 |
2 files changed, 18 insertions, 0 deletions
diff --git a/lib/Analysis/InstructionSimplify.cpp b/lib/Analysis/InstructionSimplify.cpp index c2ddc6d486..c1416328b7 100644 --- a/lib/Analysis/InstructionSimplify.cpp +++ b/lib/Analysis/InstructionSimplify.cpp @@ -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 diff --git a/test/Transforms/InstSimplify/undef.ll b/test/Transforms/InstSimplify/undef.ll index 8134cc8487..9f5a1e82f5 100644 --- a/test/Transforms/InstSimplify/undef.ll +++ b/test/Transforms/InstSimplify/undef.ll @@ -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 +} |