mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
[InlineCost] PrinterPass prints constants to which instructions are simplified
This patch enables printing of constants to see which instructions were constant-folded. Needed for tests and better visiual analysis of inliner's work. Reviewers: apilipenko, mtrofin, davidxl, fedor.sergeev Reviewed By: mtrofin Differential Revision: https://reviews.llvm.org/D81024
This commit is contained in:
parent
dc9522e0eb
commit
d123d281c8
@ -402,6 +402,12 @@ public:
|
||||
|
||||
InlineResult analyze();
|
||||
|
||||
Optional<Constant*> getSimplifiedValue(Instruction *I) {
|
||||
if (SimplifiedValues.find(I) != SimplifiedValues.end())
|
||||
return SimplifiedValues[I];
|
||||
return None;
|
||||
}
|
||||
|
||||
// Keep a bunch of stats about the cost savings found so we can print them
|
||||
// out when debugging.
|
||||
unsigned NumConstantArgs = 0;
|
||||
@ -766,6 +772,11 @@ void InlineCostAnnotationWriter::emitInstructionAnnot(const Instruction *I,
|
||||
if (Record->hasThresholdChanged())
|
||||
OS << ", threshold delta = " << Record->getThresholdDelta();
|
||||
}
|
||||
auto C = ICCA->getSimplifiedValue(const_cast<Instruction *>(I));
|
||||
if (C) {
|
||||
OS << ", simplified to ";
|
||||
C.getValue()->print(OS, true);
|
||||
}
|
||||
OS << "\n";
|
||||
}
|
||||
|
||||
@ -2545,4 +2556,4 @@ InlineCostAnnotationPrinterPass::run(Function &F,
|
||||
}
|
||||
}
|
||||
return PreservedAnalyses::all();
|
||||
}
|
||||
}
|
||||
|
15
test/Transforms/Inline/simplified_to.ll
Normal file
15
test/Transforms/Inline/simplified_to.ll
Normal file
@ -0,0 +1,15 @@
|
||||
; RUN: opt < %s -passes="print<inline-cost>" 2>&1 | FileCheck %s
|
||||
|
||||
; CHECK-LABEL: @test()
|
||||
; CHECK: cost before = {{.*}}, cost after = {{.*}}, threshold before = {{.*}}, threshold after = {{.*}}, cost delta = {{.*}}, simplified to i1 false
|
||||
; CHECK: %1 = icmp eq i32 4, 5
|
||||
|
||||
define i32 @test() {
|
||||
%1 = icmp eq i32 4, 5
|
||||
ret i32 0
|
||||
}
|
||||
|
||||
define void @main() {
|
||||
%1 = call i32 @test()
|
||||
ret void
|
||||
}
|
Loading…
Reference in New Issue
Block a user