diff options
author | James E Wilson <wilson@tuliptree.org> | 2008-03-31 12:51:50 -0700 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 2008-03-31 12:51:50 -0700 |
commit | 1def9c3f7d418a9e197ac24ce97ab20335c7660a (patch) | |
tree | a614a3a9bd174c90a990f183414397f6b35b4539 | |
parent | bb686a19e90ef34eb921e116dcf81a25aaa02cb4 (diff) | |
download | gcc-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/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/ia64/div.md | 5 | ||||
-rw-r--r-- | gcc/config/ia64/ia64.c | 1 | ||||
-rw-r--r-- | gcc/config/ia64/ia64.md | 1 |
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 |