diff options
author | Chris Lattner <sabre@nondot.org> | 2008-07-23 06:58:10 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-07-23 06:58:10 +0000 |
commit | f0e9ffa64bc2d7d108a2196602a5e7ca05199e49 (patch) | |
tree | 0f4fcc3d13461ddeeeff10b4d35b33d6d782400d /include | |
parent | 12cf43f8dc6e5e460cf8a703a676f344d6f771cc (diff) | |
download | external_llvm-f0e9ffa64bc2d7d108a2196602a5e7ca05199e49.zip external_llvm-f0e9ffa64bc2d7d108a2196602a5e7ca05199e49.tar.gz external_llvm-f0e9ffa64bc2d7d108a2196602a5e7ca05199e49.tar.bz2 |
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')
-rw-r--r-- | include/llvm/Support/IRBuilder.h | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/include/llvm/Support/IRBuilder.h b/include/llvm/Support/IRBuilder.h index b025d4c..9cc1d90 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); } |