projects
/
libfirm
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
more debug info
[libfirm]
/
ir
/
ir
/
irarch.c
diff --git
a/ir/ir/irarch.c
b/ir/ir/irarch.c
index
f9507d5
..
41e154c
100644
(file)
--- a/
ir/ir/irarch.c
+++ b/
ir/ir/irarch.c
@@
-52,6
+52,7
@@
#include "ircons.h"
#include "irarch.h"
#include "irflag.h"
#include "ircons.h"
#include "irarch.h"
#include "irflag.h"
+#include "error.h"
#undef DEB
#undef DEB
@@
-467,7
+468,7
@@
static ir_node *build_graph(mul_env *env, instruction *inst) {
case ZERO:
return inst->irn = new_r_Const(current_ir_graph, env->blk, env->mode, get_mode_null(env->mode));
default:
case ZERO:
return inst->irn = new_r_Const(current_ir_graph, env->blk, env->mode, get_mode_null(env->mode));
default:
-
assert(0
);
+
panic("Unsupported instruction kind"
);
return NULL;
}
}
return NULL;
}
}
@@
-507,16
+508,14
@@
static int evaluate_insn(mul_env *env, instruction *inst) {
case ZERO:
inst->costs = costs = env->evaluate(inst->kind, NULL);
return costs;
case ZERO:
inst->costs = costs = env->evaluate(inst->kind, NULL);
return costs;
- default:
- assert(0);
- return 0;
}
}
+ panic("Unsupported instruction kind");
}
/**
* Evaluate the replacement instructions and build a new graph
* if faster than the Mul.
}
/**
* Evaluate the replacement instructions and build a new graph
* if faster than the Mul.
- *
r
eturns the root of the new graph then or irn otherwise.
+ *
R
eturns the root of the new graph then or irn otherwise.
*
* @param irn the Mul operation
* @param operand the multiplication operand
*
* @param irn the Mul operation
* @param operand the multiplication operand
@@
-545,7
+544,7
@@
static ir_node *do_decomposition(ir_node *irn, ir_node *operand, tarval *tv) {
inst = decompose_mul(&env, R, r, tv);
/* the paper suggests 70% here */
inst = decompose_mul(&env, R, r, tv);
/* the paper suggests 70% here */
- mul_costs = (env.evaluate(MUL, tv) * 7) / 10;
+ mul_costs = (env.evaluate(MUL, tv) * 7
+ 5
) / 10;
if (evaluate_insn(&env, inst) <= mul_costs && !env.fail) {
env.op = operand;
env.blk = get_nodes_block(irn);
if (evaluate_insn(&env, inst) <= mul_costs && !env.fail) {
env.op = operand;
env.blk = get_nodes_block(irn);
@@
-634,7
+633,7
@@
static int tv_ld2(tarval *tv, int bits) {
#define SHL(a, b) tarval_shl(a, b)
#define SHR(a, b) tarval_shr(a, b)
#define ADD(a, b) tarval_add(a, b)
#define SHL(a, b) tarval_shl(a, b)
#define SHR(a, b) tarval_shr(a, b)
#define ADD(a, b) tarval_add(a, b)
-#define SUB(a, b) tarval_sub(a, b)
+#define SUB(a, b) tarval_sub(a, b
, NULL
)
#define MUL(a, b) tarval_mul(a, b)
#define DIV(a, b) tarval_div(a, b)
#define MOD(a, b) tarval_mod(a, b)
#define MUL(a, b) tarval_mul(a, b)
#define DIV(a, b) tarval_div(a, b)
#define MOD(a, b) tarval_mod(a, b)
@@
-851,7
+850,7
@@
static ir_node *replace_div_by_mulh(ir_node *div, tarval *tv) {
/* generate the Mulh instruction */
c = new_r_Const(current_ir_graph, block, mode, mag.M);
/* generate the Mulh instruction */
c = new_r_Const(current_ir_graph, block, mode, mag.M);
- q
= new_rd_Mulh(dbg, current_ir_graph, block, n, c, mode);
+ q = new_rd_Mulh(dbg, current_ir_graph, block, n, c, mode);
if (mag.need_add) {
if (mag.s > 0) {
if (mag.need_add) {
if (mag.s > 0) {
@@
-886,7
+885,7
@@
ir_node *arch_dep_replace_div_by_const(ir_node *irn) {
if (params == NULL || (opts & arch_dep_div_by_const) == 0)
return irn;
if (params == NULL || (opts & arch_dep_div_by_const) == 0)
return irn;
- if (
get_irn_opcode(irn) == iro_Div
) {
+ if (
is_Div(irn)
) {
ir_node *c = get_Div_right(irn);
ir_node *block, *left;
ir_mode *mode;
ir_node *c = get_Div_right(irn);
ir_node *block, *left;
ir_mode *mode;
@@
-895,7
+894,7
@@
ir_node *arch_dep_replace_div_by_const(ir_node *irn) {
int n, bits;
int k, n_flag;
int n, bits;
int k, n_flag;
- if (
get_irn_op(c) != op_Const
)
+ if (
! is_Const(c)
)
return irn;
tv = get_Const_tarval(c);
return irn;
tv = get_Const_tarval(c);
@@
-930,6
+929,7
@@
ir_node *arch_dep_replace_div_by_const(ir_node *irn) {
ir_node *k_node;
ir_node *curr = left;
ir_node *k_node;
ir_node *curr = left;
+ /* create the correction code for signed values only if there might be a remainder */
if (! is_Div_remainderless(irn)) {
if (k != 1) {
k_node = new_r_Const_long(current_ir_graph, block, mode_Iu, k - 1);
if (! is_Div_remainderless(irn)) {
if (k != 1) {
k_node = new_r_Const_long(current_ir_graph, block, mode_Iu, k - 1);
@@
-981,7
+981,7
@@
ir_node *arch_dep_replace_mod_by_const(ir_node *irn) {
if (params == NULL || (opts & arch_dep_mod_by_const) == 0)
return irn;
if (params == NULL || (opts & arch_dep_mod_by_const) == 0)
return irn;
- if (
get_irn_opcode(irn) == iro_Mod
) {
+ if (
is_Mod(irn)
) {
ir_node *c = get_Mod_right(irn);
ir_node *block, *left;
ir_mode *mode;
ir_node *c = get_Mod_right(irn);
ir_node *block, *left;
ir_mode *mode;
@@
-990,7
+990,7
@@
ir_node *arch_dep_replace_mod_by_const(ir_node *irn) {
int n, bits;
int k;
int n, bits;
int k;
- if (
get_irn_op(c) != op_Const
)
+ if (
! is_Const(c)
)
return irn;
tv = get_Const_tarval(c);
return irn;
tv = get_Const_tarval(c);
@@
-1075,7
+1075,7
@@
void arch_dep_replace_divmod_by_const(ir_node **div, ir_node **mod, ir_node *irn
((opts & (arch_dep_div_by_const|arch_dep_mod_by_const)) != (arch_dep_div_by_const|arch_dep_mod_by_const)))
return;
((opts & (arch_dep_div_by_const|arch_dep_mod_by_const)) != (arch_dep_div_by_const|arch_dep_mod_by_const)))
return;
- if (
get_irn_opcode(irn) == iro_DivMod
) {
+ if (
is_DivMod(irn)
) {
ir_node *c = get_DivMod_right(irn);
ir_node *block, *left;
ir_mode *mode;
ir_node *c = get_DivMod_right(irn);
ir_node *block, *left;
ir_mode *mode;
@@
-1084,7
+1084,7
@@
void arch_dep_replace_divmod_by_const(ir_node **div, ir_node **mod, ir_node *irn
int n, bits;
int k, n_flag;
int n, bits;
int k, n_flag;
- if (
get_irn_op(c) != op_Const
)
+ if (
! is_Const(c)
)
return;
tv = get_Const_tarval(c);
return;
tv = get_Const_tarval(c);