This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi, The problem appears in revision 201034 in version 4.9. I attached a one-line patch that fixes it. I also reported this problem at http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57809 I bootstrapped and ran the regression tests for this patch on x86_64-linux and all tests pass. In method "omega_eliminate_red()" in gcc/omega.c, the loop on line 2592 should break immediately after "red_found" is set to "1". All the iterations after "red_found" set to "1" do not perform any useful work, at best they just set "red_found" again to "1". There are three more similar problems in the same file gcc/omega.c: 1. omega_problem_has_red_equations(): the loop on line 4854 should break immediately after "result" is set to "true". 2. omega_problem_has_red_equations(): the loop on line 4907 should break immediately after "result" is set to "true". 3. omega_query_variable(): the loop on line 5252 should break immediately after "coupled" is set to "true". Index: gcc/omega.c =================================================================== --- gcc/omega.c (revision 201034) +++ gcc/omega.c (working copy) @@ -2591,7 +2591,10 @@ for (red_found = 0, e = pb->num_geqs - 1; e >= 0; e--) if (pb->geqs[e].color == omega_red) - red_found = 1; + { + red_found = 1; + break; + } if (!red_found) { Index: gcc/omega.c =================================================================== --- gcc/omega.c (revision 201034) +++ gcc/omega.c (working copy) @@ -4853,7 +4853,10 @@ for (e = pb->num_geqs - 1; e >= 0; e--) if (pb->geqs[e].color == omega_red) - result = true; + { + result = true; + break; + } if (!result) return false; Index: gcc/omega.c =================================================================== --- gcc/omega.c (revision 201034) +++ gcc/omega.c (working copy) @@ -4906,7 +4906,10 @@ for (e = pb->num_geqs - 1; e >= 0; e--) if (pb->geqs[e].color == omega_red) - result = true; + { + result = true; + break; + } if (dump_file && (dump_flags & TDF_DETAILS)) { Index: gcc/omega.c =================================================================== --- gcc/omega.c (revision 201034) +++ gcc/omega.c (working copy) @@ -5251,7 +5251,10 @@ for (e = pb->num_subs - 1; e >= 0; e--) if (pb->subs[e].coef[i] != 0) - coupled = true; + { + coupled = true; + break; + } for (e = pb->num_eqs - 1; e >= 0; e--) if (pb->eqs[e].coef[i] != 0) -Chang
Attachment:
pr57809_patch1.diff
Description: Text document
Attachment:
pr57809_patch2.diff
Description: Text document
Attachment:
pr57809_patch3.diff
Description: Text document
Attachment:
pr57809_patch4.diff
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |