Commit 5d8a5434 by Jakub Jelinek Committed by Jakub Jelinek

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
parent 3eabae3b
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>
* tree-cfg.c (find_taken_edge): Tighten conditions for
......
......@@ -1173,20 +1173,6 @@ reload (rtx first, int global)
{
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))
replace_pseudos_in (& 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));
#endif
/* And simplify (subreg (reg)) if it appears as an operand. */
/* Simplify (subreg (reg)) if it appears as an operand. */
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
......
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>
* gcc.target/arm/register-variables.c: New.
/* 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;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment