brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · 7e45f8e Raw
74 lines · c
1//===--- CodeGenHwModes.h ---------------------------------------*- 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-exception6//7//===----------------------------------------------------------------------===//8// Classes to parse and store HW mode information for instruction selection.9//===----------------------------------------------------------------------===//10 11#ifndef LLVM_UTILS_TABLEGEN_COMMON_CODEGENHWMODES_H12#define LLVM_UTILS_TABLEGEN_COMMON_CODEGENHWMODES_H13 14#include "llvm/ADT/DenseMap.h"15#include "llvm/ADT/StringRef.h"16#include <cassert>17#include <map>18#include <utility>19#include <vector>20 21// HwModeId -> list of predicates (definition)22 23namespace llvm {24class Record;25class RecordKeeper;26 27struct CodeGenHwModes;28 29struct HwMode {30  HwMode(const Record *R);31  StringRef Name;32  std::vector<const Record *> Predicates;33  void dump() const;34};35 36struct HwModeSelect {37  HwModeSelect(const Record *R, CodeGenHwModes &CGH);38  using PairType = std::pair<unsigned, const Record *>;39  std::vector<PairType> Items;40  void dump() const;41};42 43struct CodeGenHwModes {44  enum : unsigned { DefaultMode = 0 };45  static StringRef DefaultModeName;46 47  CodeGenHwModes(const RecordKeeper &R);48  unsigned getHwModeId(const Record *R) const;49  const HwMode &getMode(unsigned Id) const {50    assert(Id != 0 && "Mode id of 0 is reserved for the default mode");51    return Modes[Id - 1];52  }53  StringRef getModeName(unsigned Id, bool IncludeDefault = false) const {54    if (IncludeDefault && Id == CodeGenHwModes::DefaultMode)55      return DefaultModeName;56    return getMode(Id).Name;57  }58  const HwModeSelect &getHwModeSelect(const Record *R) const;59  const std::map<const Record *, HwModeSelect> &getHwModeSelects() const {60    return ModeSelects;61  }62  unsigned getNumModeIds() const { return Modes.size() + 1; }63  void dump() const;64 65private:66  const RecordKeeper &Records;67  DenseMap<const Record *, unsigned> ModeIds; // HwMode Record -> HwModeId68  std::vector<HwMode> Modes;69  std::map<const Record *, HwModeSelect> ModeSelects;70};71} // namespace llvm72 73#endif // LLVM_UTILS_TABLEGEN_COMMON_CODEGENHWMODES_H74