[llvm] r358324 - [StackMaps] Add location size to llvm-readobj -stackmap output

Philip Reames via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 12 20:08:46 PDT 2019


Author: reames
Date: Fri Apr 12 20:08:45 2019
New Revision: 358324

URL: http://llvm.org/viewvc/llvm-project?rev=358324&view=rev
Log:
[StackMaps] Add location size to llvm-readobj -stackmap output

The size field of a location can be different for each entry, so it is useful to have this displayed in the output of llvm-readobj -stackmap. Below is an example of how the output would look:

Record ID: 2882400000, instruction offset: 16
   3 locations:
     #1: Constant 1, size: 8
     #2: Constant 2, size: 8
     #3: Constant 3, size: 8
   0 live-outs: [ ]

Patch By: jacob.hughes at kcl.ac.uk (with heavy modification by me)
Differential Revision: https://reviews.llvm.org/D59169


Modified:
    llvm/trunk/include/llvm/Object/StackMapParser.h
    llvm/trunk/test/Object/stackmap-dump.test
    llvm/trunk/tools/llvm-readobj/StackMapPrinter.h

Modified: llvm/trunk/include/llvm/Object/StackMapParser.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/StackMapParser.h?rev=358324&r1=358323&r2=358324&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Object/StackMapParser.h (original)
+++ llvm/trunk/include/llvm/Object/StackMapParser.h Fri Apr 12 20:08:45 2019
@@ -116,7 +116,7 @@ public:
     }
 
     /// Get the Size for this location.
