re PR middle-end/59743 (ICE: Segmentation fault)
PR middle-end/59743 * ree.c (combine_reaching_defs): Ensure the defining statement occurs before the extension when optimizing extensions with different source and destination hard registers. PR middle-end/59743 * gcc.c-torture/compile/pr59743.c: New test. From-SVN: r206545
This commit is contained in:
parent
b270b096a1
commit
7e41c852e3
@ -1,3 +1,10 @@
|
||||
2014-01-10 Jeff Law <law@redhat.com>
|
||||
|
||||
PR middle-end/59743
|
||||
* ree.c (combine_reaching_defs): Ensure the defining statement
|
||||
occurs before the extension when optimizing extensions with
|
||||
different source and destination hard registers.
|
||||
|
||||
2014-01-10 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
PR ipa/58585
|
||||
|
@ -723,8 +723,10 @@ combine_reaching_defs (ext_cand *cand, const_rtx set_pat, ext_state *state)
|
||||
|
||||
/* The defining statement and candidate insn must be in the same block.
|
||||
This is merely to keep the test for safety and updating the insn
|
||||
stream simple. */
|
||||
if (BLOCK_FOR_INSN (cand->insn) != BLOCK_FOR_INSN (def_insn))
|
||||
stream simple. Also ensure that within the block the candidate
|
||||
follows the defining insn. */
|
||||
if (BLOCK_FOR_INSN (cand->insn) != BLOCK_FOR_INSN (def_insn)
|
||||
|| DF_INSN_LUID (def_insn) > DF_INSN_LUID (cand->insn))
|
||||
return false;
|
||||
|
||||
/* If there is an overlap between the destination of DEF_INSN and
|
||||
|
@ -1,3 +1,8 @@
|
||||
2014-01-10 Jeff Law <law@redhat.com>
|
||||
|
||||
PR middle-end/59743
|
||||
* gcc.c-torture/compile/pr59743.c: New test.
|
||||
|
||||
2014-01-10 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
PR ipa/58585
|
||||
|
23
gcc/testsuite/gcc.c-torture/compile/pr59743.c
Normal file
23
gcc/testsuite/gcc.c-torture/compile/pr59743.c
Normal file
@ -0,0 +1,23 @@
|
||||
/* PR middle-end/59743 */
|
||||
|
||||
typedef union {
|
||||
long all;
|
||||
struct {
|
||||
int low;
|
||||
int high;
|
||||
} s;
|
||||
} udwords;
|
||||
int a, b, c, d;
|
||||
void __udivmoddi4() {
|
||||
udwords r;
|
||||
d = __builtin_clz(0);
|
||||
r.s.low = 0;
|
||||
for (; d; --d) {
|
||||
r.s.high = r.s.high << 1 | r.s.low >> a;
|
||||
r.s.low = r.s.low << b >> 1;
|
||||
int s = -r.all;
|
||||
c = s;
|
||||
r.all--;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user