//===- SetTheory.h - Generate ordered sets from DAG expressions -*- C++ -*-===// // // 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 // //===----------------------------------------------------------------------===// // // This file implements the SetTheory class that computes ordered sets of // Records from DAG expressions. Operators for standard set operations are // predefined, and it is possible to add special purpose set operators as well. // // The user may define named sets as Records of predefined classes. Set // expanders can be added to a SetTheory instance to teach it how to find the // elements of such a named set. // // These are the predefined operators. The argument lists can be individual // elements (defs), other sets (defs of expandable classes), lists, or DAG // expressions that are evaluated recursively. // // - (add S1, S2 ...) Union sets. This is also how sets are created from element // lists. // // - (sub S1, S2, ...) Set difference. Every element in S1 except for the // elements in S2, ... // // - (and S1, S2) Set intersection. Every element in S1 that is also in S2. // // - (shl S, N) Shift left. Remove the first N elements from S. // // - (trunc S, N) Truncate. The first N elements of S. // // - (rotl S, N) Rotate left. Same as (add (shl S, N), (trunc S, N)). // // - (rotr S, N) Rotate right. // // - (decimate S, N) Decimate S by picking every N'th element, starting with // the first one. For instance, (decimate S, 2) returns the even elements of // S. // // - (sequence "Format", From, To, [Stride]) Generate a sequence of defs with // printf. For instance, (sequence "R%u", 0, 3) -> [ R0, R1, R2, R3 ] and // (sequence "R%u", 20, 30, 5) -> [ R20, R25, R30 ]. // //===----------------------------------------------------------------------===// #ifndef LLVM_TABLEGEN_SETTHEORY_H #define LLVM_TABLEGEN_SETTHEORY_H #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/SetVector.h" #include "llvm/ADT/StringMap.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/SMLoc.h" #include <map> #include <memory> #include <vector> namespace llvm { class DagInit; class Init; class Record; class SetTheory { … }; } // end namespace llvm #endif // LLVM_TABLEGEN_SETTHEORY_H