summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2011-11-04 18:32:42 +0000
committerDan Gohman <gohman@apple.com>2011-11-04 18:32:42 +0000
commit71d050315704c23b235594d3fad5268c12d825e3 (patch)
tree15ddf159c60ed3223809791456baa648bfe4be69
parent73a1ad8f0560f01830fd206e84d4a21e5b3b7f59 (diff)
downloadllvm-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.cpp11
-rw-r--r--test/Transforms/InstSimplify/undef.ll7
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
+}