builtins.c (purge_builtin_constant_p): Handle subreg of constant_p_rtx too.
authorAlexandre Oliva <aoliva@redhat.com>
Wed, 26 Feb 2003 23:09:58 +0000 (23:09 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Wed, 26 Feb 2003 23:09:58 +0000 (23:09 +0000)
* builtins.c (purge_builtin_constant_p): Handle subreg of
constant_p_rtx too.

From-SVN: r63490

gcc/ChangeLog
gcc/builtins.c

index 79c335915a885eb6abb46dd928ba7526669e9018..9cf8fa1652f03adc0a0ee33817aa78fbd6a66ef6 100644 (file)
@@ -1,5 +1,8 @@
 2003-02-26  Alexandre Oliva  <aoliva@redhat.com>
 
+       * builtins.c (purge_builtin_constant_p): Handle subreg of
+       constant_p_rtx too.
+
        * function.c (assign_stack_local_1): Truncate constant added to
        frame_pointer_rtx or virtual_stack_vars_rtx for Pmode.
 
index 81e38db73aacda5710efc1b8a86fa869d85d8e98..d2505cd3a7ee84b09610b0ac51135ade4a0982e9 100644 (file)
@@ -4952,9 +4952,12 @@ purge_builtin_constant_p ()
   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
     if (INSN_P (insn)
        && (set = single_set (insn)) != NULL_RTX
-       && GET_CODE (SET_SRC (set)) == CONSTANT_P_RTX)
+       && (GET_CODE (arg = SET_SRC (set)) == CONSTANT_P_RTX
+           || (GET_CODE (arg) == SUBREG
+               && (GET_CODE (arg = SUBREG_REG (arg))
+                   == CONSTANT_P_RTX))))
       {
-       arg = XEXP (SET_SRC (set), 0);
+       arg = XEXP (arg, 0);
        new = CONSTANT_P (arg) ? const1_rtx : const0_rtx;
        validate_change (insn, &SET_SRC (set), new, 0);