Fixes for x86 compiler optimizations.
x86 works with all but a few optimizations turned on, and the broken
ones are still disabled for now. This change includes:
- Flagging of opcodes to incidate register use and def. Also, made
flagging more complete for loads/stores and set/use ccodes.
- Fixes to load store elimination, though it still doesn't work yet.
- Prevent double values that are loaded or stored from losing their
FP_DOUBLE flag. Later optimizations use this sizing.
- Renumbering of DOUBLE registers so they alias with FP regs when
masked.
- Add support in the disassembler to recognize shifts.
Change-Id: I758cdce418409fdd84206ce295005d5c9ab635f8
diff --git a/src/compiler/Frontend.cc b/src/compiler/Frontend.cc
index ba8d0d8..b4ec43e 100644
--- a/src/compiler/Frontend.cc
+++ b/src/compiler/Frontend.cc
@@ -799,8 +799,11 @@
}
#endif
if (cUnit->instructionSet == kX86) {
- // Disable optimizations on X86 for now
- cUnit->disableOpt = -1;
+ // Disable some optimizations on X86 for now
+ cUnit->disableOpt |= (
+ (1 << kLoadStoreElimination) |
+ (1 << kPromoteRegs) |
+ (1 << kTrackLiveTemps));
}
/* Are we generating code for the debugger? */
if (compiler.IsDebuggingSupported()) {