1*a7215a90SAlex Zinenko //===- OperationSupport.cpp -----------------------------------------------===//
2*a7215a90SAlex Zinenko //
3*a7215a90SAlex Zinenko // Copyright 2019 The MLIR Authors.
4*a7215a90SAlex Zinenko //
5*a7215a90SAlex Zinenko // Licensed under the Apache License, Version 2.0 (the "License");
6*a7215a90SAlex Zinenko // you may not use this file except in compliance with the License.
7*a7215a90SAlex Zinenko // You may obtain a copy of the License at
8*a7215a90SAlex Zinenko //
9*a7215a90SAlex Zinenko //   http://www.apache.org/licenses/LICENSE-2.0
10*a7215a90SAlex Zinenko //
11*a7215a90SAlex Zinenko // Unless required by applicable law or agreed to in writing, software
12*a7215a90SAlex Zinenko // distributed under the License is distributed on an "AS IS" BASIS,
13*a7215a90SAlex Zinenko // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*a7215a90SAlex Zinenko // See the License for the specific language governing permissions and
15*a7215a90SAlex Zinenko // limitations under the License.
16*a7215a90SAlex Zinenko // =============================================================================
17*a7215a90SAlex Zinenko //
18*a7215a90SAlex Zinenko // This file contains out-of-line implementations of the support types that
19*a7215a90SAlex Zinenko // Instruction and related classes build on top of.
20*a7215a90SAlex Zinenko //
21*a7215a90SAlex Zinenko //===----------------------------------------------------------------------===//
22*a7215a90SAlex Zinenko 
23*a7215a90SAlex Zinenko #include "mlir/IR/OperationSupport.h"
24*a7215a90SAlex Zinenko #include "mlir/IR/Block.h"
25*a7215a90SAlex Zinenko 
26*a7215a90SAlex Zinenko namespace mlir {
27*a7215a90SAlex Zinenko 
28*a7215a90SAlex Zinenko OperationState::OperationState(MLIRContext *context, Location location,
29*a7215a90SAlex Zinenko                                StringRef name)
30*a7215a90SAlex Zinenko     : context(context), location(location), name(name, context) {}
31*a7215a90SAlex Zinenko 
32*a7215a90SAlex Zinenko OperationState::OperationState(MLIRContext *context, Location location,
33*a7215a90SAlex Zinenko                                OperationName name)
34*a7215a90SAlex Zinenko     : context(context), location(location), name(name) {}
35*a7215a90SAlex Zinenko 
36*a7215a90SAlex Zinenko OperationState::OperationState(MLIRContext *context, Location location,
37*a7215a90SAlex Zinenko                                StringRef name, ArrayRef<Value *> operands,
38*a7215a90SAlex Zinenko                                ArrayRef<Type> types,
39*a7215a90SAlex Zinenko                                ArrayRef<NamedAttribute> attributes,
40*a7215a90SAlex Zinenko                                ArrayRef<Block *> successors,
41*a7215a90SAlex Zinenko                                MutableArrayRef<std::unique_ptr<Region>> regions,
42*a7215a90SAlex Zinenko                                bool resizableOperandList)
43*a7215a90SAlex Zinenko     : context(context), location(location), name(name, context),
44*a7215a90SAlex Zinenko       operands(operands.begin(), operands.end()),
45*a7215a90SAlex Zinenko       types(types.begin(), types.end()),
46*a7215a90SAlex Zinenko       attributes(attributes.begin(), attributes.end()),
47*a7215a90SAlex Zinenko       successors(successors.begin(), successors.end()) {
48*a7215a90SAlex Zinenko   for (std::unique_ptr<Region> &r : regions) {
49*a7215a90SAlex Zinenko     this->regions.push_back(std::move(r));
50*a7215a90SAlex Zinenko   }
51*a7215a90SAlex Zinenko }
52*a7215a90SAlex Zinenko 
53*a7215a90SAlex Zinenko Region *OperationState::addRegion() {
54*a7215a90SAlex Zinenko   regions.emplace_back(new Region);
55*a7215a90SAlex Zinenko   return regions.back().get();
56*a7215a90SAlex Zinenko }
57*a7215a90SAlex Zinenko 
58*a7215a90SAlex Zinenko void OperationState::addRegion(std::unique_ptr<Region> &&region) {
59*a7215a90SAlex Zinenko   regions.push_back(std::move(region));
60*a7215a90SAlex Zinenko }
61*a7215a90SAlex Zinenko 
62*a7215a90SAlex Zinenko } // end namespace mlir
63