aboutsummaryrefslogtreecommitdiffstats
path: root/qv4isel_llvm_p.h
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2012-05-31 19:02:05 +0200
committerRoberto Raggi <roberto.raggi@nokia.com>2012-05-31 19:02:05 +0200
commit4cd31221ec82c573c85426e6cbc186ab9dca402c (patch)
tree3a9d870f46fcb58c119fa79b542f0fdef8d016e4 /qv4isel_llvm_p.h
parentd65f9ddff1fd9c1aac037bb1163c6fbc7e9a637c (diff)
Initial work on the LLVM-based AOT compiler.
Diffstat (limited to 'qv4isel_llvm_p.h')
-rw-r--r--qv4isel_llvm_p.h63
1 files changed, 63 insertions, 0 deletions
diff --git a/qv4isel_llvm_p.h b/qv4isel_llvm_p.h
new file mode 100644
index 0000000000..8c0a5af28f
--- /dev/null
+++ b/qv4isel_llvm_p.h
@@ -0,0 +1,63 @@
+#ifndef QV4ISEL_LLVM_P_H
+#define QV4ISEL_LLVM_P_H
+
+#include "qv4isel_p.h"
+#include "qv4ir_p.h"
+#include <llvm/Module.h>
+#include <llvm/Support/IRBuilder.h>
+
+namespace QQmlJS {
+
+class LLVMInstructionSelection:
+ public llvm::IRBuilder<>,
+ protected IR::StmtVisitor,
+ protected IR::ExprVisitor
+{
+public:
+ LLVMInstructionSelection(llvm::LLVMContext &context);
+
+ llvm::Module *getLLVMModule(IR::Module *module);
+ llvm::Function *getLLVMFunction(IR::Function *function);
+ llvm::BasicBlock *getLLVMBasicBlock(IR::BasicBlock *block);
+ llvm::Value *getLLVMValue(IR::Expr *expr);
+ llvm::Value *getLLVMCondition(IR::Expr *expr);
+ llvm::Value *getLLVMTemp(IR::Temp *temp);
+
+ virtual void visitExp(IR::Exp *);
+ virtual void visitEnter(IR::Enter *);
+ virtual void visitLeave(IR::Leave *);
+ virtual void visitMove(IR::Move *);
+ virtual void visitJump(IR::Jump *);
+ virtual void visitCJump(IR::CJump *);
+ virtual void visitRet(IR::Ret *);
+
+ virtual void visitConst(IR::Const *);
+ virtual void visitString(IR::String *);
+ virtual void visitName(IR::Name *);
+ virtual void visitTemp(IR::Temp *);
+ virtual void visitClosure(IR::Closure *);
+ virtual void visitUnop(IR::Unop *);
+ virtual void visitBinop(IR::Binop *);
+ virtual void visitCall(IR::Call *);
+ virtual void visitNew(IR::New *);
+ virtual void visitSubscript(IR::Subscript *);
+ virtual void visitMember(IR::Member *);
+
+private:
+ llvm::Module *_llvmModule;
+ llvm::Function *_llvmFunction;
+ llvm::Value *_llvmValue;
+ llvm::Type *_numberTy;
+ llvm::Type *_valueTy;
+ llvm::Type *_contextTy;
+ llvm::FunctionType *_functionTy;
+ IR::Function *_function;
+ IR::BasicBlock *_block;
+ QHash<IR::Function *, llvm::Function *> _functionMap;
+ QHash<IR::BasicBlock *, llvm::BasicBlock *> _blockMap;
+ QVector<llvm::Value *> _tempMap;
+};
+
+} // end of namespace QQmlJS
+
+#endif // QV4ISEL_LLVM_P_H