-    uint8_t getSize() const {
+    unsigned getSizeInBytes() const {
         return read<uint8_t>(P + SizeOffset);
 
     }

Modified: llvm/trunk/test/Object/stackmap-dump.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/stackmap-dump.test?rev=358324&r1=358323&r2=358324&view=diff
==============================================================================
--- llvm/trunk/test/Object/stackmap-dump.test (original)
+++ llvm/trunk/test/Object/stackmap-dump.test Fri Apr 12 20:08:45 2019
@@ -29,123 +29,123 @@ CHECK-NEXT:   #3: 4294967296
 CHECK-NEXT: Num Records: 20
 CHECK-NEXT:   Record ID: 1, instruction offset: 4
 CHECK-NEXT:     12 locations:
-CHECK-NEXT:       #1: Constant 4294967295
-CHECK-NEXT:       #2: Constant 4294967295
-CHECK-NEXT:       #3: Constant 65536
-CHECK-NEXT:       #4: Constant 2000000000
-CHECK-NEXT:       #5: Constant 2147483647
-CHECK-NEXT:       #6: Constant 4294967295
-CHECK-NEXT:       #7: Constant 4294967295
-CHECK-NEXT:       #8: Constant 0
-CHECK-NEXT:       #9: ConstantIndex #0 (2147483648)
-CHECK-NEXT:       #10: ConstantIndex #1 (4294967295)
-CHECK-NEXT:       #11: ConstantIndex #2 (4294967296)
-CHECK-NEXT:       #12: Constant 4294967295
+CHECK-NEXT:       #1: Constant 4294967295, size: 8
+CHECK-NEXT:       #2: Constant 4294967295, size: 8
+CHECK-NEXT:       #3: Constant 65536, size: 8
+CHECK-NEXT:       #4: Constant 2000000000, size: 8
+CHECK-NEXT:       #5: Constant 2147483647, size: 8
+CHECK-NEXT:       #6: Constant 4294967295, size: 8
+CHECK-NEXT:       #7: Constant 4294967295, size: 8
+CHECK-NEXT:       #8: Constant 0, size: 8
+CHECK-NEXT:       #9: ConstantIndex #0 (2147483648), size: 8
+CHECK-NEXT:       #10: ConstantIndex #1 (4294967295), size: 8
+CHECK-NEXT:       #11: ConstantIndex #2 (4294967296), size: 8
+CHECK-NEXT:       #12: Constant 4294967295, size: 8
 CHECK-NEXT:     1 live-outs: [ R#7 (8-bytes) ]
 
 CHECK:        Record ID: 3, instruction offset: 22
 CHECK-NEXT:     2 locations:
-CHECK-NEXT:       #1: Register R#3
-CHECK-NEXT:       #2: Register R#14
+CHECK-NEXT:       #1: Register R#3, size: 8
+CHECK-NEXT:       #2: Register R#14, size: 8
 CHECK-NEXT:     0 live-outs: [ ]
 
 CHECK:        Record ID: 4, instruction offset: 10
 CHECK-NEXT:     2 locations:
-CHECK-NEXT:       #1: Register R#5
-CHECK-NEXT:       #2: Register R#4
+CHECK-NEXT:       #1: Register R#5, size: 8
+CHECK-NEXT:       #2: Register R#4, size: 8
 CHECK-NEXT:     0 live-outs: [ ]
 
 CHECK:        Record ID: 5, instruction offset: 4
 CHECK-NEXT:     2 locations:
-CHECK-NEXT:       #1: Register R#0
-CHECK-NEXT:       #2: Register R#5
+CHECK-NEXT:       #1: Register R#0, size: 8
+CHECK-NEXT:       #2: Register R#5, size: 8
 CHECK-NEXT:     2 live-outs: [ R#0 (8-bytes) R#7 (8-bytes) ]
 
 CHECK:        Record ID: 6, instruction offset: 4
 CHECK-NEXT:     2 locations:
-CHECK-NEXT:       #1: Register R#4
-CHECK-NEXT:       #2: Register R#2
+CHECK-NEXT:       #1: Register R#4, size: 8
+CHECK-NEXT:       #2: Register R#2, size: 8
 CHECK-NEXT:     1 live-outs: [ R#7 (8-bytes) ]
 
 CHECK:        Record ID: 7, instruction offset: 10
 CHECK-NEXT:     2 locations:
-CHECK-NEXT:       #1: Register R#2
-CHECK-NEXT:       #2: Register R#8
+CHECK-NEXT:       #1: Register R#2, size: 8
+CHECK-NEXT:       #2: Register R#8, size: 8
 CHECK-NEXT:     1 live-outs: [ R#7 (8-bytes) ]
 
 CHECK:        Record ID: 8, instruction offset: 10
 CHECK-NEXT:     2 locations:
-CHECK-NEXT:       #1: Register R#2
-CHECK-NEXT:       #2: Register R#8
+CHECK-NEXT:       #1: Register R#2, size: 8
+CHECK-NEXT:       #2: Register R#8, size: 8
 CHECK-NEXT:     2 live-outs: [ R#0 (8-bytes) R#7 (8-bytes) ]
 
 CHECK:        Record ID: 11, instruction offset: 42
 CHECK-NEXT:     17 locations:
-CHECK-NEXT:       #1: Register R#9
-CHECK-NEXT:       #2: Register R#14
-CHECK-NEXT:       #3: Register R#10
-CHECK-NEXT:       #4: Register R#3
-CHECK-NEXT:       #5: Register R#0
-CHECK-NEXT:       #6: Register R#13
-CHECK-NEXT:       #7: Register R#12
-CHECK-NEXT:       #8: Register R#15
-CHECK-NEXT:       #9: Indirect [R#6 + 72]
-CHECK-NEXT:       #10: Indirect [R#6 + 80]
-CHECK-NEXT:       #11: Indirect [R#6 + 88]
-CHECK-NEXT:       #12: Indirect [R#6 + 96]
-CHECK-NEXT:       #13: Indirect [R#6 + 104]
-CHECK-NEXT:       #14: Indirect [R#6 + 112]
-CHECK-NEXT:       #15: Indirect [R#6 + 120]
-CHECK-NEXT:       #16: Indirect [R#6 + 128]
-CHECK-NEXT:       #17: Indirect [R#6 + 136]
+CHECK-NEXT:       #1: Register R#9, size: 8
+CHECK-NEXT:       #2: Register R#14, size: 8
+CHECK-NEXT:       #3: Register R#10, size: 8
+CHECK-NEXT:       #4: Register R#3, size: 8
+CHECK-NEXT:       #5: Register R#0, size: 8
+CHECK-NEXT:       #6: Register R#13, size: 8
+CHECK-NEXT:       #7: Register R#12, size: 8
+CHECK-NEXT:       #8: Register R#15, size: 8
+CHECK-NEXT:       #9: Indirect [R#6 + 72], size: 8
+CHECK-NEXT:       #10: Indirect [R#6 + 80], size: 8
+CHECK-NEXT:       #11: Indirect [R#6 + 88], size: 8
+CHECK-NEXT:       #12: Indirect [R#6 + 96], size: 8
+CHECK-NEXT:       #13: Indirect [R#6 + 104], size: 8
+CHECK-NEXT:       #14: Indirect [R#6 + 112], size: 8
+CHECK-NEXT:       #15: Indirect [R#6 + 120], size: 8
+CHECK-NEXT:       #16: Indirect [R#6 + 128], size: 8
+CHECK-NEXT:       #17: Indirect [R#6 + 136], size: 8
 CHECK-NEXT:     1 live-outs: [ R#7 (8-bytes) ]
 
 CHECK:        Record ID: 12, instruction offset: 62
 CHECK-NEXT:     17 locations:
-CHECK-NEXT:       #1: Register R#0
-CHECK-NEXT:       #2: Register R#14
-CHECK-NEXT:       #3: Register R#10
-CHECK-NEXT:       #4: Register R#9
-CHECK-NEXT:       #5: Register R#8
-CHECK-NEXT:       #6: Register R#4
-CHECK-NEXT:       #7: Register R#1
-CHECK-NEXT:       #8: Register R#2
-CHECK-NEXT:       #9: Register R#5
-CHECK-NEXT:       #10: Register R#3
-CHECK-NEXT:       #11: Register R#13
-CHECK-NEXT:       #12: Register R#12
-CHECK-NEXT:       #13: Register R#15
-CHECK-NEXT:       #14: Indirect [R#6 + 112]
-CHECK-NEXT:       #15: Indirect [R#6 + 120]
-CHECK-NEXT:       #16: Indirect [R#6 + 128]
-CHECK-NEXT:       #17: Indirect [R#6 + 136]
+CHECK-NEXT:       #1: Register R#0, size: 8
+CHECK-NEXT:       #2: Register R#14, size: 8
+CHECK-NEXT:       #3: Register R#10, size: 8
+CHECK-NEXT:       #4: Register R#9, size: 8
+CHECK-NEXT:       #5: Register R#8, size: 8
+CHECK-NEXT:       #6: Register R#4, size: 8
+CHECK-NEXT:       #7: Register R#1, size: 8
+CHECK-NEXT:       #8: Register R#2, size: 8
+CHECK-NEXT:       #9: Register R#5, size: 8
+CHECK-NEXT:       #10: Register R#3, size: 8
+CHECK-NEXT:       #11: Register R#13, size: 8
+CHECK-NEXT:       #12: Register R#12, size: 8
+CHECK-NEXT:       #13: Register R#15, size: 8
+CHECK-NEXT:       #14: Indirect [R#6 + 112], size: 8
+CHECK-NEXT:       #15: Indirect [R#6 + 120], size: 8
+CHECK-NEXT:       #16: Indirect [R#6 + 128], size: 8
+CHECK-NEXT:       #17: Indirect [R#6 + 136], size: 8
 CHECK-NEXT:     0 live-outs: [ ]
 
 CHECK:        Record ID: 13, instruction offset: 50
 CHECK-NEXT:     1 locations:
-CHECK-NEXT:       #1: Indirect [R#6 + -48]
+CHECK-NEXT:       #1: Indirect [R#6 + -48], size: 4
 CHECK-NEXT:     0 live-outs: [ ]
 
 CHECK:        Record ID: 14, instruction offset: 24
 CHECK-NEXT:     2 locations:
-CHECK-NEXT:       #1: Register R#0
-CHECK-NEXT:       #2: Register R#3
+CHECK-NEXT:       #1: Register R#0, size: 1
+CHECK-NEXT:       #2: Register R#3, size: 1
 CHECK-NEXT:     0 live-outs: [ ]
 
 CHECK:        Record ID: 15, instruction offset: 4
 CHECK-NEXT:     1 locations:
-CHECK-NEXT:       #1: Constant 33
+CHECK-NEXT:       #1: Constant 33, size: 8
 CHECK-NEXT:     0 live-outs: [ ]
 
 CHECK:        Record ID: 16, instruction offset: 32
 CHECK-NEXT:     1 locations:
-CHECK-NEXT:       #1: Direct R#6 + -32
+CHECK-NEXT:       #1: Direct R#6 + -32, size: 8
 CHECK-NEXT:     0 live-outs: [ ]
 
 CHECK:        Record ID: 17, instruction offset: 32
 CHECK-NEXT:     2 locations:
-CHECK-NEXT:       #1: Direct R#6 + -8
-CHECK-NEXT:       #2: Direct R#6 + -40
+CHECK-NEXT:       #1: Direct R#6 + -8, size: 8
+CHECK-NEXT:       #2: Direct R#6 + -40, size: 8
 CHECK-NEXT:     1 live-outs: [ R#7 (8-bytes) ]
 
 CHECK:        Record ID: 4294967295, instruction offset: 4
@@ -166,7 +166,7 @@ CHECK-NEXT:     1 live-outs: [ R#7 (8-by
 
 CHECK:        Record ID: 16, instruction offset: 18
 CHECK-NEXT:     1 locations:
-CHECK-NEXT:       #1: Indirect [R#6 + -44]
+CHECK-NEXT:       #1: Indirect [R#6 + -44], size: 4
 CHECK-NEXT:     0 live-outs: [ ]
 
 CHECK:        Record ID: 0, instruction offset: 26

Modified: llvm/trunk/tools/llvm-readobj/StackMapPrinter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/StackMapPrinter.h?rev=358324&r1=358323&r2=358324&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-readobj/StackMapPrinter.h (original)
+++ llvm/trunk/tools/llvm-readobj/StackMapPrinter.h Fri Apr 12 20:08:45 2019
@@ -47,24 +47,24 @@ void prettyPrintStackMap(ScopedPrinter &
       OS << "      #" << ++LocationIndex << ": ";
       switch (Loc.getKind()) {
       case StackMapParserT::LocationKind::Register:
-        OS << "Register R#" << Loc.getDwarfRegNum() << "\n";
+        OS << "Register R#" << Loc.getDwarfRegNum();
         break;
       case StackMapParserT::LocationKind::Direct:
-        OS << "Direct R#" << Loc.getDwarfRegNum() << " + " << Loc.getOffset()
-           << "\n";
+        OS << "Direct R#" << Loc.getDwarfRegNum() << " + " << Loc.getOffset();
         break;
       case StackMapParserT::LocationKind::Indirect:
         OS << "Indirect [R#" << Loc.getDwarfRegNum() << " + " << Loc.getOffset()
-           << "]\n";
+           << "]";
         break;
       case StackMapParserT::LocationKind::Constant:
-        OS << "Constant " << Loc.getSmallConstant() << "\n";
+        OS << "Constant " << Loc.getSmallConstant();
         break;
       case StackMapParserT::LocationKind::ConstantIndex:
         OS << "ConstantIndex #" << Loc.getConstantIndex() << " ("
-           << SMP.getConstant(Loc.getConstantIndex()).getValue() << ")\n";
+           << SMP.getConstant(Loc.getConstantIndex()).getValue() << ")";
         break;
       }
+      OS << ", size: " << Loc.getSizeInBytes() << "\n";
     }
 
     raw_ostream &OS = W.startLine();




More information about the llvm-commits mailing list