[LLVMdev] HazardRecognizer and RegisterAllocation
Patrick Boettcher
patrick.boettcher at desy.de
Mon Jan 19 11:01:06 PST 2009
Hi Evan,
thanks for your response.
On Mon, 19 Jan 2009, Evan Cheng wrote:
>> For example, code which looks like that:
>>
>> load 0x1234, reg1
>> noop
>> noop
>> add reg1, 1
>> load 0x1236, reg2
>>
>> can be safely transformed to:
>>
>> load 0x1234, reg1
>> load 0x1236, reg2
>> noop
>> add reg1, 1
>>
> The register allocator doesn't reschedule code. It can coalesce
> copies, commute instructions, and do re-materialization, etc.
Sorry for using the wrong vocabulary.
> It's not clear what kind of problems you are running it.
When we limited our target to have only 3 registers available the
code post-hazard-recognized looks like that:
load 0x1234, reg1024
load 0x1236, reg1025
load 0x1238, reg1026
load 0x1240, reg1027
add reg1024, 1
add reg1025, 2
add reg1026, 3
add reg1027, 4
after register allocation:
load 0x1234, reg1
load 0x1236, reg2
load 0x1238, reg3
add reg1, 1
add reg2, 2
add reg3, 3
store reg1, 0x1234
load 0x1240, reg1
add reg1, 4
Which won't work on our platform. It is missing 2 NOOPs after the last
load. The DelaySlotFiller could add the two NOOPs, but that would be less
optimal than doing the store-load before the add of reg2 and reg3 (no NOOP
in that case).
>> And more generally: Is the hazardRecognizer the right and only way to
>> solve our NOOP-minimizing problem?
>
> Perhaps you want to do this after register allocation is done. Dan is
> developing the post-allocation scheduler. You can try it out.
Interesting. Can it already be found SVN? I will search the mail archive
later, if not.
regards,
Patrick.
More information about the llvm-dev
mailing list