diff options
author | Hal Finkel <hfinkel@anl.gov> | 2013-04-10 06:42:34 +0000 |
---|---|---|
committer | Hal Finkel <hfinkel@anl.gov> | 2013-04-10 06:42:34 +0000 |
commit | 90dd7fd167b6d09e4a7f37e35dcbfdc492546a79 (patch) | |
tree | 21572d743188d6c232746d0e7d75d7802b43b73c /lib/Analysis | |
parent | a2561a0153237291980722383f409a6499b12efc (diff) | |
download | external_llvm-90dd7fd167b6d09e4a7f37e35dcbfdc492546a79.zip external_llvm-90dd7fd167b6d09e4a7f37e35dcbfdc492546a79.tar.gz external_llvm-90dd7fd167b6d09e4a7f37e35dcbfdc492546a79.tar.bz2 |
PPC: Prep for if conversion of bctr[l]
This adds in-principle support for if-converting the bctr[l] instructions.
These instructions are used for indirect branching. It seems, however, that the
current if converter will never actually predicate these. To do so, it would
need the ability to hoist a few setup insts. out of the conditionally-executed
block. For example, code like this:
void foo(int a, int (*bar)()) { if (a != 0) bar(); }
becomes:
...
beq 0, .LBB0_2
std 2, 40(1)
mr 12, 4
ld 3, 0(4)
ld 11, 16(4)
ld 2, 8(4)
mtctr 3
bctrl
ld 2, 40(1)
.LBB0_2:
...
and it would be safe to do all of this unconditionally with a predicated
beqctrl instruction.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@179156 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis')
0 files changed, 0 insertions, 0 deletions