summaryrefslogtreecommitdiff
path: root/compiler/optimizing/code_generator_utils.cc
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/optimizing/code_generator_utils.cc')
-rw-r--r--compiler/optimizing/code_generator_utils.cc20
1 files changed, 11 insertions, 9 deletions
diff --git a/compiler/optimizing/code_generator_utils.cc b/compiler/optimizing/code_generator_utils.cc
index 9da520161f..c19eda4aaa 100644
--- a/compiler/optimizing/code_generator_utils.cc
+++ b/compiler/optimizing/code_generator_utils.cc
@@ -100,15 +100,17 @@ bool IsBooleanValueOrMaterializedCondition(HInstruction* cond_input) {
return !cond_input->IsCondition() || !cond_input->IsEmittedAtUseSite();
}
-bool HasNonNegativeResultOrMinInt(HInstruction* instruction) {
- // 1. The instruction itself has always a non-negative result or the min value of
- // the integral type if the instruction has the integral type.
- // 2. TODO: The instruction can be an expression which uses an induction variable.
- // Induction variable often start from 0 and are only increased. Such an
- // expression might be always non-negative.
- return instruction->IsAbs() ||
- IsInt64Value(instruction, DataType::MinValueOfIntegralType(instruction->GetType())) ||
- IsGEZero(instruction);
+
+bool HasNonNegativeInputAt(HInstruction* instr, size_t i) {
+ HInstruction* input = instr->InputAt(i);
+ return IsGEZero(input);
+}
+
+bool HasNonNegativeOrMinIntInputAt(HInstruction* instr, size_t i) {
+ HInstruction* input = instr->InputAt(i);
+ return input->IsAbs() ||
+ IsInt64Value(input, DataType::MinValueOfIntegralType(input->GetType())) ||
+ HasNonNegativeInputAt(instr, i);
}
} // namespace art