re PR rtl-optimization/78378 (wrong code when combining shift + mult + zero_extend)
PR rtl-optimization/78378 * combine.c (make_extraction): Use force_to_mode for non-{REG,MEM} inner only if pos is 0. Fix up formatting. * gcc.c-torture/execute/pr78378.c: New test. From-SVN: r242526
This commit is contained in:
parent
8972f7e90b
commit
fb324f0209
@ -1,3 +1,9 @@
|
||||
2016-11-16 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/78378
|
||||
* combine.c (make_extraction): Use force_to_mode for non-{REG,MEM}
|
||||
inner only if pos is 0. Fix up formatting.
|
||||
|
||||
2016-11-17 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR rtl-optimization/78325
|
||||
|
@ -7382,6 +7382,7 @@ make_extraction (machine_mode mode, rtx inner, HOST_WIDE_INT pos,
|
||||
if (tmode != BLKmode
|
||||
&& ((pos_rtx == 0 && (pos % BITS_PER_WORD) == 0
|
||||
&& !MEM_P (inner)
|
||||
&& (pos == 0 || REG_P (inner))
|
||||
&& (inner_mode == tmode
|
||||
|| !REG_P (inner)
|
||||
|| TRULY_NOOP_TRUNCATION_MODES_P (tmode, inner_mode)
|
||||
@ -7458,10 +7459,9 @@ make_extraction (machine_mode mode, rtx inner, HOST_WIDE_INT pos,
|
||||
}
|
||||
else
|
||||
new_rtx = force_to_mode (inner, tmode,
|
||||
len >= HOST_BITS_PER_WIDE_INT
|
||||
? HOST_WIDE_INT_M1U
|
||||
: (HOST_WIDE_INT_1U << len) - 1,
|
||||
0);
|
||||
len >= HOST_BITS_PER_WIDE_INT
|
||||
? HOST_WIDE_INT_M1U
|
||||
: (HOST_WIDE_INT_1U << len) - 1, 0);
|
||||
|
||||
/* If this extraction is going into the destination of a SET,
|
||||
make a STRICT_LOW_PART unless we made a MEM. */
|
||||
|
@ -1,3 +1,8 @@
|
||||
2016-11-16 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/78378
|
||||
* gcc.c-torture/execute/pr78378.c: New test.
|
||||
|
||||
2016-11-16 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
|
||||
* gcc.dg/tree-prof/section-attr-1.c: New file.
|
||||
|
18
gcc/testsuite/gcc.c-torture/execute/pr78378.c
Normal file
18
gcc/testsuite/gcc.c-torture/execute/pr78378.c
Normal file
@ -0,0 +1,18 @@
|
||||
/* PR rtl-optimization/78378 */
|
||||
|
||||
unsigned long long __attribute__ ((noinline, noclone))
|
||||
foo (unsigned long long x)
|
||||
{
|
||||
x <<= 41;
|
||||
x /= 232;
|
||||
return 1 + (unsigned short) x;
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
unsigned long long x = foo (1);
|
||||
if (x != 0x2c24)
|
||||
__builtin_abort();
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user