LLVM: lib/ExecutionEngine/Interpreter/Execution.cpp File Reference (original) (raw)

Go to the source code of this file.

Macros
#define DEBUG_TYPE "interpreter"
#define IMPLEMENT_BINARY_OPERATOR(OP, TY)
#define IMPLEMENT_INTEGER_ICMP(OP, TY)
#define IMPLEMENT_VECTOR_INTEGER_ICMP(OP, TY)
#define IMPLEMENT_POINTER_ICMP(OP)
#define IMPLEMENT_FCMP(OP, TY)
#define IMPLEMENT_VECTOR_FCMP_T(OP, TY)
#define IMPLEMENT_VECTOR_FCMP(OP)
#define IMPLEMENT_SCALAR_NANS(TY, X, Y)
#define MASK_VECTOR_NANS_T(X, Y, TZ, FLAG)
#define MASK_VECTOR_NANS(TY, X, Y, FLAG)
#define IMPLEMENT_UNORDERED(TY, X, Y)
#define IMPLEMENT_VECTOR_UNORDERED(TY, X, Y, FUNC)
#define INTEGER_VECTOR_OPERATION(OP)
#define INTEGER_VECTOR_FUNCTION(OP)
#define FLOAT_VECTOR_FUNCTION(OP, TY)
#define FLOAT_VECTOR_OP(OP)
#define IMPLEMENT_VAARG(TY)
Functions
STATISTIC (NumDynamicInsts, "Number of dynamic instructions executed")
static void SetValue (Value *V, GenericValue Val, ExecutionContext &SF)
static void executeFNegInst (GenericValue &Dest, GenericValue Src, Type *Ty)
static void executeFAddInst (GenericValue &Dest, GenericValue Src1, GenericValue Src2, Type *Ty)
static void executeFSubInst (GenericValue &Dest, GenericValue Src1, GenericValue Src2, Type *Ty)
static void executeFMulInst (GenericValue &Dest, GenericValue Src1, GenericValue Src2, Type *Ty)
static void executeFDivInst (GenericValue &Dest, GenericValue Src1, GenericValue Src2, Type *Ty)
static void executeFRemInst (GenericValue &Dest, GenericValue Src1, GenericValue Src2, Type *Ty)
static GenericValue executeICMP_EQ (GenericValue Src1, GenericValue Src2, Type *Ty)
static GenericValue executeICMP_NE (GenericValue Src1, GenericValue Src2, Type *Ty)
static GenericValue executeICMP_ULT (GenericValue Src1, GenericValue Src2, Type *Ty)
static GenericValue executeICMP_SLT (GenericValue Src1, GenericValue Src2, Type *Ty)
static GenericValue executeICMP_UGT (GenericValue Src1, GenericValue Src2, Type *Ty)
static GenericValue executeICMP_SGT (GenericValue Src1, GenericValue Src2, Type *Ty)
static GenericValue executeICMP_ULE (GenericValue Src1, GenericValue Src2, Type *Ty)
static GenericValue executeICMP_SLE (GenericValue Src1, GenericValue Src2, Type *Ty)
static GenericValue executeICMP_UGE (GenericValue Src1, GenericValue Src2, Type *Ty)
static GenericValue executeICMP_SGE (GenericValue Src1, GenericValue Src2, Type *Ty)
static GenericValue executeFCMP_OEQ (GenericValue Src1, GenericValue Src2, Type *Ty)
static GenericValue executeFCMP_ONE (GenericValue Src1, GenericValue Src2, Type *Ty)
static GenericValue executeFCMP_OLE (GenericValue Src1, GenericValue Src2, Type *Ty)
static GenericValue executeFCMP_OGE (GenericValue Src1, GenericValue Src2, Type *Ty)
static GenericValue executeFCMP_OLT (GenericValue Src1, GenericValue Src2, Type *Ty)
static GenericValue executeFCMP_OGT (GenericValue Src1, GenericValue Src2, Type *Ty)
static GenericValue executeFCMP_UEQ (GenericValue Src1, GenericValue Src2, Type *Ty)
static GenericValue executeFCMP_UNE (GenericValue Src1, GenericValue Src2, Type *Ty)
static GenericValue executeFCMP_ULE (GenericValue Src1, GenericValue Src2, Type *Ty)
static GenericValue executeFCMP_UGE (GenericValue Src1, GenericValue Src2, Type *Ty)
static GenericValue executeFCMP_ULT (GenericValue Src1, GenericValue Src2, Type *Ty)
static GenericValue executeFCMP_UGT (GenericValue Src1, GenericValue Src2, Type *Ty)
static GenericValue executeFCMP_ORD (GenericValue Src1, GenericValue Src2, Type *Ty)
static GenericValue executeFCMP_UNO (GenericValue Src1, GenericValue Src2, Type *Ty)
static GenericValue executeFCMP_BOOL (GenericValue Src1, GenericValue Src2, Type *Ty, const bool val)
static GenericValue executeSelectInst (GenericValue Src1, GenericValue Src2, GenericValue Src3, Type *Ty)
static unsigned getShiftAmount (uint64_t orgShiftAmount, llvm::APInt valueToShift)

