diff options
author | Mahesh Ravishankar <ravishankarm@google.com> | 2019-12-06 14:26:34 -0800 |
---|---|---|
committer | A. Unique TensorFlower <gardener@tensorflow.org> | 2019-12-06 14:27:03 -0800 |
commit | 883f5557263e5543c2a8cf7621be885760b47d5d (patch) | |
tree | b7a33342475cab1f0906e77d5aa9dabac1f5f5d0 | |
parent | 3230267d0dbdc908d7be5886e20c2ee5f0e942fe (diff) | |
download | bcm5719-llvm-883f5557263e5543c2a8cf7621be885760b47d5d.tar.gz bcm5719-llvm-883f5557263e5543c2a8cf7621be885760b47d5d.zip |
During serialization do a walk of ops in module to find spv.module.
During lowering, spv.module might be within other modules (for example
gpu kernel module). Walk the module op to find spirv module to
serialize.
PiperOrigin-RevId: 284262550
-rw-r--r-- | mlir/lib/Dialect/SPIRV/Serialization/TranslateRegistration.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/mlir/lib/Dialect/SPIRV/Serialization/TranslateRegistration.cpp b/mlir/lib/Dialect/SPIRV/Serialization/TranslateRegistration.cpp index ffd62bd9bb9..655f559b765 100644 --- a/mlir/lib/Dialect/SPIRV/Serialization/TranslateRegistration.cpp +++ b/mlir/lib/Dialect/SPIRV/Serialization/TranslateRegistration.cpp @@ -86,15 +86,16 @@ LogicalResult serializeModule(ModuleOp module, llvm::raw_ostream &output) { SmallVector<uint32_t, 0> binary; - auto spirvModules = module.getOps<spirv::ModuleOp>(); + SmallVector<spirv::ModuleOp, 1> spirvModules; + module.walk([&](spirv::ModuleOp op) { spirvModules.push_back(op); }); - if (spirvModules.begin() == spirvModules.end()) + if (spirvModules.empty()) return module.emitError("found no 'spv.module' op"); - if (std::next(spirvModules.begin()) != spirvModules.end()) + if (spirvModules.size() != 1) return module.emitError("found more than one 'spv.module' op"); - if (failed(spirv::serialize(*spirvModules.begin(), binary))) + if (failed(spirv::serialize(spirvModules[0], binary))) return failure(); output.write(reinterpret_cast<char *>(binary.data()), |