2008-03-31 James E. Wilson 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. Index: div.md =================================================================== --- div.md (revision 133771) +++ div.md (working copy) @@ -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" ""))] Index: ia64.c =================================================================== --- ia64.c (revision 133771) +++ ia64.c (working copy) @@ -5898,6 +5898,7 @@ 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: ia64.md =================================================================== --- ia64.md (revision 133771) +++ ia64.md (working copy) @@ -86,6 +86,7 @@ (UNSPEC_LDCCLR 43) (UNSPEC_CHKACLR 45) (UNSPEC_CHKS 47) + (UNSPEC_FR_RECIP_APPROX_RES 48) ]) (define_constants