Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //==- RegisterUsageInfo.h - Register Usage Informartion Storage --*- C++ -*-==//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. /// \file
  9. /// This pass is required to take advantage of the interprocedural register
  10. /// allocation infrastructure.
  11. ///
  12. /// This pass is simple immutable pass which keeps RegMasks (calculated based on
  13. /// actual register allocation) for functions in a module and provides simple
  14. /// API to query this information.
  15. ///
  16. //===----------------------------------------------------------------------===//
  17.  
  18. #ifndef LLVM_CODEGEN_REGISTERUSAGEINFO_H
  19. #define LLVM_CODEGEN_REGISTERUSAGEINFO_H
  20.  
  21. #include "llvm/ADT/ArrayRef.h"
  22. #include "llvm/ADT/DenseMap.h"
  23. #include "llvm/InitializePasses.h"
  24. #include "llvm/Pass.h"
  25. #include "llvm/PassRegistry.h"
  26. #include <cstdint>
  27. #include <vector>
  28.  
  29. namespace llvm {
  30.  
  31. class Function;
  32. class LLVMTargetMachine;
  33.  
  34. class PhysicalRegisterUsageInfo : public ImmutablePass {
  35. public:
  36.   static char ID;
  37.  
  38.   PhysicalRegisterUsageInfo() : ImmutablePass(ID) {
  39.     PassRegistry &Registry = *PassRegistry::getPassRegistry();
  40.     initializePhysicalRegisterUsageInfoPass(Registry);
  41.   }
  42.  
  43.   /// Set TargetMachine which is used to print analysis.
  44.   void setTargetMachine(const LLVMTargetMachine &TM);
  45.  
  46.   bool doInitialization(Module &M) override;
  47.  
  48.   bool doFinalization(Module &M) override;
  49.  
  50.   /// To store RegMask for given Function *.
  51.   void storeUpdateRegUsageInfo(const Function &FP,
  52.                                ArrayRef<uint32_t> RegMask);
  53.  
  54.   /// To query stored RegMask for given Function *, it will returns ane empty
  55.   /// array if function is not known.
  56.   ArrayRef<uint32_t> getRegUsageInfo(const Function &FP);
  57.  
  58.   void print(raw_ostream &OS, const Module *M = nullptr) const override;
  59.  
  60. private:
  61.   /// A Dense map from Function * to RegMask.
  62.   /// In RegMask 0 means register used (clobbered) by function.
  63.   /// and 1 means content of register will be preserved around function call.
  64.   DenseMap<const Function *, std::vector<uint32_t>> RegMasks;
  65.  
  66.   const LLVMTargetMachine *TM;
  67. };
  68.  
  69. } // end namespace llvm
  70.  
  71. #endif // LLVM_CODEGEN_REGISTERUSAGEINFO_H
  72.