llir-opt  0.0.1
Low-Level Post-Link Optimiser for OCaml and C
alloc_size.h
1 // This file if part of the llir-opt project.
2 // Licensing information can be found in the LICENSE file.
3 // (C) 2018 Nandor Licker. All rights reserved.
4 
5 #pragma once
6 
7 #include "core/pass.h"
8 
9 
10 
14 class AllocSizePass final : public Pass {
15 public:
17  static const char *kPassID;
18 
20  AllocSizePass(PassManager *passManager) : Pass(passManager) {}
21 
23  bool Run(Prog &prog) override;
24 
26  const char *GetPassName() const override;
27 
28 private:
30  void AnalyseCall(CallSite &inst);
31 
33  void AnalyseAlloc(const std::optional<int64_t> &size);
34 
35 private:
37  uint64_t numKnownAllocs = 0;
39  uint64_t numTruncatedAllocs = 0;
41  uint64_t numUnknownAllocs = 0;
42 };
PassManager
Definition: pass_manager.h:74
Pass
Definition: pass.h:17
AllocSizePass::GetPassName
const char * GetPassName() const override
Returns the name of the pass.
Definition: alloc_size.cpp:118
AllocSizePass::kPassID
static const char * kPassID
Pass identifier.
Definition: alloc_size.h:17
AllocSizePass::Run
bool Run(Prog &prog) override
Runs the pass.
Definition: alloc_size.cpp:31
AllocSizePass
Definition: alloc_size.h:14
Prog
Definition: prog.h:33
AllocSizePass::AllocSizePass
AllocSizePass(PassManager *passManager)
Initialises the pass.
Definition: alloc_size.h:20