[llvm] 56615a2 - [IROutliner] Adding instruction strings to IRSimilarityPrinting diagnostics.
Andrew Litteken via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 9 10:12:23 PST 2021
Author: Andrew Litteken
Date: 2021-02-09T12:11:47-06:00
New Revision: 56615a2654ce9b0e588fc67c1e0957968acf7fc1
URL: https://github.com/llvm/llvm-project/commit/56615a2654ce9b0e588fc67c1e0957968acf7fc1
DIFF: https://github.com/llvm/llvm-project/commit/56615a2654ce9b0e588fc67c1e0957968acf7fc1.diff
LOG: [IROutliner] Adding instruction strings to IRSimilarityPrinting diagnostics.
When doing some recent debugging of the IROutliner, and using the similarity pass for debugging, just having the basic block and function isn't really enough to get all the information. This adds the first and last instruction to the output of the IRSimilarityPrinting pass to give better information to a user.
Reviewer: paquette
Differential Revision: https://reviews.llvm.org/D94304
Added:
Modified:
llvm/lib/Analysis/IRSimilarityIdentifier.cpp
llvm/test/Analysis/IRSimilarityIdentifier/basic.ll
llvm/test/Analysis/IRSimilarityIdentifier/different.ll
llvm/test/Analysis/IRSimilarityIdentifier/nothing.ll
Removed:
################################################################################
diff --git a/llvm/lib/Analysis/IRSimilarityIdentifier.cpp b/llvm/lib/Analysis/IRSimilarityIdentifier.cpp
index d6ade21fcbb7..f5eb1a0bd6fc 100644
--- a/llvm/lib/Analysis/IRSimilarityIdentifier.cpp
+++ b/llvm/lib/Analysis/IRSimilarityIdentifier.cpp
@@ -923,11 +923,16 @@ IRSimilarityAnalysisPrinterPass::run(Module &M, ModuleAnalysisManager &AM) {
<< CandVec.begin()->getLength() << ". Found in: \n";
for (IRSimilarityCandidate &Cand : CandVec) {
OS << " Function: " << Cand.front()->Inst->getFunction()->getName().str()
- << ", Basic Block: ";
+ << ", Basic Block: ";
if (Cand.front()->Inst->getParent()->getName().str() == "")
- OS << "(unnamed)\n";
+ OS << "(unnamed)";
else
- OS << Cand.front()->Inst->getParent()->getName().str() << "\n";
+ OS << Cand.front()->Inst->getParent()->getName().str();
+ OS << "\n Start Instruction: ";
+ Cand.frontInstruction()->print(OS);
+ OS << "\n End Instruction: ";
+ Cand.backInstruction()->print(OS);
+ OS << "\n";
}
}
diff --git a/llvm/test/Analysis/IRSimilarityIdentifier/basic.ll b/llvm/test/Analysis/IRSimilarityIdentifier/basic.ll
index 36d53c939a73..0d719135ce51 100644
--- a/llvm/test/Analysis/IRSimilarityIdentifier/basic.ll
+++ b/llvm/test/Analysis/IRSimilarityIdentifier/basic.ll
@@ -1,33 +1,74 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -disable-output -S -passes=print-ir-similarity < %s 2>&1 | FileCheck %s
-; This is a simple test to make sure the IRSimilarityIdentifier and
+; This is a simple test to make sure the IRSimilarityIdentifier and
; IRSimilarityPrinterPass is working.
-; CHECK: 4 candidates of length 2. Found in:
-; CHECK-NEXT: Function: cat, Basic Block: entry
-; CHECK-NEXT: Function: fish, Basic Block: entry
-; CHECK-NEXT: Function: dog, Basic Block: entry
-; CHECK-NEXT: Function: turtle, Basic Block: (unnamed)
-; CHECK-NEXT: 4 candidates of length 3. Found in:
-; CHECK-NEXT: Function: cat, Basic Block: entry
-; CHECK-NEXT: Function: fish, Basic Block: entry
-; CHECK-NEXT: Function: dog, Basic Block: entry
-; CHECK-NEXT: Function: turtle, Basic Block: (unnamed)
-; CHECK-NEXT: 4 candidates of length 4. Found in:
-; CHECK-NEXT: Function: cat, Basic Block: entry
-; CHECK-NEXT: Function: fish, Basic Block: entry
-; CHECK-NEXT: Function: dog, Basic Block: entry
-; CHECK-NEXT: Function: turtle, Basic Block: (unnamed)
-; CHECK-NEXT: 4 candidates of length 5. Found in:
-; CHECK-NEXT: Function: cat, Basic Block: entry
-; CHECK-NEXT: Function: fish, Basic Block: entry
-; CHECK-NEXT: Function: dog, Basic Block: entry
-; CHECK-NEXT: Function: turtle, Basic Block: (unnamed)
-; CHECK-NEXT: 4 candidates of length 6. Found in:
-; CHECK-NEXT: Function: cat, Basic Block: entry
-; CHECK-NEXT: Function: fish, Basic Block: entry
-; CHECK-NEXT: Function: dog, Basic Block: entry
-; CHECK-NEXT: Function: turtle, Basic Block: (unnamed)
+; CHECK: 4 candidates of length 2. Found in:
+; CHECK-NEXT: Function: cat, Basic Block: entry
+; CHECK-NEXT: Start Instruction: store i32 4, i32* %4, align 4
+; CHECK-NEXT: End Instruction: store i32 5, i32* %5, align 4
+; CHECK-NEXT: Function: fish, Basic Block: entry
+; CHECK-NEXT: Start Instruction: store i32 4, i32* %4, align 4
+; CHECK-NEXT: End Instruction: store i32 5, i32* %5, align 4
+; CHECK-NEXT: Function: dog, Basic Block: entry
+; CHECK-NEXT: Start Instruction: store i32 4, i32* %4, align 4
+; CHECK-NEXT: End Instruction: store i32 5, i32* %5, align 4
+; CHECK-NEXT: Function: turtle, Basic Block: (unnamed)
+; CHECK-NEXT: Start Instruction: store i32 5, i32* %5, align 4
+; CHECK-NEXT: End Instruction: store i32 6, i32* %6, align 4
+; CHECK-NEXT:4 candidates of length 3. Found in:
+; CHECK-NEXT: Function: cat, Basic Block: entry
+; CHECK-NEXT: Start Instruction: store i32 3, i32* %3, align 4
+; CHECK-NEXT: End Instruction: store i32 5, i32* %5, align 4
+; CHECK-NEXT: Function: fish, Basic Block: entry
+; CHECK-NEXT: Start Instruction: store i32 3, i32* %3, align 4
+; CHECK-NEXT: End Instruction: store i32 5, i32* %5, align 4
+; CHECK-NEXT: Function: dog, Basic Block: entry
+; CHECK-NEXT: Start Instruction: store i32 3, i32* %3, align 4
+; CHECK-NEXT: End Instruction: store i32 5, i32* %5, align 4
+; CHECK-NEXT: Function: turtle, Basic Block: (unnamed)
+; CHECK-NEXT: Start Instruction: store i32 4, i32* %4, align 4
+; CHECK-NEXT: End Instruction: store i32 6, i32* %6, align 4
+; CHECK-NEXT:4 candidates of length 4. Found in:
+; CHECK-NEXT: Function: cat, Basic Block: entry
+; CHECK-NEXT: Start Instruction: store i32 2, i32* %2, align 4
+; CHECK-NEXT: End Instruction: store i32 5, i32* %5, align 4
+; CHECK-NEXT: Function: fish, Basic Block: entry
+; CHECK-NEXT: Start Instruction: store i32 2, i32* %2, align 4
+; CHECK-NEXT: End Instruction: store i32 5, i32* %5, align 4
+; CHECK-NEXT: Function: dog, Basic Block: entry
+; CHECK-NEXT: Start Instruction: store i32 2, i32* %2, align 4
+; CHECK-NEXT: End Instruction: store i32 5, i32* %5, align 4
+; CHECK-NEXT: Function: turtle, Basic Block: (unnamed)
+; CHECK-NEXT: Start Instruction: store i32 3, i32* %3, align 4
+; CHECK-NEXT: End Instruction: store i32 6, i32* %6, align 4
+; CHECK-NEXT:4 candidates of length 5. Found in:
+; CHECK-NEXT: Function: cat, Basic Block: entry
+; CHECK-NEXT: Start Instruction: store i32 1, i32* %1, align 4
+; CHECK-NEXT: End Instruction: store i32 5, i32* %5, align 4
+; CHECK-NEXT: Function: fish, Basic Block: entry
+; CHECK-NEXT: Start Instruction: store i32 1, i32* %1, align 4
+; CHECK-NEXT: End Instruction: store i32 5, i32* %5, align 4
+; CHECK-NEXT: Function: dog, Basic Block: entry
+; CHECK-NEXT: Start Instruction: store i32 1, i32* %1, align 4
+; CHECK-NEXT: End Instruction: store i32 5, i32* %5, align 4
+; CHECK-NEXT: Function: turtle, Basic Block: (unnamed)
+; CHECK-NEXT: Start Instruction: store i32 2, i32* %2, align 4
+; CHECK-NEXT: End Instruction: store i32 6, i32* %6, align 4
+; CHECK-NEXT:4 candidates of length 6. Found in:
+; CHECK-NEXT: Function: cat, Basic Block: entry
+; CHECK-NEXT: Start Instruction: store i32 6, i32* %0, align 4
+; CHECK-NEXT: End Instruction: store i32 5, i32* %5, align 4
+; CHECK-NEXT: Function: fish, Basic Block: entry
+; CHECK-NEXT: Start Instruction: store i32 6, i32* %0, align 4
+; CHECK-NEXT: End Instruction: store i32 5, i32* %5, align 4
+; CHECK-NEXT: Function: dog, Basic Block: entry
+; CHECK-NEXT: Start Instruction: store i32 6, i32* %0, align 4
+; CHECK-NEXT: End Instruction: store i32 5, i32* %5, align 4
+; CHECK-NEXT: Function: turtle, Basic Block: (unnamed)
+; CHECK-NEXT: Start Instruction: store i32 1, i32* %1, align 4
+; CHECK-NEXT: End Instruction: store i32 6, i32* %6, align 4
define linkonce_odr void @fish() {
entry:
diff --git a/llvm/test/Analysis/IRSimilarityIdentifier/
diff erent.ll b/llvm/test/Analysis/IRSimilarityIdentifier/
diff erent.ll
index ab79f00d04ec..a6fa13657a5a 100644
--- a/llvm/test/Analysis/IRSimilarityIdentifier/
diff erent.ll
+++ b/llvm/test/Analysis/IRSimilarityIdentifier/
diff erent.ll
@@ -1,15 +1,24 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -disable-output -S -passes=print-ir-similarity < %s 2>&1 | FileCheck --allow-empty %s
; Check to make sure that the IRSimilarityIdentifier and IRSimilarityPrinterPass
; return items only within the same function when there are
diff erent sets of
; instructions in functions.
-; CHECK: 2 candidates of length 3. Found in:
-; CHECK-NEXT: Function: turtle, Basic Block: (unnamed)
-; CHECK-NEXT: Function: turtle, Basic Block: (unnamed)
-; CHECK-NEXT: 2 candidates of length 5. Found in:
-; CHECK-NEXT: Function: fish, Basic Block: entry
-; CHECK-NEXT: Function: fish, Basic Block: entry
+; CHECK: 2 candidates of length 3. Found in:
+; CHECK-NEXT: Function: turtle, Basic Block: (unnamed)
+; CHECK-NEXT: Start Instruction: %a = load i32, i32* %0, align 4
+; CHECK-NEXT: End Instruction: %c = load i32, i32* %2, align 4
+; CHECK-NEXT: Function: turtle, Basic Block: (unnamed)
+; CHECK-NEXT: Start Instruction: %b = load i32, i32* %1, align 4
+; CHECK-NEXT: End Instruction: %d = load i32, i32* %3, align 4
+; CHECK-NEXT: 2 candidates of length 5. Found in:
+; CHECK-NEXT: Function: fish, Basic Block: entry
+; CHECK-NEXT: Start Instruction: store i32 6, i32* %0, align 4
+; CHECK-NEXT: End Instruction: store i32 4, i32* %4, align 4
+; CHECK-NEXT: Function: fish, Basic Block: entry
+; CHECK-NEXT: Start Instruction: store i32 1, i32* %1, align 4
+; CHECK-NEXT: End Instruction: store i32 5, i32* %5, align 4
define linkonce_odr void @fish() {
entry:
diff --git a/llvm/test/Analysis/IRSimilarityIdentifier/nothing.ll b/llvm/test/Analysis/IRSimilarityIdentifier/nothing.ll
index e956a418aeef..5c7210790f47 100644
--- a/llvm/test/Analysis/IRSimilarityIdentifier/nothing.ll
+++ b/llvm/test/Analysis/IRSimilarityIdentifier/nothing.ll
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -disable-output -S -passes=print-ir-similarity < %s 2>&1 | FileCheck --allow-empty %s
; This is a simple test to make sure the IRSimilarityPrinterPass returns
More information about the llvm-commits
mailing list