DEBUG_TYPE

#define DEBUG_TYPE "interpreter"

FLOAT_VECTOR_FUNCTION

#define FLOAT_VECTOR_FUNCTION ( OP,
TY )

Value:

for (unsigned i = 0; i < R.AggregateVal.size(); ++i) \

R.AggregateVal[i].TY = \

Src1.AggregateVal[i].TY OP Src2.AggregateVal[i].TY;

FLOAT_VECTOR_OP

#define FLOAT_VECTOR_OP ( OP )

Value:

{ \

FLOAT_VECTOR_FUNCTION(OP, FloatVal) \

else { \

FLOAT_VECTOR_FUNCTION(OP, DoubleVal) \

else { \

dbgs() << "Unhandled type for OP instruction: " << *Ty << "\n"; \

llvm_unreachable(0); \

} \

} \

}

decltype(auto) cast(const From &Val)

cast - Return the argument parameter cast to the specified type.

Referenced by llvm::Interpreter::visitBinaryOperator().

IMPLEMENT_BINARY_OPERATOR

#define IMPLEMENT_BINARY_OPERATOR ( OP,
TY )

IMPLEMENT_FCMP

#define IMPLEMENT_FCMP ( OP,
TY )

IMPLEMENT_INTEGER_ICMP

#define IMPLEMENT_INTEGER_ICMP ( OP,
TY )

Value:

case Type::IntegerTyID: \

Dest.IntVal = APInt(1,Src1.IntVal.OP(Src2.IntVal)); \

break;

Definition at line 167 of file Execution.cpp.

Referenced by executeICMP_EQ(), executeICMP_NE(), executeICMP_SGE(), executeICMP_SGT(), executeICMP_SLE(), executeICMP_SLT(), executeICMP_UGE(), executeICMP_UGT(), executeICMP_ULE(), and executeICMP_ULT().

IMPLEMENT_POINTER_ICMP

#define IMPLEMENT_POINTER_ICMP ( OP )

Value:

case Type::PointerTyID: \

Dest.IntVal = APInt(1,(void*)(intptr_t)Src1.PointerVal OP \

(void*)(intptr_t)Src2.PointerVal); \

break;

Definition at line 186 of file Execution.cpp.

Referenced by executeICMP_EQ(), executeICMP_NE(), executeICMP_SGE(), executeICMP_SGT(), executeICMP_SLE(), executeICMP_SLT(), executeICMP_UGE(), executeICMP_UGT(), executeICMP_ULE(), and executeICMP_ULT().

IMPLEMENT_SCALAR_NANS

