Richard Biener wrote:
Looks good, but how we get to pass == 3 is totally non-obvious ... why make it
conditional on pass == 3 only?
Maybe, we should add a comment to the code like:
--- a/gcc/lto-streamer-in.cc
+++ b/gcc/lto-streamer-in.cc
@@ -2141,5 +2141,6 @@ lto_input_mode_table (struct lto_file_decl_data
*file_data)
}
/* First search just the GET_CLASS_NARROWEST_MODE to wider modes,
- if not found, fallback to all modes. */
+ if not found, fallback to all modes. When found, pass is 3 (2 + 1),
+ when not found, pass is 2 ('< 2' check + 1). */
int pass;
for (pass = 0; pass < 2; pass++)
Namely, the when found there is:
else
{
table[m] = mr;
pass = 2;
break;
}
Thus, 'pass == 2' in the inner loop. In the outer loop is first the increment
and then the 'pass < 2' check - such that the value is 3.
If not found, the inner loop ends with doing nothing (if -> 'continue' for the
inner loop), such that 'pass' is incremented until larger then 2, i.e. being 3.
Thus, how about the patch plus adding a comment like above?
Tobias