re PR target/35695 (-funroll-loops breaks inline float divide)
authorJames E Wilson <wilson@tuliptree.org>
Mon, 31 Mar 2008 19:51:50 +0000 (12:51 -0700)
committerJim Wilson <wilson@gcc.gnu.org>
Mon, 31 Mar 2008 19:51:50 +0000 (12:51 -0700)
PR target/35695
* config/ia64/div.md (recip_approx_rf): Use UNSPEC not DIV.
* config/ia64/ia64.c (rtx_needs_barrier): Handle
UNSPEC_FR_RECIP_APPROX_RES.
* config/ia64/ia64.md (UNSPEC_FR_RECIP_APPROX_RES): Define.

From-SVN: r133772

gcc/ChangeLog
gcc/config/ia64/div.md
gcc/config/ia64/ia64.c
gcc/config/ia64/ia64.md

index 45eff3e98b3e6c39029f9011dda20679c4c3e721..ade9571978e8775bf86425bb29e9e3490b32b7b1 100644 (file)
@@ -1,3 +1,11 @@
+2008-03-31  James E. Wilson  <wilson@tuliptree.org>
+
+       PR target/35695
+       * config/ia64/div.md (recip_approx_rf): Use UNSPEC not DIV.
+       * config/ia64/ia64.c (rtx_needs_barrier): Handle
+       UNSPEC_FR_RECIP_APPROX_RES.
+       * config/ia64/ia64.md (UNSPEC_FR_RECIP_APPROX_RES): Define.
+
 2008-03-31  Volker Reichelt  <v.reichelt@netcologne.de>
 
        PR c/35750
index a6547a680ff3219b8be1b09ae84d9779b958652c..45e745963c261136483199fbfbd29545d7925ff8 100644 (file)
 
 (define_insn "recip_approx_rf"
   [(set (match_operand:RF 0 "fr_register_operand" "=f")
-        (div:RF (match_operand:RF 1 "fr_register_operand" "f")
-                (match_operand:RF 2 "fr_register_operand" "f")))
+        (unspec:RF [(match_operand:RF 1 "fr_register_operand" "f")
+                   (match_operand:RF 2 "fr_register_operand" "f")]
+                  UNSPEC_FR_RECIP_APPROX_RES))
    (set (match_operand:BI 3 "register_operand" "=c")
         (unspec:BI [(match_dup 1) (match_dup 2)] UNSPEC_FR_RECIP_APPROX))
    (use (match_operand:SI 4 "const_int_operand" ""))]
index f2d00cf3cc8bd0fbc90188091453bfd1bfe513f7..270e83d3c3afb913eb994c4a926c24a58dc20065 100644 (file)
@@ -5898,6 +5898,7 @@ rtx_needs_barrier (rtx x, struct reg_flags flags, int pred)
        case UNSPEC_FR_RECIP_APPROX:
        case UNSPEC_SHRP:
        case UNSPEC_COPYSIGN:
+       case UNSPEC_FR_RECIP_APPROX_RES:
          need_barrier = rtx_needs_barrier (XVECEXP (x, 0, 0), flags, pred);
          need_barrier |= rtx_needs_barrier (XVECEXP (x, 0, 1), flags, pred);
          break;
index ff2bfc8aa0339db0d00346a72a1df7280518bc7e..068e607c1e98a3f747d846e383a4834e32be06b2 100644 (file)
@@ -86,6 +86,7 @@
    (UNSPEC_LDCCLR               43)
    (UNSPEC_CHKACLR              45)
    (UNSPEC_CHKS                 47)    
+   (UNSPEC_FR_RECIP_APPROX_RES  48)
   ])
 
 (define_constants