Here is block diagram of LRA passes:
- ---------------------
- | Undo inheritance | --------------- ---------------
- | for spilled pseudos)| | Memory-memory | | New (and old) |
- | and splits (for |<----| move coalesce |<-----| pseudos |
- | pseudos got the | --------------- | assignment |
- Start | same hard regs) | ---------------
- | --------------------- ^
- V | ---------------- |
- ----------- V | Update virtual | |
-| Remove |----> ------------>| register | |
-| scratches | ^ | displacements | |
- ----------- | ---------------- |
- | | |
- | V New |
- ---------------- No ------------ pseudos -------------------
- | Spilled pseudo | change |Constraints:| or insns | Inheritance/split |
- | to memory |<-------| RTL |--------->| transformations |
- | substitution | | transfor- | | in EBB scope |
- ---------------- | mations | -------------------
- | ------------
- V
+ ---------------------
+ --------------- | Undo inheritance | ---------------
+ | Memory-memory | | for spilled pseudos)| | New (and old) |
+ | move coalesce |<---| and splits (for |<-- | pseudos |
+ --------------- | pseudos got the | | assignment |
+ Start | | same hard regs) | ---------------
+ | | --------------------- ^
+ V | ---------------- |
+ ----------- V | Update virtual | |
+| Remove |----> ------------>| register | |
+| scratches | ^ | displacements | |
+ ----------- | ---------------- |
+ | | |
+ | V New |
+ ---------------- No ------------ pseudos -------------------
+ | Spilled pseudo | change |Constraints:| or insns | Inheritance/split |
+ | to memory |<-------| RTL |--------->| transformations |
+ | substitution | | transfor- | | in EBB scope |
+ ---------------- | mations | -------------------
+ | ------------
+ V
-------------------------
| Hard regs substitution, |
| devirtalization, and |------> Finish
| restoring scratches got |
- | memory |
+ | memory |
-------------------------
To speed up the process: