https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95622
Thomas Schwinge <tschwinge at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|force_output flag on a |[11 Regression] |variable prevents |force_output flag on a |optimization / regresses |variable prevents |c-c++-common/goacc/kernels- |optimization / regresses |alias-ipa-pta-2.c |c-c++-common/goacc/kernels- | |alias-ipa-pta{-2,-4,}.c CC| |tschwinge at gcc dot gnu.org Status|UNCONFIRMED |NEW Ever confirmed|0 |1 Last reconfirmed| |2020-06-12 --- Comment #2 from Thomas Schwinge <tschwinge at gcc dot gnu.org> --- (In reply to Tobias Burnus from comment #0) > The following Specifically: PASS: c-c++-common/goacc/kernels-alias-ipa-pta-2.c (test for excess errors) [-PASS:-]{+FAIL:+} c-c++-common/goacc/kernels-alias-ipa-pta-2.c scan-tree-dump-times optimized "(?n)= 0;$" 2 PASS: c-c++-common/goacc/kernels-alias-ipa-pta-2.c scan-tree-dump-times optimized "(?n)= 1;$" 1 PASS: c-c++-common/goacc/kernels-alias-ipa-pta-2.c scan-tree-dump-times optimized "(?n)= \\*a" 0 PASS: c-c++-common/goacc/kernels-alias-ipa-pta-4.c (test for excess errors) [-PASS:-]{+FAIL:+} c-c++-common/goacc/kernels-alias-ipa-pta-4.c scan-tree-dump-times optimized "(?n)= 0;$" 2 PASS: c-c++-common/goacc/kernels-alias-ipa-pta-4.c scan-tree-dump-times optimized "(?n)= 1;$" 1 [-PASS:-]{+FAIL:+} c-c++-common/goacc/kernels-alias-ipa-pta-4.c scan-tree-dump-times optimized "(?n)= \\*_[0-9];$" 0 PASS: c-c++-common/goacc/kernels-alias-ipa-pta.c (test for excess errors) [-PASS:-]{+FAIL:+} c-c++-common/goacc/kernels-alias-ipa-pta.c scan-tree-dump-times optimized "(?n)= 0;$" 2 PASS: c-c++-common/goacc/kernels-alias-ipa-pta.c scan-tree-dump-times optimized "(?n)= 1;$" 1 PASS: c-c++-common/goacc/kernels-alias-ipa-pta.c scan-tree-dump-times optimized "(?n)= \\*_[0-9]\\[0\\];$" 0 Same for C++. Thus: "[11 Regression] force_output flag on a variable prevents optimization / regresses c-c++-common/goacc/kernels-alias-ipa-pta{-2,-4,}.c". We'll need to analyze if we need to restore that functionality now, or if it's OK to lose that optimization. > only shows up as FAIL in the testsuite if ENABLE_OFFLOAD is > true, even though it is only a compile-time test. [Hence, it can make > sense to not only "make check-target-libgomp" with an offloading compiler > but also gcc/.] Somewhat unfortunate, but yes. The test cases need to be XFAILed conditionally "if ENABLE_OFFLOAD is true". > Somewhat similar to PR 68773. > > The testcase: c-c++-common/goacc/kernels-alias-ipa-pta-2.c > … > { > a[0] = 0; > b[0] = 1; > c[0] = a[0]; > } > … > > Without ENABLE_OFFLOAD or before > r11-1075-g1c0fdaf79e3618fd7512608a2e5c62b6b306e9e8 (for PR94848 + PR95551): > > MEM[(unsigned int *)_5] = 0; // a[0] = 0 > MEM[(unsigned int *)_4] = 1; // b[0] = 1 > MEM[(unsigned int *)_3] = 0; // c[0] = a[0] > > With r11-1075 + offloading compiler, force_output is on offloading variables > (to ensure they are not optimized away), the last line becomes > > _8 = MEM[(unsigned int *)_5]; // _8 = a[0] > MEM[(unsigned int *)_3] = _8; // c[0] = _8 (... as is visible from the 'kernels-alias-ipa-pta-2.c.104t.fre3' dump onwards.) > Expected: force_output does not affect the optimization. (Especially as "a" > cannot be optimized away as it is also used for "copyout".) > > [A very well optimizing compiler could see that nothing uses a/b/c after the > target section and could replace the whole function body by "{ }"…] That's PR90591 etc.?