可能な前任者が 1 つしかない場合に phi ノードを使用する利点は何ですか? たとえば、 を実行するopt -loop-<some specific pass> some-cool-file.ll -S
と、まだ先行ノードを追加していない場合、出力には、可能性のある先行ノードが 1 つしかない phi ノードが含まれることがよくあります。
例:
endcond.loopexit: ; preds = %loop <- note: one predecessor
%res.lcssa = phi i64 [ %res, %loop ] ; I'm assuming this is from the
br label %endcond ; loop-closed ssa form pass
endcond:
%var = phi i64 [ %res.lcssa, %endcond.loopexit ], <other-pred>
可能な前任者が1つしかない場合、上記は次とまったく同じであってはなりません
endcond.loopexit: ; preds = %loop
br label %endcond ; res assigned a value in %loop
endcond:
%var = phi i64 [ %res, %endcond.loopexit ], <other-pred> ; use %res directly
誤解しないでほしいのですが、私は phi ノードの大ファンですが、可能性のある前任者が 1 つしかない場合に phi ノードを追加するときに、読みやすさと警告の改善以外に他の利点があるかどうかに興味がありました。