Searched refs:phi (Results 1 - 25 of 31) sorted by relevance

12

/art/test/481-regression-phi-cond/src/
H A DMain.java26 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 Dssa_phi_elimination.cc36 // 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 Dssa_builder.cc51 // 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 Dselect_generator.cc54 // 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 Dgraph_checker.cc125 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 Ddead_code_elimination.cc151 // 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 Dssa_builder.h108 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 Dbounds_check_elimination_test.cc391 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 Dinduction_var_analysis.cc26 * 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 Dinduction_var_range_test.cc103 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 Dinduction_var_analysis.h164 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 Dbounds_check_elimination.cc285 * 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 Dreference_type_propagation.h88 void VisitPhi(HPhi* phi);
91 void UpdatePhi(HPhi* phi) REQUIRES_SHARED(Locks::mutator_lock_);
H A Dregister_allocator_test.cc204 * 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 Dreference_type_propagation.cc731 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 Dloop_optimization.cc373 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 Dlive_ranges_test.cc150 * 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 Dgraph_checker.h51 void VisitPhi(HPhi* phi) OVERRIDE;
H A Dregister_allocator_linear_scan.h87 // Allocate a spill slot for the given catch phi. Will allocate the same slot
90 void AllocateSpillSlotForCatchPhi(HPhi* phi);
H A Dinduction_var_range.h147 * Lookup an interesting cycle associated with an entry phi.
149 ArenaSet<HInstruction*>* LookupCycle(HPhi* phi) const {
150 return induction_analysis_->LookupCycle(phi);
H A Dloop_optimization.h149 bool TrySetPhiInduction(HPhi* phi, bool restrict_uses);
H A Dssa_liveness_analysis.cc40 // 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 Dregister_allocation_resolver.cc94 // [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 Dregister_allocator_linear_scan.cc1160 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 Dinstruction_builder.cc59 // 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...]

Completed in 206 milliseconds

12