#include "beabihelper.h"
#include "bearch.h"
+#include "beirg.h"
#include "benode.h"
#include "besched.h"
#include "ircons.h"
*/
static bool has_real_user(const ir_node *node)
{
- const ir_edge_t *edge;
foreach_out_edge(node, edge) {
ir_node *user = get_edge_src_irn(edge);
if (!is_End(user) && !is_Anchor(user))
void be_add_missing_keeps_node(ir_node *node)
{
- int n_outs, i;
- unsigned *found_projs;
- const ir_edge_t *edge;
- ir_mode *mode = get_irn_mode(node);
- ir_node *last_keep;
- ir_node **existing_projs;
+ int n_outs, i;
+ ir_mode *mode = get_irn_mode(node);
+ ir_node *last_keep;
if (mode != mode_T) {
if (!has_real_user(node)) {
if (n_outs <= 0)
return;
- rbitset_alloca(found_projs, n_outs);
- existing_projs = ALLOCANZ(ir_node*, n_outs);
+ unsigned *const found_projs = rbitset_alloca(n_outs);
+ ir_node **const existing_projs = ALLOCANZ(ir_node*, n_outs);
foreach_out_edge(node, edge) {
ir_node *succ = get_edge_src_irn(edge);
ir_mode *mode = get_irn_mode(succ);
ir_node *be_get_stack_pred(const be_stackorder_t *env, const ir_node *node)
{
- return (ir_node*)ir_nodemap_get(&env->stack_order, node);
+ return ir_nodemap_get(ir_node, &env->stack_order, node);
}
void be_free_stackorder(be_stackorder_t *env)
first_store = store0;
} else {
ir_type *tp = get_entity_type(entity);
- ir_mode *mode = get_type_mode(tp);
+ ir_mode *mode = is_compound_type(tp) ? mode_P : get_type_mode(tp);
ir_node *val = new_r_Proj(args, mode, arg);
ir_node *store = new_r_Store(start_block, mem, addr, val, cons_none);
mem = new_r_Proj(store, mode_M, pn_Store_M);
}
}
- if (mem != initial_mem) {
- edges_reroute(initial_mem, mem);
- set_Store_mem(first_store, initial_mem);
- }
+ if (mem != initial_mem)
+ edges_reroute_except(initial_mem, mem, first_store);
}
void be_add_parameter_entity_stores(ir_graph *irg)