brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.7 KiB · ca0f9c3 Raw
61 lines · c
1//===- VarLenCodeEmitterGen.h - CEG for variable-length insts ---*- 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//9// This file declare the CodeEmitterGen component for variable-length10// instructions. See the .cpp file for more details.11//12//===----------------------------------------------------------------------===//13 14#ifndef LLVM_UTILS_TABLEGEN_COMMON_VARLENCODEEMITTERGEN_H15#define LLVM_UTILS_TABLEGEN_COMMON_VARLENCODEEMITTERGEN_H16 17#include "llvm/TableGen/Record.h"18 19namespace llvm {20 21struct EncodingSegment {22  unsigned BitWidth;23  const Init *Value;24  StringRef CustomEncoder = "";25  StringRef CustomDecoder = "";26};27 28class VarLenInst {29  const RecordVal *TheDef;30  size_t NumBits;31 32  // Set if any of the segment is not fixed value.33  bool HasDynamicSegment;34 35  SmallVector<EncodingSegment, 4> Segments;36 37  void buildRec(const DagInit *DI);38 39public:40  VarLenInst() : TheDef(nullptr), NumBits(0U), HasDynamicSegment(false) {}41 42  explicit VarLenInst(const DagInit *DI, const RecordVal *TheDef);43 44  /// Number of bits45  size_t size() const { return NumBits; }46 47  using const_iterator = decltype(Segments)::const_iterator;48 49  const_iterator begin() const { return Segments.begin(); }50  const_iterator end() const { return Segments.end(); }51  size_t getNumSegments() const { return Segments.size(); }52 53  bool isFixedValueOnly() const { return !HasDynamicSegment; }54};55 56void emitVarLenCodeEmitter(const RecordKeeper &R, raw_ostream &OS);57 58} // end namespace llvm59 60#endif // LLVM_UTILS_TABLEGEN_COMMON_VARLENCODEEMITTERGEN_H61