expand: Fix up expand_doubleword_mod on 32-bit targets [PR98229]
authorJakub Jelinek <jakub@redhat.com>
Fri, 11 Dec 2020 11:47:52 +0000 (12:47 +0100)
committerJakub Jelinek <jakub@redhat.com>
Fri, 11 Dec 2020 11:47:52 +0000 (12:47 +0100)
commit1423318fa778649365f5a73c2c4657733e191820
tree422bd640d8a22ebf25c619195dd8573a52ee4ff0
parentfc7b4248172561a9ee310e2d43d8a485a5c9e108
expand: Fix up expand_doubleword_mod on 32-bit targets [PR98229]

As the testcase shows, for 32-bit word size we can end up with op1
up to 0xffffffff (0x100000000 % 0xffffffff == 1 and so we use bit == 32
for that), but the CONST_INT we got from caller is for DImode in that case
and not valid for SImode operations.

The following patch canonicalizes the two spots where the constant needs
canonicalization.

2020-12-10  Jakub Jelinek  <jakub@redhat.com>

PR rtl-optimization/98229
* optabs.c (expand_doubleword_mod): Canonicalize op1 and
1 - INTVAL (op1) as word_mode constants when used in
word_mode arithmetics.

* gcc.c-torture/compile/pr98229.c: New test.
gcc/optabs.c
gcc/testsuite/gcc.c-torture/compile/pr98229.c [new file with mode: 0644]