aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/Support/IRBuilder.h
diff options
context:
space:
mode:
authorErick Tryzelaar <idadesub@users.sourceforge.net>2009-08-16 02:19:46 +0000
committerErick Tryzelaar <idadesub@users.sourceforge.net>2009-08-16 02:19:46 +0000
commit76d4275e253b758a944c0416b982505e96c0fd81 (patch)
treec161de6014d08ee2fff03286052af25493d5f7fc /include/llvm/Support/IRBuilder.h
parent4e3d397c057e265fbd055301010139a0da8ed621 (diff)
downloadexternal_llvm-76d4275e253b758a944c0416b982505e96c0fd81.zip
external_llvm-76d4275e253b758a944c0416b982505e96c0fd81.tar.gz
external_llvm-76d4275e253b758a944c0416b982505e96c0fd81.tar.bz2
Add more casts to the IRBuilder.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79158 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Support/IRBuilder.h')
-rw-r--r--include/llvm/Support/IRBuilder.h40
1 files changed, 39 insertions, 1 deletions
diff --git a/include/llvm/Support/IRBuilder.h b/include/llvm/Support/IRBuilder.h
index 9979b8d..153c58a 100644
--- a/include/llvm/Support/IRBuilder.h
+++ b/include/llvm/Support/IRBuilder.h
@@ -598,7 +598,30 @@ public:
const char *Name = "") {
return CreateCast(Instruction::BitCast, V, DestTy, Name);
}
-
+ Value *CreateZExtOrBitCast(Value *V, const Type *DestTy,
+ const char *Name = "") {
+ if (V->getType() == DestTy)
+ return V;
+ if (Constant *VC = dyn_cast<Constant>(V))
+ return Folder.CreateZExtOrBitCast(VC, DestTy);
+ return Insert(CastInst::CreateZExtOrBitCast(V, DestTy), Name);
+ }
+ Value *CreateSExtOrBitCast(Value *V, const Type *DestTy,
+ const char *Name = "") {
+ if (V->getType() == DestTy)
+ return V;
+ if (Constant *VC = dyn_cast<Constant>(V))
+ return Folder.CreateSExtOrBitCast(VC, DestTy);
+ return Insert(CastInst::CreateSExtOrBitCast(V, DestTy), Name);
+ }
+ Value *CreateTruncOrBitCast(Value *V, const Type *DestTy,
+ const char *Name = "") {
+ if (V->getType() == DestTy)
+ return V;
+ if (Constant *VC = dyn_cast<Constant>(V))
+ return Folder.CreateTruncOrBitCast(VC, DestTy);
+ return Insert(CastInst::CreateTruncOrBitCast(V, DestTy), Name);
+ }
Value *CreateCast(Instruction::CastOps Op, Value *V, const Type *DestTy,
const char *Name = "") {
if (V->getType() == DestTy)
@@ -607,6 +630,14 @@ public:
return Folder.CreateCast(Op, VC, DestTy);
return Insert(CastInst::Create(Op, V, DestTy), Name);
}
+ Value *CreatePointerCast(Value *V, const Type *DestTy,
+ const char *Name = "") {
+ if (V->getType() == DestTy)
+ return V;
+ if (Constant *VC = dyn_cast<Constant>(V))
+ return Folder.CreatePointerCast(VC, DestTy);
+ return Insert(CastInst::CreatePointerCast(V, DestTy), Name);
+ }
Value *CreateIntCast(Value *V, const Type *DestTy, bool isSigned,
const char *Name = "") {
if (V->getType() == DestTy)
@@ -615,6 +646,13 @@ public:
return Folder.CreateIntCast(VC, DestTy, isSigned);
return Insert(CastInst::CreateIntegerCast(V, DestTy, isSigned), Name);
}
+ Value *CreateFPCast(Value *V, const Type *DestTy, const char *Name = "") {
+ if (V->getType() == DestTy)
+ return V;
+ if (Constant *VC = dyn_cast<Constant>(V))
+ return Folder.CreateFPCast(VC, DestTy);
+ return Insert(CastInst::CreateFPCast(V, DestTy), Name);
+ }
//===--------------------------------------------------------------------===//
// Instruction creation methods: Compare Instructions