------- Comment #7 from jakub at gcc dot gnu dot org 2009-01-16 12:42 -------
The correct testcase is IMHO:
void
baz (int v)
{
unsigned a = (v == 1) ? 1 : 2;
if (__builtin_constant_p (a))
asm volatile ("# constant %0" :: "i" (a));
else
asm volatile ("# register %0" :: "r" (a));
}
For non-constant a using "i" constraint is wrong. This fails since
http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=134833
I guess handling BUILT_IN_CONSTANT_P the same as BUILT_IN_OBJECT_SIZE in
record_temporary_equivalences_from_stmts_at_dest
could do the trick.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38789