re PR target/16974 (could not split insn (ice in final_scan_insn, final.c))
authorRichard Henderson <rth@redhat.com>
Thu, 26 Aug 2004 10:03:38 +0000 (03:03 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Thu, 26 Aug 2004 10:03:38 +0000 (03:03 -0700)
        PR target/16974
        * config/alpha/alpha.md (adddi_fp_hack): Don't rely on splitting
        if the constant satisfies add_operand.

From-SVN: r86613

gcc/ChangeLog
gcc/config/alpha/alpha.md

index b50cccb55aacb79d97760bdd35f0feddb8fd2e73..a91c1a8f116d2d534da859721bd86c3bb1dc9696 100644 (file)
@@ -1,3 +1,9 @@
+2004-08-25  Richard Henderson  <rth@redhat.com>
+
+        PR target/16974
+        * config/alpha/alpha.md (adddi_fp_hack): Don't rely on splitting
+        if the constant satisfies add_operand.
+
 2004-08-25  Richard Henderson  <rth@redhat.com>
  
         PR debug/10695
index 4efff7ca220d7d60498f5805ddb0052f6e64f80a..1890c951d0c1c39b9b068aa22c35bc94afcc6297 100644 (file)
 ;; and if we split before reload, we will require additional instructions.
 
 (define_insn "*adddi_fp_hack"
-  [(set (match_operand:DI 0 "register_operand" "=r")
-        (plus:DI (match_operand:DI 1 "reg_no_subreg_operand" "r")
-                (match_operand:DI 2 "const_int_operand" "n")))]
+  [(set (match_operand:DI 0 "register_operand" "=r,r,r")
+        (plus:DI (match_operand:DI 1 "reg_no_subreg_operand" "r,r,r")
+                (match_operand:DI 2 "const_int_operand" "K,L,n")))]
   "NONSTRICT_REG_OK_FP_BASE_P (operands[1])
    && INTVAL (operands[2]) >= 0
    /* This is the largest constant an lda+ldah pair can add, minus
                           + max_reg_num () * UNITS_PER_WORD
                           + current_function_pretend_args_size)
              - current_function_pretend_args_size))"
-  "#")
+  "@
+   lda %0,%2(%1)
+   ldah %0,%h2(%1)
+   #")
 
 ;; Don't do this if we are adjusting SP since we don't want to do it
 ;; in two steps.  Don't split FP sources for the reason listed above.