aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJohn Wehle <john@feith.com>2000-09-16 23:38:20 +0000
committerJohn Wehle <wehle@gcc.gnu.org>2000-09-16 23:38:20 +0000
commitae0fb1b9fb8a105b01a4bc6a3bdb58cbac5ee741 (patch)
treebc849c501c82961a4386b8600a081e9731f95c64 /gcc
parentf93dacbdefbd440732896d176447c814d61458bf (diff)
downloadgcc-ae0fb1b9fb8a105b01a4bc6a3bdb58cbac5ee741.zip
gcc-ae0fb1b9fb8a105b01a4bc6a3bdb58cbac5ee741.tar.gz
gcc-ae0fb1b9fb8a105b01a4bc6a3bdb58cbac5ee741.tar.bz2
rtlanal.c (rtx_varies_p): Volatile asms vary.
* rtlanal.c (rtx_varies_p): Volatile asms vary. (rtx_unstable_p): Restructure code. Volatile asms are unstable. From-SVN: r36462
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/rtlanal.c44
2 files changed, 39 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ccce0a7..1a0ccb9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+Sat Sep 16 19:42:50 EDT 2000 John Wehle (john@feith.com)
+
+ * rtlanal.c (rtx_varies_p): Volatile asms vary.
+ (rtx_unstable_p): Restructure code. Volatile asms
+ are unstable.
+
Sat Sep 16 14:35:55 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* stor-layout.c (place_field): Don't do anything if field or
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c
index 8424b8e..c19b3f5 100644
--- a/gcc/rtlanal.c
+++ b/gcc/rtlanal.c
@@ -52,20 +52,36 @@ rtx_unstable_p (x)
register int i;
register const char *fmt;
- if (code == MEM)
- return ! RTX_UNCHANGING_P (x) || rtx_unstable_p (XEXP (x, 0));
+ switch (code)
+ {
+ case MEM:
+ return ! RTX_UNCHANGING_P (x) || rtx_unstable_p (XEXP (x, 0));
- if (code == QUEUED)
- return 1;
+ case QUEUED:
+ return 1;
- if (CONSTANT_P (x))
- return 0;
+ case CONST:
+ case CONST_INT:
+ case CONST_DOUBLE:
+ case SYMBOL_REF:
+ case LABEL_REF:
+ return 0;
- if (code == REG)
- /* As in rtx_varies_p, we have to use the actual rtx, not reg number. */
- return ! (x == frame_pointer_rtx || x == hard_frame_pointer_rtx
- || x == arg_pointer_rtx || x == pic_offset_table_rtx
- || RTX_UNCHANGING_P (x));
+ case REG:
+ /* As in rtx_varies_p, we have to use the actual rtx, not reg number. */
+ return ! (x == frame_pointer_rtx || x == hard_frame_pointer_rtx
+ || x == arg_pointer_rtx || x == pic_offset_table_rtx
+ || RTX_UNCHANGING_P (x));
+
+ case ASM_OPERANDS:
+ if (MEM_VOLATILE_P (x))
+ return 1;
+
+ /* FALLTHROUGH */
+
+ default:
+ break;
+ }
fmt = GET_RTX_FORMAT (code);
for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
@@ -126,6 +142,12 @@ rtx_varies_p (x)
(in fact is it related specifically to operand 1). */
return rtx_varies_p (XEXP (x, 1));
+ case ASM_OPERANDS:
+ if (MEM_VOLATILE_P (x))
+ return 1;
+
+ /* FALLTHROUGH */
+
default:
break;
}