summaryrefslogtreecommitdiff
path: root/include/llvm/Support/IRBuilder.h
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-07-23 06:58:10 +0000
committerChris Lattner <sabre@nondot.org>2008-07-23 06:58:10 +0000
commitfcf0e86bf2ea9ddf104bea9a0764f78623a11889 (patch)
tree0f4fcc3d13461ddeeeff10b4d35b33d6d782400d /include/llvm/Support/IRBuilder.h
parent967948b4e25cae3de68f38fddaa75d838e676dec (diff)
downloadllvm-fcf0e86bf2ea9ddf104bea9a0764f78623a11889.tar.gz
llvm-fcf0e86bf2ea9ddf104bea9a0764f78623a11889.tar.bz2
llvm-fcf0e86bf2ea9ddf104bea9a0764f78623a11889.tar.xz
Make CreateBinOp/CreateNeg/CreateNot do constant folding.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53950 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Support/IRBuilder.h')
-rw-r--r--include/llvm/Support/IRBuilder.h15
1 files changed, 11 insertions, 4 deletions
diff --git a/include/llvm/Support/IRBuilder.h b/include/llvm/Support/IRBuilder.h
index b025d4c657..9cc1d903f0 100644
--- a/include/llvm/Support/IRBuilder.h
+++ b/include/llvm/Support/IRBuilder.h
@@ -243,15 +243,22 @@ public:
return Insert(BinaryOperator::CreateXor(LHS, RHS), Name);
}
- BinaryOperator *CreateBinOp(Instruction::BinaryOps Opc,
- Value *LHS, Value *RHS, const char *Name = "") {
+ Value *CreateBinOp(Instruction::BinaryOps Opc,
+ Value *LHS, Value *RHS, const char *Name = "") {
+ if (Constant *LC = dyn_cast<Constant>(LHS))
+ if (Constant *RC = dyn_cast<Constant>(RHS))
+ return ConstantExpr::get(Opc, LC, RC);
return Insert(BinaryOperator::Create(Opc, LHS, RHS), Name);
}
- BinaryOperator *CreateNeg(Value *V, const char *Name = "") {
+ Value *CreateNeg(Value *V, const char *Name = "") {
+ if (Constant *VC = dyn_cast<Constant>(V))
+ return ConstantExpr::getNeg(VC);
return Insert(BinaryOperator::CreateNeg(V), Name);
}
- BinaryOperator *CreateNot(Value *V, const char *Name = "") {
+ Value *CreateNot(Value *V, const char *Name = "") {
+ if (Constant *VC = dyn_cast<Constant>(V))
+ return ConstantExpr::getNot(VC);
return Insert(BinaryOperator::CreateNot(V), Name);
}