xref: /aosp_15_r20/external/llvm/lib/TableGen/TableGenBackend.cpp (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker //===- TableGenBackend.cpp - Utilities for TableGen Backends ----*- C++ -*-===//
2*9880d681SAndroid Build Coastguard Worker //
3*9880d681SAndroid Build Coastguard Worker //                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker //
5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker //
8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker //
10*9880d681SAndroid Build Coastguard Worker // This file provides useful services for TableGen backends...
11*9880d681SAndroid Build Coastguard Worker //
12*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
13*9880d681SAndroid Build Coastguard Worker 
14*9880d681SAndroid Build Coastguard Worker #include "llvm/TableGen/TableGenBackend.h"
15*9880d681SAndroid Build Coastguard Worker #include "llvm/ADT/Twine.h"
16*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/raw_ostream.h"
17*9880d681SAndroid Build Coastguard Worker 
18*9880d681SAndroid Build Coastguard Worker using namespace llvm;
19*9880d681SAndroid Build Coastguard Worker 
20*9880d681SAndroid Build Coastguard Worker const size_t MAX_LINE_LEN = 80U;
21*9880d681SAndroid Build Coastguard Worker 
printLine(raw_ostream & OS,const Twine & Prefix,char Fill,StringRef Suffix)22*9880d681SAndroid Build Coastguard Worker static void printLine(raw_ostream &OS, const Twine &Prefix, char Fill,
23*9880d681SAndroid Build Coastguard Worker                       StringRef Suffix) {
24*9880d681SAndroid Build Coastguard Worker   size_t Pos = (size_t)OS.tell();
25*9880d681SAndroid Build Coastguard Worker   assert((Prefix.str().size() + Suffix.size() <= MAX_LINE_LEN) &&
26*9880d681SAndroid Build Coastguard Worker          "header line exceeds max limit");
27*9880d681SAndroid Build Coastguard Worker   OS << Prefix;
28*9880d681SAndroid Build Coastguard Worker   for (size_t i = (size_t)OS.tell() - Pos, e = MAX_LINE_LEN - Suffix.size();
29*9880d681SAndroid Build Coastguard Worker          i < e; ++i)
30*9880d681SAndroid Build Coastguard Worker     OS << Fill;
31*9880d681SAndroid Build Coastguard Worker   OS << Suffix << '\n';
32*9880d681SAndroid Build Coastguard Worker }
33*9880d681SAndroid Build Coastguard Worker 
emitSourceFileHeader(StringRef Desc,raw_ostream & OS)34*9880d681SAndroid Build Coastguard Worker void llvm::emitSourceFileHeader(StringRef Desc, raw_ostream &OS) {
35*9880d681SAndroid Build Coastguard Worker   printLine(OS, "/*===- TableGen'erated file ", '-', "*- C++ -*-===*\\");
36*9880d681SAndroid Build Coastguard Worker   StringRef Prefix("|* ");
37*9880d681SAndroid Build Coastguard Worker   StringRef Suffix(" *|");
38*9880d681SAndroid Build Coastguard Worker   printLine(OS, Prefix, ' ', Suffix);
39*9880d681SAndroid Build Coastguard Worker   size_t PSLen = Prefix.size() + Suffix.size();
40*9880d681SAndroid Build Coastguard Worker   assert(PSLen < MAX_LINE_LEN);
41*9880d681SAndroid Build Coastguard Worker   size_t Pos = 0U;
42*9880d681SAndroid Build Coastguard Worker   do {
43*9880d681SAndroid Build Coastguard Worker     size_t Length = std::min(Desc.size() - Pos, MAX_LINE_LEN - PSLen);
44*9880d681SAndroid Build Coastguard Worker     printLine(OS, Prefix + Desc.substr(Pos, Length), ' ', Suffix);
45*9880d681SAndroid Build Coastguard Worker     Pos += Length;
46*9880d681SAndroid Build Coastguard Worker   } while (Pos < Desc.size());
47*9880d681SAndroid Build Coastguard Worker   printLine(OS, Prefix, ' ', Suffix);
48*9880d681SAndroid Build Coastguard Worker   printLine(OS, Prefix + "Automatically generated file, do not edit!", ' ',
49*9880d681SAndroid Build Coastguard Worker     Suffix);
50*9880d681SAndroid Build Coastguard Worker   printLine(OS, Prefix, ' ', Suffix);
51*9880d681SAndroid Build Coastguard Worker   printLine(OS, "\\*===", '-', "===*/");
52*9880d681SAndroid Build Coastguard Worker   OS << '\n';
53*9880d681SAndroid Build Coastguard Worker }
54