Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[AMDGPUUnifyDivergentExitNodes] Add NewPM support
Meanwhile, use UniformityAnalysis instead of LegacyDivergenceAnalysis to collect divergence info. Reviewed By: arsenm, sameerds Differential Revision: https://reviews.llvm.org/D141355
- Loading branch information
Showing
4 changed files
with
128 additions
and
51 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
//===- AMDGPUUnifyDivergentExitNodes.h ------------------------------------===// | ||
// | ||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
// See https://llvm.org/LICENSE.txt for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
// | ||
//===----------------------------------------------------------------------===// | ||
// | ||
// This is a variant of the UnifyFunctionExitNodes pass. Rather than ensuring | ||
// there is at most one ret and one unreachable instruction, it ensures there is | ||
// at most one divergent exiting block. | ||
// | ||
// StructurizeCFG can't deal with multi-exit regions formed by branches to | ||
// multiple return nodes. It is not desirable to structurize regions with | ||
// uniform branches, so unifying those to the same return block as divergent | ||
// branches inhibits use of scalar branching. It still can't deal with the case | ||
// where one branch goes to return, and one unreachable. Replace unreachable in | ||
// this case with a return. | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#include "AMDGPU.h" | ||
|
||
namespace llvm { | ||
class AMDGPUUnifyDivergentExitNodesPass | ||
: public PassInfoMixin<AMDGPUUnifyDivergentExitNodesPass> { | ||
public: | ||
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); | ||
}; | ||
|
||
} // end namespace llvm |
72 changes: 42 additions & 30 deletions
72
llvm/test/CodeGen/AMDGPU/si-annotate-nested-control-flows.ll
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters