aboutsummaryrefslogtreecommitdiff
path: root/gcc/cse.c
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1995-04-07 16:04:38 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1995-04-07 16:04:38 -0400
commitcceb347c21787a3e5495ca4eabfb17c24e7e4c87 (patch)
treeeba1e6997771bc7f5b61db13e4e7e06f18ee2ab4 /gcc/cse.c
parent3091ecc1835b877d4c4fd486b109917fca8c46e5 (diff)
downloadgcc-cceb347c21787a3e5495ca4eabfb17c24e7e4c87.zip
gcc-cceb347c21787a3e5495ca4eabfb17c24e7e4c87.tar.gz
gcc-cceb347c21787a3e5495ca4eabfb17c24e7e4c87.tar.bz2
(simplify_unary_operation): #ifdef POINTERS_EXTEND_UNSIGNED, handle
sign- or zero-extending addresses. From-SVN: r9333
Diffstat (limited to 'gcc/cse.c')
-rw-r--r--gcc/cse.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/gcc/cse.c b/gcc/cse.c
index b9da905..a4778af 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -3308,7 +3308,23 @@ simplify_unary_operation (code, mode, op, op_mode)
&& GET_CODE (XEXP (XEXP (op, 0), 0)) == LABEL_REF
&& GET_CODE (XEXP (XEXP (op, 0), 1)) == LABEL_REF)
return XEXP (op, 0);
+
+#ifdef POINTERS_EXTEND_UNSIGNED
+ if (! POINTERS_EXTEND_UNSIGNED
+ && mode == Pmode && GET_MODE (op) == ptr_mode
+ && CONSTANT_P (op))
+ return convert_memory_address (Pmode, op);
+#endif
+ break;
+
+#ifdef POINTERS_EXTEND_UNSIGNED
+ case ZERO_EXTEND:
+ if (POINTERS_EXTEND_UNSIGNED
+ && mode == Pmode && GET_MODE (op) == ptr_mode
+ && CONSTANT_P (op))
+ return convert_memory_address (Pmode, op);
break;
+#endif
}
return 0;