[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