Contributors:
- Mustafa Hagog
Delivery date:
- Now.
Benefits:
- More loops will be applicable to SMS.
- SMS is undone when it is not profitable, so we don't increase code size in cases we don't gain much.
- Better schedules - due to backtracking.
Risks:
- Bugs
Description:
- Make the tree loop-versioning usable in RTL cfg-layout mode by making it a cfg hook.
- Move SMS to use cfg-layout mode.
- Use loop information to detect simple loops.
- Replace the loop versioning in SMS by using the RTL loop-versioning.
- Several other improvements
- Check if the SMSed loop kernel is more efficient in means of number of cycles if not undo the changes.
- We do this by feeding the loop kernel into the DFA and counting the number of cycles before and after SMS - if we didn't improve (there is a chance because of the register copies we add) we prefer the original loop.
- Ignore register anti-dependencies - use register copies instead.
- Add backtracking to the scheduling algorithm;
- When failing to find a cycle within a kernel of II cycles for a given node we used to restart the whole process with kernel of II + 1. Now we try to unscheduled some of the nodes that the one we failed on depends on and schedule the failing node first, then try the other nodes.
- Check if the SMSed loop kernel is more efficient in means of number of cycles if not undo the changes.
Status:
- Checked in.