return create_conv(dbgi, load_res, mode_arithmetic);
}
-/**
- * Creates a strict Conv (to the node's mode) if necessary.
- *
- * @param dbgi debug info
- * @param node the node to strict conv
- */
-static ir_node *do_strict_conv(dbg_info *dbgi, ir_node *node)
-{
- ir_mode *mode = get_irn_mode(node);
-
- if (!(get_irg_fp_model(current_ir_graph) & fp_explicit_rounding))
- return node;
- if (!mode_is_float(mode))
- return node;
-
- /* check if there is already a Conv */
- if (is_Conv(node)) {
- /* convert it into a strict Conv */
- set_Conv_strict(node, 1);
- return node;
- }
-
- /* otherwise create a new one */
- return new_d_strictConv(dbgi, node, mode);
-}
-
/**
* Returns the correct base address depending on whether it is a parameter or a
* normal local variable.
if (!is_type_compound(arg_type)) {
ir_mode *const mode = get_ir_mode_storage(arg_type);
arg_node = create_conv(dbgi, arg_node, mode);
- arg_node = do_strict_conv(dbgi, arg_node);
}
in[n] = arg_node;
if (!is_type_compound(type)) {
ir_mode *mode = get_ir_mode_storage(type);
value = create_conv(dbgi, value, mode);
- value = do_strict_conv(dbgi, value);
}
ir_node *memory = get_store();
if (!is_type_compound(type)) {
ir_mode *mode = get_ir_mode_storage(type);
value = create_conv(dbgi, value, mode);
- value = do_strict_conv(dbgi, value);
}
if (expression->kind == EXPR_REFERENCE) {
ir_mode *mode_arith = get_ir_mode_arithmetic(type);
ir_node *node = create_conv(dbgi, value_node, mode);
- node = do_strict_conv(dbgi, node);
node = create_conv(dbgi, node, mode_arith);
return node;
ir_node *result = create_op(dbgi, expression, left, right);
result = create_cast(dbgi, result, expression->right->base.type, type);
- result = do_strict_conv(dbgi, result);
result = set_value_for_expression_addr(left_expr, result, left_addr);
dbg_info *const dbgi = get_dbg_info(&entity->base.source_position);
ir_mode *const mode = get_ir_mode_storage(init_type);
node = create_conv(dbgi, node, mode);
- node = do_strict_conv(dbgi, node);
if (declaration_kind == DECLARATION_KIND_LOCAL_VARIABLE) {
set_value(entity->variable.v.value_number, node);
ir_mode *const mode = get_ir_mode_storage(type);
if (res) {
res = create_conv(dbgi, res, mode);
- res = do_strict_conv(dbgi, res);
} else {
res = new_Unknown(mode);
}
ir_mode *mode = get_ir_mode_storage(type);
value = create_conv(NULL, value, mode);
- value = do_strict_conv(NULL, value);
parameter->declaration.kind = DECLARATION_KIND_PARAMETER;
parameter->variable.v.value_number = next_value_number_function;