ejsval IRBuilder_createCondBr(ejsval env, ejsval _this, int argc, ejsval *args) { REQ_LLVM_VAL_ARG(0, cond); REQ_LLVM_BB_ARG(1, thenPart); REQ_LLVM_BB_ARG(2, elsePart); return Value_new (_llvm_builder.CreateCondBr(cond, thenPart, elsePart)); }
v8::Handle<v8::Value> IRBuilder::CreateCondBr(const v8::Arguments& args) { HandleScope scope; REQ_LLVM_VAL_ARG(0, cond); REQ_LLVM_BB_ARG(1, thenPart); REQ_LLVM_BB_ARG(2, elsePart); Handle<v8::Value> result = Instruction::New(static_cast<llvm::Instruction*>(IRBuilder::builder.CreateCondBr(cond, thenPart, elsePart))); return scope.Close(result); }
ejsval IRBuilder_createBr(ejsval env, ejsval _this, int argc, ejsval *args) { REQ_LLVM_BB_ARG(0, dest); return Value_new (_llvm_builder.CreateBr(dest)); }
ejsval IRBuilder_setInsertPointStartBB(ejsval env, ejsval _this, int argc, ejsval *args) { REQ_LLVM_BB_ARG(0, bb); if (bb != NULL) _llvm_builder.SetInsertPoint (bb, bb->getFirstInsertionPt()); return _ejs_undefined; }
ejsval IRBuilder_createInvoke(ejsval env, ejsval _this, int argc, ejsval *args) { REQ_LLVM_VAL_ARG(0, callee); REQ_ARRAY_ARG(1, argv); REQ_LLVM_BB_ARG(2, normal_dest); REQ_LLVM_BB_ARG(3, unwind_dest); FALLBACK_EMPTY_UTF8_ARG(4, name); std::vector<llvm::Value*> ArgsV; for (unsigned i = 0, e = EJSARRAY_LEN(argv); i != e; ++i) { ArgsV.push_back (Value_GetLLVMObj(EJSDENSEARRAY_ELEMENTS(argv)[i])); if (ArgsV.back() == 0) abort(); // XXX throw an exception here } return Invoke_new (_llvm_builder.CreateInvoke(callee, normal_dest, unwind_dest, ArgsV, name)); }
v8::Handle<v8::Value> IRBuilder::SetInsertPointStartBB(const v8::Arguments& args) { HandleScope scope; REQ_LLVM_BB_ARG(0, bb); if (bb != NULL) IRBuilder::builder.SetInsertPoint (bb, bb->getFirstInsertionPt()); return scope.Close(Undefined()); }
ejsval IRBuilder_createSwitch(ejsval env, ejsval _this, int argc, ejsval *args) { REQ_LLVM_VAL_ARG(0, V); REQ_LLVM_BB_ARG(1, Dest); REQ_INT_ARG(2, num_cases); return Switch_new (_llvm_builder.CreateSwitch(V, Dest, num_cases)); }
v8::Handle<v8::Value> IRBuilder::CreateBr(const v8::Arguments& args) { HandleScope scope; REQ_LLVM_BB_ARG(0, dest); Handle<v8::Value> result = Instruction::New(static_cast<llvm::Instruction*>(IRBuilder::builder.CreateBr(dest))); return scope.Close(result); }
Handle<v8::Value> PHINode::AddIncoming (const Arguments& args) { HandleScope scope; PHINode* phi = ObjectWrap::Unwrap<PHINode>(args.This()); REQ_LLVM_VAL_ARG(0, incoming_val); REQ_LLVM_BB_ARG(1, incoming_bb); phi->llvm_phi->addIncoming(incoming_val, incoming_bb); return scope.Close(Undefined()); }
v8::Handle<v8::Value> IRBuilder::CreateSwitch(const v8::Arguments& args) { HandleScope scope; REQ_LLVM_VAL_ARG(0, V); REQ_LLVM_BB_ARG(1, Dest); REQ_INT_ARG(2, num_cases); Handle<v8::Value> result = Switch::New(IRBuilder::builder.CreateSwitch(V, Dest, num_cases)); return scope.Close(result); }
v8::Handle<v8::Value> IRBuilder::CreateInvoke(const v8::Arguments& args) { HandleScope scope; REQ_LLVM_VAL_ARG(0, callee); REQ_ARRAY_ARG(1, argv); REQ_LLVM_BB_ARG(2, normal_dest); REQ_LLVM_BB_ARG(3, unwind_dest); FALLBACK_EMPTY_UTF8_ARG(4, name); std::vector<llvm::Value*> ArgsV; for (unsigned i = 0, e = argv->Length(); i != e; ++i) { llvm::Value* arg = Value::GetLLVMObj(argv->Get(i)); ArgsV.push_back(arg); if (ArgsV.back() == 0) abort(); // XXX throw an exception here } Handle<v8::Value> result = Invoke::New(IRBuilder::builder.CreateInvoke(callee, normal_dest, unwind_dest, ArgsV, *name)); return scope.Close(result); }