diff options
author | Evgeny Astigeevich <evgeny.astigeevich@linaro.org> | 2020-06-26 13:28:33 +0100 |
---|---|---|
committer | Nicolas Geoffray <ngeoffray@google.com> | 2020-07-02 10:49:08 +0000 |
commit | af92a0f06fe3ab2618ccc220df3dacc3a20d8bb1 (patch) | |
tree | a1825765fba713b9805a26b35743506907cdefe8 /compiler/optimizing/code_generator_utils.h | |
parent | 8d799686ff11ef800a8489272f4e0b36b6ab21b3 (diff) |
ARM: Optimize Div/Rem by 2^n for non-negative dividends
When it can be proved that dividends are non-negative or the min integer
if their type is integral, there is no need to generate instructions
correcting the result.
The CL implements this optimization for ARM32/ARM64.
Test: 411-checker-hdiv-hrem-pow2
Test: test.py --host --optimizing --jit --gtest --interpreter
Test: test.py -target --optimizing --jit --interpreter
Test: run-gtests.sh
Change-Id: I11211a42918b5801fce8e78f305e69549739c23c
Diffstat (limited to 'compiler/optimizing/code_generator_utils.h')
-rw-r--r-- | compiler/optimizing/code_generator_utils.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/compiler/optimizing/code_generator_utils.h b/compiler/optimizing/code_generator_utils.h index a6b41c0588..711f9296ed 100644 --- a/compiler/optimizing/code_generator_utils.h +++ b/compiler/optimizing/code_generator_utils.h @@ -40,6 +40,10 @@ template <typename T> T AbsOrMin(T value) { : std::abs(value); } +// Return true if the specified instruction produces only non-negative results or the min value of +// the integral type if the instruction has the integral type. +bool HasNonNegativeResultOrMinInt(HInstruction* instruction); + } // namespace art #endif // ART_COMPILER_OPTIMIZING_CODE_GENERATOR_UTILS_H_ |