This is an archive of the discontinued LLVM Phabricator instance.

[AMDGPU] Limit endcf-collapase to simple if
ClosedPublic

Authored by rampitec on Apr 6 2020, 5:13 PM.

Details

Summary

We can only collapse adjacent SI_END_CF if outer statement
belongs to a simple SI_IF, otherwise correct mask is not in the
register we expect, but is an argument of an S_XOR instruction.

Even if SI_IF is simple it might be lowered using S_XOR because
lowering is dependent on a basic block layout. It is not
considered simple if instruction consuming its output is
not an SI_END_CF. Since that SI_END_CF might have already been
lowered to an S_OR isSimpleIf() check may return false.

This situation is an opportunity for a further optimization
of SI_IF lowering, but that is a separate optimization. In the
meanwhile move SI_END_CF post the lowering when we already know
how the rest of the CFG was lowered since a non-simple SI_IF
case still needs to be handled.

Diff Detail

Event Timeline

rampitec created this revision.Apr 6 2020, 5:13 PM
foad accepted this revision.Apr 7 2020, 2:15 AM

LGTM and I can confirm that it fixes the problem I was investigating in a graphics benchmark. Thanks!

This revision is now accepted and ready to land.Apr 7 2020, 2:15 AM
This revision was automatically updated to reflect the committed changes.
Herald added a project: Restricted Project. · View Herald TranscriptApr 7 2020, 10:51 AM