#include "irgwalk.h"
#include "irmode.h"
#include "iropt_dbg.h"
+#include "iroptimize.h"
#include "irprog_t.h"
#include "lower_softfloat.h"
#include "lowering.h"
switch (opcode) {
case iro_Div:
- mode = get_Div_resmode(n);
operand_mode = get_irn_mode(get_Div_left(n));
/* fall through */
case iro_Add:
else
snprintf(buf, sizeof(buf), "__%s%s%s%s", name, first_param, second_param, result);
- id = new_id_from_str(buf);
- ent = new_entity(get_glob_type(), id, method);
-
- set_entity_ld_ident(ent, get_entity_ident(ent));
+ id = new_id_from_str(buf);
+ ent = create_compilerlib_entity(id, method);
sym.entity_p = ent;
return new_r_SymConst(irg, mode_P_code, sym, symconst_addr_ent);
size_t n_param;
size_t n_res;
- res = (ir_type*)pmap_get(lowered_type, mtp);
+ res = pmap_get(ir_type, lowered_type, mtp);
if (res != NULL)
return res;
set_method_calling_convention(res, get_method_calling_convention(mtp));
set_method_additional_properties(res, get_method_additional_properties(mtp));
- set_lowered_type(mtp, res);
+ set_higher_type(res, mtp);
pmap_insert(lowered_type, mtp, res);
return res;
ir_mode *op_mode = get_irn_mode(left);
ir_node *right = get_Cmp_right(n);
ir_node *symconst2 = NULL;
- ir_node *zero = new_rd_Const_long(dbgi, irg, mode_Is, 0);
+ ir_node *zero = new_rd_Const(dbgi, irg, get_mode_null(mode_Is));
if (! mode_is_float(op_mode))
return;
*/
static void lower_Const(ir_node *n)
{
- ir_mode *lowered_mode;
- ir_mode *mode = get_irn_mode(n);
- ir_tarval *tv = get_Const_tarval(n);
- char buf[100];
- size_t len;
-
- if (! mode_is_float(mode))
+ ir_mode *mode = get_irn_mode(n);
+ if (!mode_is_float(mode))
return;
- lowered_mode = get_lowered_mode(mode);
+ ir_mode *lowered_mode = get_lowered_mode(mode);
set_irn_mode(n, lowered_mode);
set_tarval_mode_output_option(mode, &hex_output);
- tarval_snprintf(buf, 100, get_Const_tarval(n));
+ char buf[100];
+ tarval_snprintf(buf, sizeof(buf), get_Const_tarval(n));
- len = strlen(buf);
- tv = new_tarval_from_str(buf, len, lowered_mode);
+ size_t len = strlen(buf);
+ ir_tarval *tv = new_tarval_from_str(buf, len, lowered_mode);
set_Const_tarval(n, tv);
}
*/
static void lower_Div(ir_node *n)
{
- ir_node *symconst;
- ir_node *block = get_nodes_block(n);
- ir_node *call_result = NULL;
- dbg_info *dbgi = get_irn_dbg_info(n);
- ir_graph *irg = get_irn_irg(n);
- ir_node *left = get_Div_left(n);
- ir_mode *mode = get_Div_resmode(n);
- ir_node *right = get_Div_right(n);
- const ir_edge_t *edge;
- const ir_edge_t *next;
+ ir_node *symconst;
+ ir_node *block = get_nodes_block(n);
+ ir_node *call_result = NULL;
+ dbg_info *dbgi = get_irn_dbg_info(n);
+ ir_graph *irg = get_irn_irg(n);
+ ir_node *left = get_Div_left(n);
+ ir_mode *mode = get_Div_resmode(n);
+ ir_node *right = get_Div_right(n);
if (! mode_is_float(mode))
return;
set_irn_pinned(call, get_irn_pinned(n));
- foreach_out_edge_safe(n, edge, next) {
+ foreach_out_edge_safe(n, edge) {
ir_node *proj = get_edge_src_irn(edge);
if (! is_Proj(proj))
continue;
ir_prepare_softfloat_lowering();
- clear_irp_opcodes_generic_func();
+ ir_clear_opcodes_generic_func();
ir_register_softloat_lower_function(op_Add, lower_Add);
ir_register_softloat_lower_function(op_Cmp, lower_Cmp);
ir_register_softloat_lower_function(op_Conv, lower_Conv);
ir_nodeset_init(&created_mux_nodes);
- edges_assure(irg);
+ assure_edges(irg);
irg_walk_graph(irg, NULL, lower_node, NULL);
ir_nodeset_destroy(&created_mux_nodes);
}
- clear_irp_opcodes_generic_func();
+ ir_clear_opcodes_generic_func();
ir_register_softloat_lower_function(op_Call, lower_Call);
ir_register_softloat_lower_function(op_Const, lower_Const);
ir_register_softloat_lower_function(op_Div, lower_Div_mode);
ir_entity *ent = get_irg_entity(irg);
ir_type *mtp = get_entity_type(ent);
ir_type *lowered_mtp = lower_method_type(mtp);
+ ir_type *frame_tp = get_irg_frame_type(irg);
+ size_t n_members;
+ size_t i;
if (lowered_mtp != mtp)
set_entity_type(ent, lowered_mtp);
irg_walk_graph(irg, NULL, lower_mode, NULL);
+
+ /* fixup parameter entities */
+ n_members = get_compound_n_members(frame_tp);
+ for (i = 0; i < n_members; ++i) {
+ ir_entity *member = get_compound_member(frame_tp, i);
+ ir_type *type = get_entity_type(member);
+ if (is_Primitive_type(type)) {
+ ir_type *lowered = lower_type(type);
+ set_entity_type(member, lowered);
+ }
+ }
}
}