diff --git a/include/llvm/Constants.h b/include/llvm/Constants.h index 1d4892f118e..2e471cb5dd3 100644 --- a/include/llvm/Constants.h +++ b/include/llvm/Constants.h @@ -559,6 +559,28 @@ public: return getTy(C1->getType(), Opcode, C1, C2); } + /// ConstantExpr::get* - Return some common constants without having to + /// specify the full Instruction::OPCODE identifier. + /// + static Constant *getNeg(Constant *C); + static Constant *getNot(Constant *C); + static Constant *getAdd(Constant *C1, Constant *C2); + static Constant *getSub(Constant *C1, Constant *C2); + static Constant *getMul(Constant *C1, Constant *C2); + static Constant *getDiv(Constant *C1, Constant *C2); + static Constant *getRem(Constant *C1, Constant *C2); + static Constant *getAnd(Constant *C1, Constant *C2); + static Constant *getOr(Constant *C1, Constant *C2); + static Constant *getXor(Constant *C1, Constant *C2); + static Constant *getSetEQ(Constant *C1, Constant *C2); + static Constant *getSetNE(Constant *C1, Constant *C2); + static Constant *getSetLT(Constant *C1, Constant *C2); + static Constant *getSetGT(Constant *C1, Constant *C2); + static Constant *getSetLE(Constant *C1, Constant *C2); + static Constant *getSetGE(Constant *C1, Constant *C2); + static Constant *getShl(Constant *C1, Constant *C2); + static Constant *getShr(Constant *C1, Constant *C2); + /// Getelementptr form... /// static Constant *getGetElementPtr(Constant *C, diff --git a/lib/VMCore/Constants.cpp b/lib/VMCore/Constants.cpp index fdde9d9e234..21f19b98b11 100644 --- a/lib/VMCore/Constants.cpp +++ b/lib/VMCore/Constants.cpp @@ -309,6 +309,67 @@ ConstantExpr::ConstantExpr(Constant *C, const std::vector &IdxList, Operands.push_back(Use(IdxList[i], this)); } +/// ConstantExpr::get* - Return some common constants without having to +/// specify the full Instruction::OPCODE identifier. +/// +Constant *ConstantExpr::getNeg(Constant *C) { + return get(Instruction::Sub, getNullValue(C->getType()), C); +} +Constant *ConstantExpr::getNot(Constant *C) { + assert(isa(C) && "Cannot NOT a nonintegral type!"); + return get(Instruction::Xor, C, + ConstantIntegral::getAllOnesValue(C->getType())); +} +Constant *ConstantExpr::getAdd(Constant *C1, Constant *C2) { + return get(Instruction::Add, C1, C2); +} +Constant *ConstantExpr::getSub(Constant *C1, Constant *C2) { + return get(Instruction::Sub, C1, C2); +} +Constant *ConstantExpr::getMul(Constant *C1, Constant *C2) { + return get(Instruction::Mul, C1, C2); +} +Constant *ConstantExpr::getDiv(Constant *C1, Constant *C2) { + return get(Instruction::Div, C1, C2); +} +Constant *ConstantExpr::getRem(Constant *C1, Constant *C2) { + return get(Instruction::Rem, C1, C2); +} +Constant *ConstantExpr::getAnd(Constant *C1, Constant *C2) { + return get(Instruction::And, C1, C2); +} +Constant *ConstantExpr::getOr(Constant *C1, Constant *C2) { + return get(Instruction::Or, C1, C2); +} +Constant *ConstantExpr::getXor(Constant *C1, Constant *C2) { + return get(Instruction::Xor, C1, C2); +} +Constant *ConstantExpr::getSetEQ(Constant *C1, Constant *C2) { + return get(Instruction::SetEQ, C1, C2); +} +Constant *ConstantExpr::getSetNE(Constant *C1, Constant *C2) { + return get(Instruction::SetNE, C1, C2); +} +Constant *ConstantExpr::getSetLT(Constant *C1, Constant *C2) { + return get(Instruction::SetLT, C1, C2); +} +Constant *ConstantExpr::getSetGT(Constant *C1, Constant *C2) { + return get(Instruction::SetGT, C1, C2); +} +Constant *ConstantExpr::getSetLE(Constant *C1, Constant *C2) { + return get(Instruction::SetLE, C1, C2); +} +Constant *ConstantExpr::getSetGE(Constant *C1, Constant *C2) { + return get(Instruction::SetGE, C1, C2); +} +Constant *ConstantExpr::getShl(Constant *C1, Constant *C2) { + return get(Instruction::Shl, C1, C2); +} +Constant *ConstantExpr::getShr(Constant *C1, Constant *C2) { + return get(Instruction::Shr, C1, C2); +} + + //===----------------------------------------------------------------------===//