#include "irgraph_t.h"
#include "irgopt.h"
#include "irgmod.h"
-#include "irprintf_t.h"
+#include "irprintf.h"
#include "irgwalk.h"
#include "be_t.h"
*/
-ir_node *insert_Perm_after(ir_graph *irg, const arch_register_class_t *cls,
+ir_node *insert_Perm_before(ir_graph *irg, const arch_register_class_t *cls,
ir_node *pos)
{
- be_lv_t *lv = be_get_irg_liveness(irg);
- ir_node *bl = is_Block(pos) ? pos : get_nodes_block(pos);
- ir_nodeset_t live;
- ir_nodeset_iterator_t iter;
+ be_lv_t *lv = be_get_irg_liveness(irg);
+ ir_nodeset_t live;
- ir_node *irn, *perm, **nodes;
+ ir_node *perm, **nodes;
size_t i, n;
- DBG((dbg, LEVEL_1, "Insert Perm after: %+F\n", pos));
+ DBG((dbg, LEVEL_1, "Insert Perm before: %+F\n", pos));
ir_nodeset_init(&live);
- be_liveness_nodes_live_at(lv, cls, pos, &live);
+ be_liveness_nodes_live_before(lv, cls, pos, &live);
n = ir_nodeset_size(&live);
if (n == 0) {
/* make the input order deterministic */
qsort(nodes, n, sizeof(nodes[0]), cmp_node_nr);
+ ir_node *const bl = get_nodes_block(pos);
perm = be_new_Perm(cls, bl, n, nodes);
- sched_add_after(pos, perm);
+ sched_add_before(pos, perm);
free(nodes);
for (i = 0; i < n; ++i) {
ir_node *perm_op = get_irn_n(perm, i);
- const arch_register_t *reg = arch_get_irn_register(perm_op);
be_ssa_construction_env_t senv;
ir_mode *mode = get_irn_mode(perm_op);
ir_node *proj = new_r_Proj(perm, mode, i);
- arch_set_irn_register(proj, reg);
be_ssa_construction_init(&senv, irg);
be_ssa_construction_add_copy(&senv, perm_op);
{
int i;
int arity;
- ir_node *node;
ir_node *pred;
ir_node *succ_block;
ir_node *jump = NULL;
/* there can be some non-scheduled Pin nodes left in the block, move them
* to the succ block (Pin) or pred block (Sync) */
foreach_out_edge_safe(block, edge) {
- node = get_edge_src_irn(edge);
+ ir_node *const node = get_edge_src_irn(edge);
if (node == jump)
continue;