#define IMPLEMENT_SCALAR_NANS ( TY,
X,
Y )

Value:

if (TY->isFloatTy()) { \

if (X.FloatVal != X.FloatVal || Y.FloatVal != Y.FloatVal) { \

Dest.IntVal = APInt(1,false); \

return Dest; \

} \

} else { \

if (X.DoubleVal != X.DoubleVal || Y.DoubleVal != Y.DoubleVal) { \

Dest.IntVal = APInt(1,false); \

return Dest; \

} \

}

static TableGen::Emitter::Opt Y("gen-skeleton-entry", EmitSkeleton, "Generate example skeleton entry")

static TableGen::Emitter::OptClass< SkeletonEmitter > X("gen-skeleton-class", "Generate example skeleton class")

Definition at line 394 of file Execution.cpp.

Referenced by executeFCMP_ONE().

IMPLEMENT_UNORDERED

#define IMPLEMENT_UNORDERED ( TY,
X,
Y )

IMPLEMENT_VAARG

#define IMPLEMENT_VAARG ( TY )

IMPLEMENT_VECTOR_FCMP

#define IMPLEMENT_VECTOR_FCMP ( OP )

IMPLEMENT_VECTOR_FCMP_T

#define IMPLEMENT_VECTOR_FCMP_T ( OP,
TY )

Value:

assert(Src1.AggregateVal.size() == Src2.AggregateVal.size()); \

Dest.AggregateVal.resize( Src1.AggregateVal.size() ); \

for( uint32_t _i=0;_i<Src1.AggregateVal.size();_i++) \

Dest.AggregateVal[_i].IntVal = APInt(1, \

Src1.AggregateVal[_i].TY##Val OP Src2.AggregateVal[_i].TY##Val);\

break;

assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")

Definition at line 363 of file Execution.cpp.

IMPLEMENT_VECTOR_INTEGER_ICMP

#define IMPLEMENT_VECTOR_INTEGER_ICMP ( OP,
TY )

Value:

case Type::FixedVectorTyID: \

case Type::ScalableVectorTyID: { \

assert(Src1.AggregateVal.size() == Src2.AggregateVal.size()); \

Dest.AggregateVal.resize(Src1.AggregateVal.size()); \

for (uint32_t _i = 0; _i < Src1.AggregateVal.size(); _i++) \

Dest.AggregateVal[_i].IntVal = APInt( \

1, Src1.AggregateVal[_i].IntVal.OP(Src2.AggregateVal[_i].IntVal)); \

} break;

Definition at line 172 of file Execution.cpp.

Referenced by executeICMP_EQ(), executeICMP_NE(), executeICMP_SGE(), executeICMP_SGT(), executeICMP_SLE(), executeICMP_SLT(), executeICMP_UGE(), executeICMP_UGT(), executeICMP_ULE(), and executeICMP_ULT().

IMPLEMENT_VECTOR_UNORDERED

#define IMPLEMENT_VECTOR_UNORDERED ( TY,
X,
Y,
FUNC )

INTEGER_VECTOR_FUNCTION

#define INTEGER_VECTOR_FUNCTION ( OP )

Value:

for (unsigned i = 0; i < R.AggregateVal.size(); ++i) \

R.AggregateVal[i].IntVal = \

Src1.AggregateVal[i].IntVal.OP(Src2.AggregateVal[i].IntVal);

Referenced by llvm::Interpreter::visitBinaryOperator().

INTEGER_VECTOR_OPERATION

#define INTEGER_VECTOR_OPERATION ( OP )

MASK_VECTOR_NANS

#define MASK_VECTOR_NANS ( TY,
X,
Y,
FLAG )

Value:

if (TY->isVectorTy()) { \

MASK_VECTOR_NANS_T(X, Y, Float, FLAG) \

} else { \

MASK_VECTOR_NANS_T(X, Y, Double, FLAG) \

} \

} \

Definition at line 419 of file Execution.cpp.

