Lines Matching refs:instruction

57   bool TryReplaceWithRotate(HBinaryOperation* instruction);
67 bool TryHandleAssociativeAndCommutativeOperation(HBinaryOperation* instruction);
68 bool TrySubtractionChainSimplification(HBinaryOperation* instruction);
79 void VisitTypeConversion(HTypeConversion* instruction) override;
80 void VisitNullCheck(HNullCheck* instruction) override;
81 void VisitArrayLength(HArrayLength* instruction) override;
82 void VisitCheckCast(HCheckCast* instruction) override;
83 void VisitAbs(HAbs* instruction) override;
84 void VisitAdd(HAdd* instruction) override;
85 void VisitAnd(HAnd* instruction) override;
86 void VisitCondition(HCondition* instruction) override;
95 void VisitDiv(HDiv* instruction) override;
96 void VisitRem(HRem* instruction) override;
97 void VisitMul(HMul* instruction) override;
98 void VisitNeg(HNeg* instruction) override;
99 void VisitNot(HNot* instruction) override;
100 void VisitOr(HOr* instruction) override;
101 void VisitShl(HShl* instruction) override;
102 void VisitShr(HShr* instruction) override;
103 void VisitSub(HSub* instruction) override;
104 void VisitUShr(HUShr* instruction) override;
105 void VisitXor(HXor* instruction) override;
107 void VisitIf(HIf* instruction) override;
108 void VisitInstanceOf(HInstanceOf* instruction) override;
111 void VisitVecMul(HVecMul* instruction) override;
342 void InstructionSimplifierVisitor::VisitShift(HBinaryOperation* instruction) { in VisitShift() argument
343 DCHECK(instruction->IsShl() || instruction->IsShr() || instruction->IsUShr()); in VisitShift()
344 HInstruction* shift_amount = instruction->GetRight(); in VisitShift()
345 HInstruction* value = instruction->GetLeft(); in VisitShift()
359 instruction->ReplaceWith(value); in VisitShift()
360 instruction->GetBlock()->RemoveInstruction(instruction); in VisitShift()
371 instruction->ReplaceInput(GetGraph()->GetIntConstant(masked_cst), /* index= */ 1); in VisitShift()
396 instruction->ReplaceInput(bin_op->GetLeastConstantLeft(), 1); in VisitShift()
405 instruction->ReplaceInput(shift_amount->AsTypeConversion()->GetInput(), 1); in VisitShift()
657 void InstructionSimplifierVisitor::VisitInstanceOf(HInstanceOf* instruction) { in VisitInstanceOf() argument
658 HInstruction* object = instruction->InputAt(0); in VisitInstanceOf()
659 if (instruction->GetTypeCheckKind() != TypeCheckKind::kBitstringCheck && in VisitInstanceOf()
660 instruction->GetTargetClass()->NeedsAccessCheck()) { in VisitInstanceOf()
666 if (CanEnsureNotNullAt(object, instruction)) { in VisitInstanceOf()
668 instruction->ClearMustDoNullCheck(); in VisitInstanceOf()
674 instruction->ReplaceWith(graph->GetIntConstant(0)); in VisitInstanceOf()
675 instruction->GetBlock()->RemoveInstruction(instruction); in VisitInstanceOf()
683 if (TypeCheckHasKnownOutcome(instruction->GetTargetClassRTI(), object, &outcome)) { in VisitInstanceOf()
688 instruction->GetBlock()->InsertInstructionBefore(test, instruction); in VisitInstanceOf()
689 instruction->ReplaceWith(test); in VisitInstanceOf()
692 instruction->ReplaceWith(graph->GetIntConstant(outcome)); in VisitInstanceOf()
695 instruction->GetBlock()->RemoveInstruction(instruction); in VisitInstanceOf()
696 if (outcome && instruction->GetTypeCheckKind() != TypeCheckKind::kBitstringCheck) { in VisitInstanceOf()
697 HLoadClass* load_class = instruction->GetTargetClass(); in VisitInstanceOf()
708 void InstructionSimplifierVisitor::VisitInstanceFieldSet(HInstanceFieldSet* instruction) { in VisitInstanceFieldSet() argument
709 if ((instruction->GetValue()->GetType() == DataType::Type::kReference) in VisitInstanceFieldSet()
710 && CanEnsureNotNullAt(instruction->GetValue(), instruction)) { in VisitInstanceFieldSet()
711 instruction->ClearValueCanBeNull(); in VisitInstanceFieldSet()
715 void InstructionSimplifierVisitor::VisitStaticFieldSet(HStaticFieldSet* instruction) { in VisitStaticFieldSet() argument
716 if ((instruction->GetValue()->GetType() == DataType::Type::kReference) in VisitStaticFieldSet()
717 && CanEnsureNotNullAt(instruction->GetValue(), instruction)) { in VisitStaticFieldSet()
718 instruction->ClearValueCanBeNull(); in VisitStaticFieldSet()
1017 void InstructionSimplifierVisitor::VisitIf(HIf* instruction) { in VisitIf() argument
1018 HInstruction* condition = instruction->InputAt(0); in VisitIf()
1021 instruction->ReplaceInput(condition->InputAt(0), 0); in VisitIf()
1022 instruction->GetBlock()->SwapSuccessors(); in VisitIf()
1027 void InstructionSimplifierVisitor::VisitArrayLength(HArrayLength* instruction) { in VisitArrayLength() argument
1028 HInstruction* input = instruction->InputAt(0); in VisitArrayLength()
1034 instruction->ReplaceWith(input); in VisitArrayLength()
1039 void InstructionSimplifierVisitor::VisitArraySet(HArraySet* instruction) { in VisitArraySet() argument
1040 HInstruction* value = instruction->GetValue(); in VisitArraySet()
1045 if (CanEnsureNotNullAt(value, instruction)) { in VisitArraySet()
1046 instruction->ClearValueCanBeNull(); in VisitArraySet()
1050 if (value->AsArrayGet()->GetArray() == instruction->GetArray()) { in VisitArraySet()
1052 instruction->ClearNeedsTypeCheck(); in VisitArraySet()
1058 instruction->ClearNeedsTypeCheck(); in VisitArraySet()
1063 ReferenceTypeInfo array_rti = instruction->GetArray()->GetReferenceTypeInfo(); in VisitArraySet()
1070 instruction->ClearNeedsTypeCheck(); in VisitArraySet()
1076 instruction->ClearNeedsTypeCheck(); in VisitArraySet()
1079 instruction->SetStaticTypeOfArrayIsObjectArray(); in VisitArraySet()
1138 HInstruction* instruction = use.GetUser(); in IsTypeConversionForStoringIntoNoWiderFieldOnly() local
1139 if (instruction->IsInstanceFieldSet() && in IsTypeConversionForStoringIntoNoWiderFieldOnly()
1140 instruction->AsInstanceFieldSet()->GetFieldType() == result_type) { in IsTypeConversionForStoringIntoNoWiderFieldOnly()
1141 DCHECK_EQ(instruction->AsInstanceFieldSet()->GetValue(), type_conversion); in IsTypeConversionForStoringIntoNoWiderFieldOnly()
1144 if (instruction->IsStaticFieldSet() && in IsTypeConversionForStoringIntoNoWiderFieldOnly()
1145 instruction->AsStaticFieldSet()->GetFieldType() == result_type) { in IsTypeConversionForStoringIntoNoWiderFieldOnly()
1146 DCHECK_EQ(instruction->AsStaticFieldSet()->GetValue(), type_conversion); in IsTypeConversionForStoringIntoNoWiderFieldOnly()
1149 if (instruction->IsArraySet() && in IsTypeConversionForStoringIntoNoWiderFieldOnly()
1150 instruction->AsArraySet()->GetComponentType() == result_type && in IsTypeConversionForStoringIntoNoWiderFieldOnly()
1152 instruction->AsArraySet()->GetIndex() != type_conversion) { in IsTypeConversionForStoringIntoNoWiderFieldOnly()
1153 DCHECK_EQ(instruction->AsArraySet()->GetValue(), type_conversion); in IsTypeConversionForStoringIntoNoWiderFieldOnly()
1164 void InstructionSimplifierVisitor::VisitTypeConversion(HTypeConversion* instruction) { in VisitTypeConversion() argument
1165 HInstruction* input = instruction->GetInput(); in VisitTypeConversion()
1167 DataType::Type result_type = instruction->GetResultType(); in VisitTypeConversion()
1168 if (instruction->IsImplicitConversion()) { in VisitTypeConversion()
1169 instruction->ReplaceWith(input); in VisitTypeConversion()
1170 instruction->GetBlock()->RemoveInstruction(instruction); in VisitTypeConversion()
1197 instruction->ReplaceWith(original_input); in VisitTypeConversion()
1198 instruction->GetBlock()->RemoveInstruction(instruction); in VisitTypeConversion()
1226 instruction->ReplaceWith(original_input); in VisitTypeConversion()
1227 instruction->GetBlock()->RemoveInstruction(instruction); in VisitTypeConversion()
1245 instruction->ReplaceWith(input); in VisitTypeConversion()
1246 instruction->GetBlock()->RemoveInstruction(instruction); in VisitTypeConversion()
1252 if (IsTypeConversionForStoringIntoNoWiderFieldOnly(instruction)) { in VisitTypeConversion()
1253 instruction->ReplaceWith(input); in VisitTypeConversion()
1254 instruction->GetBlock()->RemoveInstruction(instruction); in VisitTypeConversion()
1260 void InstructionSimplifierVisitor::VisitAbs(HAbs* instruction) { in VisitAbs() argument
1261 HInstruction* input = instruction->GetInput(); in VisitAbs()
1262 if (DataType::IsZeroExtension(input->GetType(), instruction->GetResultType())) { in VisitAbs()
1265 instruction->ReplaceWith(input); in VisitAbs()
1266 instruction->GetBlock()->RemoveInstruction(instruction); in VisitAbs()
1271 void InstructionSimplifierVisitor::VisitAdd(HAdd* instruction) { in VisitAdd() argument
1272 HConstant* input_cst = instruction->GetConstantRight(); in VisitAdd()
1273 HInstruction* input_other = instruction->GetLeastConstantLeft(); in VisitAdd()
1274 bool integral_type = DataType::IsIntegralType(instruction->GetType()); in VisitAdd()
1284 instruction->ReplaceWith(input_other); in VisitAdd()
1285 instruction->GetBlock()->RemoveInstruction(instruction); in VisitAdd()
1291 HInstruction* left = instruction->GetLeft(); in VisitAdd()
1292 HInstruction* right = instruction->GetRight(); in VisitAdd()
1297 if (TryMoveNegOnInputsAfterBinop(instruction)) { in VisitAdd()
1315 new(GetGraph()->GetAllocator()) HSub(instruction->GetType(), other, neg->GetInput()); in VisitAdd()
1316 instruction->GetBlock()->ReplaceAndRemoveInstructionWith(instruction, sub); in VisitAdd()
1322 if (TryReplaceWithRotate(instruction)) { in VisitAdd()
1328 TryHandleAssociativeAndCommutativeOperation(instruction); in VisitAdd()
1331 TrySubtractionChainSimplification(instruction)) { in VisitAdd()
1344 instruction->ReplaceWith(left->InputAt(0)); in VisitAdd()
1346 instruction->GetBlock()->RemoveInstruction(instruction); in VisitAdd()
1349 instruction->ReplaceWith(right->InputAt(0)); in VisitAdd()
1351 instruction->GetBlock()->RemoveInstruction(instruction); in VisitAdd()
1357 void InstructionSimplifierVisitor::VisitAnd(HAnd* instruction) { in VisitAnd() argument
1358 DCHECK(DataType::IsIntegralType(instruction->GetType())); in VisitAnd()
1359 HConstant* input_cst = instruction->GetConstantRight(); in VisitAnd()
1360 HInstruction* input_other = instruction->GetLeastConstantLeft(); in VisitAnd()
1372 instruction->ReplaceWith(input_other); in VisitAnd()
1373 instruction->GetBlock()->RemoveInstruction(instruction); in VisitAnd()
1398 instruction->GetBlock()->InsertInstructionBefore(new_and, instruction); in VisitAnd()
1401 instruction->GetBlock()->ReplaceAndRemoveInstructionWith(instruction, new_conversion); in VisitAnd()
1405 instruction = new_and; in VisitAnd()
1412 size_t reg_bits = (instruction->GetResultType() == DataType::Type::kInt64) ? 64 : 32; in VisitAnd()
1417 instruction->ReplaceWith(input_other); in VisitAnd()
1418 instruction->GetBlock()->RemoveInstruction(instruction); in VisitAnd()
1425 HUShr* ushr = new (GetGraph()->GetAllocator()) HUShr(instruction->GetType(), in VisitAnd()
1429 instruction->GetBlock()->ReplaceAndRemoveInstructionWith(instruction, ushr); in VisitAnd()
1435 if ((value == 0xff || value == 0xffff) && instruction->GetType() != DataType::Type::kInt64) { in VisitAnd()
1444 instruction->ReplaceWith(input_other); in VisitAnd()
1445 instruction->GetBlock()->RemoveInstruction(instruction); in VisitAnd()
1447 instruction->ReplaceWith(input_other); in VisitAnd()
1448 instruction->GetBlock()->RemoveInstruction(instruction); in VisitAnd()
1451 new_type, input_other, instruction->GetDexPc()); in VisitAnd()
1452 instruction->GetBlock()->ReplaceAndRemoveInstructionWith(instruction, type_conversion); in VisitAnd()
1462 if (instruction->GetLeft() == instruction->GetRight()) { in VisitAnd()
1467 instruction->ReplaceWith(instruction->GetLeft()); in VisitAnd()
1468 instruction->GetBlock()->RemoveInstruction(instruction); in VisitAnd()
1473 if (TryDeMorganNegationFactoring(instruction)) { in VisitAnd()
1479 TryHandleAssociativeAndCommutativeOperation(instruction); in VisitAnd()
1652 void InstructionSimplifierVisitor::VisitDiv(HDiv* instruction) { in VisitDiv() argument
1653 HConstant* input_cst = instruction->GetConstantRight(); in VisitDiv()
1654 HInstruction* input_other = instruction->GetLeastConstantLeft(); in VisitDiv()
1655 DataType::Type type = instruction->GetType(); in VisitDiv()
1662 instruction->ReplaceWith(input_other); in VisitDiv()
1663 instruction->GetBlock()->RemoveInstruction(instruction); in VisitDiv()
1673 instruction->GetBlock()->ReplaceAndRemoveInstructionWith( in VisitDiv()
1674 instruction, new (GetGraph()->GetAllocator()) HNeg(type, input_other)); in VisitDiv()
1699 instruction->GetBlock()->ReplaceAndRemoveInstructionWith( in VisitDiv()
1700 instruction, new (GetGraph()->GetAllocator()) HMul(type, input_other, reciprocal)); in VisitDiv()
1772 void InstructionSimplifierVisitor::VisitMul(HMul* instruction) { in VisitMul() argument
1773 HConstant* input_cst = instruction->GetConstantRight(); in VisitMul()
1774 HInstruction* input_other = instruction->GetLeastConstantLeft(); in VisitMul()
1775 DataType::Type type = instruction->GetType(); in VisitMul()
1776 HBasicBlock* block = instruction->GetBlock(); in VisitMul()
1788 instruction->ReplaceWith(input_other); in VisitMul()
1789 instruction->GetBlock()->RemoveInstruction(instruction); in VisitMul()
1801 block->ReplaceAndRemoveInstructionWith(instruction, neg); in VisitMul()
1814 block->ReplaceAndRemoveInstructionWith(instruction, in VisitMul()
1829 instruction->ReplaceWith(input_cst); in VisitMul()
1830 instruction->GetBlock()->RemoveInstruction(instruction); in VisitMul()
1840 block->ReplaceAndRemoveInstructionWith(instruction, shl); in VisitMul()
1854 block->InsertInstructionBefore(shl, instruction); in VisitMul()
1855 block->ReplaceAndRemoveInstructionWith(instruction, add); in VisitMul()
1869 block->InsertInstructionBefore(shl, instruction); in VisitMul()
1870 block->ReplaceAndRemoveInstructionWith(instruction, sub); in VisitMul()
1878 TryHandleAssociativeAndCommutativeOperation(instruction); in VisitMul()
1881 void InstructionSimplifierVisitor::VisitNeg(HNeg* instruction) { in VisitNeg() argument
1882 HInstruction* input = instruction->GetInput(); in VisitNeg()
1890 instruction->ReplaceWith(previous_neg->GetInput()); in VisitNeg()
1891 instruction->GetBlock()->RemoveInstruction(instruction); in VisitNeg()
1917 instruction->GetType(), sub->GetRight(), sub->GetLeft()); in VisitNeg()
1918 instruction->GetBlock()->ReplaceAndRemoveInstructionWith(instruction, new_sub); in VisitNeg()
1926 void InstructionSimplifierVisitor::VisitNot(HNot* instruction) { in VisitNot() argument
1927 HInstruction* input = instruction->GetInput(); in VisitNot()
1938 instruction->ReplaceWith(previous_not->GetInput()); in VisitNot()
1939 instruction->GetBlock()->RemoveInstruction(instruction); in VisitNot()
1947 void InstructionSimplifierVisitor::VisitOr(HOr* instruction) { in VisitOr() argument
1948 HConstant* input_cst = instruction->GetConstantRight(); in VisitOr()
1949 HInstruction* input_other = instruction->GetLeastConstantLeft(); in VisitOr()
1956 instruction->ReplaceWith(input_other); in VisitOr()
1957 instruction->GetBlock()->RemoveInstruction(instruction); in VisitOr()
1965 if (instruction->GetLeft() == instruction->GetRight()) { in VisitOr()
1970 instruction->ReplaceWith(instruction->GetLeft()); in VisitOr()
1971 instruction->GetBlock()->RemoveInstruction(instruction); in VisitOr()
1976 if (TryDeMorganNegationFactoring(instruction)) return; in VisitOr()
1978 if (TryReplaceWithRotate(instruction)) { in VisitOr()
1984 TryHandleAssociativeAndCommutativeOperation(instruction); in VisitOr()
1987 void InstructionSimplifierVisitor::VisitShl(HShl* instruction) { in VisitShl() argument
1988 VisitShift(instruction); in VisitShl()
1991 void InstructionSimplifierVisitor::VisitShr(HShr* instruction) { in VisitShr() argument
1992 VisitShift(instruction); in VisitShr()
1995 void InstructionSimplifierVisitor::VisitSub(HSub* instruction) { in VisitSub() argument
1996 HConstant* input_cst = instruction->GetConstantRight(); in VisitSub()
1997 HInstruction* input_other = instruction->GetLeastConstantLeft(); in VisitSub()
1999 DataType::Type type = instruction->GetType(); in VisitSub()
2012 instruction->ReplaceWith(input_other); in VisitSub()
2013 instruction->GetBlock()->RemoveInstruction(instruction); in VisitSub()
2018 HBasicBlock* block = instruction->GetBlock(); in VisitSub()
2021 HInstruction* left = instruction->GetLeft(); in VisitSub()
2022 HInstruction* right = instruction->GetRight(); in VisitSub()
2033 block->ReplaceAndRemoveInstructionWith(instruction, neg); in VisitSub()
2040 if (TryMoveNegOnInputsAfterBinop(instruction)) { in VisitSub()
2052 instruction->GetBlock()->ReplaceAndRemoveInstructionWith(instruction, add); in VisitSub()
2068 instruction->GetBlock()->InsertInstructionBefore(add, instruction); in VisitSub()
2069 HNeg* neg = new (GetGraph()->GetAllocator()) HNeg(instruction->GetType(), add); in VisitSub()
2070 instruction->GetBlock()->InsertInstructionBefore(neg, instruction); in VisitSub()
2071 instruction->ReplaceWith(neg); in VisitSub()
2072 instruction->GetBlock()->RemoveInstruction(instruction); in VisitSub()
2078 if (TrySubtractionChainSimplification(instruction)) { in VisitSub()
2093 instruction->ReplaceWith(left->InputAt(0)); in VisitSub()
2095 instruction->GetBlock()->RemoveInstruction(instruction); in VisitSub()
2098 instruction->ReplaceWith(left->InputAt(1)); in VisitSub()
2100 instruction->GetBlock()->RemoveInstruction(instruction); in VisitSub()
2106 void InstructionSimplifierVisitor::VisitUShr(HUShr* instruction) { in VisitUShr() argument
2107 VisitShift(instruction); in VisitUShr()
2110 void InstructionSimplifierVisitor::VisitXor(HXor* instruction) { in VisitXor() argument
2111 HConstant* input_cst = instruction->GetConstantRight(); in VisitXor()
2112 HInstruction* input_other = instruction->GetLeastConstantLeft(); in VisitXor()
2119 instruction->ReplaceWith(input_other); in VisitXor()
2120 instruction->GetBlock()->RemoveInstruction(instruction); in VisitXor()
2132 instruction->GetBlock()->ReplaceAndRemoveInstructionWith(instruction, boolean_not); in VisitXor()
2142 HNot* bitwise_not = new (GetGraph()->GetAllocator()) HNot(instruction->GetType(), input_other); in VisitXor()
2143 instruction->GetBlock()->ReplaceAndRemoveInstructionWith(instruction, bitwise_not); in VisitXor()
2148 HInstruction* left = instruction->GetLeft(); in VisitXor()
2149 HInstruction* right = instruction->GetRight(); in VisitXor()
2160 instruction->ReplaceInput(left->InputAt(0), 0); in VisitXor()
2161 instruction->ReplaceInput(right->InputAt(0), 1); in VisitXor()
2168 if (TryReplaceWithRotate(instruction)) { in VisitXor()
2174 TryHandleAssociativeAndCommutativeOperation(instruction); in VisitXor()
2177 void InstructionSimplifierVisitor::SimplifyStringEquals(HInvoke* instruction) { in SimplifyStringEquals() argument
2178 HInstruction* argument = instruction->InputAt(1); in SimplifyStringEquals()
2179 HInstruction* receiver = instruction->InputAt(0); in SimplifyStringEquals()
2185 DCHECK(CanEnsureNotNullAt(argument, instruction)); in SimplifyStringEquals()
2186 instruction->ReplaceWith(GetGraph()->GetIntConstant(1)); in SimplifyStringEquals()
2187 instruction->GetBlock()->RemoveInstruction(instruction); in SimplifyStringEquals()
2189 StringEqualsOptimizations optimizations(instruction); in SimplifyStringEquals()
2190 if (CanEnsureNotNullAt(argument, instruction)) { in SimplifyStringEquals()
2213 void InstructionSimplifierVisitor::SimplifySystemArrayCopy(HInvoke* instruction) { in SimplifySystemArrayCopy() argument
2214 HInstruction* source = instruction->InputAt(0); in SimplifySystemArrayCopy()
2215 HInstruction* destination = instruction->InputAt(2); in SimplifySystemArrayCopy()
2216 HInstruction* count = instruction->InputAt(4); in SimplifySystemArrayCopy()
2217 SystemArrayCopyOptimizations optimizations(instruction); in SimplifySystemArrayCopy()
2218 if (CanEnsureNotNullAt(source, instruction)) { in SimplifySystemArrayCopy()
2221 if (CanEnsureNotNullAt(destination, instruction)) { in SimplifySystemArrayCopy()
2274 HInvokeStaticOrDirect* invoke = instruction->AsInvokeStaticOrDirect(); in SimplifySystemArrayCopy()
2669 void InstructionSimplifierVisitor::VisitInvoke(HInvoke* instruction) { in VisitInvoke() argument
2670 switch (instruction->GetIntrinsic()) { in VisitInvoke()
2672 SimplifyStringEquals(instruction); in VisitInvoke()
2675 SimplifySystemArrayCopy(instruction); in VisitInvoke()
2679 SimplifyFP2Int(instruction); in VisitInvoke()
2684 SimplifyStringCharAt(instruction); in VisitInvoke()
2689 SimplifyStringLength(instruction); in VisitInvoke()
2693 SimplifyStringIndexOf(instruction); in VisitInvoke()
2697 SimplifyNPEOnArgN(instruction, 1); // 0th has own NullCheck in VisitInvoke()
2710 SimplifyReturnThis(instruction); in VisitInvoke()
2714 SimplifyAllocationIntrinsic(instruction); in VisitInvoke()
2748 LOG(FATAL) << "Unexpected " << static_cast<Intrinsics>(instruction->GetIntrinsic()); in VisitInvoke()
2777 HBinaryOperation* instruction) { in TryHandleAssociativeAndCommutativeOperation() argument
2778 DCHECK(instruction->IsCommutative()); in TryHandleAssociativeAndCommutativeOperation()
2780 if (!DataType::IsIntegralType(instruction->GetType())) { in TryHandleAssociativeAndCommutativeOperation()
2784 HInstruction* left = instruction->GetLeft(); in TryHandleAssociativeAndCommutativeOperation()
2785 HInstruction* right = instruction->GetRight(); in TryHandleAssociativeAndCommutativeOperation()
2790 if (instruction->GetKind() == left->GetKind() && right->IsConstant()) { in TryHandleAssociativeAndCommutativeOperation()
2793 } else if (left->IsConstant() && instruction->GetKind() == right->GetKind()) { in TryHandleAssociativeAndCommutativeOperation()
2815 instruction->ReplaceInput(const1, 0); in TryHandleAssociativeAndCommutativeOperation()
2816 instruction->ReplaceInput(const2, 1); in TryHandleAssociativeAndCommutativeOperation()
2817 HConstant* const3 = instruction->TryStaticEvaluation(); in TryHandleAssociativeAndCommutativeOperation()
2819 instruction->ReplaceInput(y->GetLeastConstantLeft(), 0); in TryHandleAssociativeAndCommutativeOperation()
2820 instruction->ReplaceInput(const3, 1); in TryHandleAssociativeAndCommutativeOperation()
2854 HBinaryOperation* instruction) { in TrySubtractionChainSimplification() argument
2855 DCHECK(instruction->IsAdd() || instruction->IsSub()) << instruction->DebugName(); in TrySubtractionChainSimplification()
2857 DataType::Type type = instruction->GetType(); in TrySubtractionChainSimplification()
2862 HInstruction* left = instruction->GetLeft(); in TrySubtractionChainSimplification()
2863 HInstruction* right = instruction->GetRight(); in TrySubtractionChainSimplification()
2892 bool is_const2_negated = (const2 == right) && instruction->IsSub(); in TrySubtractionChainSimplification()
2894 bool is_y_negated = (y == right) && instruction->IsSub(); in TrySubtractionChainSimplification()
2900 HBasicBlock* block = instruction->GetBlock(); in TrySubtractionChainSimplification()
2902 ArenaAllocator* allocator = instruction->GetAllocator(); in TrySubtractionChainSimplification()
2906 z = new (allocator) HSub(type, const3, x, instruction->GetDexPc()); in TrySubtractionChainSimplification()
2908 z = new (allocator) HAdd(type, x, const3, instruction->GetDexPc()); in TrySubtractionChainSimplification()
2911 block->ReplaceAndRemoveInstructionWith(instruction, z); in TrySubtractionChainSimplification()
2916 void InstructionSimplifierVisitor::VisitVecMul(HVecMul* instruction) { in VisitVecMul() argument
2917 if (TryCombineVecMultiplyAccumulate(instruction)) { in VisitVecMul()