• Home
  • History
  • Annotate
  • Raw
  • Download

Lines Matching refs:context

160 static bool IsContextInBody(const HBasicBlock* context, const HLoopInformation* loop) {  in IsContextInBody()  argument
164 return context != loop->GetHeader() && loop->Contains(*context); in IsContextInBody()
168 bool UseFullTripCount(const HBasicBlock* context, const HLoopInformation* loop, bool is_min) { in UseFullTripCount() argument
176 if (loop->Contains(*context)) { in UseFullTripCount()
178 DCHECK_NE(context == loop->GetHeader(), IsContextInBody(context, loop)); in UseFullTripCount()
179 return !is_min && context == loop->GetHeader(); in UseFullTripCount()
188 return loop_exit_block->Dominates(context); in UseFullTripCount()
202 bool InductionVarRange::GetInductionRange(const HBasicBlock* context, in GetInductionRange() argument
211 if (!HasInductionInfo(context, instruction, &loop, &info, &trip)) { in GetInductionRange()
230 *min_val = SimplifyMin(GetVal(context, loop, info, trip, /*is_min=*/ true)); in GetInductionRange()
231 *max_val = SimplifyMax(GetVal(context, loop, info, trip, /*is_min=*/ false), chase_hint); in GetInductionRange()
233 NeedsTripCount(context, loop, info, &stride_value) && IsUnsafeTripCount(trip); in GetInductionRange()
237 *min_val = SimplifyMin(GetVal(context, loop, info, trip, /*is_min=*/ true)); in GetInductionRange()
242 bool InductionVarRange::CanGenerateRange(const HBasicBlock* context, in CanGenerateRange() argument
248 return GenerateRangeOrLastValue(context, in CanGenerateRange()
264 void InductionVarRange::GenerateRange(const HBasicBlock* context, in GenerateRange() argument
273 if (!GenerateRangeOrLastValue(context, in GenerateRange()
294 const HBasicBlock* context = loop_control->GetBlock(); in GenerateTakenTest() local
299 if (!GenerateRangeOrLastValue(context, in GenerateTakenTest()
319 const HBasicBlock* context = instruction->GetBlock(); in CanGenerateLastValue() local
324 return GenerateRangeOrLastValue(context, in CanGenerateLastValue()
341 const HBasicBlock* context = instruction->GetBlock(); in GenerateLastValue() local
347 if (!GenerateRangeOrLastValue(context, in GenerateLastValue()
390 bool InductionVarRange::IsUnitStride(const HBasicBlock* context, in IsUnitStride() argument
397 if (HasInductionInfo(context, instruction, &loop, &info, &trip)) { in IsUnitStride()
401 if (IsConstant(context, loop, info->op_a, kExact, &stride_value) && stride_value == 1) { in IsUnitStride()
403 if (IsConstant(context, loop, info->op_b, kExact, &off_value)) { in IsUnitStride()
423 const HBasicBlock* context = loop_control->GetBlock(); in GenerateTripCount() local
427 if (!GenerateCode(context, in GenerateTripCount()
438 if (GenerateCode(context, in GenerateTripCount()
467 const HBasicBlock* context = loop_control->GetBlock(); in CheckForFiniteAndConstantProps() local
468 *is_constant = IsConstant(context, loop, trip->op_a, kExact, trip_count); in CheckForFiniteAndConstantProps()
474 bool InductionVarRange::IsConstant(const HBasicBlock* context, in IsConstant() argument
490 Value min_val = GetVal(context, loop, info, /*trip=*/ nullptr, /*is_min=*/ true); in IsConstant()
491 Value max_val = GetVal(context, loop, info, /*trip=*/ nullptr, /*is_min=*/ false); in IsConstant()
507 const HBasicBlock* context, in HasInductionInfo() argument
512 DCHECK(context != nullptr); in HasInductionInfo()
513 HLoopInformation* lp = context->GetLoopInformation(); // closest enveloping loop in HasInductionInfo()
526 bool InductionVarRange::IsWellBehavedTripCount(const HBasicBlock* context, in IsWellBehavedTripCount() argument
538 (!HasFetchInLoop(lower) || range.IsConstant(context, loop, lower, kAtLeast, &not_used)) && in IsWellBehavedTripCount()
539 (!HasFetchInLoop(upper) || range.IsConstant(context, loop, upper, kAtLeast, &not_used)); in IsWellBehavedTripCount()
555 bool InductionVarRange::NeedsTripCount(const HBasicBlock* context, in NeedsTripCount() argument
561 return IsConstant(context, loop, info->op_a, kExact, stride_value); in NeedsTripCount()
563 return NeedsTripCount(context, loop, info->op_a, stride_value); in NeedsTripCount()
565 return NeedsTripCount(context, loop, info->op_b, stride_value); in NeedsTripCount()
591 InductionVarRange::Value InductionVarRange::GetLinear(const HBasicBlock* context, in GetLinear() argument
606 if (IsConstant(context, loop, info->op_a, kExact, &stride_value)) { in GetLinear()
618 return GetVal(context, loop, &cancelled_trip, trip, is_min); in GetLinear()
633 return SubValue(Value(0), GetVal(context, loop, &cancelled_trip, trip, !is_min)); in GetLinear()
640 return AddValue(GetMul(context, loop, info->op_a, trip, trip, is_min), in GetLinear()
641 GetVal(context, loop, info->op_b, trip, is_min)); in GetLinear()
645 const HBasicBlock* context, in GetPolynomial() argument
654 if (IsConstant(context, loop, info->op_a->op_a, kExact, &a) && in GetPolynomial()
657 IsConstant(context, loop, info->op_a->op_b, kExact, &b) && in GetPolynomial()
664 Value c = GetVal(context, loop, info->op_b, trip, is_min); in GetPolynomial()
665 Value m = GetVal(context, loop, trip, trip, is_min); in GetPolynomial()
674 InductionVarRange::Value InductionVarRange::GetGeometric(const HBasicBlock* context, in GetGeometric() argument
683 if (IsConstant(context, loop, info->op_a, kExact, &a) && in GetGeometric()
690 Value b = GetVal(context, loop, info->op_b, trip, is_min); in GetGeometric()
697 InductionVarRange::Value InductionVarRange::GetFetch(const HBasicBlock* context, in GetFetch() argument
705 IsContextInBody(context, loop) && in GetFetch()
727 GetFetch(context, loop, instruction->InputAt(1), trip, is_min)); in GetFetch()
729 return AddValue(GetFetch(context, loop, instruction->InputAt(0), trip, is_min), in GetFetch()
736 GetFetch(context, loop, instruction->InputAt(1), trip, !is_min)); in GetFetch()
738 return SubValue(GetFetch(context, loop, instruction->InputAt(0), trip, is_min), in GetFetch()
747 context, loop, instruction->InputAt(0)->AsNewArray()->GetLength(), trip, is_min); in GetFetch()
754 return GetFetch(context, loop, instruction->InputAt(0), trip, is_min); in GetFetch()
773 IsWellBehavedTripCount(context, next_loop, trip) && in GetFetch()
775 return GetVal(context, next_loop, next_info, next_trip, is_min); in GetFetch()
781 InductionVarRange::Value InductionVarRange::GetVal(const HBasicBlock* context, in GetVal() argument
792 return AddValue(GetVal(context, loop, info->op_a, trip, is_min), in GetVal()
793 GetVal(context, loop, info->op_b, trip, is_min)); in GetVal()
795 return SubValue(GetVal(context, loop, info->op_a, trip, is_min), in GetVal()
796 GetVal(context, loop, info->op_b, trip, !is_min)); in GetVal()
799 GetVal(context, loop, info->op_b, trip, !is_min)); in GetVal()
801 return GetMul(context, loop, info->op_a, info->op_b, trip, is_min); in GetVal()
803 return GetDiv(context, loop, info->op_a, info->op_b, trip, is_min); in GetVal()
805 return GetRem(context, loop, info->op_a, info->op_b); in GetVal()
807 return GetXor(context, loop, info->op_a, info->op_b); in GetVal()
809 return GetFetch(context, loop, info->fetch, trip, is_min); in GetVal()
812 if (UseFullTripCount(context, loop, is_min)) { in GetVal()
814 return GetVal(context, loop, info->op_a, trip, /*is_min=*/ false); in GetVal()
821 } else if (IsContextInBody(context, loop)) { in GetVal()
822 return SubValue(GetVal(context, loop, info->op_a, trip, is_min), Value(1)); in GetVal()
830 return CorrectForType(GetLinear(context, loop, info, trip, is_min), info->type); in GetVal()
832 return GetPolynomial(context, loop, info, trip, is_min); in GetVal()
834 return GetGeometric(context, loop, info, trip, is_min); in GetVal()
837 return MergeVal(GetVal(context, loop, info->op_a, trip, is_min), in GetVal()
838 GetVal(context, loop, info->op_b, trip, is_min), in GetVal()
845 InductionVarRange::Value InductionVarRange::GetMul(const HBasicBlock* context, in GetMul() argument
853 if (IsConstant(context, loop, info1, kExact, &value)) { in GetMul()
854 return MulRangeAndConstant(context, loop, value, info2, trip, is_min); in GetMul()
855 } else if (IsConstant(context, loop, info2, kExact, &value)) { in GetMul()
856 return MulRangeAndConstant(context, loop, value, info1, trip, is_min); in GetMul()
859 Value v1_min = GetVal(context, loop, info1, trip, /*is_min=*/ true); in GetMul()
860 Value v1_max = GetVal(context, loop, info1, trip, /*is_min=*/ false); in GetMul()
861 Value v2_min = GetVal(context, loop, info2, trip, /*is_min=*/ true); in GetMul()
862 Value v2_max = GetVal(context, loop, info2, trip, /*is_min=*/ false); in GetMul()
882 InductionVarRange::Value InductionVarRange::GetDiv(const HBasicBlock* context, in GetDiv() argument
890 if (IsConstant(context, loop, info2, kExact, &value)) { in GetDiv()
891 return DivRangeAndConstant(context, loop, value, info1, trip, is_min); in GetDiv()
894 Value v1_min = GetVal(context, loop, info1, trip, /*is_min=*/ true); in GetDiv()
895 Value v1_max = GetVal(context, loop, info1, trip, /*is_min=*/ false); in GetDiv()
896 Value v2_min = GetVal(context, loop, info2, trip, /*is_min=*/ true); in GetDiv()
897 Value v2_max = GetVal(context, loop, info2, trip, /*is_min=*/ false); in GetDiv()
918 const HBasicBlock* context, in GetRem() argument
925 if (IsConstant(context, loop, info1, kExact, &v1) && in GetRem()
926 IsConstant(context, loop, info2, kExact, &v2) && in GetRem()
937 const HBasicBlock* context, in GetXor() argument
944 if (IsConstant(context, loop, info1, kExact, &v1) && in GetXor()
945 IsConstant(context, loop, info2, kExact, &v2)) { in GetXor()
955 const HBasicBlock* context, in MulRangeAndConstant() argument
963 return MulValue(GetVal(context, loop, info, trip, is_min == value >= 0), c); in MulRangeAndConstant()
969 const HBasicBlock* context, in DivRangeAndConstant() argument
977 return DivValue(GetVal(context, loop, info, trip, is_min == value >= 0), c); in DivRangeAndConstant()
1045 bool InductionVarRange::GenerateRangeOrLastValue(const HBasicBlock* context, in GenerateRangeOrLastValue() argument
1059 if (!HasInductionInfo(context, instruction, &loop, &info, &trip) || trip == nullptr) { in GenerateRangeOrLastValue()
1068 *needs_finite_test = NeedsTripCount(context, loop, info, stride_value) && IsUnsafeTripCount(trip); in GenerateRangeOrLastValue()
1072 DCHECK(!IsContextInBody(context, loop)); in GenerateRangeOrLastValue()
1078 context, loop, info, trip, graph, block, /*is_min=*/false, upper, needs_taken_test); in GenerateRangeOrLastValue()
1082 context, loop, info, trip, graph, block, /*is_min=*/true, lower, needs_taken_test); in GenerateRangeOrLastValue()
1085 return GenerateLastValuePolynomial(context, loop, info, trip, graph, block, lower); in GenerateRangeOrLastValue()
1087 return GenerateLastValueGeometric(context, loop, info, trip, graph, block, lower); in GenerateRangeOrLastValue()
1089 return GenerateLastValueWrapAround(context, loop, info, trip, graph, block, lower); in GenerateRangeOrLastValue()
1092 context, loop, info, trip, graph, block, lower, needs_taken_test); in GenerateRangeOrLastValue()
1100 return GenerateCode(context, in GenerateRangeOrLastValue()
1109 if (!GenerateCode(context, in GenerateRangeOrLastValue()
1124 GenerateCode(context, loop, info, trip, graph, block, /*is_min=*/ true, lower)) && in GenerateRangeOrLastValue()
1126 GenerateCode(context, loop, info, trip, graph, block, /*is_min=*/ false, upper); in GenerateRangeOrLastValue()
1129 bool InductionVarRange::GenerateLastValueLinear(const HBasicBlock* context, in GenerateLastValueLinear() argument
1148 if (!IsConstant(context, loop, info->op_a, kExact, &stride_value) || in GenerateLastValueLinear()
1157 if (!GenerateCode(context, in GenerateLastValueLinear()
1166 !GenerateCode(context, loop, info->op_b, trip, graph, block, is_min, &opb)) { in GenerateLastValueLinear()
1187 if (TryGenerateTakenTest(context, loop, trip->op_b, graph, block, result, opb)) { in GenerateLastValueLinear()
1197 bool InductionVarRange::GenerateLastValuePolynomial(const HBasicBlock* context, in GenerateLastValuePolynomial() argument
1210 if (IsConstant(context, loop, info->op_a->op_a, kExact, &a) && in GenerateLastValuePolynomial()
1211 IsConstant(context, loop, info->op_a->op_b, kExact, &b) && in GenerateLastValuePolynomial()
1212 IsConstant(context, loop, trip->op_a, kExact, &m) && in GenerateLastValuePolynomial()
1217 if (GenerateCode(context, in GenerateLastValuePolynomial()
1240 bool InductionVarRange::GenerateLastValueGeometric(const HBasicBlock* context, in GenerateLastValueGeometric() argument
1254 IsConstant(context, loop, trip->op_a, kExact, &m) && in GenerateLastValueGeometric()
1259 context, loop, info->op_a, /*trip=*/ nullptr, graph, block, /*is_min=*/ false, &opa) && in GenerateLastValueGeometric()
1261 context, loop, info->op_b, /*trip=*/ nullptr, graph, block, /*is_min=*/ false, &opb)) { in GenerateLastValueGeometric()
1299 bool InductionVarRange::GenerateLastValueWrapAround(const HBasicBlock* context, in GenerateLastValueWrapAround() argument
1316 IsConstant(context, loop, trip->op_a, kExact, &m) && in GenerateLastValueWrapAround()
1319 context, loop, info, /*trip=*/ nullptr, graph, block, /*is_min=*/ false, result); in GenerateLastValueWrapAround()
1324 bool InductionVarRange::GenerateLastValuePeriodic(const HBasicBlock* context, in GenerateLastValuePeriodic() argument
1357 if (IsConstant(context, loop, trip->op_a, kExact, &m) && m >= 1) { in GenerateLastValuePeriodic()
1364 context, loop, info, /*trip=*/ nullptr, graph, block, /*is_min=*/ false, result); in GenerateLastValuePeriodic()
1376 return IsConstant(context, loop, trip->op_a->op_b, kExact, &stride_value) && in GenerateLastValuePeriodic()
1381 GenerateCode(context, in GenerateLastValuePeriodic()
1389 GenerateCode(context, in GenerateLastValuePeriodic()
1397 GenerateCode(context, in GenerateLastValuePeriodic()
1418 if (TryGenerateTakenTest(context, loop, trip->op_b, graph, block, result, x)) { in GenerateLastValuePeriodic()
1429 bool InductionVarRange::GenerateCode(const HBasicBlock* context, in GenerateCode() argument
1462 if (GenerateCode(context, in GenerateCode()
1471 GenerateCode(context, in GenerateCode()
1485 context, loop, info, graph, opa, opb, result); in GenerateCode()
1487 return TryGenerateSubWithoutOverflow(context, loop, info, graph, opa, result); in GenerateCode()
1529 if (GenerateCode(context, in GenerateCode()
1551 if (UseFullTripCount(context, loop, is_min)) { in GenerateCode()
1553 return GenerateCode(context, in GenerateCode()
1571 } else if (IsContextInBody(context, loop) || in GenerateCode()
1572 (context == loop->GetHeader() && !allow_potential_overflow)) { in GenerateCode()
1573 if (GenerateCode(context, in GenerateCode()
1583 if (IsContextInBody(context, loop)) { in GenerateCode()
1590 DCHECK(context == loop->GetHeader()); in GenerateCode()
1614 if (IsConstant(context, loop, info->op_a, kExact, &stride_value) && in GenerateCode()
1617 if (GenerateCode(context, in GenerateCode()
1626 GenerateCode(context, in GenerateCode()
1662 Value extreme = GetVal(context, loop, info, trip, is_min); in GenerateCode()
1676 bool InductionVarRange::TryGenerateAddWithoutOverflow(const HBasicBlock* context, in TryGenerateAddWithoutOverflow() argument
1685 const bool a_is_const = IsConstant(context, loop, info->op_a, kExact, &val_a); in TryGenerateAddWithoutOverflow()
1687 const bool b_is_const = IsConstant(context, loop, info->op_b, kExact, &val_b); in TryGenerateAddWithoutOverflow()
1721 bool InductionVarRange::TryGenerateSubWithoutOverflow(const HBasicBlock* context, in TryGenerateSubWithoutOverflow() argument
1729 if (!IsConstant(context, loop, info->op_b, kExact, &val_b)) { in TryGenerateSubWithoutOverflow()
1736 if (IsConstant(context, loop, info->op_a, kExact, &val_a)) { in TryGenerateSubWithoutOverflow()
1762 bool InductionVarRange::TryGenerateTakenTest(const HBasicBlock* context, in TryGenerateTakenTest() argument
1770 if (GenerateCode(context, in TryGenerateTakenTest()