From 92d3672452db260f431b9219faf57c5f8c7b876b Mon Sep 17 00:00:00 2001 From: Jessica Paquette Date: Fri, 3 Feb 2023 22:26:07 -0800 Subject: [PATCH] [MachineOutliner] Improve mapper statistics 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 | 17 ++++++++------ .../AArch64/machine-outliner-mapper-stats.mir | 26 ++++++++++++++++++++++ 2 files changed, 36 insertions(+), 7 deletions(-) create mode 100644 llvm/test/CodeGen/AArch64/machine-outliner-mapper-stats.mir diff --git a/llvm/lib/CodeGen/MachineOutliner.cpp b/llvm/lib/CodeGen/MachineOutliner.cpp index ef606925..856b9bf 100644 --- a/llvm/lib/CodeGen/MachineOutliner.cpp +++ b/llvm/lib/CodeGen/MachineOutliner.cpp @@ -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 index 0000000..4cb8e8c --- /dev/null +++ b/llvm/test/CodeGen/AArch64/machine-outliner-mapper-stats.mir @@ -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 -- 2.7.4