@@ -3247,9 +3247,14 @@ noce_convert_multiple_sets (struct noce_if_info *if_info)
/* Actually emit the sequence if it isn't too expensive. */
rtx_insn *seq = get_insns ();
+ if_info->transform_name = "noce_convert_multiple_sets";
+ if_info->created_cmovs = count;
+
if (!targetm.noce_conversion_profitable_p (seq, if_info))
{
end_sequence ();
+ if_info->transform_name = "";
+ if_info->created_cmovs = 0;
return FALSE;
}
@@ -3296,7 +3301,7 @@ noce_convert_multiple_sets (struct noce_if_info *if_info)
}
num_updated_if_blocks++;
- if_info->transform_name = "noce_convert_multiple_sets";
+
return TRUE;
}
@@ -4060,7 +4065,8 @@ noce_find_if_block (basic_block test_bb, edge then_edge, edge else_edge,
and jump_insns are always given a cost of 1 by seq_cost, so treat
both instructions as having cost COSTS_N_INSNS (1). */
if_info.original_cost = COSTS_N_INSNS (2);
-
+ if_info.transform_name = "";
+ if_info.created_cmovs = 0;
/* Do the real work. */
@@ -108,6 +108,10 @@ struct noce_if_info
/* The name of the noce transform that succeeded in if-converting
this structure. Used for debugging. */
const char *transform_name;
+
+ /* The number of created conditional moves in case we convert multiple
+ sets. */
+ unsigned int created_cmovs;
};
#endif /* GCC_IFCVT_H */