Investigate IV opts
ivopts is generally a win but has a fair number of cases where turning it off significantly improves performance. We should investigate whether we can improve the ivopts heuristics in order to make it a more consistent win.
Specifically, if a loop iterates over N arrays, there are two extremes:
1) have N separate induction variables, one for each array,
2) have an induction variable for one array A and N-1 loop invariants that hold the difference between the other arrays and A
All other things being equal, ivopts tends to prefer (2). This makes sense on x86, which has reg+reg+offset addressing, but (1) is usually better on ARM. There are two reasons for this:
a) it allows us to use post-index addressing
b) although core ARM loads and stores supported reg+reg addressing, NEON loads and stores do not. So (2) tends to introduce extra additions or subtractions into the loop
The biggest benefit of this work would be seen on vectorised loops that operate on several arrays. One example is colour-space conversion.
See:
http://
and:
http://
Blueprint information
- Status:
- Not started
- Approver:
- Michael Hope
- Priority:
- Medium
- Drafter:
- Richard Sandiford
- Direction:
- Approved
- Assignee:
- None
- Definition:
- Discussion
- Series goal:
- Accepted for 4.6
- Implementation:
- Informational
- Milestone target:
- backlog
- Started by
- Completed by
Related branches
Related bugs
Sprints
Whiteboard
[2013-05-28 matthew-
Work Items
Dependency tree
* Blueprints in grey have been implemented.