1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-25 04:02:41 +01:00
llvm-mirror/utils/TableGen/GlobalISel/CodeExpander.h
Daniel Sanders 261abc0edd [gicombiner] Add a CodeExpander to handle C++ fragments with variable expansion
Summary:
This will handle expansion of C++ fragments in the declarative combiner
including custom predicates, and escapes into C++ to aid the migration
effort.

Fixed the -DLLVM_LINK_LLVM_DYLIB=ON using DISABLE_LLVM_LINK_LLVM_DYLIB when
creating the library. Apparently it automatically links to libLLVM.dylib
and we don't want that from tablegen.

Reviewers: bogner, volkan

Subscribers: mgorny, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D68288

> llvm-svn: 373551

llvm-svn: 373651
2019-10-03 19:13:39 +00:00

56 lines
1.8 KiB
C++

//===- CodeExpander.h - Expand variables in a string ----------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
/// \file Expand the variables in a string.
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_UTILS_TABLEGEN_CODEEXPANDER_H
#define LLVM_UTILS_TABLEGEN_CODEEXPANDER_H
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Support/SMLoc.h"
namespace llvm {
class CodeExpansions;
class raw_ostream;
/// Emit the given code with all '${foo}' placeholders expanded to their
/// replacements.
///
/// It's an error to use an undefined expansion and expansion-like output that
/// needs to be emitted verbatim can be escaped as '\${foo}'
///
/// The emitted code can be given a custom indent to enable both indentation by
/// an arbitrary amount of whitespace and emission of the code as a comment.
class CodeExpander {
StringRef Code;
const CodeExpansions &Expansions;
const ArrayRef<SMLoc> &Loc;
bool ShowExpansions;
StringRef Indent;
public:
CodeExpander(StringRef Code, const CodeExpansions &Expansions,
const ArrayRef<SMLoc> &Loc, bool ShowExpansions,
StringRef Indent = " ")
: Code(Code), Expansions(Expansions), Loc(Loc),
ShowExpansions(ShowExpansions), Indent(Indent) {}
void emit(raw_ostream &OS) const;
};
inline raw_ostream &operator<<(raw_ostream &OS, const CodeExpander &Expander) {
Expander.emit(OS);
return OS;
}
} // end namespace llvm
#endif // ifndef LLVM_UTILS_TABLEGEN_CODEEXPANDER_H