asm if-conversion buglet
Richard Henderson
rth@cygnus.com
Mon May 8 22:02:00 GMT 2000
We transformed
t = foo();
if (!t) {
asm("bugcheck");
return 0;
}
into
bsr foo
bugcheck
mov 0,r0
beq .Lreturn
which is not quite what the programmer had in mind.
r~
* rtlanal.c (may_trap_p): Consider old-style and volatile
asms to trap.
Index: rtlanal.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/rtlanal.c,v
retrieving revision 1.60
diff -c -p -d -r1.60 rtlanal.c
*** rtlanal.c 2000/05/05 16:48:24 1.60
--- rtlanal.c 2000/05/09 04:57:19
*************** may_trap_p (x)
*** 1743,1752 ****
case SCRATCH:
return 0;
! /* Conditional trap can trap! */
case UNSPEC_VOLATILE:
case TRAP_IF:
return 1;
/* Memory ref can trap unless it's a static var or a stack slot. */
case MEM:
--- 1743,1755 ----
case SCRATCH:
return 0;
! case ASM_INPUT:
case UNSPEC_VOLATILE:
case TRAP_IF:
return 1;
+
+ case ASM_OPERANDS:
+ return MEM_VOLATILE_P (x);
/* Memory ref can trap unless it's a static var or a stack slot. */
case MEM:
More information about the Gcc-patches
mailing list