1 //===--- CodeGenHwModes.h ---------------------------------------*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
8 // Classes to parse and store HW mode information for instruction selection.
9 //===----------------------------------------------------------------------===//
11 #ifndef LLVM_UTILS_TABLEGEN_CODEGENHWMODES_H
12 #define LLVM_UTILS_TABLEGEN_CODEGENHWMODES_H
14 #include "llvm/ADT/StringMap.h"
19 // HwModeId -> list of predicates (definition)
25 struct CodeGenHwModes
;
35 HwModeSelect(Record
*R
, CodeGenHwModes
&CGH
);
36 typedef std::pair
<unsigned, Record
*> PairType
;
37 std::vector
<PairType
> Items
;
41 struct CodeGenHwModes
{
42 enum : unsigned { DefaultMode
= 0 };
43 static StringRef DefaultModeName
;
45 CodeGenHwModes(RecordKeeper
&R
);
46 unsigned getHwModeId(StringRef Name
) const;
47 const HwMode
&getMode(unsigned Id
) const {
48 assert(Id
!= 0 && "Mode id of 0 is reserved for the default mode");
51 const HwModeSelect
&getHwModeSelect(Record
*R
) const;
52 unsigned getNumModeIds() const { return Modes
.size()+1; }
56 RecordKeeper
&Records
;
57 StringMap
<unsigned> ModeIds
; // HwMode (string) -> HwModeId
58 std::vector
<HwMode
> Modes
;
59 std::map
<Record
*,HwModeSelect
> ModeSelects
;
63 #endif // LLVM_UTILS_TABLEGEN_CODEGENHWMODES_H