Lines Matching defs:if_info

628 noce_emit_store_flag (struct noce_if_info *if_info, rtx x, int reversep,
631 rtx cond = if_info->cond;
642 cond = XEXP (SET_SRC (pc_set (if_info->jump)), 0);
645 code = reversed_comparison_code (cond, if_info->jump);
649 if ((if_info->cond_earliest == if_info->jump || cond_complex)
667 if_info->cond_earliest = if_info->jump;
797 end_ifcvt_sequence (struct noce_if_info *if_info)
802 set_used_flags (if_info->x);
803 set_used_flags (if_info->cond);
823 noce_try_move (struct noce_if_info *if_info)
825 rtx cond = if_info->cond;
834 if (HONOR_NANS (GET_MODE (if_info->x))
835 || HONOR_SIGNED_ZEROS (GET_MODE (if_info->x)))
840 if ((rtx_equal_p (if_info->a, XEXP (cond, 0))
841 && rtx_equal_p (if_info->b, XEXP (cond, 1)))
842 || (rtx_equal_p (if_info->a, XEXP (cond, 1))
843 && rtx_equal_p (if_info->b, XEXP (cond, 0))))
845 y = (code == EQ) ? if_info->a : if_info->b;
848 if (! rtx_equal_p (if_info->x, y))
851 noce_emit_move_insn (if_info->x, y);
852 seq = end_ifcvt_sequence (if_info);
856 emit_insn_before_setloc (seq, if_info->jump,
857 INSN_LOCATOR (if_info->insn_a));
871 noce_try_store_flag (struct noce_if_info *if_info)
876 if (GET_CODE (if_info->b) == CONST_INT
877 && INTVAL (if_info->b) == STORE_FLAG_VALUE
878 && if_info->a == const0_rtx)
880 else if (if_info->b == const0_rtx
881 && GET_CODE (if_info->a) == CONST_INT
882 && INTVAL (if_info->a) == STORE_FLAG_VALUE
883 && (reversed_comparison_code (if_info->cond, if_info->jump)
891 target = noce_emit_store_flag (if_info, if_info->x, reversep, 0);
894 if (target != if_info->x)
895 noce_emit_move_insn (if_info->x, target);
897 seq = end_ifcvt_sequence (if_info);
901 emit_insn_before_setloc (seq, if_info->jump,
902 INSN_LOCATOR (if_info->insn_a));
915 noce_try_store_flag_constants (struct noce_if_info *if_info)
924 && GET_CODE (if_info->a) == CONST_INT
925 && GET_CODE (if_info->b) == CONST_INT)
927 mode = GET_MODE (if_info->x);
928 ifalse = INTVAL (if_info->a);
929 itrue = INTVAL (if_info->b);
938 can_reverse = (reversed_comparison_code (if_info->cond, if_info->jump)
971 target = noce_emit_store_flag (if_info, if_info->x, reversep, normalize);
985 GEN_INT (ifalse), target, if_info->x, 0,
994 target, GEN_INT (tmp), if_info->x, 0,
1003 target, GEN_INT (ifalse), if_info->x, 0,
1012 target, GEN_INT (diff), if_info->x, 0,
1017 if_info->x, 0, OPTAB_WIDEN);
1026 if (target != if_info->x)
1027 noce_emit_move_insn (if_info->x, target);
1029 seq = end_ifcvt_sequence (if_info);
1033 emit_insn_before_setloc (seq, if_info->jump,
1034 INSN_LOCATOR (if_info->insn_a));
1045 noce_try_addcc (struct noce_if_info *if_info)
1051 && GET_CODE (if_info->a) == PLUS
1052 && rtx_equal_p (XEXP (if_info->a, 0), if_info->b)
1053 && (reversed_comparison_code (if_info->cond, if_info->jump)
1056 rtx cond = if_info->cond;
1057 enum rtx_code code = reversed_comparison_code (cond, if_info->jump);
1064 target = emit_conditional_add (if_info->x, code,
1068 if_info->b,
1069 XEXP (if_info->a, 1),
1070 GET_MODE (if_info->x),
1075 if (target != if_info->x)
1076 noce_emit_move_insn (if_info->x, target);
1078 seq = end_ifcvt_sequence (if_info);
1082 emit_insn_before_setloc (seq, if_info->jump,
1083 INSN_LOCATOR (if_info->insn_a));
1092 && (XEXP (if_info->a, 1) == const1_rtx
1093 || XEXP (if_info->a, 1) == constm1_rtx))
1096 if (STORE_FLAG_VALUE == INTVAL (XEXP (if_info->a, 1)))
1098 else if (-STORE_FLAG_VALUE == INTVAL (XEXP (if_info->a, 1)))
1101 subtract = 0, normalize = INTVAL (XEXP (if_info->a, 1));
1104 target = noce_emit_store_flag (if_info,
1105 gen_reg_rtx (GET_MODE (if_info->x)),
1109 target = expand_simple_binop (GET_MODE (if_info->x),
1111 if_info->b, target, if_info->x,
1115 if (target != if_info->x)
1116 noce_emit_move_insn (if_info->x, target);
1118 seq = end_ifcvt_sequence (if_info);
1122 emit_insn_before_setloc (seq, if_info->jump,
1123 INSN_LOCATOR (if_info->insn_a));
1136 noce_try_store_flag_mask (struct noce_if_info *if_info)
1145 && ((if_info->a == const0_rtx
1146 && rtx_equal_p (if_info->b, if_info->x))
1147 || ((reversep = (reversed_comparison_code (if_info->cond,
1148 if_info->jump)
1150 && if_info->b == const0_rtx
1151 && rtx_equal_p (if_info->a, if_info->x))))
1154 target = noce_emit_store_flag (if_info,
1155 gen_reg_rtx (GET_MODE (if_info->x)),
1158 target = expand_simple_binop (GET_MODE (if_info->x), AND,
1159 if_info->x,
1160 target, if_info->x, 0,
1165 if (target != if_info->x)
1166 noce_emit_move_insn (if_info->x, target);
1168 seq = end_ifcvt_sequence (if_info);
1172 emit_insn_before_setloc (seq, if_info->jump,
1173 INSN_LOCATOR (if_info->insn_a));
1186 noce_emit_cmove (struct noce_if_info *if_info, rtx x, enum rtx_code code,
1194 if (if_info->cond_earliest == if_info->jump)
1198 tmp = gen_rtx_fmt_ee (code, GET_MODE (if_info->cond), cmp_a, cmp_b);
1241 noce_try_cmove (struct noce_if_info *if_info)
1246 if ((CONSTANT_P (if_info->a) || register_operand (if_info->a, VOIDmode))
1247 && (CONSTANT_P (if_info->b) || register_operand (if_info->b, VOIDmode)))
1251 code = GET_CODE (if_info->cond);
1252 target = noce_emit_cmove (if_info, if_info->x, code,
1253 XEXP (if_info->cond, 0),
1254 XEXP (if_info->cond, 1),
1255 if_info->a, if_info->b);
1259 if (target != if_info->x)
1260 noce_emit_move_insn (if_info->x, target);
1262 seq = end_ifcvt_sequence (if_info);
1266 emit_insn_before_setloc (seq, if_info->jump,
1267 INSN_LOCATOR (if_info->insn_a));
1283 noce_try_cmove_arith (struct noce_if_info *if_info)
1285 rtx a = if_info->a;
1286 rtx b = if_info->b;
1287 rtx x = if_info->x;
1322 code = GET_CODE (if_info->cond);
1323 insn_a = if_info->insn_a;
1324 insn_b = if_info->insn_b;
1346 if (reversed_comparison_code (if_info->cond, if_info->jump) != UNKNOWN)
1356 code = reversed_comparison_code (if_info->cond, if_info->jump);
1436 target = noce_emit_cmove (if_info, x, code, XEXP (if_info->cond, 0),
1437 XEXP (if_info->cond, 1), a, b);
1445 tmp = gen_rtx_MEM (GET_MODE (if_info->x), target);
1448 if (MEM_VOLATILE_P (if_info->a) || MEM_VOLATILE_P (if_info->b))
1450 if (MEM_IN_STRUCT_P (if_info->a) && MEM_IN_STRUCT_P (if_info->b))
1452 if (MEM_SCALAR_P (if_info->a) && MEM_SCALAR_P (if_info->b))
1454 if (MEM_ALIAS_SET (if_info->a) == MEM_ALIAS_SET (if_info->b))
1455 set_mem_alias_set (tmp, MEM_ALIAS_SET (if_info->a));
1457 MIN (MEM_ALIGN (if_info->a), MEM_ALIGN (if_info->b)));
1459 noce_emit_move_insn (if_info->x, tmp);
1464 tmp = end_ifcvt_sequence (if_info);
1468 emit_insn_before_setloc (tmp, if_info->jump, INSN_LOCATOR (if_info->insn_a));
1481 noce_get_alt_condition (struct noce_if_info *if_info, rtx target,
1488 if (reg_mentioned_p (target, if_info->cond))
1490 *earliest = if_info->cond_earliest;
1491 return if_info->cond;
1494 set = pc_set (if_info->jump);
1498 && XEXP (XEXP (SET_SRC (set), 2), 0) == JUMP_LABEL (if_info->jump);
1516 enum rtx_code code = GET_CODE (if_info->cond);
1517 rtx op_a = XEXP (if_info->cond, 0);
1518 rtx op_b = XEXP (if_info->cond, 1);
1522 prev_insn = prev_nonnote_insn (if_info->cond_earliest);
1592 if (code != GET_CODE (if_info->cond)
1593 || op_a != XEXP (if_info->cond, 0)
1594 || op_b != XEXP (if_info->cond, 1))
1597 *earliest = if_info->cond_earliest;
1602 cond = canonicalize_condition (if_info->jump, cond, reverse,
1611 for (insn = if_info->jump; insn != *earliest; insn = PREV_INSN (insn))
1612 if (INSN_P (insn) && reg_overlap_mentioned_p (if_info->x, PATTERN (insn)))
1616 for (insn = *earliest; insn != if_info->jump; insn = NEXT_INSN (insn))
1618 && (modified_in_p (if_info->a, insn)
1619 || modified_in_p (if_info->b, insn)))
1628 noce_try_minmax (struct noce_if_info *if_info)
1641 if (HONOR_SIGNED_ZEROS (GET_MODE (if_info->x))
1642 || HONOR_NANS (GET_MODE (if_info->x)))
1645 cond = noce_get_alt_condition (if_info, if_info->a, &earliest);
1652 if (rtx_equal_p (XEXP (cond, 0), if_info->a))
1654 if (! rtx_equal_p (XEXP (cond, 1), if_info->b))
1657 else if (rtx_equal_p (XEXP (cond, 1), if_info->a))
1659 if (! rtx_equal_p (XEXP (cond, 0), if_info->b))
1700 target = expand_simple_binop (GET_MODE (if_info->x), op,
1701 if_info->a, if_info->b,
1702 if_info->x, unsignedp, OPTAB_WIDEN);
1708 if (target != if_info->x)
1709 noce_emit_move_insn (if_info->x, target);
1711 seq = end_ifcvt_sequence (if_info);
1715 emit_insn_before_setloc (seq, if_info->jump, INSN_LOCATOR (if_info->insn_a));
1716 if_info->cond = cond;
1717 if_info->cond_earliest = earliest;
1725 noce_try_abs (struct noce_if_info *if_info)
1737 a = if_info->a;
1738 b = if_info->b;
1749 cond = noce_get_alt_condition (if_info, b, &earliest);
1817 target = expand_abs_nojump (GET_MODE (if_info->x), b, if_info->x, 1);
1822 target = expand_simple_unop (GET_MODE (target), NEG, target, if_info->x, 0);
1830 if (target != if_info->x)
1831 noce_emit_move_insn (if_info->x, target);
1833 seq = end_ifcvt_sequence (if_info);
1837 emit_insn_before_setloc (seq, if_info->jump, INSN_LOCATOR (if_info->insn_a));
1838 if_info->cond = cond;
1839 if_info->cond_earliest = earliest;
1847 noce_try_sign_mask (struct noce_if_info *if_info)
1856 cond = if_info->cond;
1862 if (if_info->a == const0_rtx)
1866 t = if_info->b;
1868 else if (if_info->b == const0_rtx)
1872 t = if_info->a;
1886 && (!if_info->b_unconditional
1887 || t != if_info->b))
1904 noce_emit_move_insn (if_info->x, t);
1906 seq = end_ifcvt_sequence (if_info);
1910 emit_insn_before_setloc (seq, if_info->jump, INSN_LOCATOR (if_info->insn_a));
1919 noce_try_bitop (struct noce_if_info *if_info)
1926 x = if_info->x;
1927 cond = if_info->cond;
1931 if (! rtx_equal_p (x, if_info->b))
1958 a = if_info->a;
2005 seq = end_ifcvt_sequence (if_info);
2009 emit_insn_before_setloc (seq, if_info->jump,
2010 INSN_LOCATOR (if_info->insn_a));
2061 noce_init_if_info (struct ce_if_block *ce_info, struct noce_if_info *if_info)
2081 cond = noce_get_condition (jump, &if_info->cond_earliest);
2094 if_info->test_bb = test_bb;
2095 if_info->cond = cond;
2096 if_info->jump = jump;
2180 struct noce_if_info if_info;
2196 if (!noce_init_if_info (ce_info, &if_info))
2199 cond = if_info.cond;
2200 jump = if_info.jump;
2231 insn_b = prev_nonnote_insn (if_info.cond_earliest);
2241 PREV_INSN (if_info.cond_earliest), jump)
2247 || modified_between_p (x, PREV_INSN (if_info.cond_earliest), jump))
2285 if_info.insn_a = insn_a;
2286 if_info.insn_b = insn_b;
2287 if_info.x = x;
2288 if_info.a = a;
2289 if_info.b = b;
2290 if_info.b_unconditional = else_bb == 0;
2340 if (noce_try_move (&if_info))
2342 if (noce_try_store_flag (&if_info))
2344 if (noce_try_bitop (&if_info))
2346 if (noce_try_minmax (&if_info))
2348 if (noce_try_abs (&if_info))
2351 && noce_try_cmove (&if_info))
2355 if (noce_try_store_flag_constants (&if_info))
2357 if (noce_try_addcc (&if_info))
2359 if (noce_try_store_flag_mask (&if_info))
2362 && noce_try_cmove_arith (&if_info))
2364 if (noce_try_sign_mask (&if_info))
2482 struct noce_if_info if_info;
2492 memset (&if_info, 0, sizeof if_info);
2494 if (!noce_init_if_info (ce_info, &if_info))
2497 cond = if_info.cond;
2498 jump = if_info.jump;
2570 target = noce_emit_cmove (&if_info, dest, code, cond_arg0, cond_arg1,
2603 target = noce_emit_cmove (&if_info, dest, code, cond_arg0, cond_arg1,
2616 seq = end_ifcvt_sequence (&if_info);