summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/ExprConstant.cpp
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2011-12-19 22:01:30 +0000
committerEvan Cheng <evan.cheng@apple.com>2011-12-19 22:01:30 +0000
commit4266a7935191d8111e6bfa0de2ce0eec98678201 (patch)
tree4d378b415ce9379349d65750a5d9cb3ba894a71c /clang/lib/AST/ExprConstant.cpp
parent6dbc17dffebdde1edb296de1fd335d9965fa4f2a (diff)
downloadbcm5719-llvm-4266a7935191d8111e6bfa0de2ce0eec98678201.tar.gz
bcm5719-llvm-4266a7935191d8111e6bfa0de2ce0eec98678201.zip
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 llvm-svn: 146914
Diffstat (limited to 'clang/lib/AST/ExprConstant.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud