mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-29 14:40:25 +00:00
Add a rough draft of some content about the new SROA. I'll try to proof
read this and clean it up tomorrow, but hopefully it's a good placeholder. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170196 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b1c83058a4
commit
ff038d7c73
@ -351,7 +351,21 @@ We vectorize under the following loops:
|
||||
'``noalias``' and are checked at runtime.
|
||||
#. ...
|
||||
|
||||
SROA - We've re-written SROA to be significantly more powerful.
|
||||
SROA - We've re-written SROA to be significantly more powerful and generate
|
||||
code which is much more friendly to the rest of the optimization pipeline.
|
||||
Previously this pass had scaling problems that required it to only operate on
|
||||
relatively small aggregates, and at times it would mistakenly replace a large
|
||||
aggregate with a single very large integer in order to make it a scalar SSA
|
||||
value. The result was a large number of i1024 and i2048 values representing any
|
||||
small stack buffer. These in turn slowed down many subsequent optimization
|
||||
paths.
|
||||
|
||||
The new SROA pass uses a different algorithm that allows it to only promote to
|
||||
scalars the pieces of the aggregate actively in use. Because of this it doesn't
|
||||
require any thresholds. It also always deduces the scalar values from the uses
|
||||
of the aggregate rather than the specific LLVM type of the aggregate. These
|
||||
features combine to both optimize more code with the pass but to improve the
|
||||
compile time of many functions dramatically.
|
||||
|
||||
#. Branch weight metadata is preseved through more of the optimizer.
|
||||
#. ...
|
||||
|
Loading…
Reference in New Issue
Block a user