diff options
author | David Majnemer <david.majnemer@gmail.com> | 2015-05-22 03:56:46 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2015-05-22 03:56:46 +0000 |
commit | 15032581573db3c995ad53600cf6bcc6f6eb4ee0 (patch) | |
tree | c473f8bc37cc0be258e00fdcf80935173f1987c1 /llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp | |
parent | 5189559905af399b60d1d30ef19fdcfa0d1c201b (diff) | |
download | bcm5719-llvm-15032581573db3c995ad53600cf6bcc6f6eb4ee0.tar.gz bcm5719-llvm-15032581573db3c995ad53600cf6bcc6f6eb4ee0.zip |
[InstSimplify] Handle some overflow intrinsics in InstSimplify
This change does a few things:
- Move some InstCombine transforms to InstSimplify
- Run SimplifyCall from within InstCombine::visitCallInst
- Teach InstSimplify to fold [us]mul_with_overflow(X, undef) to 0.
llvm-svn: 237995
Diffstat (limited to 'llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp')
-rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp index 3b925eda16b..e83b9dd36ae 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp @@ -13,6 +13,7 @@ #include "InstCombineInternal.h" #include "llvm/ADT/Statistic.h" +#include "llvm/Analysis/InstructionSimplify.h" #include "llvm/Analysis/MemoryBuiltins.h" #include "llvm/IR/CallSite.h" #include "llvm/IR/Dominators.h" @@ -323,6 +324,11 @@ static Value *SimplifyX86vperm2(const IntrinsicInst &II, /// the heavy lifting. /// Instruction *InstCombiner::visitCallInst(CallInst &CI) { + auto Args = CI.arg_operands(); + if (Value *V = SimplifyCall(CI.getCalledValue(), Args.begin(), Args.end(), DL, + TLI, DT, AC)) + return ReplaceInstUsesWith(CI, V); + if (isFreeCall(&CI, TLI)) return visitFree(CI); |