forked from OSchip/llvm-project
DivergenceAnalysis: added debug output
Summary: This commit does two things: 1. modified the existing DivergenceAnalysis::dump() so it dumps the whole function with added DIVERGENT: annotations; 2. added code to do that dump if the appropriate -debug-only option is on. Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D47700 Change-Id: Id97b605aab1fc6f5a11a20c58a99bbe8c565bf83 llvm-svn: 336998
This commit is contained in:
parent
e0e5b4cf2e
commit
f3d8295105
|
@ -77,6 +77,8 @@
|
|||
#include <vector>
|
||||
using namespace llvm;
|
||||
|
||||
#define DEBUG_TYPE "divergence"
|
||||
|
||||
namespace {
|
||||
|
||||
class DivergencePropagator {
|
||||
|
@ -299,6 +301,10 @@ bool DivergenceAnalysis::runOnFunction(Function &F) {
|
|||
PDT, DivergentValues);
|
||||
DP.populateWithSourcesOfDivergence();
|
||||
DP.propagate();
|
||||
LLVM_DEBUG(
|
||||
dbgs() << "\nAfter divergence analysis on " << F.getName() << ":\n";
|
||||
print(dbgs(), F.getParent())
|
||||
);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -318,12 +324,17 @@ void DivergenceAnalysis::print(raw_ostream &OS, const Module *) const {
|
|||
|
||||
// Dumps all divergent values in F, arguments and then instructions.
|
||||
for (auto &Arg : F->args()) {
|
||||
if (DivergentValues.count(&Arg))
|
||||
OS << "DIVERGENT: " << Arg << "\n";
|
||||
OS << (DivergentValues.count(&Arg) ? "DIVERGENT: " : " ");
|
||||
OS << Arg << "\n";
|
||||
}
|
||||
// Iterate instructions using instructions() to ensure a deterministic order.
|
||||
for (auto &I : instructions(F)) {
|
||||
if (DivergentValues.count(&I))
|
||||
OS << "DIVERGENT:" << I << "\n";
|
||||
for (auto BI = F->begin(), BE = F->end(); BI != BE; ++BI) {
|
||||
auto &BB = *BI;
|
||||
OS << "\n " << BB.getName() << ":\n";
|
||||
for (auto &I : BB.instructionsWithoutDebug()) {
|
||||
OS << (DivergentValues.count(&I) ? "DIVERGENT: " : " ");
|
||||
OS << I << "\n";
|
||||
}
|
||||
}
|
||||
OS << "\n";
|
||||
}
|
||||
|
|
|
@ -2,9 +2,12 @@
|
|||
|
||||
; CHECK-LABEL: 'test1':
|
||||
; CHECK-NEXT: DIVERGENT: i32 %bound
|
||||
; CHECK: {{^ *}}%counter =
|
||||
; CHECK-NEXT: DIVERGENT: %break = icmp sge i32 %counter, %bound
|
||||
; CHECK-NEXT: DIVERGENT: br i1 %break, label %footer, label %body
|
||||
; CHECK-NEXT: DIVERGENT: br i1 %break, label %end, label %header
|
||||
; CHECK: {{^ *}}%counter.next =
|
||||
; CHECK: {{^ *}}%counter.footer =
|
||||
; CHECK: DIVERGENT: br i1 %break, label %end, label %header
|
||||
; Note: %counter is not divergent!
|
||||
define amdgpu_ps void @test1(i32 %bound) {
|
||||
entry:
|
||||
|
|
Loading…
Reference in New Issue