diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2012-05-31 19:02:05 +0200 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2012-05-31 19:02:05 +0200 |
commit | 4cd31221ec82c573c85426e6cbc186ab9dca402c (patch) | |
tree | 3a9d870f46fcb58c119fa79b542f0fdef8d016e4 /qv4isel_llvm_p.h | |
parent | d65f9ddff1fd9c1aac037bb1163c6fbc7e9a637c (diff) |
Initial work on the LLVM-based AOT compiler.
Diffstat (limited to 'qv4isel_llvm_p.h')
-rw-r--r-- | qv4isel_llvm_p.h | 63 |
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 |