Referenced by executeFCMP_ONE(), executeFCMP_UEQ(), executeFCMP_UGE(), executeFCMP_UGT(), executeFCMP_ULE(), executeFCMP_ULT(), and executeFCMP_UNE().

MASK_VECTOR_NANS_T

#define MASK_VECTOR_NANS_T ( X,
Y,
TZ,
FLAG )

Value:

assert(X.AggregateVal.size() == Y.AggregateVal.size()); \

Dest.AggregateVal.resize( X.AggregateVal.size() ); \

for( uint32_t _i=0;_i<X.AggregateVal.size();_i++) { \

if (X.AggregateVal[_i].TZ##Val != X.AggregateVal[_i].TZ##Val || \

Y.AggregateVal[_i].TZ##Val != Y.AggregateVal[_i].TZ##Val) \

Dest.AggregateVal[_i].IntVal = APInt(1,FLAG); \

else { \

Dest.AggregateVal[_i].IntVal = APInt(1,!FLAG); \

} \

}

Definition at line 407 of file Execution.cpp.

executeFAddInst()

executeFCMP_BOOL()

executeFCMP_OEQ()

executeFCMP_OGE()

executeFCMP_OGT()

executeFCMP_OLE()

executeFCMP_OLT()

executeFCMP_ONE()

executeFCMP_ORD()

executeFCMP_UEQ()

executeFCMP_UGE()

executeFCMP_UGT()

executeFCMP_ULE()

executeFCMP_ULT()

executeFCMP_UNE()

executeFCMP_UNO()

executeFDivInst()

executeFMulInst()

executeFNegInst()

executeFRemInst()

executeFSubInst()

executeICMP_EQ()

executeICMP_NE()

executeICMP_SGE()

executeICMP_SGT()

executeICMP_SLE()

executeICMP_SLT()

executeICMP_UGE()

executeICMP_UGT()

executeICMP_ULE()

executeICMP_ULT()

executeSelectInst()

getShiftAmount()

SetValue()

Definition at line 41 of file Execution.cpp.

References llvm::ExecutionContext::Values.

Referenced by llvm::Interpreter::callFunction(), createMemSetLoop(), llvm::Interpreter::visitAllocaInst(), llvm::Interpreter::visitAShr(), llvm::Interpreter::visitBinaryOperator(), llvm::Interpreter::visitBitCastInst(), llvm::Interpreter::visitExtractElementInst(), llvm::Interpreter::visitExtractValueInst(), llvm::Interpreter::visitFCmpInst(), llvm::Interpreter::visitFPExtInst(), llvm::Interpreter::visitFPToSIInst(), llvm::Interpreter::visitFPToUIInst(), llvm::Interpreter::visitFPTruncInst(), llvm::Interpreter::visitGetElementPtrInst(), llvm::Interpreter::visitICmpInst(), llvm::Interpreter::visitInsertElementInst(), llvm::Interpreter::visitInsertValueInst(), llvm::Interpreter::visitIntToPtrInst(), llvm::Interpreter::visitLoadInst(), llvm::Interpreter::visitLShr(), llvm::Interpreter::visitPtrToIntInst(), llvm::Interpreter::visitSelectInst(), llvm::Interpreter::visitSExtInst(), llvm::Interpreter::visitShl(), llvm::Interpreter::visitShuffleVectorInst(), llvm::Interpreter::visitSIToFPInst(), llvm::Interpreter::visitTruncInst(), llvm::Interpreter::visitUIToFPInst(), llvm::Interpreter::visitUnaryOperator(), llvm::Interpreter::visitVAArgInst(), llvm::Interpreter::visitVACopyInst(), llvm::Interpreter::visitVAStartInst(), and llvm::Interpreter::visitZExtInst().

STATISTIC()

STATISTIC ( NumDynamicInsts ,
"Number of dynamic instructions executed" )

PrintVolatile