+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.
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);
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;
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)
{
(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]);")
(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);
+})