Home | History | Annotate | Download | only in portable

Lines Matching full:llvm

19 #include <llvm/ADT/DepthFirstIterator.h>
20 #include <llvm/Analysis/Verifier.h>
21 #include <llvm/Bitcode/ReaderWriter.h>
22 #include <llvm/IR/Instruction.h>
23 #include <llvm/IR/Instructions.h>
24 #include <llvm/IR/Metadata.h>
25 #include <llvm/IR/Type.h>
26 #include <llvm/Support/Casting.h>
27 #include <llvm/Support/InstIterator.h>
28 #include <llvm/Support/ToolOutputFile.h>
33 #include "llvm/ir_builder.h"
34 #include "llvm/llvm_compilation_unit.h"
35 #include "llvm/utils_llvm.h"
45 namespace llvm {
46 ::llvm::Module* makeLLVMModuleContents(::llvm::Module* module);
51 llvm_context_.reset(new ::llvm::LLVMContext());
52 llvm_module_ = new ::llvm::Module("art", *llvm_context_);
53 ::llvm::StructType::create(*llvm_context_, "JavaObject");
54 art::llvm::makeLLVMModuleContents(llvm_module_);
55 intrinsic_helper_.reset(new art::llvm::IntrinsicHelper(*llvm_context_, *llvm_module_));
56 ir_builder_.reset(new art::llvm::IRBuilder(*llvm_context_, *llvm_module_, *intrinsic_helper_));
62 ::llvm::BasicBlock* MirConverter::GetLLVMBlock(int id) {
66 ::llvm::Value* MirConverter::GetLLVMValue(int s_reg) {
70 void MirConverter::SetVregOnValue(::llvm::Value* val, int s_reg) {
72 art::llvm::IntrinsicHelper::IntrinsicId id = art::llvm::IntrinsicHelper::SetVReg;
73 ::llvm::Function* func = intrinsic_helper_->GetIntrinsicFunction(id);
75 ::llvm::Value* table_slot = irb_->getInt32(v_reg);
76 ::llvm::Value* args[] = { table_slot, val };
81 void MirConverter::DefineValueOnly(::llvm::Value* val, int s_reg) {
82 ::llvm::Value* placeholder = GetLLVMValue(s_reg);
91 ::llvm::Instruction* inst = ::llvm::dyn_cast< ::llvm::Instruction>(placeholder);
96 void MirConverter::DefineValue(::llvm::Value* val, int s_reg) {
101 ::llvm::Type* MirConverter::LlvmTypeFromLocRec(RegLocation loc) {
102 ::llvm::Type* res = NULL;
137 ::llvm::BasicBlock* MirConverter::FindCaseTarget(uint32_t vaddr) {
149 ::llvm::Value* value = GetLLVMValue(rl_src.orig_sreg);
151 ::llvm::SwitchInst* sw =
156 ::llvm::BasicBlock* llvm_bb =
160 ::llvm::MDNode* switch_node =
161 ::llvm::MDNode::get(*context_, irb_->getInt32(table_offset));
176 ::llvm::Value* value = GetLLVMValue(rl_src.orig_sreg);
178 ::llvm::SwitchInst* sw =
183 ::llvm::BasicBlock* llvm_bb =
187 ::llvm::MDNode* switch_node =
188 ::llvm::MDNode::get(*context_, irb_->getInt32(table_offset));
195 art::llvm::IntrinsicHelper::IntrinsicId id, RegLocation rl_dest) {
196 ::llvm::Constant* field_idx = irb_->getInt32(field_index);
197 ::llvm::Function* intr = intrinsic_helper_->GetIntrinsicFunction(id);
198 ::llvm::Value* res = irb_->CreateCall(intr, field_idx);
203 art::llvm::IntrinsicHelper::IntrinsicId id, RegLocation rl_src) {
204 ::llvm::SmallVector< ::llvm::Value*, 2> args;
207 ::llvm::Function* intr = intrinsic_helper_->GetIntrinsicFunction(id);
212 art::llvm::IntrinsicHelper::IntrinsicId id;
213 id = art::llvm::IntrinsicHelper::HLFillArrayData;
214 ::llvm::SmallVector< ::llvm::Value*, 2> args;
217 ::llvm::Function* intr = intrinsic_helper_->GetIntrinsicFunction(id);
221 ::llvm::Value* MirConverter::EmitConst(::llvm::ArrayRef< ::llvm::Value*> src,
223 art::llvm::IntrinsicHelper::IntrinsicId id;
226 id = art::llvm::IntrinsicHelper::ConstDouble;
228 id = art::llvm::IntrinsicHelper::ConstLong;
232 id = art::llvm::IntrinsicHelper::ConstFloat;
234 id = art::llvm::IntrinsicHelper::ConstObj;
236 id = art::llvm::IntrinsicHelper::ConstInt;
239 ::llvm::Function* intr = intrinsic_helper_->GetIntrinsicFunction(id);
244 ::llvm::Function* intr = intrinsic_helper_->GetIntrinsicFunction(
245 art::llvm::IntrinsicHelper::PopShadowFrame);
249 ::llvm::Value* MirConverter::EmitCopy(::llvm::ArrayRef< ::llvm::Value*> src,
251 art::llvm::IntrinsicHelper::IntrinsicId id;
254 id = art::llvm::IntrinsicHelper::CopyDouble;
256 id = art::llvm::IntrinsicHelper::CopyLong;
260 id = art::llvm::IntrinsicHelper::CopyFloat;
262 id = art::llvm::IntrinsicHelper::CopyObj;
264 id = art::llvm::IntrinsicHelper::CopyInt;
267 ::llvm::Function* intr = intrinsic_helper_->GetIntrinsicFunction(id);
272 ::llvm::Function* func = intrinsic_helper_->GetIntrinsicFunction(
273 art::llvm::IntrinsicHelper::GetException);
274 ::llvm::Value* res = irb_->CreateCall(func);
279 ::llvm::Value* src = GetLLVMValue(rl_src.orig_sreg);
280 ::llvm::Function* func = intrinsic_helper_->GetIntrinsicFunction(
281 art::llvm::IntrinsicHelper::HLThrowException);
286 art::llvm::IntrinsicHelper::IntrinsicId id,
288 ::llvm::SmallVector< ::llvm::Value*, 2> args;
291 ::llvm::Function* func = intrinsic_helper_->GetIntrinsicFunction(id);
297 ::llvm::SmallVector< ::llvm::Value*, 2> args;
300 ::llvm::Function* func = intrinsic_helper_->GetIntrinsicFunction(
301 art::llvm::IntrinsicHelper::OptArrayLength);
302 ::llvm::Value* res = irb_->CreateCall(func, args);
307 art::llvm::IntrinsicHelper::IntrinsicId id =
308 art::llvm::IntrinsicHelper::CheckSuspend;
309 ::llvm::Function* intr = intrinsic_helper_->GetIntrinsicFunction(id);
313 ::llvm::Value* MirConverter::ConvertCompare(ConditionCode cc,
314 ::llvm::Value* src1, ::llvm::Value* src2) {
315 ::llvm::Value* res = NULL;
334 ::llvm::Value* src1 = GetLLVMValue(rl_src1.orig_sreg);
335 ::llvm::Value* src2 = GetLLVMValue(rl_src2.orig_sreg);
336 ::llvm::Value* cond_value = ConvertCompare(cc, src1, src2);
349 ::llvm::Value* src1 = GetLLVMValue(rl_src1.orig_sreg);
350 ::llvm::Value* src2;
356 ::llvm::Value* cond_value = ConvertCompare(cc, src1, src2);
363 ::llvm::Value* MirConverter::GenDivModOp(bool is_div, bool is_long,
364 ::llvm::Value* src1, ::llvm::Value* src2) {
365 art::llvm::IntrinsicHelper::IntrinsicId id;
368 id = art::llvm::IntrinsicHelper::DivLong;
370 id = art::llvm::IntrinsicHelper::RemLong;
374 id = art::llvm::IntrinsicHelper::DivInt;
376 id = art::llvm::IntrinsicHelper::RemInt;
379 ::llvm::Function* intr = intrinsic_helper_->GetIntrinsicFunction(id);
380 ::llvm::SmallVector< ::llvm::Value*, 2>args;
386 ::llvm::Value* MirConverter::GenArithOp(OpKind op, bool is_long,
387 ::llvm::Value* src1, ::llvm::Value* src2) {
388 ::llvm::Value* res = NULL;
410 ::llvm::Value* src1 = GetLLVMValue(rl_src1.orig_sreg);
411 ::llvm::Value* src2 = GetLLVMValue(rl_src2.orig_sreg);
412 ::llvm::Value* res = NULL;
425 void MirConverter::ConvertShift(art::llvm::IntrinsicHelper::IntrinsicId id,
427 ::llvm::Function* intr = intrinsic_helper_->GetIntrinsicFunction(id);
428 ::llvm::SmallVector< ::llvm::Value*, 2>args;
431 ::llvm::Value* res = irb_->CreateCall(intr, args);
435 void MirConverter::ConvertShiftLit(art::llvm::IntrinsicHelper::IntrinsicId id,
437 ::llvm::Function* intr = intrinsic_helper_->GetIntrinsicFunction(id);
438 ::llvm::SmallVector< ::llvm::Value*, 2>args;
441 ::llvm::Value* res = irb_->CreateCall(intr, args);
447 ::llvm::Value* src1 = GetLLVMValue(rl_src1.orig_sreg);
448 ::llvm::Value* src2 = GetLLVMValue(rl_src2.orig_sreg);
450 ::llvm::Value* res = GenArithOp(op, rl_dest.wide, src1, src2);
456 ::llvm::Value* src1 = GetLLVMValue(rl_src1.orig_sreg);
457 ::llvm::Value* src2 = irb_->getInt32(imm);
458 ::llvm::Value* res = GenArithOp(op, rl_dest.wide, src1, src2);
470 ::llvm::SmallVector< ::llvm::Value*, 10> args;
479 ::llvm::Value* val = GetLLVMValue(info->args[i].orig_sreg);
488 art::llvm::IntrinsicHelper::IntrinsicId id;
490 id = art::llvm::IntrinsicHelper::HLFilledNewArray;
492 id = art::llvm::IntrinsicHelper::HLInvokeVoid;
496 id = art::llvm::IntrinsicHelper::HLInvokeDouble;
498 id = art::llvm::IntrinsicHelper::HLInvokeLong;
501 id = art::llvm::IntrinsicHelper::HLInvokeObj;
503 id = art::llvm::IntrinsicHelper::HLInvokeFloat;
505 id = art::llvm::IntrinsicHelper::HLInvokeInt;
508 ::llvm::Function* intr = intrinsic_helper_->GetIntrinsicFunction(id);
509 ::llvm::Value* res = irb_->CreateCall(intr, args);
516 art::llvm::IntrinsicHelper::IntrinsicId id, RegLocation rl_dest) {
517 ::llvm::Function* intr = intrinsic_helper_->GetIntrinsicFunction(id);
518 ::llvm::Value* index = irb_->getInt32(idx);
519 ::llvm::Value* res = irb_->CreateCall(intr, index);
524 art::llvm::IntrinsicHelper::IntrinsicId id;
525 id = art::llvm::IntrinsicHelper::HLCheckCast;
526 ::llvm::Function* intr = intrinsic_helper_->GetIntrinsicFunction(id);
527 ::llvm::SmallVector< ::llvm::Value*, 2> args;
534 art::llvm::IntrinsicHelper::IntrinsicId id;
535 id = art::llvm::IntrinsicHelper::NewInstance;
536 ::llvm::Function* intr = intrinsic_helper_->GetIntrinsicFunction(id);
537 ::llvm::Value* index = irb_->getInt32(type_idx);
538 ::llvm::Value* res = irb_->CreateCall(intr, index);
544 art::llvm::IntrinsicHelper::IntrinsicId id;
545 id = art::llvm::IntrinsicHelper::NewArray;
546 ::llvm::Function* intr = intrinsic_helper_->GetIntrinsicFunction(id);
547 ::llvm::SmallVector< ::llvm::Value*, 2> args;
550 ::llvm::Value* res = irb_->CreateCall(intr, args);
555 art::llvm::IntrinsicHelper::IntrinsicId id,
557 ::llvm::SmallVector< ::llvm::Value*, 3> args;
561 ::llvm::Function* intr = intrinsic_helper_->GetIntrinsicFunction(id);
562 ::llvm::Value* res = irb_->CreateCall(intr, args);
567 art::llvm::IntrinsicHelper::IntrinsicId id,
569 ::llvm::SmallVector< ::llvm::Value*, 4> args;
574 ::llvm::Function* intr = intrinsic_helper_->GetIntrinsicFunction(id);
579 art::llvm::IntrinsicHelper::IntrinsicId id,
581 ::llvm::SmallVector< ::llvm::Value*, 3> args;
585 ::llvm::Function* intr = intrinsic_helper_->GetIntrinsicFunction(id);
586 ::llvm::Value* res = irb_->CreateCall(intr, args);
591 art::llvm::IntrinsicHelper::IntrinsicId id,
593 ::llvm::SmallVector< ::llvm::Value*, 4> args;
598 ::llvm::Function* intr = intrinsic_helper_->GetIntrinsicFunction(id);
604 art::llvm::IntrinsicHelper::IntrinsicId id;
605 id = art::llvm::IntrinsicHelper::InstanceOf;
606 ::llvm::Function* intr = intrinsic_helper_->GetIntrinsicFunction(id);
607 ::llvm::SmallVector< ::llvm::Value*, 2> args;
610 ::llvm::Value* res = irb_->CreateCall(intr, args);
615 ::llvm::Value* res = irb_->CreateSExt(GetLLVMValue(rl_src.orig_sreg),
621 ::llvm::Value* src = GetLLVMValue(rl_src.orig_sreg);
622 ::llvm::Value* res = irb_->CreateTrunc(src, irb_->getInt32Ty());
627 ::llvm::Value* src = GetLLVMValue(rl_src.orig_sreg);
628 ::llvm::Value* res = irb_->CreateFPExt(src, irb_->getDoubleTy());
633 ::llvm::Value* src = GetLLVMValue(rl_src.orig_sreg);
634 ::llvm::Value* res = irb_->CreateFPTrunc(src, irb_->getFloatTy());
638 void MirConverter::ConvertWideComparison(art::llvm::IntrinsicHelper::IntrinsicId id,
643 ::llvm::Function* intr = intrinsic_helper_->GetIntrinsicFunction(id);
644 ::llvm::SmallVector< ::llvm::Value*, 2> args;
647 ::llvm::Value* res = irb_->CreateCall(intr, args);
652 art::llvm::IntrinsicHelper::IntrinsicId id) {
653 ::llvm::Function* intr = intrinsic_helper_->GetIntrinsicFunction(id);
654 ::llvm::Value* res =
660 ::llvm::Value* res = irb_->CreateNeg(GetLLVMValue(rl_src.orig_sreg));
664 void MirConverter::ConvertIntToFP(::llvm::Type* ty, RegLocation rl_dest,
666 ::llvm::Value* res =
671 void MirConverter::ConvertFPToInt(art::llvm::IntrinsicHelper::IntrinsicId id,
674 ::llvm::Function* intr = intrinsic_helper_->GetIntrinsicFunction(id);
675 ::llvm::Value* res = irb_->CreateCall(intr, GetLLVMValue(rl_src.orig_sreg));
681 ::llvm::Value* res =
687 ::llvm::Value* src = GetLLVMValue(rl_src.orig_sreg);
688 ::llvm::Value* res = irb_->CreateXor(src, static_cast<uint64_t>(-1));
693 ::llvm::Function* intr = intrinsic_helper_->GetIntrinsicFunction(
694 art::llvm::IntrinsicHelper::ConstructorBarrier);
704 ::llvm::BasicBlock* llvm_bb) {
780 ::llvm::Value* src = GetLLVMValue(rl_src[0].orig_sreg);
781 ::llvm::Value* res = EmitCopy(src, rl_dest);
789 ::llvm::Constant* imm_value = irb_->getJInt(vB);
790 ::llvm::Value* res = EmitConst(imm_value, rl_dest);
799 ::llvm::Constant* imm_value = irb_->getJLong(imm);
800 ::llvm::Value* res = EmitConst(imm_value, rl_dest);
806 ::llvm::Constant* imm_value = irb_->getJInt(vB << 16);
807 ::llvm::Value* res = EmitConst(imm_value, rl_dest);
813 ::llvm::Constant* imm_value =
815 ::llvm::Value* res = EmitConst(imm_value, rl_dest);
821 ::llvm::Constant* imm_value = irb_->getJLong(imm);
822 ::llvm::Value* res = EmitConst(imm_value, rl_dest);
828 ConvertSput(vB, art::llvm::IntrinsicHelper::HLSputObject,
833 ConvertSput(vB, art::llvm::IntrinsicHelper::HLSputFloat,
836 ConvertSput(vB, art::llvm::IntrinsicHelper::HLSput, rl_src[0]);
840 ConvertSput(vB, art::llvm::IntrinsicHelper::HLSputBoolean,
844 ConvertSput(vB, art::llvm::IntrinsicHelper::HLSputByte, rl_src[0]);
847 ConvertSput(vB, art::llvm::IntrinsicHelper::HLSputChar, rl_src[0]);
850 ConvertSput(vB, art::llvm::IntrinsicHelper::HLSputShort, rl_src[0]);
854 ConvertSput(vB, art::llvm::IntrinsicHelper::HLSputDouble,
857 ConvertSput(vB, art::llvm::IntrinsicHelper::HLSputWide,
863 ConvertSget(vB, art::llvm::IntrinsicHelper::HLSgetObject, rl_dest);
867 ConvertSget(vB, art::llvm::IntrinsicHelper::HLSgetFloat, rl_dest);
869 ConvertSget(vB, art::llvm::IntrinsicHelper::HLSget, rl_dest);
873 llvm::IntrinsicHelper::HLSgetBoolean, rl_dest);
876 ConvertSget(vB, art::llvm::IntrinsicHelper::HLSgetByte, rl_dest);
879 ConvertSget(vB, art::llvm::IntrinsicHelper::HLSgetChar, rl_dest);
882 ConvertSget(vB, art::llvm::IntrinsicHelper::HLSgetShort, rl_dest);
886 ConvertSget(vB, art::llvm::IntrinsicHelper::HLSgetDouble,
889 ConvertSget(vB, art::llvm::IntrinsicHelper::HLSgetWide, rl_dest);
1018 ConvertShift(art::llvm::IntrinsicHelper::SHLLong,
1023 ConvertShift(art::llvm::IntrinsicHelper::SHLInt,
1028 ConvertShift(art::llvm::IntrinsicHelper::SHRLong,
1033 ConvertShift(art::llvm::IntrinsicHelper::SHRInt,
1038 ConvertShift(art::llvm::IntrinsicHelper::USHRLong,
1043 ConvertShift(art::llvm::IntrinsicHelper::USHRInt,
1080 ConvertShiftLit(art::llvm::IntrinsicHelper::SHLInt,
1084 ConvertShiftLit(art::llvm::IntrinsicHelper::SHRInt,
1088 ConvertShiftLit(art::llvm::IntrinsicHelper::USHRInt,
1182 ConvertConstObject(vB, art::llvm::IntrinsicHelper::ConstString,
1187 ConvertConstObject(vB, art::llvm::IntrinsicHelper::ConstClass,
1229 art::llvm::IntrinsicHelper::MonitorEnter,
1235 art::llvm::IntrinsicHelper::MonitorExit,
1254 art::llvm::IntrinsicHelper::HLArrayGetFloat,
1257 ConvertAget(opt_flags, art::llvm::IntrinsicHelper::HLArrayGet,
1262 ConvertAget(opt_flags, art::llvm::IntrinsicHelper::HLArrayGetObject,
1267 art::llvm::IntrinsicHelper::HLArrayGetBoolean,
1271 ConvertAget(opt_flags, art::llvm::IntrinsicHelper::HLArrayGetByte,
1275 ConvertAget(opt_flags, art::llvm::IntrinsicHelper::HLArrayGetChar,
1279 ConvertAget(opt_flags, art::llvm::IntrinsicHelper::HLArrayGetShort,
1285 art::llvm::IntrinsicHelper::HLArrayGetDouble,
1288 ConvertAget(opt_flags, art::llvm::IntrinsicHelper::HLArrayGetWide,
1296 art::llvm::IntrinsicHelper::HLArrayPutFloat,
1299 ConvertAput(opt_flags, art::llvm::IntrinsicHelper::HLArrayPut,
1304 ConvertAput(opt_flags, art::llvm::IntrinsicHelper::HLArrayPutObject,
1309 art::llvm::IntrinsicHelper::HLArrayPutBoolean,
1313 ConvertAput(opt_flags, art::llvm::IntrinsicHelper::HLArrayPutByte,
1317 ConvertAput(opt_flags, art::llvm::IntrinsicHelper::HLArrayPutChar,
1321 ConvertAput(opt_flags, art::llvm::IntrinsicHelper::HLArrayPutShort,
1327 art::llvm::IntrinsicHelper::HLArrayPutDouble,
1330 ConvertAput(opt_flags, art::llvm::IntrinsicHelper::HLArrayPutWide,
1337 ConvertIget(opt_flags, art::llvm::IntrinsicHelper::HLIGetFloat,
1340 ConvertIget(opt_flags, art::llvm::IntrinsicHelper::HLIGet,
1345 ConvertIget(opt_flags, art::llvm::IntrinsicHelper::HLIGetObject,
1349 ConvertIget(opt_flags, art::llvm::IntrinsicHelper::HLIGetBoolean,
1353 ConvertIget(opt_flags, art::llvm::IntrinsicHelper::HLIGetByte,
1357 ConvertIget(opt_flags, art::llvm::IntrinsicHelper::HLIGetChar,
1361 ConvertIget(opt_flags, art::llvm::IntrinsicHelper::HLIGetShort,
1366 ConvertIget(opt_flags, art::llvm::IntrinsicHelper::HLIGetDouble,
1369 ConvertIget(opt_flags, art::llvm::IntrinsicHelper::HLIGetWide,
1375 ConvertIput(opt_flags, art::llvm::IntrinsicHelper::HLIPutFloat,
1378 ConvertIput(opt_flags, art::llvm::IntrinsicHelper::HLIPut,
1383 ConvertIput(opt_flags, art::llvm::IntrinsicHelper::HLIPutObject,
1387 ConvertIput(opt_flags, art::llvm::IntrinsicHelper::HLIPutBoolean,
1391 ConvertIput(opt_flags, art::llvm::IntrinsicHelper::HLIPutByte,
1395 ConvertIput(opt_flags, art::llvm::IntrinsicHelper::HLIPutChar,
1399 ConvertIput(opt_flags, art::llvm::IntrinsicHelper::HLIPutShort,
1404 ConvertIput(opt_flags, art::llvm::IntrinsicHelper::HLIPutDouble,
1407 ConvertIput(opt_flags, art::llvm::IntrinsicHelper::HLIPutWide,
1426 art::llvm::IntrinsicHelper::IntToChar);
1430 art::llvm::IntrinsicHelper::IntToByte);
1434 art::llvm::IntrinsicHelper::IntToShort);
1471 ConvertFPToInt(art::llvm::IntrinsicHelper::F2I, rl_dest, rl_src[0]);
1475 ConvertFPToInt(art::llvm::IntrinsicHelper::D2I, rl_dest, rl_src[0]);
1479 ConvertFPToInt(art::llvm::IntrinsicHelper::F2L, rl_dest, rl_src[0]);
1483 ConvertFPToInt(art::llvm::IntrinsicHelper::D2L, rl_dest, rl_src[0]);
1487 ConvertWideComparison(art::llvm::IntrinsicHelper::CmplFloat,
1491 ConvertWideComparison(art::llvm::IntrinsicHelper::CmpgFloat,
1495 ConvertWideComparison(art::llvm::IntrinsicHelper::CmplDouble,
1499 ConvertWideComparison(art::llvm::IntrinsicHelper::CmpgDouble,
1503 ConvertWideComparison(art::llvm::IntrinsicHelper::CmpLong,
1524 ::llvm::SmallVector< ::llvm::Value*, 1> array_ref;
1526 ::llvm::MDNode* node = ::llvm::MDNode::get(*context_, array_ref);
1534 art::llvm::IntrinsicHelper::IntrinsicId id;
1535 id = art::llvm::IntrinsicHelper::MethodInfo;
1536 ::llvm::Function* intr = intrinsic_helper_->GetIntrinsicFunction(id);
1537 ::llvm::Instruction* inst = irb_->CreateCall(intr);
1538 ::llvm::SmallVector< ::llvm::Value*, 2> reg_info;
1544 ::llvm::MDNode* reg_info_node = ::llvm::MDNode::get(*context_, reg_info);
1549 void MirConverter::HandlePhiNodes(BasicBlock* bb, ::llvm::BasicBlock* llvm_bb) {
1565 * for the lower and upper halves. In the llvm world, we only
1573 ::llvm::Type* phi_type =
1575 ::llvm::PHINode* phi = irb_->CreatePHI(phi_type, mir->ssa_rep->num_uses);
1599 ::llvm::BasicBlock* llvm_bb) {
1602 // The llvm Phi node already emitted - just DefineValue() here.
1607 ::llvm::Value* phi = GetLLVMValue(rl_dest.orig_sreg);
1647 ::llvm::BasicBlock* llvm_bb = GetLLVMBlock(bb->id);
1669 art::llvm::IntrinsicHelper::IntrinsicId id =
1670 art::llvm::IntrinsicHelper::AllocaShadowFrame;
1671 ::llvm::Function* func = intrinsic_helper_->GetIntrinsicFunction(id);
1672 ::llvm::Value* entries = irb_->getInt32(cu_->num_dalvik_registers);
1679 ::llvm::Function::arg_iterator arg_iter(func_->arg_begin());
1706 * Because of the differences between how MIR/LIR and llvm handle exit
1707 * blocks, we won't explicitly covert them. On the llvm-to-lir
1739 ::llvm::Function* intr = intrinsic_helper_->GetIntrinsicFunction(
1740 art::llvm::IntrinsicHelper::CatchTargets);
1741 ::llvm::Value* switch_key =
1745 ::llvm::BasicBlock* work_bb =
1746 ::llvm::BasicBlock::Create(*context_, "", func_);
1747 ::llvm::SwitchInst* sw =
1752 ::llvm::BasicBlock *target =
1791 * virtual register containers. Because llvm is picky about type consistency,
1808 ::llvm::FunctionType* MirConverter::GetFunctionType() {
1810 ::llvm::Type* ret_type = irb_->getJType(RemapShorty(cu_->shorty[0]));
1813 std::vector< ::llvm::Type*> args_type;
1827 return ::llvm::FunctionType::get(ret_type, args_type, false);
1831 ::llvm::FunctionType* func_type = GetFunctionType();
1836 func_ = ::llvm::Function::Create(func_type,
1837 ::llvm::Function::InternalLinkage,
1840 ::llvm::Function::arg_iterator arg_iter(func_->arg_begin());
1841 ::llvm::Function::arg_iterator arg_end(func_->arg_end());
1863 ::llvm::BasicBlock* llvm_bb =
1864 ::llvm::BasicBlock::Create(*context_, entry_block ? "entry" :
1870 ::llvm::BasicBlock::Create(*context_, "placeholder",
1881 * o For each ssa name, create LLVM named value. Type these
1883 * o For each MIR basic block, create an LLVM basic block.
1893 // Create an LLVM basic block for each MIR block in dfs preorder
1900 * Create an llvm named value for each MIR SSA name. Note: we'll use
1905 ::llvm::Function::arg_iterator arg_iter(func_->arg_begin());
1908 ::llvm::Value* val;
1914 ::llvm::Constant* imm_value = mir_graph_->reg_location_[i].wide ?
1921 ::llvm::Value* arg_val = arg_iter++;
1944 for (::llvm::BasicBlock::iterator it = placeholder_bb_->begin(),
1946 ::llvm::Instruction* inst = ::llvm::dyn_cast< ::llvm::Instruction>(it++);
1948 ::llvm::Value* val = ::llvm::dyn_cast< ::llvm::Value>(inst);
1966 if (::llvm::verifyFunction(*func_, ::llvm::PrintMessageAction)) {
1987 ::llvm::OwningPtr< ::llvm::tool_output_file> out_file(
1988 new ::llvm::tool_output_file(fname.c_str(), errmsg,
1989 ::llvm::sys::fs::F_Binary));
1995 ::llvm::WriteBitcodeToFile(module_, out_file->os());
2002 llvm::LlvmCompilationUnit* const llvm_compilation_unit) {