/art/compiler/optimizing/ |
H A D | ssa_type_propagation.cc | 37 static bool UpdateType(HPhi* phi) { argument 38 Primitive::Type existing = phi->GetType(); 41 for (size_t i = 0, e = phi->InputCount(); i < e; ++i) { 42 Primitive::Type input_type = phi->InputAt(i)->GetType(); 45 phi->SetType(new_type); 59 HPhi* phi = it.Current()->AsPhi(); local 60 // Set the initial type for the phi. Use the non back edge input for reaching 62 phi->SetType(phi->InputAt(0)->GetType()); 63 AddToWorklist(phi); 67 HPhi* phi = it.Current()->AsPhi(); local 90 HPhi* phi = it.Current()->GetUser()->AsPhi(); local [all...] |
H A D | ssa_phi_elimination.cc | 22 // Add to the worklist phis referenced by non-phi instructions. 26 HPhi* phi = it.Current()->AsPhi(); local 27 if (phi->HasEnvironmentUses()) { 28 // TODO: Do we want to keep that phi alive? 31 for (HUseIterator<HInstruction> it(phi->GetUses()); !it.Done(); it.Advance()) { 35 worklist_.Add(phi); 36 phi->SetLive(); 38 phi->SetDead(); 44 // Process the worklist by propagating liveness to phi inputs. 46 HPhi* phi local 82 HPhi* phi = worklist_.Pop(); local [all...] |
H A D | ssa_type_propagation.h | 35 void AddToWorklist(HPhi* phi); 36 void AddDependentInstructionsToWorklist(HPhi* phi);
|
H A D | ssa_builder.cc | 36 HPhi* phi = it.Current()->AsPhi(); local 38 HInstruction* input = ValueOfLocal(block->GetPredecessors().Get(pred), phi->GetRegNumber()); 39 phi->AddInput(input); 75 HPhi* phi = new (GetGraph()->GetArena()) HPhi( local 77 block->AddPhi(phi); 78 current_locals_->Put(local, phi); 109 HPhi* phi = new (GetGraph()->GetArena()) HPhi( local 113 phi->SetRawInputAt(i, value); 115 block->AddPhi(phi); 116 value = phi; [all...] |
H A D | register_allocator_test.cc | 179 * phi 221 * phi 278 * phi + 308 HPhi* phi = loop_header->GetFirstPhi()->AsPhi(); local 310 LiveInterval* phi_interval = phi->GetLiveInterval(); 311 LiveInterval* loop_update = phi->InputAt(1)->GetLiveInterval();
|
H A D | ssa_liveness_analysis.cc | 96 // start and end position. Non-phi instructions have a distinct lifetime position than 173 // Set phi inputs of successors of this block corresponding to this block 180 HInstruction* phi = it.Current(); local 181 HInstruction* input = phi->InputAt(phi_input_index); 182 input->GetLiveInterval()->AddPhiUse(phi, phi_input_index, block); 183 // A phi input whose last user is the phi dies at the end of the predecessor block, 184 // and not at the phi's lifetime position.
|
H A D | nodes.cc | 324 void HBasicBlock::AddPhi(HPhi* phi) { argument 325 Add(&phis_, this, phi); 346 void HBasicBlock::RemovePhi(HPhi* phi) { argument 347 Remove(&phis_, this, phi);
|
H A D | register_allocator.cc | 964 // Resolve phi inputs. Order does not matter. 968 HInstruction* phi = it.Current(); local 972 HInstruction* input = phi->InputAt(i); 975 Location destination = ConvertToLocation(phi->GetLiveInterval());
|
H A D | nodes.h | 355 void AddPhi(HPhi* phi); 356 void RemovePhi(HPhi* phi);
|
/art/compiler/sea_ir/debug/ |
H A D | dot_gen.cc | 165 void DotGenerationVisitor::Visit(PhiInstructionNode* phi) { argument 166 dot_text_ += "// PhiInstruction: \n" + phi->StringId() + 167 " [label=\"[" + phi->StringId() + "] PHI("; 168 dot_text_ += art::StringPrintf("%d", phi->GetRegisterNumber()); 171 ToDotSSAEdges(phi);
|
H A D | dot_gen.h | 58 void Visit(PhiInstructionNode* phi);
|
/art/compiler/sea_ir/code_gen/ |
H A D | code_gen.cc | 29 void CodeGenPrepassVisitor::Visit(PhiInstructionNode* phi) { argument 30 Region* r = phi->GetRegion(); 35 llvm::Type::getInt32Ty(*llvm_data_->context_), predecessors->size(), phi->StringId()); 36 llvm_data_->AddValue(phi, llvm_phi); 256 void CodeGenPostpassVisitor::Visit(PhiInstructionNode* phi) { argument 257 std::cout << "10. Instruction: Phi(" << phi->GetRegisterNumber() << ")" << std::endl; 258 Region* r = phi->GetRegion(); 262 // Prepass (CodeGenPrepassVisitor) should create the phi function value. 263 llvm::PHINode* llvm_phi = (llvm::PHINode*) llvm_data_->GetValue(phi); 267 std::vector<InstructionNode*>* defining_instructions = phi [all...] |
/art/compiler/sea_ir/ir/ |
H A D | visitor.h | 79 virtual void Traverse(PhiInstructionNode* phi) { } argument
|
H A D | sea.cc | 320 // Pass: Actually add phi-nodes to regions. 351 // Rename phi nodes defined in the current region. 379 // Fill in uses of phi functions in CFG successor regions. 596 PhiInstructionNode* phi = (*phi_it); local 597 int reg_no = phi->GetRegisterNumber(); 599 phi->RenameToSSA(reg_no, definition, predecessor_id);
|
/art/compiler/dex/ |
H A D | ssa_transformation.cc | 228 * TODO - evaluate whether phi will ever need to be inserted into exit 455 * The calculated result is used for phi-node pruning - where we only need to 456 * insert a phi node if the variable is live-in to the block. 495 /* Insert phi nodes to for each variable to the dominance frontiers */ 524 * Insert a phi node for dalvik_reg in the phi_blocks if the Dalvik 529 /* Variable will be clobbered before being used - no need for phi */ 533 MIR *phi = NewMIR(); local 534 phi->dalvikInsn.opcode = static_cast<Instruction::Code>(kMirOpPhi); 535 phi->dalvikInsn.vA = dalvik_reg; 536 phi [all...] |
H A D | mir_optimization.cc | 471 MIR* phi = FindPhi(tk_tk, if_true->ssa_rep->defs[0]); local 472 if ((phi != NULL) && (if_true->dalvikInsn.vA == if_false->dalvikInsn.vA)) { 534 if (phi->ssa_rep->num_uses == 2) { 535 mir->ssa_rep->defs[0] = phi->ssa_rep->defs[0]; 536 phi->dalvikInsn.opcode = static_cast<Instruction::Code>(kMirOpNop); 541 BasicBlockId* incoming = phi->meta.phi_incoming; 542 for (int i = 0; i < phi->ssa_rep->num_uses; i++) { 543 if (phi->ssa_rep->uses[i] == live_def) { 547 for (int i = 0; i < phi->ssa_rep->num_uses; i++) { 548 if (phi [all...] |
/art/compiler/llvm/ |
H A D | gbc_expander.cc | 531 // Update the phi-instructions in the successor basic block 557 // Iterate every phi instructions in the succeeding basic block 562 llvm::PHINode *phi = llvm::dyn_cast<llvm::PHINode>(inst_iter); local 564 if (!phi) { 565 break; // Meet non-phi instruction. Done. 568 if (handler_phi[phi] == NULL) { 569 handler_phi[phi] = llvm::PHINode::Create(phi->getType(), 1); 573 llvm::PHINode* new_phi = irb_.CreatePHI(phi->getType(), rewrite_pair.size()); 578 new_phi->addIncoming(phi 624 llvm::PHINode *phi = llvm::dyn_cast<llvm::PHINode>(inst_iter); local 1802 llvm::PHINode* phi = irb_.CreatePHI(irb_.getJObjectTy(), 2); local 1867 llvm::PHINode* phi = irb_.CreatePHI(irb_.getJObjectTy(), 2); local 2103 llvm::PHINode* phi = irb_.CreatePHI(irb_.getJObjectTy(), 2); local 2269 llvm::PHINode* phi = irb_.CreatePHI(irb_.getJIntTy(), 3); local [all...] |
/art/compiler/dex/portable/ |
H A D | mir_to_gbc.cc | 1575 ::llvm::PHINode* phi = irb_->CreatePHI(phi_type, mir->ssa_rep->num_uses); local 1590 phi->addIncoming(GetLLVMValue(loc.orig_sreg), 1593 DefineValueOnly(phi, rl_dest.orig_sreg); 1607 ::llvm::Value* phi = GetLLVMValue(rl_dest.orig_sreg); local 1608 if (1) SetVregOnValue(phi, rl_dest.orig_sreg);
|