xref: /freebsd-src/contrib/llvm-project/llvm/include/llvm/CodeGen/RegAllocFast.h (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
1*0fca6ea1SDimitry Andric //==- RegAllocFast.h ----------- fast register allocator  ----------*-C++-*-==//
2*0fca6ea1SDimitry Andric //
3*0fca6ea1SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*0fca6ea1SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*0fca6ea1SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*0fca6ea1SDimitry Andric //
7*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===//
8*0fca6ea1SDimitry Andric 
9*0fca6ea1SDimitry Andric #ifndef LLVM_CODEGEN_REGALLOCFAST_H
10*0fca6ea1SDimitry Andric #define LLVM_CODEGEN_REGALLOCFAST_H
11*0fca6ea1SDimitry Andric 
12*0fca6ea1SDimitry Andric #include "llvm/CodeGen/MachinePassManager.h"
13*0fca6ea1SDimitry Andric #include "llvm/CodeGen/RegAllocCommon.h"
14*0fca6ea1SDimitry Andric 
15*0fca6ea1SDimitry Andric namespace llvm {
16*0fca6ea1SDimitry Andric 
17*0fca6ea1SDimitry Andric struct RegAllocFastPassOptions {
18*0fca6ea1SDimitry Andric   RegAllocFilterFunc Filter = nullptr;
19*0fca6ea1SDimitry Andric   StringRef FilterName = "all";
20*0fca6ea1SDimitry Andric   bool ClearVRegs = true;
21*0fca6ea1SDimitry Andric };
22*0fca6ea1SDimitry Andric 
23*0fca6ea1SDimitry Andric class RegAllocFastPass : public PassInfoMixin<RegAllocFastPass> {
24*0fca6ea1SDimitry Andric   RegAllocFastPassOptions Opts;
25*0fca6ea1SDimitry Andric 
26*0fca6ea1SDimitry Andric public:
27*0fca6ea1SDimitry Andric   RegAllocFastPass(RegAllocFastPassOptions Opts = RegAllocFastPassOptions())
28*0fca6ea1SDimitry Andric       : Opts(Opts) {}
29*0fca6ea1SDimitry Andric 
30*0fca6ea1SDimitry Andric   MachineFunctionProperties getRequiredProperties() {
31*0fca6ea1SDimitry Andric     return MachineFunctionProperties().set(
32*0fca6ea1SDimitry Andric         MachineFunctionProperties::Property::NoPHIs);
33*0fca6ea1SDimitry Andric   }
34*0fca6ea1SDimitry Andric 
35*0fca6ea1SDimitry Andric   MachineFunctionProperties getSetProperties() {
36*0fca6ea1SDimitry Andric     if (Opts.ClearVRegs) {
37*0fca6ea1SDimitry Andric       return MachineFunctionProperties().set(
38*0fca6ea1SDimitry Andric           MachineFunctionProperties::Property::NoVRegs);
39*0fca6ea1SDimitry Andric     }
40*0fca6ea1SDimitry Andric 
41*0fca6ea1SDimitry Andric     return MachineFunctionProperties();
42*0fca6ea1SDimitry Andric   }
43*0fca6ea1SDimitry Andric 
44*0fca6ea1SDimitry Andric   MachineFunctionProperties getClearedProperties() {
45*0fca6ea1SDimitry Andric     return MachineFunctionProperties().set(
46*0fca6ea1SDimitry Andric         MachineFunctionProperties::Property::IsSSA);
47*0fca6ea1SDimitry Andric   }
48*0fca6ea1SDimitry Andric 
49*0fca6ea1SDimitry Andric   PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &);
50*0fca6ea1SDimitry Andric 
51*0fca6ea1SDimitry Andric   void printPipeline(raw_ostream &OS,
52*0fca6ea1SDimitry Andric                      function_ref<StringRef(StringRef)> MapClassName2PassName);
53*0fca6ea1SDimitry Andric };
54*0fca6ea1SDimitry Andric 
55*0fca6ea1SDimitry Andric } // namespace llvm
56*0fca6ea1SDimitry Andric 
57*0fca6ea1SDimitry Andric #endif // LLVM_CODEGEN_REGALLOCFAST_H
58