[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