//
// The LLVM Compiler Infrastructure
//
-// This file was developed by the LLVM research group and is distributed under
-// the University of Illinois Open Source License. See LICENSE.TXT for details.
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
#include "llvm/Function.h"
#include "llvm/ExecutionEngine/ExecutionEngine.h"
#include "llvm/ExecutionEngine/GenericValue.h"
-#include "llvm/Support/InstVisitor.h"
-#include "llvm/Support/CallSite.h"
#include "llvm/Target/TargetData.h"
-#include "llvm/Support/DataTypes.h"
-
+#include "llvm/Support/CallSite.h"
+#include "llvm/System/DataTypes.h"
+#include "llvm/Support/ErrorHandling.h"
+#include "llvm/Support/InstVisitor.h"
+#include "llvm/Support/raw_ostream.h"
namespace llvm {
class IntrinsicLowering;
std::vector<Function*> AtExitHandlers;
public:
- Interpreter(Module *M);
+ explicit Interpreter(ModuleProvider *M);
~Interpreter();
/// runAtExitHandlers - Run any functions registered by the program's calls to
/// create - Create an interpreter ExecutionEngine. This can never fail.
///
- static ExecutionEngine *create(ModuleProvider *M);
+ static ExecutionEngine *create(ModuleProvider *M, std::string *ErrorStr = 0);
/// run - Start execution with the specified function and arguments.
///
void visitBinaryOperator(BinaryOperator &I);
void visitICmpInst(ICmpInst &I);
void visitFCmpInst(FCmpInst &I);
- void visitAllocationInst(AllocationInst &I);
+ void visitAllocaInst(AllocaInst &I);
void visitFreeInst(FreeInst &I);
void visitLoadInst(LoadInst &I);
void visitStoreInst(StoreInst &I);
void visitGetElementPtrInst(GetElementPtrInst &I);
- void visitPHINode(PHINode &PN) { assert(0 && "PHI nodes already handled!"); }
+ void visitPHINode(PHINode &PN) {
+ llvm_unreachable("PHI nodes already handled!");
+ }
void visitTruncInst(TruncInst &I);
void visitZExtInst(ZExtInst &I);
void visitSExtInst(SExtInst &I);
void visitVAArgInst(VAArgInst &I);
void visitInstruction(Instruction &I) {
- cerr << I;
- assert(0 && "Instruction not interpretable yet!");
+ errs() << I;
+ llvm_unreachable("Instruction not interpretable yet!");
}
GenericValue callExternalFunction(Function *F,
void *getPointerToFunction(Function *F) { return (void*)F; }
- void initializeExecutionEngine();
+ void initializeExecutionEngine() { }
void initializeExternalFunctions();
GenericValue getConstantExprValue(ConstantExpr *CE, ExecutionContext &SF);
GenericValue getOperandValue(Value *V, ExecutionContext &SF);
};
-inline void maskToBitWidth(GenericValue& GV, unsigned BitWidth) {
- uint64_t BitMask = ~(uint64_t)(0ull) >> (64-BitWidth);
- if (BitWidth <= 8)
- GV.Int8Val &= BitMask;
- else if (BitWidth <= 16)
- GV.Int16Val &= BitMask;
- else if (BitWidth <= 32)
- GV.Int32Val &= BitMask;
- else
- GV.Int64Val &= BitMask;
-}
} // End llvm namespace
#endif