//===- RewriteInsertsPass.cpp - MLIR conversion pass ----------------------===// // // 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 a pass to rewrite sequential chains of // `spirv::CompositeInsert` operations into `spirv::CompositeConstruct` // operations. // //===----------------------------------------------------------------------===// #include "mlir/Dialect/SPIRV/Transforms/Passes.h" #include "mlir/Dialect/SPIRV/IR/SPIRVOps.h" #include "mlir/IR/Builders.h" #include "mlir/IR/BuiltinOps.h" namespace mlir { namespace spirv { #define GEN_PASS_DEF_SPIRVREWRITEINSERTSPASS #include "mlir/Dialect/SPIRV/Transforms/Passes.h.inc" } // namespace spirv } // namespace mlir usingnamespacemlir; namespace { /// Replaces sequential chains of `spirv::CompositeInsertOp` operation into /// `spirv::CompositeConstructOp` operation if possible. class RewriteInsertsPass : public spirv::impl::SPIRVRewriteInsertsPassBase<RewriteInsertsPass> { … }; } // namespace void RewriteInsertsPass::runOnOperation() { … } LogicalResult RewriteInsertsPass::collectInsertionChain( spirv::CompositeInsertOp op, SmallVectorImpl<spirv::CompositeInsertOp> &insertions) { … }