/art/test/481-regression-phi-cond/src/ |
H A D | Main.java | 26 boolean phi; 28 phi = x; 30 phi = y; 32 return phi; 41 boolean phi = inlinePhi(x, y, z); 42 // Now use the phi as a condition which the boolean simplifier will try to 44 // the original condition (phi) and crash. 45 return dontUseParam(phi == false ? false : true);
|
/art/compiler/optimizing/ |
H A D | ssa_phi_elimination.cc | 36 // Add to the worklist phis referenced by non-phi instructions. 39 HPhi* phi = inst_it.Current()->AsPhi(); local 40 if (phi->IsDead()) { 44 bool keep_alive = (graph_->IsDebuggable() && phi->HasEnvironmentUses()); 46 for (const HUseListNode<HInstruction*>& use : phi->GetUses()) { 55 worklist_.push_back(phi); 57 phi->SetDead(); 59 initially_live.insert(phi); 65 // Process the worklist by propagating liveness to phi inputs. 67 HPhi* phi local 89 HPhi* phi; local 133 HPhi* phi = worklist_.back(); local [all...] |
H A D | ssa_builder.cc | 51 // Both type propagation and redundant phi elimination ensure `int_operand` 64 HPhi* phi = it.Current()->AsPhi(); local 65 HPhi* next = phi->GetNextEquivalentPhiWithSameType(); 67 // Make sure we do not replace a live phi with a dead phi. A live phi 68 // has been handled by the type propagation phase, unlike a dead phi. 70 phi->ReplaceWith(next); 71 phi->SetDead(); 73 next->ReplaceWith(phi); 86 HPhi* phi = it_phis.Current()->AsPhi(); local 124 TypePhiFromInputs(HPhi* phi) argument 165 TypeInputsOfPhi(HPhi* phi, ArenaVector<HPhi*>* worklist) argument 210 UpdatePrimitiveType(HPhi* phi, ArenaVector<HPhi*>* worklist) argument 235 HPhi* phi = phi_it.Current()->AsPhi(); local 247 HPhi* phi = phi_it.Current()->AsPhi(); local 262 HPhi* phi = worklist->back(); local 602 GetFloatDoubleOrReferenceEquivalentOfPhi(HPhi* phi, Primitive::Type type) argument [all...] |
H A D | select_generator.cc | 54 // Returns nullptr if `block` has either no phis or there is more than one phi 55 // with different inputs at `index1` and `index2`. Otherwise returns that phi. 61 HPhi* phi = it.Current()->AsPhi(); local 62 if (phi->InputAt(index1) != phi->InputAt(index2)) { 64 // First phi with different inputs for the two indices found. 65 select_phi = phi; 111 HPhi* phi = GetSingleChangedPhi(merge_block, predecessor_index_true, predecessor_index_false); local 112 if (phi == nullptr) { 115 HInstruction* true_value = phi [all...] |
H A D | graph_checker.cc | 125 AddError(StringPrintf("Block %d has a non-phi in its phi list.", 129 AddError(StringPrintf("The recorded last phi of block %d does not match " 130 "the actual last phi %d.", 142 AddError(StringPrintf("Block %d has a phi in its non-phi list.", 477 "with catch phi %d for vreg %d but its " 704 void GraphChecker::VisitPhi(HPhi* phi) { argument 705 VisitInstruction(phi); 707 // Ensure the first input of a phi i [all...] |
H A D | dead_code_elimination.cc | 151 // i1 = phi(input, input) 203 HPhi* phi = block->GetFirstPhi()->AsPhi(); local 204 bool phi_input_is_left = (first->InputAt(0) == phi); 207 // predecessors feeding constants to the phi. 208 // Note that phi->InputCount() may change inside the loop. 209 for (size_t i = 0; i < phi->InputCount();) { 210 HInstruction* input = phi->InputAt(i); 238 phi->RemoveInputAt(i); 245 if (phi->InputCount() == 1) { 251 phi [all...] |
H A D | ssa_builder.h | 108 bool TypeInputsOfPhi(HPhi* phi, ArenaVector<HPhi*>* worklist); 109 bool UpdatePrimitiveType(HPhi* phi, ArenaVector<HPhi*>* worklist); 114 HPhi* GetFloatDoubleOrReferenceEquivalentOfPhi(HPhi* phi, Primitive::Type type);
|
H A D | bounds_check_elimination_test.cc | 391 HPhi* phi = new (allocator) HPhi(allocator, 0, 0, Primitive::kPrimInt); local 396 cmp = new (allocator) HGreaterThanOrEqual(phi, array_length); 399 cmp = new (allocator) HGreaterThan(phi, array_length); 402 loop_header->AddPhi(phi); 407 phi->AddInput(constant_initial); 411 HInstruction* bounds_check = new (allocator) HBoundsCheck(phi, array_length, 0); 415 HInstruction* add = new (allocator) HAdd(Primitive::kPrimInt, phi, constant_increment); 422 phi->AddInput(add); 511 HPhi* phi = new (allocator) HPhi(allocator, 0, 0, Primitive::kPrimInt); local 514 cmp = new (allocator) HLessThanOrEqual(phi, constant_initia 619 HPhi* phi = new (allocator) HPhi(allocator, 0, 0, Primitive::kPrimInt); local 718 HPhi* phi = new (allocator) HPhi(allocator, 0, 0, Primitive::kPrimInt); local [all...] |
H A D | induction_var_analysis.cc | 26 * classification, the lexicographically first loop-phi is rotated to the front. 31 // Find very first loop-phi. 33 HInstruction* phi = nullptr; local 38 if (other->IsLoopHeaderPhi() && (phi == nullptr || phis.FoundBefore(other, phi))) { 39 phi = other; 44 // If found, bring that loop-phi to front. 45 if (phi != nullptr) { 135 // Visit phi-operations and instructions. 260 // Rotate proper loop-phi t 267 HInstruction* phi = scc_[0]; local 407 TransferPhi(HLoopInformation* loop, HInstruction* phi, size_t input_index, size_t adjust_input_size) argument 537 SolvePhi(HInstruction* phi, size_t input_index, size_t adjust_input_size) argument 557 SolvePhiAllInputs( HLoopInformation* loop, HInstruction* entry_phi, HInstruction* phi) argument 1114 AssignCycle(HPhi* phi) argument 1122 LookupCycle(HPhi* phi) argument [all...] |
H A D | induction_var_range_test.cc | 103 HPhi* phi = new (&allocator_) HPhi(&allocator_, 0, 0, Primitive::kPrimInt); local 104 loop_header_->AddPhi(phi); 105 phi->AddInput(graph_->GetIntConstant(lower)); // i = l 107 condition_ = new (&allocator_) HLessThan(phi, upper); // i < u 109 condition_ = new (&allocator_) HGreaterThan(phi, upper); // i > u 113 increment_ = new (&allocator_) HAdd(Primitive::kPrimInt, phi, graph_->GetIntConstant(stride)); 115 phi->AddInput(increment_); 737 HInstruction* phi = condition_->InputAt(0); local 741 range_.GetInductionRange(condition_, phi, x_, &v1, &v2, &needs_finite_test); 747 range_.GetInductionRange(increment_, phi, x 789 HInstruction* phi = condition_->InputAt(0); local 848 HInstruction* phi = condition_->InputAt(0); local 930 HInstruction* phi = condition_->InputAt(0); local [all...] |
H A D | induction_var_analysis.h | 164 HInstruction* phi, 173 InductionInfo* SolvePhi(HInstruction* phi, size_t input_index, size_t adjust_input_size); 176 HInstruction* phi); 231 void AssignCycle(HPhi* phi); 232 ArenaSet<HInstruction*>* LookupCycle(HPhi* phi); 262 * Preserves induction cycle information for each loop-phi.
|
H A D | bounds_check_elimination.cc | 285 * of an existing value range, NewArray or a loop phi corresponding to an 910 static bool HasSameInputAtBackEdges(HPhi* phi) { argument 911 DCHECK(phi->IsLoopHeaderPhi()); 912 HConstInputsRef inputs = phi->GetInputs(); 915 DCHECK(phi->GetBlock()->GetLoopInformation()->IsBackEdge( 916 *phi->GetBlock()->GetPredecessors()[1])); 918 DCHECK(phi->GetBlock()->GetLoopInformation()->IsBackEdge( 919 *phi->GetBlock()->GetPredecessors()[i])); 927 void VisitPhi(HPhi* phi) OVERRIDE { 928 if (phi 1744 HPhi* phi = nullptr; local 1795 HPhi* phi = new (graph->GetArena()) local [all...] |
H A D | reference_type_propagation.h | 88 void VisitPhi(HPhi* phi); 91 void UpdatePhi(HPhi* phi) REQUIRES_SHARED(Locks::mutator_lock_);
|
H A D | register_allocator_test.cc | 204 * phi 248 * phi 297 * phi + 330 HPhi* phi = loop_header->GetFirstPhi()->AsPhi(); local 332 LiveInterval* phi_interval = phi->GetLiveInterval(); 333 LiveInterval* loop_update = phi->InputAt(1)->GetLiveInterval(); 386 /* Test for a dead loop phi taking as back-edge input a phi that also has 387 * this loop phi as input. Walking backwards in SsaDeadPhiElimination 388 * does not solve the problem because the loop phi wil 489 BuildIfElseWithPhi(ArenaAllocator* allocator, HPhi** phi, HInstruction** input1, HInstruction** input2) argument 564 HPhi *phi; local [all...] |
H A D | reference_type_propagation.cc | 731 void ReferenceTypePropagation::VisitPhi(HPhi* phi) { argument 732 if (phi->IsDead() || phi->GetType() != Primitive::kPrimNot) { 736 if (phi->GetBlock()->IsLoopHeader()) { 737 // Set the initial type for the phi. Use the non back edge input for reaching 739 HInstruction* first_input = phi->InputAt(0); 742 phi->SetCanBeNull(first_input->CanBeNull()); 743 phi->SetReferenceTypeInfo(first_input_rti); 745 AddToWorklist(phi); 747 // Eagerly compute the type of the phi, fo 948 HPhi* phi = instr->AsPhi(); local [all...] |
H A D | loop_optimization.cc | 373 HPhi* phi = it.Current()->AsPhi(); local 374 iset_->clear(); // prepare phi induction 375 if (TrySetPhiInduction(phi, /*restrict_uses*/ true) && 376 TryAssignLastValue(node->loop_info, phi, preheader, /*collect_loop_uses*/ false)) { 460 HInstruction* phi = header->GetFirstPhi(); local 461 iset_->clear(); // prepare phi induction 465 TryAssignLastValue(node->loop_info, phi, preheader, /*collect_loop_uses*/ true)) { 468 phi->ReplaceWith(phi->InputAt(0)); 487 iset_->clear(); // prepare phi inductio 1273 TrySetPhiInduction(HPhi* phi, bool restrict_uses) argument 1306 HInstruction* phi = block->GetFirstPhi(); local [all...] |
H A D | live_ranges_test.cc | 150 * 22: phi 174 // Last use is the phi at the return block so instruction is live until 190 // Last use is the phi at the return block. 194 // Test for the phi. 220 * 14: phi 253 // Last use is the loop phi so instruction is live until 274 // Test for the phi. 298 * 10: phi 309 * We want to make sure the phi at 10 has a lifetime hole after the add at 20. 333 // Last use is the loop phi s 339 HPhi* phi = liveness.GetInstructionFromSsaIndex(1)->AsPhi(); local 443 HPhi* phi = liveness.GetInstructionFromSsaIndex(4)->AsPhi(); local [all...] |
H A D | graph_checker.h | 51 void VisitPhi(HPhi* phi) OVERRIDE;
|
H A D | register_allocator_linear_scan.h | 87 // Allocate a spill slot for the given catch phi. Will allocate the same slot 90 void AllocateSpillSlotForCatchPhi(HPhi* phi);
|
H A D | induction_var_range.h | 147 * Lookup an interesting cycle associated with an entry phi. 149 ArenaSet<HInstruction*>* LookupCycle(HPhi* phi) const { 150 return induction_analysis_->LookupCycle(phi);
|
H A D | loop_optimization.h | 149 bool TrySetPhiInduction(HPhi* phi, bool restrict_uses);
|
H A D | ssa_liveness_analysis.cc | 40 // start and end position. Non-phi instructions have a distinct lifetime position than 131 // Check that the inlined input is not a phi. Recursing on loop phis could 146 // Set phi inputs of successors of this block corresponding to this block 153 // catch phi spill slots when an exception is thrown. 162 HInstruction* phi = phi_it.Current(); local 163 HInstruction* input = phi->InputAt(phi_input_index); 164 input->GetLiveInterval()->AddPhiUse(phi, phi_input_index, block); 165 // A phi input whose last user is the phi dies at the end of the predecessor block, 166 // and not at the phi' [all...] |
H A D | register_allocation_resolver.cc | 94 // [catch phi spill slots ] 178 // Resolve phi inputs. Order does not matter. 181 // Catch phi values are set at runtime by the exception delivery mechanism. 184 HInstruction* phi = inst_it.Current(); local 188 HInstruction* input = phi->InputAt(i); 191 Location destination = phi->GetLiveInterval()->ToLocation(); 192 InsertParallelMoveAtExitOf(predecessor, phi, source, destination); 574 // We may insert moves for split siblings and phi spills at the beginning of the block. 633 // We insert moves at exit for phi predecessors and connecting blocks.
|
H A D | register_allocator_linear_scan.cc | 1160 void RegisterAllocatorLinearScan::AllocateSpillSlotForCatchPhi(HPhi* phi) { argument 1161 LiveInterval* interval = phi->GetLiveInterval(); 1163 HInstruction* previous_phi = phi->GetPrevious(); 1165 previous_phi->AsPhi()->GetRegNumber() <= phi->GetRegNumber()) 1168 if (phi->IsVRegEquivalentOf(previous_phi)) { 1169 // This is an equivalent of the previous phi. We need to assign the same 1170 // catch phi slot. 1174 // Allocate a new spill slot for this catch phi.
|
H A D | instruction_builder.cc | 59 // is encountered. Unused phis will be removed by dead phi analysis. 61 // No point in creating the catch phi if it is already undefined at 65 HPhi* phi = new (arena_) HPhi( local 70 block->AddPhi(phi); 71 (*locals)[i] = phi; 115 HPhi* phi = new (arena_) HPhi( local 120 current_block_->AddPhi(phi); 121 (*current_locals_)[local] = phi; 154 HPhi* phi = new (arena_) HPhi( local 161 phi 242 HPhi* phi = it.Current()->AsPhi(); local [all...] |