diff options
author | Evan Cheng <evan.cheng@apple.com> | 2011-12-19 22:01:30 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2011-12-19 22:01:30 +0000 |
commit | 8787c5f24e175a36f645784d533384f9f7cd86fc (patch) | |
tree | 68bba65e8851d3a846136e34754c35604e25856e /lib/Target/ARM/AsmParser | |
parent | 638905d90cf8e2601b5609e549e3fca6676fff10 (diff) | |
download | external_llvm-8787c5f24e175a36f645784d533384f9f7cd86fc.zip external_llvm-8787c5f24e175a36f645784d533384f9f7cd86fc.tar.gz external_llvm-8787c5f24e175a36f645784d533384f9f7cd86fc.tar.bz2 |
Add a if-conversion optimization that allows 'true' side of a diamond to be
unpredicated. That is, turn
subeq r0, r1, #1
addne r0, r1, #1
into
sub r0, r1, #1
addne r0, r1, #1
For targets where conditional instructions are always executed, this may be
beneficial. It may remove pseudo anti-dependency in out-of-order execution
CPUs. e.g.
op r1, ...
str r1, [r10] ; end-of-life of r1 as div result
cmp r0, #65
movne r1, #44 ; raw dependency on previous r1
moveq r1, #12
If movne is unpredicated, then
op r1, ...
str r1, [r10]
cmp r0, #65
mov r1, #44 ; r1 written unconditionally
moveq r1, #12
Both mov and moveq are no longer depdendent on the first instruction. This gives
the out-of-order execution engine more freedom to reorder them.
This has passed entire LLVM test suite. But it has not been enabled for any ARM
variant pending more performance evaluation.
rdar://8951196
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146914 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/ARM/AsmParser')
0 files changed, 0 insertions, 0 deletions