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) |
◆ 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" | ) |