github.com/johnnyeven/libtools@v0.0.0-20191126065708-61829c1adf46/third_party/mlir/lib/TableGen/OpTrait.cpp (about)

     1  //===- OpTrait.cpp - OpTrait class ----------------------------------------===//
     2  //
     3  // Copyright 2019 The MLIR Authors.
     4  //
     5  // Licensed under the Apache License, Version 2.0 (the "License");
     6  // you may not use this file except in compliance with the License.
     7  // You may obtain a copy of the License at
     8  //
     9  //   http://www.apache.org/licenses/LICENSE-2.0
    10  //
    11  // Unless required by applicable law or agreed to in writing, software
    12  // distributed under the License is distributed on an "AS IS" BASIS,
    13  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14  // See the License for the specific language governing permissions and
    15  // limitations under the License.
    16  // =============================================================================
    17  //
    18  // OpTrait wrapper to simplify using TableGen Record defining a MLIR OpTrait.
    19  //
    20  //===----------------------------------------------------------------------===//
    21  
    22  #include "mlir/TableGen/OpTrait.h"
    23  #include "mlir/TableGen/Predicate.h"
    24  #include "llvm/ADT/StringExtras.h"
    25  #include "llvm/Support/FormatVariadic.h"
    26  #include "llvm/TableGen/Error.h"
    27  #include "llvm/TableGen/Record.h"
    28  
    29  using namespace mlir;
    30  
    31  mlir::tblgen::OpTrait mlir::tblgen::OpTrait::create(const llvm::Init *init) {
    32    auto def = cast<llvm::DefInit>(init)->getDef();
    33    if (def->isSubClassOf("PredOpTrait"))
    34      return OpTrait(Kind::Pred, def);
    35    if (def->isSubClassOf("GenInternalOpTrait"))
    36      return OpTrait(Kind::Internal, def);
    37    assert(def->isSubClassOf("NativeOpTrait"));
    38    return OpTrait(Kind::Native, def);
    39  }
    40  
    41  mlir::tblgen::OpTrait::OpTrait(Kind kind, const llvm::Record *def)
    42      : def(def), kind(kind) {}
    43  
    44  llvm::StringRef mlir::tblgen::NativeOpTrait::getTrait() const {
    45    return def->getValueAsString("trait");
    46  }
    47  
    48  llvm::StringRef mlir::tblgen::InternalOpTrait::getTrait() const {
    49    return def->getValueAsString("trait");
    50  }
    51  
    52  std::string mlir::tblgen::PredOpTrait::getPredTemplate() const {
    53    auto pred = tblgen::Pred(def->getValueInit("predicate"));
    54    return pred.getCondition();
    55  }
    56  
    57  llvm::StringRef mlir::tblgen::PredOpTrait::getDescription() const {
    58    return def->getValueAsString("description");
    59  }