Hi,I've looked at the statements slipping through and they are all atomic loads and stores. What I find strange is these statements don't get expanded only in tests for errors, when the code is not supposed to compile. In all other cases all statements get expanded just fine, including atomic loads and stores. I am kind of at a loss for why that's happening, I was hoping maybe somebody here could provide some insight ? Thanks in advance :)
Best regards, Josef Melcr Dne 25. 10. 24 v 7:19 Josef Melcr napsal(a):
So I experimented a little and ran the testsuite a few times. While both if statements seem to be dead, the assertion gcc_checking_assert (!is_gimple_omp (stmt)) doesn't actually hold, as adding this assert breaks around 40 omp/oacc tests, so some other statements are definitely slipping through. I would need to dig deeper to see which statements those are. I am not quite sure where that leaves this patch.Best regards, Josef Melcr Dne 24. 10. 24 v 19:45 Josef Melcr napsal(a):Capital Remove The second line should be just tab indented, not tab + 2 spaces, and finished with dot. gomp_parallel rather than gomp-parallel.Sorry about the formatting issues, I didn't notice them.The GIMPLE_OMP_TASK case went under my radar, since I was primarily focused on gomp_parallel statements. I'll try these changes and retest.The if (gimple_code (stmt) == GIMPLE_OMP_TASK) case should go as well.Wonder if gcc_checking_assert (!is_gimple_omp (stmt)); wouldn't be useful as replacement at least for some time to verify it isn't needed (but if itwould be needed, we miss various other GIMPLE_OMP_* statements).Best regards, Josef Melcr Dne 24. 10. 24 v 18:49 Jakub Jelinek napsal(a):On Thu, Oct 24, 2024 at 04:37:24PM +0200, Josef Melcr wrote:This patch removes a dead if statement checking for gomp-parallel gimple statements. This if is in the execute method of build_cgraph_edges pass,which is executed right after the omp_expand pass, which removes these gimple statements and replaces them with simple gcalls, making this if practically dead. Some TSan tests are failing with this patch, but I don't think thischange is likely to cause these failures. Additionally, the failures arenot consistent across runs, making me think these failures are abug in TSan itself. All other tests are ok. Tested on x86_64-pc-linux-gnu.OK for master ? gcc/ChangeLog: * cgraphbuild.cc (pass_build_cgraph_edges::execute): remove ifCapital Removestatement checking for gomp-parallel statementsThe second line should be just tab indented, not tab + 2 spaces, and finished with dot. gomp_parallel rather than gomp-parallel.--- a/gcc/cgraphbuild.cc +++ b/gcc/cgraphbuild.cc @@ -340,12 +340,6 @@ pass_build_cgraph_edges::execute (function *fun) bb->count); } node->record_stmt_references (stmt);- if (gomp_parallel *omp_par_stmt = dyn_cast <gomp_parallel *> (stmt))- { - tree fn = gimple_omp_parallel_child_fn (omp_par_stmt); - node->create_reference (cgraph_node::get_create (fn), - IPA_REF_ADDR, stmt); - } if (gimple_code (stmt) == GIMPLE_OMP_TASK) { tree fn = gimple_omp_task_child_fn (stmt);The if (gimple_code (stmt) == GIMPLE_OMP_TASK) case should go as well.Wonder if gcc_checking_assert (!is_gimple_omp (stmt)); wouldn't be useful as replacement at least for some time to verify it isn't needed (but if itwould be needed, we miss various other GIMPLE_OMP_* statements). Jakub
smime.p7s
Description: Elektronicky podpis S/MIME