[llvm] r283443 - [llvm-opt-report] Record VF, etc. correctly for multiple opts on one line

Hal Finkel via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 6 04:58:53 PDT 2016


Author: hfinkel
Date: Thu Oct  6 06:58:52 2016
New Revision: 283443

URL: http://llvm.org/viewvc/llvm-project?rev=283443&view=rev
Log:
[llvm-opt-report] Record VF, etc. correctly for multiple opts on one line

When there are multiple optimizations on one line, record the vectorization
factors, etc. correctly (instead of incorrectly substituting default values).

Added:
    llvm/trunk/test/tools/llvm-opt-report/Inputs/sr2.c
    llvm/trunk/test/tools/llvm-opt-report/Inputs/sr2.yaml
    llvm/trunk/test/tools/llvm-opt-report/mlineopt.test
Modified:
    llvm/trunk/tools/llvm-opt-report/OptReport.cpp

Added: llvm/trunk/test/tools/llvm-opt-report/Inputs/sr2.c
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-opt-report/Inputs/sr2.c?rev=283443&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-opt-report/Inputs/sr2.c (added)
+++ llvm/trunk/test/tools/llvm-opt-report/Inputs/sr2.c Thu Oct  6 06:58:52 2016
@@ -0,0 +1,35 @@
+/*
+** Write a 64-bit variable-length integer to memory starting at p[0].
+** The length of data write will be between 1 and 9 bytes.  The number
+** of bytes written is returned.
+**
+** A variable-length integer consists of the lower 7 bits of each byte
+** for all bytes that have the 8th bit set and one byte with the 8th
+** bit clear.  Except, if we get to the 9th byte, it stores the full
+** 8 bits and is the last byte.
+*/
+SQLITE_PRIVATE int sqlite3PutVarint(unsigned char *p, u64 v){
+  int i, j, n;
+  u8 buf[10];
+  if( v & (((u64)0xff000000)<<32) ){
+    p[8] = v;
+    v >>= 8;
+    for(i=7; i>=0; i--){
+      p[i] = (v & 0x7f) | 0x80;
+      v >>= 7;
+    }
+    return 9;
+  }    
+  n = 0;
+  do{
+    buf[n++] = (v & 0x7f) | 0x80;
+    v >>= 7;
+  }while( v!=0 );
+  buf[0] &= 0x7f;
+  assert( n<=9 );
+  for(i=0, j=n-1; j>=0; j--, i++){
+    p[i] = buf[j];
+  }
+  return n;
+}
+

Added: llvm/trunk/test/tools/llvm-opt-report/Inputs/sr2.yaml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-opt-report/Inputs/sr2.yaml?rev=283443&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-opt-report/Inputs/sr2.yaml (added)
+++ llvm/trunk/test/tools/llvm-opt-report/Inputs/sr2.yaml Thu Oct  6 06:58:52 2016
@@ -0,0 +1,24 @@
+--- !Passed
+Pass:            loop-vectorize
+Name:            Vectorized
+DebugLoc:        { File: Inputs/sr2.c, 
+                   Line: 30, Column: 3 }
+Function:        sqlite3VdbeExec
+Args:            
+  - String:          'vectorized loop (vectorization width: '
+  - VectorizationFactor: '16'
+  - String:          ', interleaved count: '
+  - InterleaveCount: '2'
+  - String:          ')'
+...
+--- !Passed
+Pass:            loop-unroll
+Name:            PartialUnrolled
+DebugLoc:        { File: Inputs/sr2.c, 
+                   Line: 30, Column: 3 }
+Function:        sqlite3VdbeExec
+Args:            
+  - String:          'unrolled loop by a factor of '
+  - UnrollCount:     '2'
+  - String:          ' with run-time trip count'
+...

