Fix SSA rewrite for nested loops.
From the test case, the slice of the CFG that is interesting for the bug is 25 | v 30 | v 31<-+ | | v | 34--+ 1. In block 25, we have a Phi candidate for %f with arguments %47 = Phi[%float_0, %0]. This merges %float_0 and a yet unknown argument from the external loop backedge. 2. We are now processing block 34: i. The load %35 = OpLoad %f triggers a Phi candidate to be placed in block 31. ii. The Phi candidate %50 = Phi needs two arguments. The one coming from block 30 is %47. But the one coming from block 34 (which we are now processing and have marked sealed), finds %50 itself as the reaching def for %f. 3. This wrongfully marks %50 as a copy-of Phi, which ultimately makes both %47 and %50 copy-of Phis that get eliminated.
Loading
Please register or sign in to comment