Compiler constant handling rework
In preparation for de-optimization, reworked the constant
handling mechanism. Also took advantage of knowledge of
constant operands (particularly for long operations).
Significant performance improvements for Mandelbrot
(~60 seconds to ~34 seconds). Minor improvements in other
benchmarks.
The new constant handling breaks two of the existing
optimization passes: "Skip Large Method" and "Load/Store
Elimization."
I don't intend to update the large method optimization
because it will be superceeded by the upcoming interpreter/
fingerprinting mechanism. Leaving the code in place for
now in order to compare compile-time improvements with
fingerprinting/interpret. All related code will be deleted
when that is complete.
The load/store elimination pass needs some rework to handle
uses of multiple-register loads and stores. It will be
updated & restored in a future CL.
Change-Id: Ia979abaf51b8ae81bbb0428031cbcea854625fac
diff --git a/src/utils.h b/src/utils.h
index f3c9b7a..d808fc3 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -91,20 +91,20 @@
return IsUint(N, value);
}
-static inline int32_t Low16Bits(int32_t value) {
- return static_cast<int32_t>(value & 0xffff);
+static inline uint16_t Low16Bits(uint32_t value) {
+ return static_cast<uint16_t>(value);
}
-static inline int32_t High16Bits(int32_t value) {
- return static_cast<int32_t>(value >> 16);
+static inline uint16_t High16Bits(uint32_t value) {
+ return static_cast<uint16_t>(value >> 16);
}
-static inline int32_t Low32Bits(int64_t value) {
- return static_cast<int32_t>(value);
+static inline uint32_t Low32Bits(uint64_t value) {
+ return static_cast<uint32_t>(value);
}
-static inline int32_t High32Bits(int64_t value) {
- return static_cast<int32_t>(value >> 32);
+static inline uint32_t High32Bits(uint64_t value) {
+ return static_cast<uint32_t>(value >> 32);
}
template<typename T>