Added: llvm/trunk/test/tools/llvm-opt-report/mlineopt.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-opt-report/mlineopt.test?rev=283443&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-opt-report/mlineopt.test (added)
+++ llvm/trunk/test/tools/llvm-opt-report/mlineopt.test Thu Oct  6 06:58:52 2016
@@ -0,0 +1,39 @@
+RUN: llvm-opt-report -r %p %p/Inputs/sr2.yaml | FileCheck -strict-whitespace %s
+
+; CHECK: < {{.*[/\]}}sr2.c
+; CHECK-NEXT:  1          | /*
+; CHECK-NEXT:  2          | ** Write a 64-bit variable-length integer to memory starting at p[0].
+; CHECK-NEXT:  3          | ** The length of data write will be between 1 and 9 bytes.  The number
+; CHECK-NEXT:  4          | ** of bytes written is returned.
+; CHECK-NEXT:  5          | **
+; CHECK-NEXT:  6          | ** A variable-length integer consists of the lower 7 bits of each byte
+; CHECK-NEXT:  7          | ** for all bytes that have the 8th bit set and one byte with the 8th
+; CHECK-NEXT:  8          | ** bit clear.  Except, if we get to the 9th byte, it stores the full
+; CHECK-NEXT:  9          | ** 8 bits and is the last byte.
+; CHECK-NEXT: 10          | */
+; CHECK-NEXT: 11          | SQLITE_PRIVATE int sqlite3PutVarint(unsigned char *p, u64 v){
+; CHECK-NEXT: 12          |   int i, j, n;
+; CHECK-NEXT: 13          |   u8 buf[10];
+; CHECK-NEXT: 14          |   if( v & (((u64)0xff000000)<<32) ){
+; CHECK-NEXT: 15          |     p[8] = v;
+; CHECK-NEXT: 16          |     v >>= 8;
+; CHECK-NEXT: 17          |     for(i=7; i>=0; i--){
+; CHECK-NEXT: 18          |       p[i] = (v & 0x7f) | 0x80;
+; CHECK-NEXT: 19          |       v >>= 7;
+; CHECK-NEXT: 20          |     }
+; CHECK-NEXT: 21          |     return 9;
+; CHECK-NEXT: 22          |   }    
+; CHECK-NEXT: 23          |   n = 0;
+; CHECK-NEXT: 24          |   do{
+; CHECK-NEXT: 25          |     buf[n++] = (v & 0x7f) | 0x80;
+; CHECK-NEXT: 26          |     v >>= 7;
+; CHECK-NEXT: 27          |   }while( v!=0 );
+; CHECK-NEXT: 28          |   buf[0] &= 0x7f;
+; CHECK-NEXT: 29          |   assert( n<=9 );
+; CHECK-NEXT: 30  U2V16,2 |   for(i=0, j=n-1; j>=0; j--, i++){
+; CHECK-NEXT: 31          |     p[i] = buf[j];
+; CHECK-NEXT: 32          |   }
+; CHECK-NEXT: 33          |   return n;
+; CHECK-NEXT: 34          | }
+; CHECK-NEXT: 35          | 
+

Modified: llvm/trunk/tools/llvm-opt-report/OptReport.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-opt-report/OptReport.cpp?rev=283443&r1=283442&r2=283443&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-opt-report/OptReport.cpp (original)
+++ llvm/trunk/tools/llvm-opt-report/OptReport.cpp Thu Oct  6 06:58:52 2016
@@ -248,29 +248,24 @@ static void collectLocationInfo(yaml::St
     // We track information on both actual and potential transformations. This
     // way, if there are multiple possible things on a line that are, or could
     // have been transformed, we can indicate that explicitly in the output.
-    auto UpdateLLII = [Transformed, VectorizationFactor,
-                       InterleaveCount,
-                       UnrollCount](OptReportLocationInfo &LI,
-                                    OptReportLocationItemInfo &LLII) {
+    auto UpdateLLII = [Transformed](OptReportLocationItemInfo &LLII) {
       LLII.Analyzed = true;
-      if (Transformed) {
+      if (Transformed)
         LLII.Transformed = true;
-
-        LI.VectorizationFactor = VectorizationFactor;
-        LI.InterleaveCount = InterleaveCount;
-        LI.UnrollCount = UnrollCount;
-      }
     };
 
     if (Pass == "inline") {
       auto &LI = LocationInfo[File][Line][Function][Column];
-      UpdateLLII(LI, LI.Inlined);
+      UpdateLLII(LI.Inlined);
     } else if (Pass == "loop-unroll") {
       auto &LI = LocationInfo[File][Line][Function][Column];
-      UpdateLLII(LI, LI.Unrolled);
+      LI.UnrollCount = UnrollCount;
+      UpdateLLII(LI.Unrolled);
     } else if (Pass == "loop-vectorize") {
       auto &LI = LocationInfo[File][Line][Function][Column];
-      UpdateLLII(LI, LI.Vectorized);
+      LI.VectorizationFactor = VectorizationFactor;
+      LI.InterleaveCount = InterleaveCount;
+      UpdateLLII(LI.Vectorized);
     }
   }
 }




More information about the llvm-commits mailing list