aboutsummaryrefslogtreecommitdiff
path: root/gcc/loop.c
diff options
context:
space:
mode:
authorZack Weinberg <zackw@panix.com>2001-08-18 19:59:46 +0000
committerZack Weinberg <zack@gcc.gnu.org>2001-08-18 19:59:46 +0000
commitef89d648b84b126fe6c15be5b09105bf705aa60a (patch)
treef45f62817a1ba4ec89643d51d48fc4dea2c0237b /gcc/loop.c
parent8d36d7229213f91138844f0e710e68c185774aea (diff)
downloadgcc-ef89d648b84b126fe6c15be5b09105bf705aa60a.zip
gcc-ef89d648b84b126fe6c15be5b09105bf705aa60a.tar.gz
gcc-ef89d648b84b126fe6c15be5b09105bf705aa60a.tar.bz2
optabs.h (OTI_flodiv, [...]): Kill.
* optabs.h (OTI_flodiv, flodiv_optab): Kill. * genopinit.c: Put floating point divide insns in sdiv_optab. * expr.c (expand_expr): Use sdiv_optab, not flodiv_optab. * config/gofast.h, config/c4x/c4x.h, config/ia64/hpux_longdouble.h, config/mips/mips.h, config/pa/long_double.h, config/rs6000/sysv4.h, config/sparc/sparc.h: Put floating point divide libcalls in sdiv_optab. * optabs.c (init_optab): Break into new_optab, init_optab, init_optabv. (init_optabs): Use init_optabv for overflow-trapping optabs. Don't init flodiv_optab. Give mov_optab, movstrict_optab, and cmp_optab RTX codes so have_insn_for can find them. * optabs.c (expand_simple_binop, expand_simple_unop, have_insn_for, gen_sub3_insn): New interfaces. * expr.h: Prototype new functions. (enum optab_methods): Move here from optabs.h. * builtins.c, combine.c, doloop.c, function.c, ifcvt.c, loop.c, profile.c, simplify-rtx.c, stmt.c, unroll.c: Use new functions instead of working directly with optabs. * doloop.c, ifcvt.c, loop.c, profile.c, simplify-rtx.c, unroll.c: Don't include optabs.h. * caller-save.c, combine.c, function.c, stmt.c: Just include insn-codes.h, not optabs.h. * Makefile.in: Update dependencies. * combine.c (make_compound_operation, simplify_comparison): Fix typos testing for this or that instruction. From-SVN: r45008
Diffstat (limited to 'gcc/loop.c')
-rw-r--r--gcc/loop.c37
1 files changed, 13 insertions, 24 deletions
diff --git a/gcc/loop.c b/gcc/loop.c
index 55fa912..a8bf9c7 100644
--- a/gcc/loop.c
+++ b/gcc/loop.c
@@ -41,7 +41,6 @@ Boston, MA 02111-1307, USA. */
#include "obstack.h"
#include "function.h"
#include "expr.h"
-#include "optabs.h"
#include "hard-reg-set.h"
#include "basic-block.h"
#include "insn-config.h"
@@ -1952,8 +1951,8 @@ move_movables (loop, movables, threshold, insn_count)
rtx tem;
start_sequence ();
- tem = expand_binop
- (GET_MODE (reg), and_optab, reg,
+ tem = expand_simple_binop
+ (GET_MODE (reg), AND, reg,
GEN_INT ((((HOST_WIDE_INT) 1
<< GET_MODE_BITSIZE (m->savemode)))
- 1),
@@ -7578,21 +7577,16 @@ check_dbra_loop (loop, insn_count)
}
else if (GET_CODE (initial_value) == CONST_INT)
{
- rtx offset = GEN_INT (-INTVAL (initial_value) - add_adjust);
enum machine_mode mode = GET_MODE (reg);
- enum insn_code icode
- = add_optab->handlers[(int) mode].insn_code;
-
- if (! (*insn_data[icode].operand[0].predicate) (reg, mode)
- || ! ((*insn_data[icode].operand[1].predicate)
- (comparison_value, mode))
- || ! ((*insn_data[icode].operand[2].predicate)
- (offset, mode)))
+ rtx offset = GEN_INT (-INTVAL (initial_value) - add_adjust);
+ rtx add_insn = gen_add3_insn (reg, comparison_value, offset);
+
+ if (add_insn == 0)
return 0;
+
start_value
= gen_rtx_PLUS (mode, comparison_value, offset);
- loop_insn_hoist (loop, (GEN_FCN (icode)
- (reg, comparison_value, offset)));
+ loop_insn_hoist (loop, add_insn);
if (GET_CODE (comparison) == LE)
final_value = gen_rtx_PLUS (mode, comparison_value,
GEN_INT (add_val));
@@ -7600,19 +7594,14 @@ check_dbra_loop (loop, insn_count)
else if (! add_adjust)
{
enum machine_mode mode = GET_MODE (reg);
- enum insn_code icode
- = sub_optab->handlers[(int) mode].insn_code;
- if (! (*insn_data[icode].operand[0].predicate) (reg, mode)
- || ! ((*insn_data[icode].operand[1].predicate)
- (comparison_value, mode))
- || ! ((*insn_data[icode].operand[2].predicate)
- (initial_value, mode)))
+ rtx sub_insn = gen_sub3_insn (reg, comparison_value,
+ initial_value);
+
+ if (sub_insn == 0)
return 0;
start_value
= gen_rtx_MINUS (mode, comparison_value, initial_value);
- loop_insn_hoist (loop, (GEN_FCN (icode)
- (reg, comparison_value,
- initial_value)));
+ loop_insn_hoist (loop, sub_insn);
}
else
/* We could handle the other cases too, but it'll be