LLVM API Documentation
Base class of casting instructions. More...
#include <InstrTypes.h>


Public Member Functions | |
| bool | isIntegerCast () const |
| Determine if this is an integer-only cast. | |
| bool | isLosslessCast () const |
| Determine if this is a lossless cast. | |
| bool | isNoopCast (Type *IntPtrTy) const |
| Determine if this cast is a no-op cast. | |
| Instruction::CastOps | getOpcode () const |
| Return the opcode of this CastInst. | |
| Type * | getSrcTy () const |
| Return the source type, as a convenience. | |
| Type * | getDestTy () const |
| Return the destination type, as a convenience. | |
Static Public Member Functions | |
| static CastInst * | Create (Instruction::CastOps, Value *S, Type *Ty, const Twine &Name="", Instruction *InsertBefore=0) |
| Construct any of the CastInst subclasses. | |
| static CastInst * | Create (Instruction::CastOps, Value *S, Type *Ty, const Twine &Name, BasicBlock *InsertAtEnd) |
| Construct any of the CastInst subclasses. | |
| static CastInst * | CreateZExtOrBitCast (Value *S, Type *Ty, const Twine &Name="", Instruction *InsertBefore=0) |
| Create a ZExt or BitCast cast instruction. | |
| static CastInst * | CreateZExtOrBitCast (Value *S, Type *Ty, const Twine &Name, BasicBlock *InsertAtEnd) |
| Create a ZExt or BitCast cast instruction. | |
| static CastInst * | CreateSExtOrBitCast (Value *S, Type *Ty, const Twine &Name="", Instruction *InsertBefore=0) |
| Create a SExt or BitCast cast instruction. | |
| static CastInst * | CreateSExtOrBitCast (Value *S, Type *Ty, const Twine &Name, BasicBlock *InsertAtEnd) |
| Create a SExt or BitCast cast instruction. | |
| static CastInst * | CreatePointerCast (Value *S, Type *Ty, const Twine &Name, BasicBlock *InsertAtEnd) |
| Create a BitCast or a PtrToInt cast instruction. | |
| static CastInst * | CreatePointerCast (Value *S, Type *Ty, const Twine &Name="", Instruction *InsertBefore=0) |
| Create a BitCast or a PtrToInt cast instruction. | |
| static CastInst * | CreateIntegerCast (Value *S, Type *Ty, bool isSigned, const Twine &Name="", Instruction *InsertBefore=0) |
| Create a ZExt, BitCast, or Trunc for int -> int casts. | |
| static CastInst * | CreateIntegerCast (Value *S, Type *Ty, bool isSigned, const Twine &Name, BasicBlock *InsertAtEnd) |
| Create a ZExt, BitCast, or Trunc for int -> int casts. | |
| static CastInst * | CreateFPCast (Value *S, Type *Ty, const Twine &Name="", Instruction *InsertBefore=0) |
| Create an FPExt, BitCast, or FPTrunc for fp -> fp casts. | |
| static CastInst * | CreateFPCast (Value *S, Type *Ty, const Twine &Name, BasicBlock *InsertAtEnd) |
| Create an FPExt, BitCast, or FPTrunc for fp -> fp casts. | |
| static CastInst * | CreateTruncOrBitCast (Value *S, Type *Ty, const Twine &Name="", Instruction *InsertBefore=0) |
| Create a Trunc or BitCast cast instruction. | |
| static CastInst * | CreateTruncOrBitCast (Value *S, Type *Ty, const Twine &Name, BasicBlock *InsertAtEnd) |
| Create a Trunc or BitCast cast instruction. | |
| static bool | isCastable (Type *SrcTy, Type *DestTy) |
| Check whether it is valid to call getCastOpcode for these types. | |
| static Instruction::CastOps | getCastOpcode (const Value *Val, bool SrcIsSigned, Type *Ty, bool DstIsSigned) |
| Infer the opcode for cast operand and type. | |
| static bool | isNoopCast (Instruction::CastOps Opcode, Type *SrcTy, Type *DstTy, Type *IntPtrTy) |
| Determine if the described cast is a no-op cast. | |
| static unsigned | isEliminableCastPair (Instruction::CastOps firstOpcode, Instruction::CastOps secondOpcode, Type *SrcTy, Type *MidTy, Type *DstTy, Type *SrcIntPtrTy, Type *MidIntPtrTy, Type *DstIntPtrTy) |
| Determine if a cast pair is eliminable. | |
| static bool | castIsValid (Instruction::CastOps op, Value *S, Type *DstTy) |
| Determine if a cast is valid without creating one. | |
| static bool | classof (const Instruction *I) |
| Methods for support type inquiry through isa, cast, and dyn_cast: | |
| static bool | classof (const Value *V) |
| Methods for support type inquiry through isa, cast, and dyn_cast: | |
Protected Member Functions | |
| CastInst (Type *Ty, unsigned iType, Value *S, const Twine &NameStr="", Instruction *InsertBefore=0) | |
| Constructor with insert-before-instruction semantics for subclasses. | |
| CastInst (Type *Ty, unsigned iType, Value *S, const Twine &NameStr, BasicBlock *InsertAtEnd) | |
| Constructor with insert-at-end-of-block semantics for subclasses. | |
Base class of casting instructions.
CastInst - This is the base class for all instructions that perform data casts. It is simply provided so that instruction category testing can be performed with code like:
if (isa<CastInst>(Instr)) { ... }
Definition at line 387 of file InstrTypes.h.
| llvm::CastInst::CastInst | ( | Type * | Ty, |
| unsigned | iType, | ||
| Value * | S, | ||
| const Twine & | NameStr = "", |
||
| Instruction * | InsertBefore = 0 |
||
| ) | [inline, protected] |
Constructor with insert-before-instruction semantics for subclasses.
Definition at line 391 of file InstrTypes.h.
| llvm::CastInst::CastInst | ( | Type * | Ty, |
| unsigned | iType, | ||
| Value * | S, | ||
| const Twine & | NameStr, | ||
| BasicBlock * | InsertAtEnd | ||
| ) | [inline, protected] |
Constructor with insert-at-end-of-block semantics for subclasses.
Definition at line 397 of file InstrTypes.h.
| bool CastInst::castIsValid | ( | Instruction::CastOps | op, |
| Value * | S, | ||
| Type * | DstTy | ||
| ) | [static] |
Determine if a cast is valid without creating one.
This method can be used to determine if a cast from S to DstTy using Opcode op is valid or not.
Check that the construction parameters for a CastInst are correct. This could be broken out into the separate constructors but it is useful to have it in one place and to eliminate the redundant code for getting the sizes of the types involved.
Definition at line 2628 of file Instructions.cpp.
References llvm::FPExt, llvm::FPToSI, llvm::Type::getPrimitiveSizeInBits(), llvm::Type::getScalarSizeInBits(), llvm::Type::getScalarType(), llvm::Value::getType(), llvm::IntToPtr, llvm::Type::isAggregateType(), llvm::Type::isFirstClassType(), llvm::Type::isFPOrFPVectorTy(), llvm::Type::isIntegerTy(), llvm::Type::isIntOrIntVectorTy(), llvm::Type::isPointerTy(), llvm::Type::isVectorTy(), llvm::SExt, llvm::SIToFP, and llvm::Trunc.
Referenced by llvm::BitCastInst::BitCastInst(), Create(), llvm::FPExtInst::FPExtInst(), llvm::FPToSIInst::FPToSIInst(), llvm::FPToUIInst::FPToUIInst(), llvm::FPTruncInst::FPTruncInst(), llvm::ConstantExpr::getBitCast(), llvm::ConstantExpr::getCast(), llvm::IntToPtrInst::IntToPtrInst(), llvm::PtrToIntInst::PtrToIntInst(), llvm::SExtInst::SExtInst(), llvm::SIToFPInst::SIToFPInst(), llvm::TruncInst::TruncInst(), llvm::UIToFPInst::UIToFPInst(), and llvm::ZExtInst::ZExtInst().
| static bool llvm::CastInst::classof | ( | const Instruction * | I | ) | [inline, static] |
Methods for support type inquiry through isa, cast, and dyn_cast:
Reimplemented from llvm::UnaryInstruction.
Reimplemented in llvm::BitCastInst, llvm::PtrToIntInst, llvm::IntToPtrInst, llvm::FPToSIInst, llvm::FPToUIInst, llvm::SIToFPInst, llvm::UIToFPInst, llvm::FPExtInst, llvm::FPTruncInst, llvm::SExtInst, llvm::ZExtInst, and llvm::TruncInst.
Definition at line 613 of file InstrTypes.h.
References llvm::Instruction::isCast().
Methods for support type inquiry through isa, cast, and dyn_cast:
Reimplemented from llvm::UnaryInstruction.
Reimplemented in llvm::BitCastInst, llvm::PtrToIntInst, llvm::IntToPtrInst, llvm::FPToSIInst, llvm::FPToUIInst, llvm::SIToFPInst, llvm::UIToFPInst, llvm::FPExtInst, llvm::FPTruncInst, llvm::SExtInst, llvm::ZExtInst, and llvm::TruncInst.
Definition at line 616 of file InstrTypes.h.
| CastInst * CastInst::Create | ( | Instruction::CastOps | op, |
| Value * | S, | ||
| Type * | Ty, | ||
| const Twine & | Name = "", |
||
| Instruction * | InsertBefore = 0 |
||
| ) | [static] |
Construct any of the CastInst subclasses.
Provides a way to construct any of the CastInst subclasses using an opcode instead of the subclass's constructor. The opcode must be in the CastOps category (Instruction::isCast(opcode) returns true). This constructor has insert-before-instruction semantics to automatically insert the new CastInst before InsertBefore (if it is non-null).
| op | The opcode of the cast instruction |
| S | The value to be casted (operand 0) |
| Ty | The type to which cast should be made |
| Name | Name for the instruction |
| InsertBefore | Place to insert the instruction |
Definition at line 2288 of file Instructions.cpp.
References castIsValid(), llvm::FPExt, llvm::FPToSI, llvm::IntToPtr, llvm_unreachable, llvm::SExt, llvm::SIToFP, and llvm::Trunc.
Referenced by llvm::InstCombiner::commonCastTransforms(), llvm::NoFolder::CreateCast(), llvm::IRBuilder< true, TargetFolder >::CreateCast(), CreateFPCast(), CreateIntegerCast(), CreatePointerCast(), CreateSExtOrBitCast(), CreateTruncOrBitCast(), CreateZExtOrBitCast(), llvm::InstCombiner::FoldSelectOpOp(), llvm::ConstantExpr::getAsInstruction(), OptimizeNoopCopyExpression(), llvm::InstCombiner::visitAnd(), llvm::InstCombiner::visitBitCast(), llvm::InstCombiner::visitCallInst(), llvm::InstCombiner::visitExtractElementInst(), llvm::InstCombiner::visitOr(), and llvm::InstCombiner::visitXor().
| CastInst * CastInst::Create | ( | Instruction::CastOps | op, |
| Value * | S, | ||
| Type * | Ty, | ||
| const Twine & | Name, | ||
| BasicBlock * | InsertAtEnd | ||
| ) | [static] |
Construct any of the CastInst subclasses.
Provides a way to construct any of the CastInst subclasses using an opcode instead of the subclass's constructor. The opcode must be in the CastOps category. This constructor has insert-at-end-of-block semantics to automatically insert the new CastInst at the end of InsertAtEnd (if its non-null).
| op | The opcode for the cast instruction |
| S | The value to be casted (operand 0) |
| Ty | The type to which operand is casted |
| Name | The name for the instruction |
| InsertAtEnd | The block to insert the instruction into |
Definition at line 2309 of file Instructions.cpp.
References castIsValid(), llvm::FPExt, llvm::FPToSI, llvm::IntToPtr, llvm_unreachable, llvm::SExt, llvm::SIToFP, and llvm::Trunc.
| CastInst * CastInst::CreateFPCast | ( | Value * | S, |
| Type * | Ty, | ||
| const Twine & | Name = "", |
||
| Instruction * | InsertBefore = 0 |
||
| ) | [static] |
Create an FPExt, BitCast, or FPTrunc for fp -> fp casts.
| S | The floating point value to be casted |
| Ty | The floating point type to cast to |
| Name | Name for the instruction |
| InsertBefore | Place to insert the instruction |
Definition at line 2431 of file Instructions.cpp.
References Create(), llvm::FPExt, llvm::Type::getScalarSizeInBits(), llvm::Value::getType(), and llvm::Type::isFPOrFPVectorTy().
Referenced by llvm::IRBuilder< true, TargetFolder >::CreateFPCast().
| CastInst * CastInst::CreateFPCast | ( | Value * | S, |
| Type * | Ty, | ||
| const Twine & | Name, | ||
| BasicBlock * | InsertAtEnd | ||
| ) | [static] |
Create an FPExt, BitCast, or FPTrunc for fp -> fp casts.
| S | The floating point value to be casted |
| Ty | The floating point type to cast to |
| Name | The name for the instruction |
| InsertAtEnd | The block to insert the instruction into |
Definition at line 2444 of file Instructions.cpp.
References Create(), llvm::FPExt, llvm::Type::getScalarSizeInBits(), llvm::Value::getType(), and llvm::Type::isFPOrFPVectorTy().
| CastInst * CastInst::CreateIntegerCast | ( | Value * | S, |
| Type * | Ty, | ||
| bool | isSigned, | ||
| const Twine & | Name = "", |
||
| Instruction * | InsertBefore = 0 |
||
| ) | [static] |
Create a ZExt, BitCast, or Trunc for int -> int casts.
| S | The pointer value to be casted (operand 0) |
| Ty | The type to which cast should be made |
| isSigned | Whether to regard S as signed or not |
| Name | Name for the instruction |
| InsertBefore | Place to insert the instruction |
Definition at line 2403 of file Instructions.cpp.
References Create(), llvm::Type::getScalarSizeInBits(), llvm::Value::getType(), llvm::Type::isIntOrIntVectorTy(), llvm::SExt, and llvm::Trunc.
Referenced by llvm::NoFolder::CreateIntCast(), llvm::IRBuilder< true, TargetFolder >::CreateIntCast(), createMalloc(), llvm::InstCombiner::visitPtrToInt(), and llvm::InstCombiner::visitTrunc().
| CastInst * CastInst::CreateIntegerCast | ( | Value * | S, |
| Type * | Ty, | ||
| bool | isSigned, | ||
| const Twine & | Name, | ||
| BasicBlock * | InsertAtEnd | ||
| ) | [static] |
Create a ZExt, BitCast, or Trunc for int -> int casts.
| S | The integer value to be casted (operand 0) |
| Ty | The integer type to which operand is casted |
| isSigned | Whether to regard S as signed or not |
| Name | The name for the instruction |
| InsertAtEnd | The block to insert the instruction into |
Definition at line 2417 of file Instructions.cpp.
References Create(), llvm::Type::getScalarSizeInBits(), llvm::Value::getType(), llvm::Type::isIntOrIntVectorTy(), llvm::SExt, and llvm::Trunc.
| CastInst * CastInst::CreatePointerCast | ( | Value * | S, |
| Type * | Ty, | ||
| const Twine & | Name, | ||
| BasicBlock * | InsertAtEnd | ||
| ) | [static] |
Create a BitCast or a PtrToInt cast instruction.
| S | The pointer value to be casted (operand 0) |
| Ty | The type to which operand is casted |
| Name | The name for the instruction |
| InsertAtEnd | The block to insert the instruction into |
Definition at line 2378 of file Instructions.cpp.
References Create(), llvm::Value::getType(), llvm::Type::isIntegerTy(), and llvm::Type::isPointerTy().
Referenced by llvm::IRBuilder< true, TargetFolder >::CreatePointerCast().
| CastInst * CastInst::CreatePointerCast | ( | Value * | S, |
| Type * | Ty, | ||
| const Twine & | Name = "", |
||
| Instruction * | InsertBefore = 0 |
||
| ) | [static] |
Create a BitCast or a PtrToInt cast instruction.
| S | The pointer value to be casted (operand 0) |
| Ty | The type to which cast should be made |
| Name | Name for the instruction |
| InsertBefore | Place to insert the instruction |
Definition at line 2391 of file Instructions.cpp.
References Create(), llvm::Value::getType(), llvm::Type::isIntOrIntVectorTy(), and llvm::Type::isPtrOrPtrVectorTy().
| CastInst * CastInst::CreateSExtOrBitCast | ( | Value * | S, |
| Type * | Ty, | ||
| const Twine & | Name = "", |
||
| Instruction * | InsertBefore = 0 |
||
| ) | [static] |
Create a SExt or BitCast cast instruction.
| S | The value to be casted (operand 0) |
| Ty | The type to which cast should be made |
| Name | Name for the instruction |
| InsertBefore | Place to insert the instruction |
Definition at line 2346 of file Instructions.cpp.
References Create(), llvm::Type::getScalarSizeInBits(), llvm::Value::getType(), and llvm::SExt.
Referenced by llvm::IRBuilder< true, TargetFolder >::CreateSExtOrBitCast(), llvm::InstCombiner::visitCallInst(), and llvm::InstCombiner::visitSub().
| CastInst * CastInst::CreateSExtOrBitCast | ( | Value * | S, |
| Type * | Ty, | ||
| const Twine & | Name, | ||
| BasicBlock * | InsertAtEnd | ||
| ) | [static] |
Create a SExt or BitCast cast instruction.
| S | The value to be casted (operand 0) |
| Ty | The type to which operand is casted |
| Name | The name for the instruction |
| InsertAtEnd | The block to insert the instruction into |
Definition at line 2354 of file Instructions.cpp.
References Create(), llvm::Type::getScalarSizeInBits(), llvm::Value::getType(), and llvm::SExt.
| CastInst * CastInst::CreateTruncOrBitCast | ( | Value * | S, |
| Type * | Ty, | ||
| const Twine & | Name = "", |
||
| Instruction * | InsertBefore = 0 |
||
| ) | [static] |
Create a Trunc or BitCast cast instruction.
| S | The value to be casted (operand 0) |
| Ty | The type to which cast should be made |
| Name | Name for the instruction |
| InsertBefore | Place to insert the instruction |
Definition at line 2362 of file Instructions.cpp.
References Create(), llvm::Type::getScalarSizeInBits(), llvm::Value::getType(), and llvm::Trunc.
Referenced by llvm::IRBuilder< true, TargetFolder >::CreateTruncOrBitCast().
| CastInst * CastInst::CreateTruncOrBitCast | ( | Value * | S, |
| Type * | Ty, | ||
| const Twine & | Name, | ||
| BasicBlock * | InsertAtEnd | ||
| ) | [static] |
Create a Trunc or BitCast cast instruction.
| S | The value to be casted (operand 0) |
| Ty | The type to which operand is casted |
| Name | The name for the instruction |
| InsertAtEnd | The block to insert the instruction into |
Definition at line 2370 of file Instructions.cpp.
References Create(), llvm::Type::getScalarSizeInBits(), llvm::Value::getType(), and llvm::Trunc.
| CastInst * CastInst::CreateZExtOrBitCast | ( | Value * | S, |
| Type * | Ty, | ||
| const Twine & | Name = "", |
||
| Instruction * | InsertBefore = 0 |
||
| ) | [static] |
Create a ZExt or BitCast cast instruction.
| S | The value to be casted (operand 0) |
| Ty | The type to which cast should be made |
| Name | Name for the instruction |
| InsertBefore | Place to insert the instruction |
Definition at line 2330 of file Instructions.cpp.
References Create(), llvm::Type::getScalarSizeInBits(), and llvm::Value::getType().
Referenced by llvm::IRBuilder< true, TargetFolder >::CreateZExtOrBitCast(), llvm::InstCombiner::visitCallInst(), and llvm::InstCombiner::visitSub().
| CastInst * CastInst::CreateZExtOrBitCast | ( | Value * | S, |
| Type * | Ty, | ||
| const Twine & | Name, | ||
| BasicBlock * | InsertAtEnd | ||
| ) | [static] |
Create a ZExt or BitCast cast instruction.
| S | The value to be casted (operand 0) |
| Ty | The type to which operand is casted |
| Name | The name for the instruction |
| InsertAtEnd | The block to insert the instruction into |
Definition at line 2338 of file Instructions.cpp.
References Create(), llvm::Type::getScalarSizeInBits(), and llvm::Value::getType().
| Instruction::CastOps CastInst::getCastOpcode | ( | const Value * | Val, |
| bool | SrcIsSigned, | ||
| Type * | Ty, | ||
| bool | DstIsSigned | ||
| ) | [static] |
Infer the opcode for cast operand and type.
Returns the opcode necessary to cast Val into Ty using usual casting rules.
| Val | The value to cast |
| SrcIsSigned | Whether to treat the source as signed |
| Ty | The Type to which the value should be casted |
| DstIsSigned | Whether to treate the dest. as signed |
Definition at line 2528 of file Instructions.cpp.
References llvm::FPExt, llvm::FPToSI, llvm::Type::getPrimitiveSizeInBits(), llvm::Value::getType(), llvm::IntToPtr, llvm::Type::isFirstClassType(), llvm::Type::isFloatingPointTy(), llvm::Type::isIntegerTy(), llvm::Type::isPointerTy(), llvm::Type::isVectorTy(), llvm::Type::isX86_MMXTy(), llvm_unreachable, llvm::SExt, llvm::SIToFP, and llvm::Trunc.
Referenced by CastGEPIndices(), llvm::ConstantFoldCastInstruction(), getFoldedAlignOf(), getFoldedOffsetOf(), and getFoldedSizeOf().
| Type* llvm::CastInst::getDestTy | ( | ) | const [inline] |
Return the destination type, as a convenience.
Definition at line 604 of file InstrTypes.h.
References getType().
| Instruction::CastOps llvm::CastInst::getOpcode | ( | ) | const [inline] |
Return the opcode of this CastInst.
Reimplemented from llvm::Instruction.
Definition at line 597 of file InstrTypes.h.
References llvm::Instruction::getOpcode().
Referenced by llvm::BitCastInst::BitCastInst(), llvm::InstCombiner::commonCastTransforms(), llvm::FPExtInst::FPExtInst(), llvm::FPToSIInst::FPToSIInst(), llvm::FPToUIInst::FPToUIInst(), llvm::FPTruncInst::FPTruncInst(), llvm::IntToPtrInst::IntToPtrInst(), isEliminableCastPair(), isIntegerCast(), isLosslessCast(), isNoopCast(), OptimizeNoopCopyExpression(), llvm::PtrToIntInst::PtrToIntInst(), llvm::SExtInst::SExtInst(), llvm::SIToFPInst::SIToFPInst(), llvm::TruncInst::TruncInst(), llvm::UIToFPInst::UIToFPInst(), llvm::InstCombiner::visitFPTrunc(), llvm::InstCombiner::visitICmpInstWithCastAndCast(), llvm::InstCombiner::visitOr(), and llvm::ZExtInst::ZExtInst().
| Type* llvm::CastInst::getSrcTy | ( | ) | const [inline] |
Return the source type, as a convenience.
Definition at line 602 of file InstrTypes.h.
Referenced by llvm::InstCombiner::visitFCmpInst().
Check whether it is valid to call getCastOpcode for these types.
| SrcTy | The Type from which the value should be cast. |
| DestTy | The Type to which the value should be cast. |
Definition at line 2459 of file Instructions.cpp.
References llvm::Type::getPrimitiveSizeInBits(), llvm::Type::isFirstClassType(), llvm::Type::isFloatingPointTy(), llvm::Type::isIntegerTy(), llvm::Type::isPointerTy(), llvm::Type::isVectorTy(), and llvm::Type::isX86_MMXTy().
| unsigned CastInst::isEliminableCastPair | ( | Instruction::CastOps | firstOp, |
| Instruction::CastOps | secondOp, | ||
| Type * | SrcTy, | ||
| Type * | MidTy, | ||
| Type * | DstTy, | ||
| Type * | SrcIntPtrTy, | ||
| Type * | MidIntPtrTy, | ||
| Type * | DstIntPtrTy | ||
| ) | [static] |
Determine if a cast pair is eliminable.
Determine how a pair of casts can be eliminated, if they can be at all. This is a helper function for both CastInst and ConstantExpr.
This function determines if a pair of casts can be eliminated and what opcode should be used in the elimination. This assumes that there are two instructions like this: F = firstOpcode SrcTy x to MidTy S = secondOpcode MidTy F to DstTy The function returns a resultOpcode so these two casts can be replaced with: Replacement = resultOpcode SrcTy x to DstTy If no such cast is permited, the function returns 0.
| firstOp | Opcode of first cast |
| secondOp | Opcode of second cast |
| SrcTy | SrcTy of 1st cast |
| MidTy | DstTy of 1st cast & SrcTy of 2nd cast |
| DstTy | DstTy of 2nd cast |
| SrcIntPtrTy | Integer type corresponding to Ptr SrcTy, or null |
| MidIntPtrTy | Integer type corresponding to Ptr MidTy, or null |
| DstIntPtrTy | Integer type corresponding to Ptr DstTy, or null |
Definition at line 2123 of file Instructions.cpp.
References llvm::Type::getScalarSizeInBits(), llvm::Type::isFloatingPointTy(), llvm::Type::isIntegerTy(), llvm::Type::isPointerTy(), llvm::Type::isVectorTy(), and llvm_unreachable.
Referenced by foldConstantCastPair().
| bool CastInst::isIntegerCast | ( | ) | const |
Determine if this is an integer-only cast.
There are several places where we need to know if a cast instruction only deals with integer source and destination types. To simplify that logic, this method is provided.
Definition at line 2045 of file Instructions.cpp.
References getOpcode(), llvm::User::getOperand(), llvm::Value::getType(), llvm::Type::isIntegerTy(), llvm::SExt, and llvm::Trunc.
| bool CastInst::isLosslessCast | ( | ) | const |
Determine if this is a lossless cast.
A lossless cast is one that does not alter the basic value. It implies a no-op cast but is more stringent, preventing things like int->float, long->double, or int->ptr.
Definition at line 2058 of file Instructions.cpp.
References getOpcode(), llvm::User::getOperand(), llvm::Value::getType(), and llvm::Type::isPointerTy().
Referenced by isSafeToEliminateVarargsCast().
| bool CastInst::isNoopCast | ( | Instruction::CastOps | Opcode, |
| Type * | SrcTy, | ||
| Type * | DestTy, | ||
| Type * | IntPtrTy | ||
| ) | [static] |
Determine if the described cast is a no-op cast.
Determine if the described cast is a no-op.
A no-op cast is one that can be effected without changing any bits. It implies that the source and destination types are the same size. The IntPtrTy argument is used to make accurate determinations for casts involving Integer and Pointer types. They are no-op casts if the integer is the same size as the pointer. However, pointer size varies with platform. Generally, the result of DataLayout::getIntPtrType() should be passed in. If that's not available, use Type::Int64Ty, which will make the isNoopCast call conservative.
This function determines if the CastInst does not require any bits to be changed in order to effect the cast. Essentially, it identifies cases where no code gen is necessary for the cast, hence the name no-op cast. For example, the following are all no-op casts: # bitcast i32* x to i8* # bitcast <2 x i32> x to <4 x i16> # ptrtoint i32* x to i32 ; on 32-bit plaforms only
| Opcode | Opcode of cast |
| SrcTy | SrcTy of cast |
| DestTy | DstTy of cast |
| IntPtrTy | Integer type corresponding to Ptr types, or null |
Definition at line 2083 of file Instructions.cpp.
References llvm::FPExt, llvm::FPToSI, llvm::Type::getScalarSizeInBits(), llvm::IntToPtr, llvm_unreachable, llvm::SExt, llvm::SIToFP, and llvm::Trunc.
Referenced by isNoopCast().
Determine if this cast is a no-op cast.
Determine if a cast is a no-op.
| IntPtrTy | Integer type corresponding to pointer |
Definition at line 2111 of file Instructions.cpp.
References getOpcode(), llvm::User::getOperand(), llvm::Value::getType(), and isNoopCast().