brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · 32a198c Raw
33 lines · cpp
1//===- UnstructuredControlFlow.cpp - Op Interface Helpers  ----------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "mlir/Dialect/Bufferization/IR/UnstructuredControlFlow.h"10 11using namespace mlir;12 13SmallVector<OpOperand *>14mlir::bufferization::detail::getCallerOpOperands(BlockArgument bbArg) {15  SmallVector<OpOperand *> result;16  Block *block = bbArg.getOwner();17  for (Operation *caller : block->getUsers()) {18    auto branchOp = dyn_cast<BranchOpInterface>(caller);19    assert(branchOp && "expected that all callers implement BranchOpInterface");20    auto it = llvm::find(caller->getSuccessors(), block);21    assert(it != caller->getSuccessors().end() && "could not find successor");22    int64_t successorIdx = std::distance(caller->getSuccessors().begin(), it);23    SuccessorOperands operands = branchOp.getSuccessorOperands(successorIdx);24    assert(operands.getProducedOperandCount() == 0 &&25           "produced operands not supported");26    int64_t operandIndex =27        operands.getForwardedOperands().getBeginOperandIndex() +28        bbArg.getArgNumber();29    result.push_back(&caller->getOpOperand(operandIndex));30  }31  return result;32}33