[MachineOutliner] Improve mapper statistics
authorJessica Paquette <jpaquette@apple.com>
Sat, 4 Feb 2023 06:26:07 +0000 (22:26 -0800)
committerJessica Paquette <jpaquette@apple.com>
Sat, 4 Feb 2023 06:27:21 +0000 (22:27 -0800)
Add a test for statistics as well.

The mapper size stats were nested in a loop unnecessarily. Move them out.

Give existing stats better names, and add one which also tracks the number of
sentinels added.

llvm/lib/CodeGen/MachineOutliner.cpp
llvm/test/CodeGen/AArch64/machine-outliner-mapper-stats.mir [new file with mode: 0644]

index ef60692..856b9bf 100644 (file)
@@ -89,11 +89,14 @@ STATISTIC(NumOutlined, "Number of candidates outlined");
 STATISTIC(FunctionsCreated, "Number of functions created");
 
 // Statistics for instruction mapping.
-STATISTIC(NumLegalInUnsignedVec, "Number of legal instrs in unsigned vector");
+STATISTIC(NumLegalInUnsignedVec, "Outlinable instructions mapped");
 STATISTIC(NumIllegalInUnsignedVec,
-          "Number of illegal instrs in unsigned vector");
-STATISTIC(NumInvisible, "Number of invisible instrs in unsigned vector");
-STATISTIC(UnsignedVecSize, "Size of unsigned vector");
+          "Unoutlinable instructions mapped + number of sentinel values");
+STATISTIC(NumSentinels, "Sentinel values inserted during mapping");
+STATISTIC(NumInvisible,
+          "Invisible instructions skipped during mapping");
+STATISTIC(UnsignedVecSize,
+          "Total number of instructions mapped and saved to mapping vector");
 
 // Set to true if the user wants the outliner to run on linkonceodr linkage
 // functions. This is false by default because the linker can dedupe linkonceodr
@@ -361,6 +364,7 @@ struct InstructionMapper {
       // repeated substring.
       mapToIllegalUnsigned(It, CanOutlineWithPrevInstr, UnsignedVecForMBB,
                            InstrListForMBB);
+      ++NumSentinels;
       append_range(InstrList, InstrListForMBB);
       append_range(UnsignedVec, UnsignedVecForMBB);
     }
@@ -1005,10 +1009,9 @@ void MachineOutliner::populateMapper(InstructionMapper &Mapper, Module &M,
       // MBB is suitable for outlining. Map it to a list of unsigneds.
       Mapper.convertToUnsignedVec(MBB, *TII);
     }
-
-    // Statistics.
-    UnsignedVecSize = Mapper.UnsignedVec.size();
   }
+  // Statistics.
+  UnsignedVecSize = Mapper.UnsignedVec.size();
 }
 
 void MachineOutliner::initSizeRemarkInfo(
diff --git a/llvm/test/CodeGen/AArch64/machine-outliner-mapper-stats.mir b/llvm/test/CodeGen/AArch64/machine-outliner-mapper-stats.mir
new file mode 100644 (file)
index 0000000..4cb8e8c
--- /dev/null
@@ -0,0 +1,26 @@
+# RUN: llc -mtriple aarch64 -stats -run-pass=machine-outliner -verify-machineinstrs %s -o /dev/null 2>&1 | FileCheck %s
+# REQUIRES: asserts
+
+# CHECK: 2 machine-outliner - Unoutlinable instructions mapped + number of sentinel values
+# CHECK: 2 machine-outliner - Invisible instructions skipped during mapping
+# CHECK: 4 machine-outliner - Outlinable instructions mapped
+# CHECK: 1 machine-outliner - Sentinel values inserted during mapping
+# CHECK: 5 machine-outliner - Total number of instructions mapped and saved to mapping vector
+
+...
+---
+name:            foo
+tracksRegLiveness: true
+machineFunctionInfo:
+  hasRedZone:      false
+body:             |
+  bb.0:
+    liveins: $w0, $lr, $w8, $w30
+    $lr = ORRXri $lr, 4
+    $w17 = ORRWri $wzr, 1
+    $w17 = ORRWri $wzr, 1
+    $w0 = ORRWri $wzr, 4
+  bb.2:
+    DBG_VALUE $x0, 0
+    DBG_VALUE $x0, 0
+    RET undef $lr