aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2004-09-20 13:13:39 -0700
committerRichard Henderson <rth@gcc.gnu.org>2004-09-20 13:13:39 -0700
commit04161e2bde5dee7dbe9c7863f3cb6f262c8d059c (patch)
treee555e53fea5983df0a8d4e530fda2c6699639b63
parentbb033fd8060e36e8bafdebec388e5fa91d073d61 (diff)
downloadgcc-04161e2bde5dee7dbe9c7863f3cb6f262c8d059c.zip
gcc-04161e2bde5dee7dbe9c7863f3cb6f262c8d059c.tar.gz
gcc-04161e2bde5dee7dbe9c7863f3cb6f262c8d059c.tar.bz2
alpha.c (some_small_symbolic_operand_int): Rename from some_small_symbolic_operand_1; export.
* config/alpha/alpha.c (some_small_symbolic_operand_int): Rename from some_small_symbolic_operand_1; export. (some_small_symbolic_operand): Remove. * config/alpha/alpha.md (some_small_symbolic_operand splitter): Remove extra C check. * config/alpha/predicates.md (some_small_symbolic_operand): New. From-SVN: r87769
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/alpha/alpha-protos.h2
-rw-r--r--gcc/config/alpha/alpha.c19
-rw-r--r--gcc/config/alpha/alpha.md2
-rw-r--r--gcc/config/alpha/predicates.md13
5 files changed, 26 insertions, 19 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1f0ddd6..d4902b7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2004-09-20 Richard Henderson <rth@redhat.com>
+
+ * config/alpha/alpha.c (some_small_symbolic_operand_int): Rename
+ from some_small_symbolic_operand_1; export.
+ (some_small_symbolic_operand): Remove.
+ * config/alpha/alpha.md (some_small_symbolic_operand splitter): Remove
+ extra C check.
+ * config/alpha/predicates.md (some_small_symbolic_operand): New.
+
2004-09-20 Jan Hubicka <jh@suse.cz>
* predict.c (return_prediction): New function.
diff --git a/gcc/config/alpha/alpha-protos.h b/gcc/config/alpha/alpha-protos.h
index f8fded8..22687ed 100644
--- a/gcc/config/alpha/alpha-protos.h
+++ b/gcc/config/alpha/alpha-protos.h
@@ -122,6 +122,6 @@ extern void unicosmk_output_common (FILE *, const char *, int, int);
extern int unicosmk_initial_elimination_offset (int, int);
#endif
-extern int some_small_symbolic_operand (rtx, enum machine_mode);
+extern int some_small_symbolic_operand_int (rtx *, void *);
extern int tls_symbolic_operand_1 (rtx, int, int);
extern rtx resolve_reload_operand (rtx);
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c
index 21aa382..122dea8 100644
--- a/gcc/config/alpha/alpha.c
+++ b/gcc/config/alpha/alpha.c
@@ -1208,17 +1208,8 @@ alpha_function_ok_for_sibcall (tree decl, tree exp ATTRIBUTE_UNUSED)
return decl_has_samegp (decl);
}
-/* For TARGET_EXPLICIT_RELOCS, we don't obfuscate a SYMBOL_REF to a
- small symbolic operand until after reload. At which point we need
- to replace (mem (symbol_ref)) with (mem (lo_sum $29 symbol_ref))
- so that sched2 has the proper dependency information. */
-/*
- {"some_small_symbolic_operand", {SET, PARALLEL, PREFETCH, UNSPEC, \
- UNSPEC_VOLATILE}},
-*/
-
-static int
-some_small_symbolic_operand_1 (rtx *px, void *data ATTRIBUTE_UNUSED)
+int
+some_small_symbolic_operand_int (rtx *px, void *data ATTRIBUTE_UNUSED)
{
rtx x = *px;
@@ -1229,12 +1220,6 @@ some_small_symbolic_operand_1 (rtx *px, void *data ATTRIBUTE_UNUSED)
return small_symbolic_operand (x, Pmode) != 0;
}
-int
-some_small_symbolic_operand (rtx x, enum machine_mode mode ATTRIBUTE_UNUSED)
-{
- return for_each_rtx (&x, some_small_symbolic_operand_1, NULL);
-}
-
static int
split_small_symbolic_operand_1 (rtx *px, void *data ATTRIBUTE_UNUSED)
{
diff --git a/gcc/config/alpha/alpha.md b/gcc/config/alpha/alpha.md
index 1890c95..09967b5 100644
--- a/gcc/config/alpha/alpha.md
+++ b/gcc/config/alpha/alpha.md
@@ -5348,7 +5348,7 @@
(define_split
[(match_operand 0 "some_small_symbolic_operand" "")]
- "TARGET_EXPLICIT_RELOCS && reload_completed"
+ ""
[(match_dup 0)]
"operands[0] = split_small_symbolic_operand (operands[0]);")
diff --git a/gcc/config/alpha/predicates.md b/gcc/config/alpha/predicates.md
index 56486bc..b060dd1 100644
--- a/gcc/config/alpha/predicates.md
+++ b/gcc/config/alpha/predicates.md
@@ -550,3 +550,16 @@
(match_test "register_operand (XEXP (op, 0), mode)
&& GET_CODE (XEXP (op, 1)) == CONST_INT
&& CONST_OK_FOR_LETTER_P (INTVAL (XEXP (op, 1)), 'K')")))
+
+;; For TARGET_EXPLICIT_RELOCS, we don't obfuscate a SYMBOL_REF to a
+;; small symbolic operand until after reload. At which point we need
+;; to replace (mem (symbol_ref)) with (mem (lo_sum $29 symbol_ref))
+;; so that sched2 has the proper dependency information. */
+(define_predicate "some_small_symbolic_operand"
+ (match_code "set,parallel,prefetch,unspec,unspec_volatile")
+{
+ /* Avoid search unless necessary. */
+ if (!TARGET_EXPLICIT_RELOCS || !reload_completed)
+ return false;
+ return for_each_rtx (&op, some_small_symbolic_operand_int, NULL);
+})