diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2020-07-26 19:36:28 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2020-07-26 19:36:28 +0000 |
commit | cfca06d7963fa0909f90483b42a6d7d194d01e08 (patch) | |
tree | 209fb2a2d68f8f277793fc8df46c753d31bc853b /llvm/include/llvm/IR/ConstantFolder.h | |
parent | 706b4fc47bbc608932d3b491ae19a3b9cde9497b (diff) |
Notes
Diffstat (limited to 'llvm/include/llvm/IR/ConstantFolder.h')
-rw-r--r-- | llvm/include/llvm/IR/ConstantFolder.h | 107 |
1 files changed, 56 insertions, 51 deletions
diff --git a/llvm/include/llvm/IR/ConstantFolder.h b/llvm/include/llvm/IR/ConstantFolder.h index 5a5cabfd0206..da4a18e3c181 100644 --- a/llvm/include/llvm/IR/ConstantFolder.h +++ b/llvm/include/llvm/IR/ConstantFolder.h @@ -20,11 +20,14 @@ #include "llvm/IR/Constants.h" #include "llvm/IR/InstrTypes.h" #include "llvm/IR/Instruction.h" +#include "llvm/IR/IRBuilderFolder.h" namespace llvm { /// ConstantFolder - Create constants with minimum, target independent, folding. -class ConstantFolder { +class ConstantFolder final : public IRBuilderFolder { + virtual void anchor(); + public: explicit ConstantFolder() = default; @@ -33,87 +36,87 @@ public: //===--------------------------------------------------------------------===// Constant *CreateAdd(Constant *LHS, Constant *RHS, - bool HasNUW = false, bool HasNSW = false) const { + bool HasNUW = false, bool HasNSW = false) const override { return ConstantExpr::getAdd(LHS, RHS, HasNUW, HasNSW); } - Constant *CreateFAdd(Constant *LHS, Constant *RHS) const { + Constant *CreateFAdd(Constant *LHS, Constant *RHS) const override { return ConstantExpr::getFAdd(LHS, RHS); } Constant *CreateSub(Constant *LHS, Constant *RHS, - bool HasNUW = false, bool HasNSW = false) const { + bool HasNUW = false, bool HasNSW = false) const override { return ConstantExpr::getSub(LHS, RHS, HasNUW, HasNSW); } - Constant *CreateFSub(Constant *LHS, Constant *RHS) const { + Constant *CreateFSub(Constant *LHS, Constant *RHS) const override { return ConstantExpr::getFSub(LHS, RHS); } Constant *CreateMul(Constant *LHS, Constant *RHS, - bool HasNUW = false, bool HasNSW = false) const { + bool HasNUW = false, bool HasNSW = false) const override { return ConstantExpr::getMul(LHS, RHS, HasNUW, HasNSW); } - Constant *CreateFMul(Constant *LHS, Constant *RHS) const { + Constant *CreateFMul(Constant *LHS, Constant *RHS) const override { return ConstantExpr::getFMul(LHS, RHS); } Constant *CreateUDiv(Constant *LHS, Constant *RHS, - bool isExact = false) const { + bool isExact = false) const override { return ConstantExpr::getUDiv(LHS, RHS, isExact); } Constant *CreateSDiv(Constant *LHS, Constant *RHS, - bool isExact = false) const { + bool isExact = false) const override { return ConstantExpr::getSDiv(LHS, RHS, isExact); } - Constant *CreateFDiv(Constant *LHS, Constant *RHS) const { + Constant *CreateFDiv(Constant *LHS, Constant *RHS) const override { return ConstantExpr::getFDiv(LHS, RHS); } - Constant *CreateURem(Constant *LHS, Constant *RHS) const { + Constant *CreateURem(Constant *LHS, Constant *RHS) const override { return ConstantExpr::getURem(LHS, RHS); } - Constant *CreateSRem(Constant *LHS, Constant *RHS) const { + Constant *CreateSRem(Constant *LHS, Constant *RHS) const override { return ConstantExpr::getSRem(LHS, RHS); } - Constant *CreateFRem(Constant *LHS, Constant *RHS) const { + Constant *CreateFRem(Constant *LHS, Constant *RHS) const override { return ConstantExpr::getFRem(LHS, RHS); } Constant *CreateShl(Constant *LHS, Constant *RHS, - bool HasNUW = false, bool HasNSW = false) const { + bool HasNUW = false, bool HasNSW = false) const override { return ConstantExpr::getShl(LHS, RHS, HasNUW, HasNSW); } Constant *CreateLShr(Constant *LHS, Constant *RHS, - bool isExact = false) const { + bool isExact = false) const override { return ConstantExpr::getLShr(LHS, RHS, isExact); } Constant *CreateAShr(Constant *LHS, Constant *RHS, - bool isExact = false) const { + bool isExact = false) const override { return ConstantExpr::getAShr(LHS, RHS, isExact); } - Constant *CreateAnd(Constant *LHS, Constant *RHS) const { + Constant *CreateAnd(Constant *LHS, Constant *RHS) const override { return ConstantExpr::getAnd(LHS, RHS); } - Constant *CreateOr(Constant *LHS, Constant *RHS) const { + Constant *CreateOr(Constant *LHS, Constant *RHS) const override { return ConstantExpr::getOr(LHS, RHS); } - Constant *CreateXor(Constant *LHS, Constant *RHS) const { + Constant *CreateXor(Constant *LHS, Constant *RHS) const override { return ConstantExpr::getXor(LHS, RHS); } Constant *CreateBinOp(Instruction::BinaryOps Opc, - Constant *LHS, Constant *RHS) const { + Constant *LHS, Constant *RHS) const override { return ConstantExpr::get(Opc, LHS, RHS); } @@ -122,19 +125,19 @@ public: //===--------------------------------------------------------------------===// Constant *CreateNeg(Constant *C, - bool HasNUW = false, bool HasNSW = false) const { + bool HasNUW = false, bool HasNSW = false) const override { return ConstantExpr::getNeg(C, HasNUW, HasNSW); } - Constant *CreateFNeg(Constant *C) const { + Constant *CreateFNeg(Constant *C) const override { return ConstantExpr::getFNeg(C); } - Constant *CreateNot(Constant *C) const { + Constant *CreateNot(Constant *C) const override { return ConstantExpr::getNot(C); } - Constant *CreateUnOp(Instruction::UnaryOps Opc, Constant *C) const { + Constant *CreateUnOp(Instruction::UnaryOps Opc, Constant *C) const override { return ConstantExpr::get(Opc, C); } @@ -143,11 +146,12 @@ public: //===--------------------------------------------------------------------===// Constant *CreateGetElementPtr(Type *Ty, Constant *C, - ArrayRef<Constant *> IdxList) const { + ArrayRef<Constant *> IdxList) const override { return ConstantExpr::getGetElementPtr(Ty, C, IdxList); } - Constant *CreateGetElementPtr(Type *Ty, Constant *C, Constant *Idx) const { + Constant *CreateGetElementPtr(Type *Ty, Constant *C, + Constant *Idx) const override { // This form of the function only exists to avoid ambiguous overload // warnings about whether to convert Idx to ArrayRef<Constant *> or // ArrayRef<Value *>. @@ -155,25 +159,25 @@ public: } Constant *CreateGetElementPtr(Type *Ty, Constant *C, - ArrayRef<Value *> IdxList) const { + ArrayRef<Value *> IdxList) const override { return ConstantExpr::getGetElementPtr(Ty, C, IdxList); } - Constant *CreateInBoundsGetElementPtr(Type *Ty, Constant *C, - ArrayRef<Constant *> IdxList) const { + Constant *CreateInBoundsGetElementPtr( + Type *Ty, Constant *C, ArrayRef<Constant *> IdxList) const override { return ConstantExpr::getInBoundsGetElementPtr(Ty, C, IdxList); } Constant *CreateInBoundsGetElementPtr(Type *Ty, Constant *C, - Constant *Idx) const { + Constant *Idx) const override { // This form of the function only exists to avoid ambiguous overload // warnings about whether to convert Idx to ArrayRef<Constant *> or // ArrayRef<Value *>. return ConstantExpr::getInBoundsGetElementPtr(Ty, C, Idx); } - Constant *CreateInBoundsGetElementPtr(Type *Ty, Constant *C, - ArrayRef<Value *> IdxList) const { + Constant *CreateInBoundsGetElementPtr( + Type *Ty, Constant *C, ArrayRef<Value *> IdxList) const override { return ConstantExpr::getInBoundsGetElementPtr(Ty, C, IdxList); } @@ -182,49 +186,49 @@ public: //===--------------------------------------------------------------------===// Constant *CreateCast(Instruction::CastOps Op, Constant *C, - Type *DestTy) const { + Type *DestTy) const override { return ConstantExpr::getCast(Op, C, DestTy); } - Constant *CreatePointerCast(Constant *C, Type *DestTy) const { + Constant *CreatePointerCast(Constant *C, Type *DestTy) const override { return ConstantExpr::getPointerCast(C, DestTy); } Constant *CreatePointerBitCastOrAddrSpaceCast(Constant *C, - Type *DestTy) const { + Type *DestTy) const override { return ConstantExpr::getPointerBitCastOrAddrSpaceCast(C, DestTy); } Constant *CreateIntCast(Constant *C, Type *DestTy, - bool isSigned) const { + bool isSigned) const override { return ConstantExpr::getIntegerCast(C, DestTy, isSigned); } - Constant *CreateFPCast(Constant *C, Type *DestTy) const { + Constant *CreateFPCast(Constant *C, Type *DestTy) const override { return ConstantExpr::getFPCast(C, DestTy); } - Constant *CreateBitCast(Constant *C, Type *DestTy) const { + Constant *CreateBitCast(Constant *C, Type *DestTy) const override { return CreateCast(Instruction::BitCast, C, DestTy); } - Constant *CreateIntToPtr(Constant *C, Type *DestTy) const { + Constant *CreateIntToPtr(Constant *C, Type *DestTy) const override { return CreateCast(Instruction::IntToPtr, C, DestTy); } - Constant *CreatePtrToInt(Constant *C, Type *DestTy) const { + Constant *CreatePtrToInt(Constant *C, Type *DestTy) const override { return CreateCast(Instruction::PtrToInt, C, DestTy); } - Constant *CreateZExtOrBitCast(Constant *C, Type *DestTy) const { + Constant *CreateZExtOrBitCast(Constant *C, Type *DestTy) const override { return ConstantExpr::getZExtOrBitCast(C, DestTy); } - Constant *CreateSExtOrBitCast(Constant *C, Type *DestTy) const { + Constant *CreateSExtOrBitCast(Constant *C, Type *DestTy) const override { return ConstantExpr::getSExtOrBitCast(C, DestTy); } - Constant *CreateTruncOrBitCast(Constant *C, Type *DestTy) const { + Constant *CreateTruncOrBitCast(Constant *C, Type *DestTy) const override { return ConstantExpr::getTruncOrBitCast(C, DestTy); } @@ -233,12 +237,12 @@ public: //===--------------------------------------------------------------------===// Constant *CreateICmp(CmpInst::Predicate P, Constant *LHS, - Constant *RHS) const { + Constant *RHS) const override { return ConstantExpr::getCompare(P, LHS, RHS); } Constant *CreateFCmp(CmpInst::Predicate P, Constant *LHS, - Constant *RHS) const { + Constant *RHS) const override { return ConstantExpr::getCompare(P, LHS, RHS); } @@ -246,31 +250,32 @@ public: // Other Instructions //===--------------------------------------------------------------------===// - Constant *CreateSelect(Constant *C, Constant *True, Constant *False) const { + Constant *CreateSelect(Constant *C, Constant *True, + Constant *False) const override { return ConstantExpr::getSelect(C, True, False); } - Constant *CreateExtractElement(Constant *Vec, Constant *Idx) const { + Constant *CreateExtractElement(Constant *Vec, Constant *Idx) const override { return ConstantExpr::getExtractElement(Vec, Idx); } Constant *CreateInsertElement(Constant *Vec, Constant *NewElt, - Constant *Idx) const { + Constant *Idx) const override { return ConstantExpr::getInsertElement(Vec, NewElt, Idx); } Constant *CreateShuffleVector(Constant *V1, Constant *V2, - Constant *Mask) const { + ArrayRef<int> Mask) const override { return ConstantExpr::getShuffleVector(V1, V2, Mask); } Constant *CreateExtractValue(Constant *Agg, - ArrayRef<unsigned> IdxList) const { + ArrayRef<unsigned> IdxList) const override { return ConstantExpr::getExtractValue(Agg, IdxList); } Constant *CreateInsertValue(Constant *Agg, Constant *Val, - ArrayRef<unsigned> IdxList) const { + ArrayRef<unsigned> IdxList) const override { return ConstantExpr::getInsertValue(Agg, Val, IdxList); } }; |