blob: 50f7fb0980fddc0b3acabf9efedcf8fa71be6a89 [file] [log] [blame]
Chris Lattnerd4964212018-08-01 10:43:18 -07001//===- Instructions.cpp - MLIR CFGFunction Instruction Classes ------------===//
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#include "mlir/IR/SSAValue.h"
19#include "mlir/IR/Instructions.h"
20#include "mlir/IR/Statements.h"
21using namespace mlir;
22
23/// If this value is the result of an OperationInst, return the instruction
24/// that defines it.
25OperationInst *SSAValue::getDefiningInst() {
26 if (auto *result = dyn_cast<InstResult>(this))
27 return result->getOwner();
28 return nullptr;
29}
30
31/// If this value is the result of an OperationStmt, return the statement
32/// that defines it.
33OperationStmt *SSAValue::getDefiningStmt() {
34 if (auto *result = dyn_cast<StmtResult>(this))
35 return result->getOwner();
36 return nullptr;
37}
38
39Operation *SSAValue::getDefiningOperation() {
40 if (auto *inst = getDefiningInst())
41 return inst;
42 if (auto *stmt = getDefiningStmt())
43 return stmt;
44 return nullptr;
45}