diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-11-19 10:15:53 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2019-11-19 10:15:53 +0100 |
commit | beeac4c2716e5873648c67f71ba810cc02f7f8a8 (patch) | |
tree | 4c2b11543f8cbac0211a4c2e2d84f10948ed68d8 /gcc/cse.c | |
parent | 655b60f966e83d82c8ae4c50648e1489cf0ce4d2 (diff) | |
download | gcc-beeac4c2716e5873648c67f71ba810cc02f7f8a8.zip gcc-beeac4c2716e5873648c67f71ba810cc02f7f8a8.tar.gz gcc-beeac4c2716e5873648c67f71ba810cc02f7f8a8.tar.bz2 |
re PR middle-end/91450 (__builtin_mul_overflow(A,B,R) wrong code if product < 0, *R is unsigned, and !(A&B))
PR middle-end/91450
* internal-fn.c (expand_mul_overflow): For s1 * s2 -> ur, if one
operand is negative and one non-negative, compare the non-negative
one against 0 rather than comparing s1 & s2 against 0. Otherwise,
don't compare (s1 & s2) == 0, but compare separately both s1 == 0
and s2 == 0, unless one of them is known to be negative. Remove
tem2 variable, use tem where tem2 has been used before.
* gcc.c-torture/execute/pr91450-1.c: New test.
* gcc.c-torture/execute/pr91450-2.c: New test.
From-SVN: r278437
Diffstat (limited to 'gcc/cse.c')
0 files changed, 0 insertions, 0 deletions