re PR inline-asm/30505 (asm operand has impossible constraints.)
PR inline-asm/30505 * reload1.c (reload): Do invalid ASM checking after cleanup_subreg_operands. * gcc.target/i386/pr30505.c: New test. From-SVN: r123072
This commit is contained in:
parent
3eabae3bbb
commit
5d8a54345a
|
@ -1,3 +1,9 @@
|
||||||
|
2007-03-20 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR inline-asm/30505
|
||||||
|
* reload1.c (reload): Do invalid ASM checking after
|
||||||
|
cleanup_subreg_operands.
|
||||||
|
|
||||||
2007-03-19 Jeff Law <law@redhat.com>
|
2007-03-19 Jeff Law <law@redhat.com>
|
||||||
|
|
||||||
* tree-cfg.c (find_taken_edge): Tighten conditions for
|
* tree-cfg.c (find_taken_edge): Tighten conditions for
|
||||||
|
|
|
@ -1173,20 +1173,6 @@ reload (rtx first, int global)
|
||||||
{
|
{
|
||||||
rtx *pnote;
|
rtx *pnote;
|
||||||
|
|
||||||
/* Clean up invalid ASMs so that they don't confuse later passes.
|
|
||||||
See PR 21299. */
|
|
||||||
if (asm_noperands (PATTERN (insn)) >= 0)
|
|
||||||
{
|
|
||||||
extract_insn (insn);
|
|
||||||
if (!constrain_operands (1))
|
|
||||||
{
|
|
||||||
error_for_asm (insn,
|
|
||||||
"%<asm%> operand has impossible constraints");
|
|
||||||
delete_insn (insn);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (CALL_P (insn))
|
if (CALL_P (insn))
|
||||||
replace_pseudos_in (& CALL_INSN_FUNCTION_USAGE (insn),
|
replace_pseudos_in (& CALL_INSN_FUNCTION_USAGE (insn),
|
||||||
VOIDmode, CALL_INSN_FUNCTION_USAGE (insn));
|
VOIDmode, CALL_INSN_FUNCTION_USAGE (insn));
|
||||||
|
@ -1245,8 +1231,22 @@ reload (rtx first, int global)
|
||||||
add_auto_inc_notes (insn, PATTERN (insn));
|
add_auto_inc_notes (insn, PATTERN (insn));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* And simplify (subreg (reg)) if it appears as an operand. */
|
/* Simplify (subreg (reg)) if it appears as an operand. */
|
||||||
cleanup_subreg_operands (insn);
|
cleanup_subreg_operands (insn);
|
||||||
|
|
||||||
|
/* Clean up invalid ASMs so that they don't confuse later passes.
|
||||||
|
See PR 21299. */
|
||||||
|
if (asm_noperands (PATTERN (insn)) >= 0)
|
||||||
|
{
|
||||||
|
extract_insn (insn);
|
||||||
|
if (!constrain_operands (1))
|
||||||
|
{
|
||||||
|
error_for_asm (insn,
|
||||||
|
"%<asm%> operand has impossible constraints");
|
||||||
|
delete_insn (insn);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we are doing stack checking, give a warning if this function's
|
/* If we are doing stack checking, give a warning if this function's
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2007-03-20 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR inline-asm/30505
|
||||||
|
* gcc.target/i386/pr30505.c: New test.
|
||||||
|
|
||||||
2007-03-19 Mark Shinwell <shinwell@codesourcery.com>
|
2007-03-19 Mark Shinwell <shinwell@codesourcery.com>
|
||||||
|
|
||||||
* gcc.target/arm/register-variables.c: New.
|
* gcc.target/arm/register-variables.c: New.
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
/* PR inline-asm/30505 */
|
||||||
|
/* { dg-do compile { target ilp32 } } */
|
||||||
|
/* { dg-options "-O2" } */
|
||||||
|
|
||||||
|
unsigned long long a, c;
|
||||||
|
unsigned int b, d;
|
||||||
|
|
||||||
|
void
|
||||||
|
test ()
|
||||||
|
{
|
||||||
|
unsigned int e, f;
|
||||||
|
|
||||||
|
__asm__ ("divl %5;movl %1, %0;movl %4, %1;divl %5"
|
||||||
|
: "=&rm" (e), "=a" (f), "=d" (d)
|
||||||
|
: "1" ((unsigned int) (a >> 32)), "g" ((unsigned int) a),
|
||||||
|
"rm" (b), "2" (0)
|
||||||
|
: "cc");
|
||||||
|
c = (unsigned long long) e << 32 | f;
|
||||||
|
}
|
Loading…
Reference in New Issue