[Bug inline-asm/56148] New: [4.8 Regression] inline asm matching constraint with different mode
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Jan 30 12:02:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56148
Bug #: 56148
Summary: [4.8 Regression] inline asm matching constraint with
different mode
Classification: Unclassified
Product: gcc
Version: 4.8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: inline-asm
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: jakub@gcc.gnu.org
void
foo (void)
{
unsigned char e[16];
unsigned long a, b, c, d;
__asm__ __volatile__ ("" : "=d" (a), "=&c" (c), "=&D" (d), "=&a" (b)
: "0" (-1U), "mr" (e), "1" (128 >> 5), "2" (e), "3" (-1U));
}
is rejected since LRA merge on x86_64-linux at -O2:
rh905862.i: In function ‘foo’:
rh905862.i:6:3: error: ‘asm’ operand has impossible constraints
__asm__ __volatile__ ("" : "=d" (a), "=&c" (c), "=&D" (d), "=&a" (b)
^
The testcase is questionable, because a, c and b are DImode, while -1U, 128 >>
5
and -1U are all SImode using 0/1/3 constraints matching those DImodes.
But we accept it with reload or with -O0 even with LRA.
More information about the Gcc-bugs
mailing list