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"
20 // HwModeId -> list of predicates (definition)
26 struct CodeGenHwModes
;
36 HwModeSelect(Record
*R
, CodeGenHwModes
&CGH
);
37 typedef std::pair
<unsigned, Record
*> PairType
;
38 std::vector
<PairType
> Items
;
42 struct CodeGenHwModes
{
43 enum : unsigned { DefaultMode
= 0 };
44 static StringRef DefaultModeName
;
46 CodeGenHwModes(RecordKeeper
&R
);
47 unsigned getHwModeId(StringRef Name
) const;
48 const HwMode
&getMode(unsigned Id
) const {
49 assert(Id
!= 0 && "Mode id of 0 is reserved for the default mode");
52 const HwModeSelect
&getHwModeSelect(Record
*R
) const;
53 unsigned getNumModeIds() const { return Modes
.size()+1; }
57 RecordKeeper
&Records
;
58 StringMap
<unsigned> ModeIds
; // HwMode (string) -> HwModeId
59 std::vector
<HwMode
> Modes
;
60 std::map
<Record
*,HwModeSelect
> ModeSelects
;
64 #endif // LLVM_UTILS_TABLEGEN_CODEGENHWMODES_H