- static Constant *getTrunc (Constant *C, const Type *Ty, bool locked = true);
- static Constant *getSExt (Constant *C, const Type *Ty, bool locked = true);
- static Constant *getZExt (Constant *C, const Type *Ty, bool locked = true);
- static Constant *getFPTrunc (Constant *C, const Type *Ty, bool locked = true);
- static Constant *getFPExtend(Constant *C, const Type *Ty, bool locked = true);
- static Constant *getUIToFP (Constant *C, const Type *Ty, bool locked = true);
- static Constant *getSIToFP (Constant *C, const Type *Ty, bool locked = true);
- static Constant *getFPToUI (Constant *C, const Type *Ty, bool locked = true);
- static Constant *getFPToSI (Constant *C, const Type *Ty, bool locked = true);
- static Constant *getPtrToInt(Constant *C, const Type *Ty, bool locked = true);
- static Constant *getIntToPtr(Constant *C, const Type *Ty, bool locked = true);
- static Constant *getBitCast (Constant *C, const Type *Ty, bool locked = true);
+ static Constant *getOffsetOf(const StructType* STy, unsigned FieldNo);
+
+ /// getOffsetOf constant expr - This is a generalized form of getOffsetOf,
+ /// which supports any aggregate type, and any Constant index.
+ ///
+ static Constant *getOffsetOf(const Type* Ty, Constant *FieldNo);
+
+ static Constant *getNeg(Constant *C);
+ static Constant *getFNeg(Constant *C);
+ static Constant *getNot(Constant *C);
+ static Constant *getAdd(Constant *C1, Constant *C2);
+ static Constant *getFAdd(Constant *C1, Constant *C2);
+ static Constant *getSub(Constant *C1, Constant *C2);
+ static Constant *getFSub(Constant *C1, Constant *C2);
+ static Constant *getMul(Constant *C1, Constant *C2);
+ static Constant *getFMul(Constant *C1, Constant *C2);
+ static Constant *getUDiv(Constant *C1, Constant *C2);
+ static Constant *getSDiv(Constant *C1, Constant *C2);
+ static Constant *getFDiv(Constant *C1, Constant *C2);
+ static Constant *getURem(Constant *C1, Constant *C2);
+ static Constant *getSRem(Constant *C1, Constant *C2);
+ static Constant *getFRem(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 *getShl(Constant *C1, Constant *C2);
+ static Constant *getLShr(Constant *C1, Constant *C2);
+ static Constant *getAShr(Constant *C1, Constant *C2);
+ static Constant *getTrunc (Constant *C, const Type *Ty);
+ static Constant *getSExt (Constant *C, const Type *Ty);
+ static Constant *getZExt (Constant *C, const Type *Ty);
+ static Constant *getFPTrunc (Constant *C, const Type *Ty);
+ static Constant *getFPExtend(Constant *C, const Type *Ty);
+ static Constant *getUIToFP (Constant *C, const Type *Ty);
+ static Constant *getSIToFP (Constant *C, const Type *Ty);
+ static Constant *getFPToUI (Constant *C, const Type *Ty);
+ static Constant *getFPToSI (Constant *C, const Type *Ty);
+ static Constant *getPtrToInt(Constant *C, const Type *Ty);
+ static Constant *getIntToPtr(Constant *C, const Type *Ty);
+ static Constant *getBitCast (Constant *C, const Type *Ty);
+
+ static Constant *getNSWNeg(Constant *C);
+ static Constant *getNUWNeg(Constant *C);
+ static Constant *getNSWAdd(Constant *C1, Constant *C2);
+ static Constant *getNUWAdd(Constant *C1, Constant *C2);
+ static Constant *getNSWSub(Constant *C1, Constant *C2);
+ static Constant *getNUWSub(Constant *C1, Constant *C2);
+ static Constant *getNSWMul(Constant *C1, Constant *C2);
+ static Constant *getNUWMul(Constant *C1, Constant *C2);
+ static Constant *getExactSDiv(Constant *C1, Constant *C2);