diff options
author | Evan Cheng <evan.cheng@apple.com> | 2011-03-23 22:52:04 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2011-03-23 22:52:04 +0000 |
commit | 2c339156289d8398bea09c2bb4b735d00d39bdb3 (patch) | |
tree | bd93f3a2bae816c2cce86c73d05bbb958c31136a /lib/Support/Unix | |
parent | b141099c14bfa86167b2137e8a9544c6ee805955 (diff) |
Cmp peephole optimization isn't always safe for signed arithmetics.
int tries = INT_MAX;
while (tries > 0) {
tries--;
}
The check should be:
subs r4, #1
cmp r4, #0
bgt LBB0_1
The subs can set the overflow V bit when r4 is INT_MAX+1 (which loop
canonicalization apparently does in this case). cmp #0 would have cleared
it while not changing the N and Z bits. Since BGT is dependent on the V
bit, i.e. (N == V) && !Z, it is not safe to eliminate the cmp #0.
rdar://9172742
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128179 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Support/Unix')
0 files changed, 0 insertions, 0 deletions