[LLVMdev] [RFC] Remat Enhancements
dag at cray.com
Thu Feb 23 08:14:28 PST 2012
I have a set of changes that enhances rematerialization to handle more
kinds of loads, specifically loads with multiple address registers.
This is a big win for some codes on x86.
I plan to send these up ASAP but I want to solicit a bit of guidance
The change requires that live interval analysis be able to determine
whether and instruction is a load and whether an instruction writes to
memory. Here's how I've handled these two questions:
- Add an isLoad member to TargetInstrInfo with a corresponding
implementation in the X86 target consisting of a switch on all
of the load-type opcodes. By default isLoad returns false so
that false negatives are possible.
- Add a writesMemory member to TargetInstrInfo with a corresponding
implementation in the XD86 target. The target implemenmtation is both
a switch on store-type opcodes and a check to see whether a
MachineInstr has write-type MachineMemOperands. The default
implementation returns "false" but "true" might be a safer default
The remat code itself identifies load instructions and checks to see
whether it interferes with any instructions that write to memory.
Are isLoad and writesMemory reasonable implementations of these queries?
Are there other routes that might be better? I'm particularly
interested in opinions about false positives/negatives. What's the safe
default? In either case comments must indicate the possibility of
Finally, are MachineMemOperands guaranteed (modulo bugs, of course) to
be preserved at least through regalloc?
More information about the llvm-dev