diff --git a/llvm/include/llvm/Constants.h b/llvm/include/llvm/Constants.h index 6a02c5df215b..1d4892f118e9 100644 --- a/llvm/include/llvm/Constants.h +++ b/llvm/include/llvm/Constants.h @@ -518,6 +518,8 @@ protected: ConstantExpr(unsigned Opcode, Constant *C, const Type *Ty); // Binary/Shift instruction creation ctor ConstantExpr(unsigned Opcode, Constant *C1, Constant *C2); + // Select instruction creation ctor + ConstantExpr(Constant *C, Constant *V1, Constant *V2); // GEP instruction creation ctor ConstantExpr(Constant *C, const std::vector &IdxList, const Type *DestTy); @@ -528,6 +530,8 @@ protected: Constant *C1, Constant *C2); static Constant *getShiftTy(const Type *Ty, unsigned Opcode, Constant *C1, Constant *C2); + static Constant *getSelectTy(const Type *Ty, + Constant *C1, Constant *C2, Constant *C3); static Constant *getGetElementPtrTy(const Type *Ty, Constant *C, const std::vector &IdxList); @@ -541,6 +545,13 @@ public: /// static Constant *getCast(Constant *C, const Type *Ty); + /// Select constant expr + /// + static Constant *getSelect(Constant *C, Constant *V1, Constant *V2) { + return getSelectTy(V1->getType(), C, V1, V2); + } + + /// ConstantExpr::get - Return a binary or shift operator constant expression, /// folding if possible. ///