re PR rtl-optimization/55512 (Various LRA ICEs with inline-asm)
2012-11-28 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/55512 * lra-assigns.c (assign_by_spills): Assigned arbitrary hard regs to failed reload pseudos instead of changing asm pattern. * lra-constraints.c (MAX_CONSTRAINT_ITERATION_NUMBER): Increase value. 2012-11-28 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/55512 * gcc.target/i386/pr55512-[1234].c: New tests. From-SVN: r193901
This commit is contained in:
parent
77e21230ea
commit
c656b86b8d
|
@ -1,3 +1,11 @@
|
|||
2012-11-28 Vladimir Makarov <vmakarov@redhat.com>
|
||||
|
||||
PR rtl-optimization/55512
|
||||
* lra-assigns.c (assign_by_spills): Assigned arbitrary hard regs
|
||||
to failed reload pseudos instead of changing asm pattern.
|
||||
* lra-constraints.c (MAX_CONSTRAINT_ITERATION_NUMBER): Increase
|
||||
value.
|
||||
|
||||
2012-11-28 Markus Trippelsdorf <markus@trippelsdorf.de>
|
||||
|
||||
PR other/55358
|
||||
|
@ -121,7 +129,7 @@
|
|||
|
||||
PR rtl-optimization/55458
|
||||
* lra-assigns.c: Include rtl-error.h.
|
||||
(assign_by_spills): Report about asm inpossible constraints.
|
||||
(assign_by_spills): Report about asm impossible constraints.
|
||||
* Makefile.in (lra-assigns.c): Add $(RTL_ERROR_H).
|
||||
|
||||
2012-11-27 Paolo Bonzini <pbonzini@redhat.com>
|
||||
|
|
|
@ -1220,8 +1220,17 @@ assign_by_spills (void)
|
|||
|
||||
bitmap_initialize (&failed_reload_insns, ®_obstack);
|
||||
for (i = 0; i < nfails; i++)
|
||||
bitmap_ior_into (&failed_reload_insns,
|
||||
&lra_reg_info[sorted_pseudos[i]].insn_bitmap);
|
||||
{
|
||||
regno = sorted_pseudos[i];
|
||||
bitmap_ior_into (&failed_reload_insns,
|
||||
&lra_reg_info[regno].insn_bitmap);
|
||||
/* Assign an arbitrary hard register of regno class to
|
||||
avoid further trouble with the asm insns. */
|
||||
bitmap_clear_bit (&all_spilled_pseudos, regno);
|
||||
assign_hard_regno
|
||||
(ira_class_hard_regs[regno_allocno_class_array[regno]][0],
|
||||
regno);
|
||||
}
|
||||
EXECUTE_IF_SET_IN_BITMAP (&failed_reload_insns, 0, u, bi)
|
||||
{
|
||||
insn = lra_insn_recog_data[u]->insn;
|
||||
|
@ -1230,9 +1239,6 @@ assign_by_spills (void)
|
|||
asm_p = true;
|
||||
error_for_asm (insn,
|
||||
"%<asm%> operand has impossible constraints");
|
||||
/* Avoid further trouble with this insn. */
|
||||
PATTERN (insn) = gen_rtx_USE (VOIDmode, const0_rtx);
|
||||
lra_invalidate_insn_data (insn);
|
||||
}
|
||||
}
|
||||
lra_assert (asm_p);
|
||||
|
|
|
@ -3184,7 +3184,7 @@ loc_equivalence_change_p (rtx *loc)
|
|||
|
||||
/* Maximum allowed number of constraint pass iterations after the last
|
||||
spill pass. It is for preventing LRA cycling in a bug case. */
|
||||
#define MAX_CONSTRAINT_ITERATION_NUMBER 15
|
||||
#define MAX_CONSTRAINT_ITERATION_NUMBER 30
|
||||
|
||||
/* Maximum number of generated reload insns per an insn. It is for
|
||||
preventing this pass cycling in a bug case. */
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2012-11-28 Vladimir Makarov <vmakarov@redhat.com>
|
||||
|
||||
PR rtl-optimization/55512
|
||||
* gcc.target/i386/pr55512-[1234].c: New tests.
|
||||
|
||||
2012-11-28 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR testsuite/55505
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2" } */
|
||||
|
||||
int
|
||||
foo (int x)
|
||||
{
|
||||
asm goto ("" : : "r" (x), "r" (x + 1), "r" (x + 2), "r" (x + 3), /* { dg-error "operand has impossible constraints" } */
|
||||
"r" (x + 4), "r" (x + 5), "r" (x + 6), "r" (x + 7),
|
||||
"r" (x + 8), "r" (x + 9), "r" (x + 10), "r" (x + 11),
|
||||
"r" (x + 12), "r" (x + 13), "r" (x + 14), "r" (x + 15) : : lab);
|
||||
__builtin_unreachable ();
|
||||
lab:
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2" } */
|
||||
|
||||
#define __builtin_unreachable() do { } while (0)
|
||||
|
||||
int
|
||||
foo (int x)
|
||||
{
|
||||
asm goto ("" : : "r" (x), "r" (x + 1), "r" (x + 2), "r" (x + 3), /* { dg-error "operand has impossible constraints" } */
|
||||
"r" (x + 4), "r" (x + 5), "r" (x + 6), "r" (x + 7),
|
||||
"r" (x + 8), "r" (x + 9), "r" (x + 10), "r" (x + 11),
|
||||
"r" (x + 12), "r" (x + 13), "r" (x + 14), "r" (x + 15) : : lab);
|
||||
__builtin_unreachable ();
|
||||
lab:
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2" } */
|
||||
|
||||
int
|
||||
bar (int x)
|
||||
{
|
||||
asm goto ("" : : "r" (x), "r" (x + 1), "r" (x + 2), "r" (x + 3), /* { dg-error "operand has impossible constraints" } */
|
||||
"r" (x + 4), "r" (x + 5), "r" (x + 6), "r" (x + 7),
|
||||
"r" (x + 8), "r" (x + 9), "r" (x + 10), "r" (x + 11),
|
||||
"r" (x + 12), "r" (x + 13), "r" (x + 14), "r" (x + 15),
|
||||
"r" (x + 16) : : lab);
|
||||
__builtin_unreachable ();
|
||||
lab:
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2" } */
|
||||
|
||||
#define __builtin_unreachable() do { } while (0)
|
||||
|
||||
int
|
||||
bar (int x)
|
||||
{
|
||||
asm goto ("" : : "r" (x), "r" (x + 1), "r" (x + 2), "r" (x + 3), /* { dg-error "operand has impossible constraints" } */
|
||||
"r" (x + 4), "r" (x + 5), "r" (x + 6), "r" (x + 7),
|
||||
"r" (x + 8), "r" (x + 9), "r" (x + 10), "r" (x + 11),
|
||||
"r" (x + 12), "r" (x + 13), "r" (x + 14), "r" (x + 15),
|
||||
"r" (x + 16) : : lab);
|
||||
__builtin_unreachable ();
|
||||
lab:
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue