mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 20:29:48 +00:00
Notes on how to kill the eeevil brtwoway, and make ppc branch selector
more target independant, generate better code, and be less conservative. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26809 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
be80fc8d09
commit
1ad9b3a3cc
@ -18,6 +18,34 @@ unconditional branch, so we don't end up with things like:
|
|||||||
|
|
||||||
This occurs in SPASS.
|
This occurs in SPASS.
|
||||||
|
|
||||||
|
The power of diet coke came up with a solution to this today:
|
||||||
|
|
||||||
|
We know the only two cases that can happen here are either:
|
||||||
|
a) we have a conditional branch followed by a fallthrough to the next BB
|
||||||
|
b) we have a conditional branch followed by an unconditional branch
|
||||||
|
|
||||||
|
We also invented the BRTWOWAY node to model (b).
|
||||||
|
|
||||||
|
Currently, these are modeled by the PPC_BRCOND node which is a 12-byte pseudo
|
||||||
|
that codegens to
|
||||||
|
bccinv false
|
||||||
|
true:
|
||||||
|
b truebb
|
||||||
|
false:
|
||||||
|
b falsebb
|
||||||
|
|
||||||
|
However, realizing that for (a), we can bccinv directly to the fallthrough
|
||||||
|
block, and for (b) we will already have another unconditional branch after
|
||||||
|
the conditional branch (see SPASS case above), then we know that we don't need
|
||||||
|
BRTWOWAY at all, and can just codegen PPC_BRCOND as
|
||||||
|
|
||||||
|
bccinv +8
|
||||||
|
b truebb
|
||||||
|
|
||||||
|
This will also allow us to selectively not run the ppc branch selector, by just
|
||||||
|
selecting PPC_BRCOND pseudo directly to the correct conditional branch
|
||||||
|
instruction for small functions.
|
||||||
|
|
||||||
===-------------------------------------------------------------------------===
|
===-------------------------------------------------------------------------===
|
||||||
|
|
||||||
* Codegen this:
|
* Codegen this:
|
||||||
|
Loading…
Reference in New Issue
Block a user