https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106498

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed.  Before OMP expansion the loops do not define virtual operands. 
After OMP expansion there's (useless) loop-around virtual operands.

SSA form is updated at

#0  update_ssa (update_flags=2048)
    at /space/rguenther/src/gcc-clean/gcc/tree-into-ssa.cc:3377
#1  0x00000000023fad6d in expand_omp_taskreg (region=0x3614bb0)
    at /space/rguenther/src/gcc-clean/gcc/omp-expand.cc:1511
#2  0x000000000242a485 in expand_omp (region=0x3614bb0)
    at /space/rguenther/src/gcc-clean/gcc/omp-expand.cc:10353
#3  0x000000000242aac4 in execute_expand_omp ()
    at /space/rguenther/src/gcc-clean/gcc/omp-expand.cc:10592
#4  0x000000000242ac3f in (anonymous namespace)::pass_expand_omp_ssa::execute (
    this=0x349c290) at /space/rguenther/src/gcc-clean/gcc/omp-expand.cc:10681
#5  0x000000000126d265 in execute_one_pass (
    pass=<opt_pass* 0x349c290 "ompexpssa"(174)>)

which ends up adding this virtual def.  The reason is a __builtin_GOMP_parallel
but the use is in a if (0 != 0) guarded region (that's possibly outlined
afterwards?).

It's quite ugly, SSA omp-expansion performs update_ssa sometimes per stmt!

SSA omp-expansion test coverage is quite weak and autopar isn't well maintained
:/

I do have a patch for this particular case though.

Reply via email to