aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames E Wilson <wilson@tuliptree.org>2008-03-31 12:51:50 -0700
committerJim Wilson <wilson@gcc.gnu.org>2008-03-31 12:51:50 -0700
commit1def9c3f7d418a9e197ac24ce97ab20335c7660a (patch)
treea614a3a9bd174c90a990f183414397f6b35b4539
parentbb686a19e90ef34eb921e116dcf81a25aaa02cb4 (diff)
downloadgcc-1def9c3f7d418a9e197ac24ce97ab20335c7660a.zip
gcc-1def9c3f7d418a9e197ac24ce97ab20335c7660a.tar.gz
gcc-1def9c3f7d418a9e197ac24ce97ab20335c7660a.tar.bz2
re PR target/35695 (-funroll-loops breaks inline float divide)
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
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/ia64/div.md5
-rw-r--r--gcc/config/ia64/ia64.c1
-rw-r--r--gcc/config/ia64/ia64.md1
4 files changed, 13 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 45eff3e..ade9571 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/ia64/div.md b/gcc/config/ia64/div.md
index a6547a6..45e7459 100644
--- a/gcc/config/ia64/div.md
+++ b/gcc/config/ia64/div.md
@@ -199,8 +199,9 @@
(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" ""))]
diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c
index f2d00cf..270e83d 100644
--- a/gcc/config/ia64/ia64.c
+++ b/gcc/config/ia64/ia64.c
@@ -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;
diff --git a/gcc/config/ia64/ia64.md b/gcc/config/ia64/ia64.md
index ff2bfc8..068e607 100644
--- a/gcc/config/ia64/ia64.md
+++ b/gcc/config/ia64/ia64.md
@@ -86,6 +86,7 @@
(UNSPEC_LDCCLR 43)
(UNSPEC_CHKACLR 45)
(UNSPEC_CHKS 47)
+ (UNSPEC_FR_RECIP_APPROX_RES 48)
])
(define_constants