diff options
author | Evan Cheng <evan.cheng@apple.com> | 2010-06-09 01:46:50 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2010-06-09 01:46:50 +0000 |
commit | 47cd593023697f544cf8cf88c002e1fe4c764417 (patch) | |
tree | a969f3b7e37da9d95c99afd86a37cc5f846514e1 /llvm/lib/Target/ARM/ARM.h | |
parent | 13f7c7dd7708a703d62c18e777fc128353d25a63 (diff) | |
download | bcm5719-llvm-47cd593023697f544cf8cf88c002e1fe4c764417.tar.gz bcm5719-llvm-47cd593023697f544cf8cf88c002e1fe4c764417.zip |
Thumb2 IT blocks are fairly expensive. When there are multiple selects using
the same condition, it's important to make sure they are scheduled together
to avoid forming multiple IT blocks. I'm adding a pre-regalloc pass that forms
IT blocks early (by re-scheduling instructions and split basic blocks) to
attempt to fix this. This is not turned on by default since I am not sure this
is the right fix.
Another issue is llvm selects are modeled as two-address conditional moves.
This can be very bad when the copies before the conditional moves are not
coalesced away. Teach IT formation pass to move the copies above the IT block
(when legal) to avoid breaking the IT block.
llvm-svn: 105669
Diffstat (limited to 'llvm/lib/Target/ARM/ARM.h')
-rw-r--r-- | llvm/lib/Target/ARM/ARM.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/llvm/lib/Target/ARM/ARM.h b/llvm/lib/Target/ARM/ARM.h index ae7ae59c926..ce0f5d5137e 100644 --- a/llvm/lib/Target/ARM/ARM.h +++ b/llvm/lib/Target/ARM/ARM.h @@ -105,7 +105,7 @@ FunctionPass *createARMExpandPseudoPass(); FunctionPass *createARMConstantIslandPass(); FunctionPass *createNEONPreAllocPass(); FunctionPass *createNEONMoveFixPass(); -FunctionPass *createThumb2ITBlockPass(); +FunctionPass *createThumb2ITBlockPass(bool PreAlloc = false); FunctionPass *createThumb2SizeReductionPass(); extern Target TheARMTarget, TheThumbTarget; |