Lines Matching refs:op

30 	if (a > 0 && _values[a].op == IR_COPY) {  in ir_sccp_identity()
32 IR_ASSERT(a < 0 || _values[a].op != IR_COPY); /* this may be a copy of symbolic constant */ in ir_sccp_identity()
49 op1_insn = (op1 > 0 && IR_IS_CONST_OP(_values[op1].op)) ? _values + op1 : ctx->ir_base + op1; in ir_sccp_fold()
50 op2_insn = (op2 > 0 && IR_IS_CONST_OP(_values[op2].op)) ? _values + op2 : ctx->ir_base + op2; in ir_sccp_fold()
51 op3_insn = (op3 > 0 && IR_IS_CONST_OP(_values[op3].op)) ? _values + op3 : ctx->ir_base + op3; in ir_sccp_fold()
68 insn = (op1 > 0 && IR_IS_CONST_OP(_values[op1].op)) ? _values + op1 : ctx->ir_base + op1; in ir_sccp_fold()
69 if (IR_IS_CONST_OP(insn->op)) { in ir_sccp_fold()
76 } else if (_values[res].op == IR_COPY && _values[res].op1 == op1) { in ir_sccp_fold()
143 if (v->op == IR_TOP) { in ir_sccp_meet_phi()
151 } else if (v->op == IR_COPY) { in ir_sccp_meet_phi()
153 IR_ASSERT(input < 0 || _values[input].op != IR_COPY); in ir_sccp_meet_phi()
156 } else if (v->op == IR_BOTTOM) { in ir_sccp_meet_phi()
160 } else if (v->op == IR_BOTTOM) { in ir_sccp_meet_phi()
191 if (v->op == IR_TOP) { in ir_sccp_meet_phi()
199 } else if (v->op == IR_COPY) { in ir_sccp_meet_phi()
201 IR_ASSERT(input < 0 || _values[input].op != IR_COPY); in ir_sccp_meet_phi()
208 } else if (v->op == IR_BOTTOM) { in ir_sccp_meet_phi()
216 } else if (v->op == IR_BOTTOM) { in ir_sccp_meet_phi()
230 if (_values[i].op == IR_COPY && _values[i].op1 == new_copy) { in ir_sccp_meet_phi()
258 } else if (insn->op == IR_ALLOCA) { in ir_is_dead_load_ex()
267 uint32_t flags = ir_op_flags[ctx->ir_base[ref].op]; in ir_is_dead_load()
271 } else if (ctx->ir_base[ref].op == IR_ALLOCA) { in ir_is_dead_load()
281 return IR_IS_FOLDABLE_OP(ctx->ir_base[ref].op); in ir_is_dead()
319 IR_ASSERT(!IR_IS_SYM_CONST(v1->op)); in ir_sccp_is_equal()
320 IR_ASSERT(!IR_IS_SYM_CONST(v2->op)); in ir_sccp_is_equal()
351 if (input > 0 && _values[input].op > IR_COPY) { in ir_sccp_remove_insn()
378 } else if (ctx->ir_base[input].op == IR_PHI && ctx->use_lists[input].count == 1) { in ir_sccp_remove_insn2()
401 if (input > 0 && _values[input].op > IR_COPY) { in ir_sccp_replace_insn()
433 if (worklist && _values[use].op > IR_COPY) { in ir_sccp_replace_insn()
462 } else if (ctx->ir_base[input].op == IR_PHI && ctx->use_lists[input].count == 1) { in ir_sccp_replace_insn2()
603 next_insn->op = IR_BEGIN; in ir_sccp_remove_if()
615 IR_ASSERT(insn->op == IR_MERGE || insn->op == IR_LOOP_BEGIN); in ir_sccp_remove_unfeasible_merge_inputs()
624 IR_ASSERT(input_insn->op == IR_END || input_insn->op == IR_LOOP_END|| in ir_sccp_remove_unfeasible_merge_inputs()
625 input_insn->op == IR_IJMP || input_insn->op == IR_UNREACHABLE); in ir_sccp_remove_unfeasible_merge_inputs()
626 if (input_insn->op == IR_END || input_insn->op == IR_LOOP_END) { in ir_sccp_remove_unfeasible_merge_inputs()
640 IR_ASSERT((use_insn->op != IR_PHI) && "PHI must be already removed"); in ir_sccp_remove_unfeasible_merge_inputs()
641 if (ir_op_flags[use_insn->op] & IR_OP_FLAG_CONTROL) { in ir_sccp_remove_unfeasible_merge_inputs()
645 } else if (use_insn->op != IR_NOP) { in ir_sccp_remove_unfeasible_merge_inputs()
664 insn->op = IR_BEGIN; in ir_sccp_remove_unfeasible_merge_inputs()
666 input_insn->op = IR_END; in ir_sccp_remove_unfeasible_merge_inputs()
673 insn->op = IR_BEGIN; in ir_sccp_remove_unfeasible_merge_inputs()
707 if (use_insn->op == IR_PHI) { in ir_sccp_remove_unfeasible_merge_inputs()
740 return !IR_IS_SYM_CONST(insn->op) && insn->val.d == (double)(float)insn->val.d; in ir_may_promote_d2f()
742 switch (insn->op) { in ir_may_promote_d2f()
773 return !IR_IS_SYM_CONST(insn->op) && insn->val.f == (float)(double)insn->val.f; in ir_may_promote_f2d()
775 switch (insn->op) { in ir_may_promote_f2d()
809 switch (insn->op) { in ir_promote_d2f()
873 switch (insn->op) { in ir_promote_f2d()
941 return !IR_IS_SYM_CONST(insn->op); in ir_may_promote_i2i()
943 switch (insn->op) { in ir_may_promote_i2i()
979 switch (insn->op) { in ir_promote_i2i()
1035 static ir_ref ir_ext_const(ir_ctx *ctx, ir_insn *val_insn, ir_op op, ir_type type) in ir_ext_const() argument
1045 if (op == IR_SEXT) { in ir_ext_const()
1053 if (op == IR_SEXT) { in ir_ext_const()
1061 if (op == IR_SEXT) { in ir_ext_const()
1071 static ir_ref ir_ext_ref(ir_ctx *ctx, ir_ref var_ref, ir_ref src_ref, ir_op op, ir_type type, ir_bi… in ir_ext_ref() argument
1073 uint32_t optx = IR_OPTX(op, type, 1); in ir_ext_ref()
1104 ir_op op = insn->op; in ir_try_promote_ext() local
1112 if (phi_insn->op != IR_PHI in ir_try_promote_ext()
1114 || ctx->ir_base[phi_insn->op1].op != IR_LOOP_BEGIN) { in ir_try_promote_ext()
1120 if ((op_insn->op != IR_ADD && op_insn->op != IR_SUB && op_insn->op != IR_MUL) in ir_try_promote_ext()
1136 if ((use_insn->op >= IR_EQ && use_insn->op <= IR_UGT) in ir_try_promote_ext()
1139 } else if (use_insn->op == IR_IF) { in ir_try_promote_ext()
1158 if (use_insn->op == IR_IF) { in ir_try_promote_ext()
1161 IR_ASSERT(((use_insn->op >= IR_EQ && use_insn->op <= IR_UGT) in ir_try_promote_ext()
1162 || use_insn->op == IR_ADD || use_insn->op == IR_SUB || use_insn->op == IR_MUL) in ir_try_promote_ext()
1166 && !IR_IS_SYM_CONST(ctx->ir_base[use_insn->op1].op)) { in ir_try_promote_ext()
1167 ctx->ir_base[use].op1 = ir_ext_const(ctx, &ctx->ir_base[use_insn->op1], op, type); in ir_try_promote_ext()
1169 ctx->ir_base[use].op1 = ir_ext_ref(ctx, use, use_insn->op1, op, type, worklist); in ir_try_promote_ext()
1174 && !IR_IS_SYM_CONST(ctx->ir_base[use_insn->op2].op)) { in ir_try_promote_ext()
1175 ctx->ir_base[use].op2 = ir_ext_const(ctx, &ctx->ir_base[use_insn->op2], op, type); in ir_try_promote_ext()
1177 ctx->ir_base[use].op2 = ir_ext_ref(ctx, use, use_insn->op2, op, type, worklist); in ir_try_promote_ext()
1187 && !IR_IS_SYM_CONST(ctx->ir_base[phi_insn->op2].op)) { in ir_try_promote_ext()
1188 ctx->ir_base[ref].op2 = ir_ext_const(ctx, &ctx->ir_base[phi_insn->op2], op, type); in ir_try_promote_ext()
1190 ctx->ir_base[ref].op2 = ir_ext_ref(ctx, ref, phi_insn->op2, op, type, worklist); in ir_try_promote_ext()
1202 if (ctx->ir_base[*p].op == IR_IF_TRUE) { in ir_get_true_false_refs()
1203 IR_ASSERT(ctx->ir_base[*(p + 1)].op == IR_IF_FALSE); in ir_get_true_false_refs()
1207 IR_ASSERT(ctx->ir_base[*p].op == IR_IF_FALSE); in ir_get_true_false_refs()
1208 IR_ASSERT(ctx->ir_base[*(p + 1)].op == IR_IF_TRUE); in ir_get_true_false_refs()
1219 IR_ASSERT(ctx->ir_base[begin].op == IR_BEGIN); in ir_merge_blocks()
1220 IR_ASSERT(ctx->ir_base[end].op == IR_END); in ir_merge_blocks()
1238 if (ctx->ir_base[prev].op == IR_BEGIN || ctx->ir_base[prev].op == IR_MERGE) { in ir_merge_blocks()
1250 if (end1->op != IR_END || end2->op != IR_END) { in ir_try_remove_empty_diamond()
1265 if (root->op != IR_IF in ir_try_remove_empty_diamond()
1266 && !(root->op == IR_SWITCH && ctx->use_lists[root_ref].count == 2)) { in ir_try_remove_empty_diamond()
1311 if (ctx->ir_base[next->op1].op == IR_BEGIN || ctx->ir_base[next->op1].op == IR_MERGE) { in ir_try_remove_empty_diamond()
1326 if (end->op != IR_END) { in ir_try_remove_empty_diamond()
1331 if (start->op != IR_CASE_VAL && start->op != IR_CASE_DEFAULT) { in ir_try_remove_empty_diamond()
1374 if (ctx->ir_base[next->op1].op == IR_BEGIN || ctx->ir_base[next->op1].op == IR_MERGE) { in ir_try_remove_empty_diamond()
1385 && !IR_IS_SYM_CONST(ctx->ir_base[ref].op) in ir_is_zero()
1398 if (end1->op == IR_END && end2->op == IR_END) { in ir_optimize_phi()
1407 if (root->op == IR_IF && ctx->use_lists[root->op2].count == 1) { in ir_optimize_phi()
1414 is_cmp = (cond->op == IR_LT || cond->op == IR_LE || cond->op == IR_GT || cond->op == IR_GE || in ir_optimize_phi()
1415 cond->op == IR_ULT || cond->op == IR_ULE || cond->op == IR_UGT || cond->op == IR_UGE); in ir_optimize_phi()
1416 is_less = (cond->op == IR_LT || cond->op == IR_LE || in ir_optimize_phi()
1417 cond->op == IR_ULT || cond->op == IR_ULE); in ir_optimize_phi()
1419 is_cmp = (cond->op == IR_LT || cond->op == IR_LE || cond->op == IR_GT || cond->op == IR_GE); in ir_optimize_phi()
1420 is_less = (cond->op == IR_LT || cond->op == IR_LE); in ir_optimize_phi()
1423 … is_cmp = (cond->op == IR_ULT || cond->op == IR_ULE || cond->op == IR_UGT || cond->op == IR_UGE); in ir_optimize_phi()
1424 is_less = (cond->op == IR_ULT || cond->op == IR_ULE); in ir_optimize_phi()
1460 insn->op = ( in ir_optimize_phi()
1463 ((start1->op == IR_IF_TRUE) ? insn->op2 : insn->op3) in ir_optimize_phi()
1491 if (ctx->ir_base[next->op1].op == IR_BEGIN || ctx->ir_base[next->op1].op == IR_MERGE) { in ir_optimize_phi()
1497 && ((ctx->ir_base[insn->op2].op == IR_NEG in ir_optimize_phi()
1502 && is_less == (start1->op == IR_IF_TRUE)) in ir_optimize_phi()
1505 && is_less != (start1->op == IR_IF_TRUE)))) in ir_optimize_phi()
1506 || (ctx->ir_base[insn->op3].op == IR_NEG in ir_optimize_phi()
1511 && is_less != (start1->op == IR_IF_TRUE)) in ir_optimize_phi()
1514 && is_less == (start1->op == IR_IF_TRUE)))))) { in ir_optimize_phi()
1546 insn->op = IR_ABS; in ir_optimize_phi()
1548 if (ctx->ir_base[insn->op2].op == IR_NEG) { in ir_optimize_phi()
1574 if (ctx->ir_base[next->op1].op == IR_BEGIN || ctx->ir_base[next->op1].op == IR_MERGE) { in ir_optimize_phi()
1611 insn->op = IR_COND; in ir_optimize_phi()
1614 if (start1->op == IR_IF_FALSE) { in ir_optimize_phi()
1630 if (ctx->ir_base[next->op1].op == IR_BEGIN || ctx->ir_base[next->op1].op == IR_MERGE) { in ir_optimize_phi()
1644 static bool ir_cmp_is_true(ir_op op, ir_insn *op1, ir_insn *op2) in ir_cmp_is_true() argument
1648 if (op == IR_EQ) { in ir_cmp_is_true()
1650 } else if (op == IR_NE) { in ir_cmp_is_true()
1652 } else if (op == IR_LT) { in ir_cmp_is_true()
1658 } else if (op == IR_GE) { in ir_cmp_is_true()
1664 } else if (op == IR_LE) { in ir_cmp_is_true()
1670 } else if (op == IR_GT) { in ir_cmp_is_true()
1676 } else if (op == IR_ULT) { in ir_cmp_is_true()
1678 } else if (op == IR_UGE) { in ir_cmp_is_true()
1680 } else if (op == IR_ULE) { in ir_cmp_is_true()
1682 } else if (op == IR_UGT) { in ir_cmp_is_true()
1689 if (op == IR_EQ) { in ir_cmp_is_true()
1691 } else if (op == IR_NE) { in ir_cmp_is_true()
1693 } else if (op == IR_LT) { in ir_cmp_is_true()
1695 } else if (op == IR_GE) { in ir_cmp_is_true()
1697 } else if (op == IR_LE) { in ir_cmp_is_true()
1699 } else if (op == IR_GT) { in ir_cmp_is_true()
1701 } else if (op == IR_ULT) { in ir_cmp_is_true()
1703 } else if (op == IR_UGE) { in ir_cmp_is_true()
1705 } else if (op == IR_ULE) { in ir_cmp_is_true()
1707 } else if (op == IR_UGT) { in ir_cmp_is_true()
1715 if (op == IR_EQ) { in ir_cmp_is_true()
1717 } else if (op == IR_NE) { in ir_cmp_is_true()
1719 } else if (op == IR_LT) { in ir_cmp_is_true()
1721 } else if (op == IR_GE) { in ir_cmp_is_true()
1723 } else if (op == IR_LE) { in ir_cmp_is_true()
1725 } else if (op == IR_GT) { in ir_cmp_is_true()
1727 } else if (op == IR_ULT) { in ir_cmp_is_true()
1729 } else if (op == IR_UGE) { in ir_cmp_is_true()
1731 } else if (op == IR_ULE) { in ir_cmp_is_true()
1733 } else if (op == IR_UGT) { in ir_cmp_is_true()
1747 if (cond->op == IR_PHI in ir_try_split_if()
1750 && ((IR_IS_CONST_REF(cond->op2) && !IR_IS_SYM_CONST(ctx->ir_base[cond->op2].op)) in ir_try_split_if()
1751 || (IR_IS_CONST_REF(cond->op3) && !IR_IS_SYM_CONST(ctx->ir_base[cond->op3].op)))) { in ir_try_split_if()
1760 if (end1->op == IR_END && end2->op == IR_END) { in ir_try_split_if()
1763 ir_op op = IR_IF_FALSE; in ir_try_split_if() local
1767 if (!IR_IS_CONST_REF(cond->op2) || IR_IS_SYM_CONST(ctx->ir_base[cond->op2].op)) { in ir_try_split_if()
1776 op = IR_IF_TRUE; in ir_try_split_if()
1781 if (IR_IS_CONST_REF(cond->op3) && !IR_IS_SYM_CONST(ctx->ir_base[cond->op3].op)) { in ir_try_split_if()
1782 if (ir_const_is_true(&ctx->ir_base[cond->op3]) ^ (op == IR_IF_TRUE)) { in ir_try_split_if()
1888 merge->optx = IR_OPTX(op, IR_VOID, 1); in ir_try_split_if()
1906 if (ctx->ir_base[end2->op1].op == IR_BEGIN || ctx->ir_base[end2->op1].op == IR_MERGE) { in ir_try_split_if()
1923 if (cond->op >= IR_EQ && cond->op <= IR_UGT in ir_try_split_if_cmp()
1925 && !IR_IS_SYM_CONST(ctx->ir_base[cond->op2].op) in ir_try_split_if_cmp()
1930 if (phi->op == IR_PHI in ir_try_split_if_cmp()
1934 && ((IR_IS_CONST_REF(phi->op2) && !IR_IS_SYM_CONST(ctx->ir_base[phi->op2].op)) in ir_try_split_if_cmp()
1935 || (IR_IS_CONST_REF(phi->op3) && !IR_IS_SYM_CONST(ctx->ir_base[phi->op3].op)))) { in ir_try_split_if_cmp()
1944 if (end1->op == IR_END && end2->op == IR_END) { in ir_try_split_if_cmp()
1947 ir_op op = IR_IF_FALSE; in ir_try_split_if_cmp() local
1951 if (!IR_IS_CONST_REF(phi->op2) || IR_IS_SYM_CONST(ctx->ir_base[phi->op2].op)) { in ir_try_split_if_cmp()
1958 if (ir_cmp_is_true(cond->op, &ctx->ir_base[phi->op2], &ctx->ir_base[cond->op2])) { in ir_try_split_if_cmp()
1960 op = IR_IF_TRUE; in ir_try_split_if_cmp()
1965 if (IR_IS_CONST_REF(phi->op3) && !IR_IS_SYM_CONST(ctx->ir_base[phi->op3].op)) { in ir_try_split_if_cmp()
1966 …if (ir_cmp_is_true(cond->op, &ctx->ir_base[phi->op3], &ctx->ir_base[cond->op2]) ^ (op == IR_IF_TRU… in ir_try_split_if_cmp()
2083 merge->optx = IR_OPTX(op, IR_VOID, 1); in ir_try_split_if_cmp()
2102 if (ctx->ir_base[end2->op1].op == IR_BEGIN || ctx->ir_base[end2->op1].op == IR_MERGE) { in ir_try_split_if_cmp()
2129 IR_ASSERT(next->op != IR_PHI); in ir_optimize_merge()
2131 if (phi->op == IR_PHI) { in ir_optimize_merge()
2132 if (next->op == IR_IF && next->op1 == merge_ref && ctx->use_lists[phi_ref].count == 1) { in ir_optimize_merge()
2140 if (cmp->op >= IR_EQ && cmp->op <= IR_UGT in ir_optimize_merge()
2143 && !IR_IS_SYM_CONST(ctx->ir_base[cmp->op2].op) in ir_optimize_merge()
2175 flags = ir_op_flags[insn->op]; in ir_sccp()
2180 } else if (insn->op == IR_PHI) { in ir_sccp()
2184 } else if (EXPECTED(IR_IS_FOLDABLE_OP(insn->op))) { in ir_sccp()
2215 if (insn->op == IR_FP2FP || insn->op == IR_FP2INT || insn->op == IR_TRUNC in ir_sccp()
2216 || insn->op == IR_ZEXT || insn->op == IR_SEXT) { in ir_sccp()
2224 if (insn->op == IR_FP2FP || insn->op == IR_FP2INT || insn->op == IR_TRUNC in ir_sccp()
2225 || insn->op == IR_ZEXT || insn->op == IR_SEXT) { in ir_sccp()
2233 if (insn->op == IR_MERGE || insn->op == IR_BEGIN) { in ir_sccp()
2236 if (insn->op == IR_MERGE || insn->op == IR_LOOP_BEGIN) { in ir_sccp()
2261 IR_ASSERT(insn->op == IR_START || IR_IS_FEASIBLE(insn->op1)); in ir_sccp()
2270 if (insn->op == IR_IF) { in ir_sccp()
2281 && (IR_IS_CONST_REF(insn->op2) || _values[insn->op2].op != IR_COPY) in ir_sccp()
2290 IR_ASSERT(use_insn->op == IR_IF_TRUE || use_insn->op == IR_IF_FALSE); in ir_sccp()
2291 if ((use_insn->op == IR_IF_TRUE) != b) { in ir_sccp()
2293 IR_ASSERT(ctx->ir_base[use].op == IR_IF_TRUE || ctx->ir_base[use].op == IR_IF_FALSE); in ir_sccp()
2307 } else if (insn->op == IR_SWITCH) { in ir_sccp()
2318 && (IR_IS_CONST_REF(insn->op2) || _values[insn->op2].op != IR_COPY) in ir_sccp()
2329 if (use_insn->op == IR_CASE_VAL) { in ir_sccp()
2334 } else if (use_insn->op == IR_CASE_DEFAULT) { in ir_sccp()
2404 if (IR_IS_CONST_OP(_values[i].op) || IR_IS_SYM_CONST(_values[i].op)) { in ir_sccp()
2409 } else if (_values[i].op == IR_COPY) { in ir_sccp()
2414 } else if (_values[i].op == IR_IF) { in ir_sccp()
2416 } else if (_values[i].op == IR_MERGE) { in ir_sccp()
2419 fprintf(stderr, "%d. %d\n", i, _values[i].op); in ir_sccp()
2426 if (value->op == IR_BOTTOM) { in ir_sccp()
2428 } else if (IR_IS_CONST_OP(value->op)) { in ir_sccp()
2432 } else if (IR_IS_SYM_CONST(value->op)) { in ir_sccp()
2437 } else if (value->op == IR_COPY) { in ir_sccp()
2440 } else if (value->op == IR_TOP) { in ir_sccp()
2443 if (ir_op_flags[insn->op] & (IR_OP_FLAG_DATA|IR_OP_FLAG_MEM)) { in ir_sccp()
2444 if (insn->op != IR_PARAM && (insn->op != IR_VAR || _values[insn->op1].op == IR_TOP)) { in ir_sccp()
2448 if (ir_op_flags[insn->op] & IR_OP_FLAG_TERMINATOR) { in ir_sccp()
2465 } else if (value->op == IR_IF) { in ir_sccp()
2468 } else if (value->op == IR_MERGE) { in ir_sccp()
2471 } else if (value->op == IR_LOAD) { in ir_sccp()
2478 IR_ASSERT(_values[i].op == IR_MERGE); in ir_sccp()
2486 if (IR_IS_FOLDABLE_OP(insn->op)) { in ir_sccp()
2488 if (insn->op == IR_PHI) { in ir_sccp()
2494 switch (insn->op) { in ir_sccp()
2545 } else if (ir_op_flags[insn->op] & IR_OP_FLAG_BB_START) { in ir_sccp()
2548 } else if (insn->op == IR_BEGIN) { in ir_sccp()
2549 if (ctx->ir_base[insn->op1].op == IR_END in ir_sccp()
2553 } else if (insn->op == IR_MERGE) { in ir_sccp()