This is an archive of the discontinued LLVM Phabricator instance.

Add a shortened printing/parsing form for linalg.map and linalg.reduce.
ClosedPublic

Authored by khasanovaa on Dec 20 2022, 8:08 AM.

Diff Detail

Event Timeline

khasanovaa created this revision.Dec 20 2022, 8:08 AM
Herald added a project: Restricted Project. · View Herald TranscriptDec 20 2022, 8:08 AM
khasanovaa requested review of this revision.Dec 20 2022, 8:08 AM

Some first comments

mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp
1014

static

1015

can be just const OperationName &

1017

ArrayRefs are usually passed just as ArrayRef<Value> (no need for const reference)

1027–1032

Can you use this overload instead? It will make the code a bit easier to read. I didn't even know that we can pass OperationState to create.

/// Creates an operation with the given fields.
Operation *create(Location loc, StringAttr opName, ValueRange operands,
                  TypeRange types = {},
                  ArrayRef<NamedAttribute> attributes = {},
                  BlockRange successors = {},
                  MutableArrayRef<std::unique_ptr<Region>> regions = {});
1028

Let's use the location of the MapOp/ReduceOp here.

1033

same here

1049

Why do you need the unique_ptr here?

1073

static

1076

nit: I would put an assert here that the second operation is a linalg.yield

1077

Why is this check needed?

didn't look at the impl but offhand comment: some ops are variadic here, how does it work in that case ?

didn't look at the impl but offhand comment: some ops are variadic here, how does it work in that case ?

In that case, we would just print the standard form with the region.

mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp
1076

Can it be anything else?

1077

Because if there are no operands, it could be smth like

linalg.map outs(%tensor: tensor<?xf32>)  () {
  %0 = arith.constant 0 : index
  linalg.yield %0
}

and we don't want to print the short form for that. Although, it is possible, but I find it confusing. We just want to restrict the short form to "payload" ops that have arguments corresponding to bbArgs of the body and nothing else.

I asked in the thread there, if they can use all these new ops for their use case, but I don't really understand the use case.

khasanovaa marked 8 inline comments as done.

Resolve comments.

mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp
1049

Because I want to have access to OperationName outside of this if clause.
OperationName payloadOpName; would not work because default constructor is deleted.
Operation* payloadOpName would cause dangling pointer.
And unique_ptr owns the object, so works

springerm added inline comments.Dec 21 2022, 5:04 AM
mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp
1091

unused

Resovle comments.

springerm added inline comments.Dec 21 2022, 5:15 AM
mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp
1261–1262

same as above, can be replaced with std::optional

Resolve comments.

pifon2a accepted this revision.Dec 21 2022, 5:35 AM
This revision is now accepted and ready to land.Dec 21 2022, 5:35 AM
pifon2a added inline comments.Dec 21 2022, 5:36 AM
mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp
1028

payloadOp?

springerm accepted this revision.Dec 21 2022, 5:37 AM

small rename

This revision was landed with ongoing or failed builds.Dec 21 2022, 5:39 AM
Closed by commit rGa6d6d40d8bd0: BEGIN_PUBLIC (authored by khasanovaa). · Explain Why
This revision was automatically updated to reflect the committed changes.
hctim added a subscriber: hctim.Dec 21 2022, 9:34 AM

Looks like this test broke the ASan and MSan bots: https://lab.llvm.org/buildbot/#/builders/5/builds/30160

Steps to reproduce can be found at https://github.com/google/sanitizers/wiki/SanitizerBotReproduceBuild. The ASan bot is often easy to reproduce with -DLLVM_ENABLE_SANITIZER=Address, but the MSan bot, as it requires an instrumented libcxx, is often easier just to use the buildbot_fast.sh script that's referenced there.

********************
Testing:  0.. 10.. 20.. 30.. 40.. 50.. 60.. 70.. 80.. 90
FAIL: MLIR :: Dialect/Linalg/one-shot-bufferize.mlir (67223 of 70768)
******************** TEST 'MLIR :: Dialect/Linalg/one-shot-bufferize.mlir' FAILED ********************
Script:
--
: 'RUN: at line 1';   /b/sanitizer-x86_64-linux-fast/build/llvm_build_asan/bin/mlir-opt /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/test/Dialect/Linalg/one-shot-bufferize.mlir -one-shot-bufferize="allow-return-allocs bufferize-function-boundaries" -buffer-loop-hoisting -drop-equivalent-buffer-results -split-input-file | /b/sanitizer-x86_64-linux-fast/build/llvm_build_asan/bin/FileCheck /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/test/Dialect/Linalg/one-shot-bufferize.mlir
: 'RUN: at line 4';   /b/sanitizer-x86_64-linux-fast/build/llvm_build_asan/bin/mlir-opt /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/test/Dialect/Linalg/one-shot-bufferize.mlir -one-shot-bufferize="allow-return-allocs test-analysis-only analysis-fuzzer-seed=23 bufferize-function-boundaries" -split-input-file -o /dev/null
: 'RUN: at line 5';   /b/sanitizer-x86_64-linux-fast/build/llvm_build_asan/bin/mlir-opt /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/test/Dialect/Linalg/one-shot-bufferize.mlir -one-shot-bufferize="allow-return-allocs test-analysis-only analysis-fuzzer-seed=59 bufferize-function-boundaries" -split-input-file -o /dev/null
: 'RUN: at line 6';   /b/sanitizer-x86_64-linux-fast/build/llvm_build_asan/bin/mlir-opt /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/test/Dialect/Linalg/one-shot-bufferize.mlir -one-shot-bufferize="allow-return-allocs test-analysis-only analysis-fuzzer-seed=91 bufferize-function-boundaries" -split-input-file -o /dev/null
: 'RUN: at line 9';   /b/sanitizer-x86_64-linux-fast/build/llvm_build_asan/bin/mlir-opt /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/test/Dialect/Linalg/one-shot-bufferize.mlir -one-shot-bufferize="allow-return-allocs unknown-type-conversion=identity-layout-map function-boundary-type-conversion=identity-layout-map bufferize-function-boundaries" -drop-equivalent-buffer-results -split-input-file | /b/sanitizer-x86_64-linux-fast/build/llvm_build_asan/bin/FileCheck /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/test/Dialect/Linalg/one-shot-bufferize.mlir --check-prefix=CHECK-NO-LAYOUT-MAP
--
Exit Code: 1
Command Output (stderr):
--
=================================================================
==3890072==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7f846e94ecc1 at pc 0x55fb2279e1bd bp 0x7fff9bb62260 sp 0x7fff9bb62258
READ of size 4 at 0x7f846e94ecc1 thread T0
    #0 0x55fb2279e1bc in fetch32 /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/Hashing.h:162:3
    #1 0x55fb2279e1bc in hash_4to8_bytes /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/Hashing.h:207:16
    #2 0x55fb2279e1bc in llvm::hashing::detail::hash_short(char const*, unsigned long, unsigned long) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/Hashing.h:251:12
    #3 0x55fb2736ad3c in getHashValue /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/DenseMap.h:445:12
    #4 0x55fb2736ad3c in bool llvm::DenseMapBase<llvm::SmallDenseMap<llvm::StringRef, llvm::detail::DenseSetEmpty, 4u, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseSetPair<llvm::StringRef>>, llvm::StringRef, llvm::detail::DenseSetEmpty, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseSetPair<llvm::StringRef>>::LookupBucketFor<llvm::StringRef>(llvm::StringRef const&, llvm::detail::DenseSetPair<llvm::StringRef> const*&) const /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/DenseMap.h:626:25
    #5 0x55fb2737375e in LookupBucketFor<llvm::StringRef> /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/DenseMap.h:662:9
    #6 0x55fb2737375e in try_emplace<llvm::detail::DenseSetEmpty &> /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/DenseMap.h:249:9
    #7 0x55fb2737375e in insert /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/DenseSet.h:208:19
    #8 0x55fb2737375e in insert<const llvm::StringRef *> /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/DenseSet.h:232:7
    #9 0x55fb2737375e in DenseSetImpl<const llvm::StringRef *> /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/DenseSet.h:72:5
    #10 0x55fb2737375e in DenseSetImpl /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/DenseSet.h:297:16
    #11 0x55fb2737375e in (anonymous namespace)::DummyAliasOperationPrinter::printOptionalAttrDict(llvm::ArrayRef<mlir::NamedAttribute>, llvm::ArrayRef<llvm::StringRef>) /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/IR/AsmPrinter.cpp:721:36
    #12 0x55fb23bc6291 in printShortForm(mlir::OpAsmPrinter&, mlir::Operation*) /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp:1100:5
    #13 0x55fb23bc694c in mlir::linalg::MapOp::print(mlir::OpAsmPrinter&) /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp:1108:5
    #14 0x55fb23a285d5 in operator() /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/include/mlir/IR/OpDefinition.h:1823:39
    #15 0x55fb23a285d5 in void llvm::detail::UniqueFunctionBase<void, mlir::Operation*, mlir::OpAsmPrinter&, llvm::StringRef>::CallImpl<mlir::Op<mlir::linalg::MapOp, mlir::OpTrait::OneRegion, mlir::OpTrait::VariadicResults, mlir::OpTrait::ZeroSuccessors, mlir::OpTrait::AtLeastNOperands<1u>::Impl, mlir::OpTrait::SingleBlockImplicitTerminator<mlir::linalg::YieldOp>::Impl, mlir::OpTrait::OpInvariants, mlir::MemoryEffectOpInterface::Trait, mlir::DestinationStyleOpInterface::Trait, mlir::linalg::LinalgOp::Trait, mlir::RegionBranchOpInterface::Trait, mlir::ReifyRankedShapedTypeOpInterface::Trait, mlir::OpAsmOpInterface::Trait>::getPrintAssemblyFn()::'lambda'(mlir::Operation*, mlir::OpAsmPrinter&, llvm::StringRef) const>(void*, mlir::Operation*, mlir::OpAsmPrinter&, llvm::StringRef) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/FunctionExtras.h:221:12
    #16 0x55fb27379fa0 in (anonymous namespace)::DummyAliasOperationPrinter::print(mlir::Block*, bool, bool) /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/IR/AsmPrinter.cpp:663:7
    #17 0x55fb2737463c in (anonymous namespace)::DummyAliasOperationPrinter::printRegion(mlir::Region&, bool, bool, bool) /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/IR/AsmPrinter.cpp:674:5
    #18 0x55fb275158cf in mlir::function_interface_impl::printFunctionOp(mlir::OpAsmPrinter&, mlir::FunctionOpInterface, bool, llvm::StringRef, mlir::StringAttr, mlir::StringAttr) /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/IR/FunctionImplementation.cpp:337:7
    #19 0x55fb231e1c09 in mlir::func::FuncOp::print(mlir::OpAsmPrinter&) /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/Dialect/Func/IR/FuncOps.cpp:272:3
    #20 0x55fb231f9225 in operator() /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/include/mlir/IR/OpDefinition.h:1823:39
    #21 0x55fb231f9225 in void llvm::detail::UniqueFunctionBase<void, mlir::Operation*, mlir::OpAsmPrinter&, llvm::StringRef>::CallImpl<mlir::Op<mlir::func::FuncOp, mlir::OpTrait::OneRegion, mlir::OpTrait::ZeroResults, mlir::OpTrait::ZeroSuccessors, mlir::OpTrait::ZeroOperands, mlir::OpTrait::OpInvariants, mlir::OpTrait::AffineScope, mlir::OpTrait::AutomaticAllocationScope, mlir::CallableOpInterface::Trait, mlir::FunctionOpInterface::Trait, mlir::OpTrait::IsIsolatedFromAbove, mlir::OpAsmOpInterface::Trait, mlir::SymbolOpInterface::Trait>::getPrintAssemblyFn()::'lambda'(mlir::Operation*, mlir::OpAsmPrinter&, llvm::StringRef) const>(void*, mlir::Operation*, mlir::OpAsmPrinter&, llvm::StringRef) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/FunctionExtras.h:221:12
    #22 0x55fb27379fa0 in (anonymous namespace)::DummyAliasOperationPrinter::print(mlir::Block*, bool, bool) /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/IR/AsmPrinter.cpp:663:7
    #23 0x55fb2737463c in (anonymous namespace)::DummyAliasOperationPrinter::printRegion(mlir::Region&, bool, bool, bool) /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/IR/AsmPrinter.cpp:674:5
    #24 0x55fb27468075 in mlir::ModuleOp::print(mlir::OpAsmPrinter&) /b/sanitizer-x86_64-linux-fast/build/llvm_build_asan/tools/mlir/include/mlir/IR/BuiltinOps.cpp.inc:280:15
    #25 0x55fb2746c295 in operator() /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/include/mlir/IR/OpDefinition.h:1823:39
    #26 0x55fb2746c295 in void llvm::detail::UniqueFunctionBase<void, mlir::Operation*, mlir::OpAsmPrinter&, llvm::StringRef>::CallImpl<mlir::Op<mlir::ModuleOp, mlir::OpTrait::OneRegion, mlir::OpTrait::ZeroResults, mlir::OpTrait::ZeroSuccessors, mlir::OpTrait::ZeroOperands, mlir::OpTrait::NoRegionArguments, mlir::OpTrait::NoTerminator, mlir::OpTrait::SingleBlock, mlir::OpTrait::OpInvariants, mlir::OpTrait::AffineScope, mlir::OpTrait::IsIsolatedFromAbove, mlir::OpTrait::SymbolTable, mlir::SymbolOpInterface::Trait, mlir::OpAsmOpInterface::Trait, mlir::RegionKindInterface::Trait, mlir::OpTrait::HasOnlyGraphRegion>::getPrintAssemblyFn()::'lambda'(mlir::Operation*, mlir::OpAsmPrinter&, llvm::StringRef) const>(void*, mlir::Operation*, mlir::OpAsmPrinter&, llvm::StringRef) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/FunctionExtras.h:221:12
    #27 0x55fb27363938 in operator() /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/FunctionExtras.h:409:12
    #28 0x55fb27363938 in printAssembly /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/include/mlir/IR/OperationSupport.h:300:12
    #29 0x55fb27363938 in printCustomOrGenericOp /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/IR/AsmPrinter.cpp:608:17
    #30 0x55fb27363938 in initialize /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/IR/AsmPrinter.cpp:991:16
    #31 0x55fb27363938 in initialize /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/IR/AsmPrinter.cpp:1118:15
    #32 0x55fb27363938 in mlir::detail::AsmStateImpl::initializeAliases(mlir::Operation*) /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/IR/AsmPrinter.cpp:1698:16
    #33 0x55fb27360349 in mlir::Operation::print(llvm::raw_ostream&, mlir::AsmState&) /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/IR/AsmPrinter.cpp:3665:21
    #34 0x55fb27187652 in performActions(llvm::raw_ostream&, bool, bool, std::__1::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, bool, bool) /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:102:15
    #35 0x55fb27186576 in processBuffer /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:139:12
    #36 0x55fb27186576 in operator() /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:181:12
    #37 0x55fb27186576 in mlir::LogicalResult llvm::function_ref<mlir::LogicalResult (std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::callback_fn<mlir::MlirOptMain(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool)::$_0>(long, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:12
    #38 0x55fb2730fea5 in operator() /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:12
    #39 0x55fb2730fea5 in mlir::splitAndProcessBuffer(std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, bool, bool)::$_0::operator()(llvm::StringRef) const /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/Support/ToolUtilities.cpp:88:16
    #40 0x55fb2730ec46 in interleave<const llvm::StringRef *, (lambda at /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/Support/ToolUtilities.cpp:81:23), (lambda at /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/STLExtras.h:2084:43), void> /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/STLExtras.h:2066:5
    #41 0x55fb2730ec46 in interleave<llvm::SmallVector<llvm::StringRef, 8U>, (lambda at /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/Support/ToolUtilities.cpp:81:23), llvm::raw_ostream, llvm::StringRef> /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/STLExtras.h:2084:3
    #42 0x55fb2730ec46 in mlir::splitAndProcessBuffer(std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, bool, bool) /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/Support/ToolUtilities.cpp:91:3
    #43 0x55fb27180455 in mlir::MlirOptMain(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool) /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:186:10
    #44 0x55fb2718184f in MlirOptMain /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:209:10
    #45 0x55fb2718184f in mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&, bool) /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:306:14
    #46 0x55fb227222cf in main /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/tools/mlir-opt/mlir-opt.cpp:250:7
    #47 0x7f8470603d8f  (/lib/x86_64-linux-gnu/libc.so.6+0x29d8f) (BuildId: 69389d485a9793dbe873f0ea2c93e02efaa9aa3d)
    #48 0x7f8470603e3f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e3f) (BuildId: 69389d485a9793dbe873f0ea2c93e02efaa9aa3d)
    #49 0x55fb2266b7a4 in _start (/b/sanitizer-x86_64-linux-fast/build/llvm_build_asan/bin/mlir-opt+0x61de7a4)
Address 0x7f846e94ecc1 is located in stack of thread T0 at offset 193 in frame
    #0 0x55fb23bc5a8f in printShortForm(mlir::OpAsmPrinter&, mlir::Operation*) /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp:1090
  This frame has 5 object(s):
    [32, 40) 'ref.tmp.i'
    [64, 128) 'elidedAttrs' (line 1091)
    [160, 168) 'fastAttr' (line 1094)
    [192, 216) 'ref.tmp19' (line 1096) <== Memory access at offset 193 is inside this variable
    [256, 264) 'ref.tmp20' (line 1096)
HINT: this may be a false positive if your program uses some custom stack unwind mechanism, swapcontext or vfork
      (longjmp and C++ exceptions *are* supported)
SUMMARY: AddressSanitizer: stack-use-after-scope /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/Hashing.h:162:3 in fetch32
Shadow bytes around the buggy address:
  0x0ff10dd21d40: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x0ff10dd21d50: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x0ff10dd21d60: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x0ff10dd21d70: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x0ff10dd21d80: f1 f1 f1 f1 f8 f2 f2 f2 00 00 00 00 00 00 00 00
=>0x0ff10dd21d90: f2 f2 f2 f2 f8 f2 f2 f2[f8]f8 f8 f2 f2 f2 f2 f2
  0x0ff10dd21da0: f8 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
  0x0ff10dd21db0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0ff10dd21dc0: f1 f1 f1 f1 f8 f2 f2 f2 00 f2 f2 f2 00 00 00 00
  0x0ff10dd21dd0: 00 00 00 00 00 00 f2 f2 f2 f2 f8 f8 f2 f2 f8 f3
  0x0ff10dd21de0: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==3890072==ABORTING
********************
Testing:  0.. 10.. 20.. 30.. 40.. 50.. 60.. 70.. 80.. 90
FAIL: MLIR :: Dialect/Linalg/roundtrip.mlir (67927 of 70766)
******************** TEST 'MLIR :: Dialect/Linalg/roundtrip.mlir' FAILED ********************
Script:
--
: 'RUN: at line 1';   /b/sanitizer-x86_64-linux-fast/build/llvm_build_msan/bin/mlir-opt /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/test/Dialect/Linalg/roundtrip.mlir | /b/sanitizer-x86_64-linux-fast/build/llvm_build_msan/bin/mlir-opt | /b/sanitizer-x86_64-linux-fast/build/llvm_build_msan/bin/FileCheck /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/test/Dialect/Linalg/roundtrip.mlir
: 'RUN: at line 2';   /b/sanitizer-x86_64-linux-fast/build/llvm_build_msan/bin/mlir-opt /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/test/Dialect/Linalg/roundtrip.mlir --mlir-print-op-generic | /b/sanitizer-x86_64-linux-fast/build/llvm_build_msan/bin/mlir-opt | /b/sanitizer-x86_64-linux-fast/build/llvm_build_msan/bin/FileCheck /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/test/Dialect/Linalg/roundtrip.mlir
--
Exit Code: 1
Command Output (stderr):
--
==1478479==WARNING: MemorySanitizer: use-of-uninitialized-value
    #0 0x5643d04a0118 in llvm::hashing::detail::hash_short(char const*, unsigned long, unsigned long) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/Hashing.h:262:1
    #1 0x5643d049f1cd in std::__1::enable_if<is_hashable_data<char const>::value, llvm::hash_code>::type llvm::hashing::detail::hash_combine_range_impl<char const>(char const*, char const*) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/Hashing.h:460:12
    #2 0x5643d049d562 in hash_combine_range<const char *> /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/Hashing.h:487:10
    #3 0x5643d049d562 in hash_value /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/Support/StringRef.cpp:617:10
    #4 0x5643d049d562 in llvm::DenseMapInfo<llvm::StringRef, void>::getHashValue(llvm::StringRef) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/Support/StringRef.cpp:625:21
    #5 0x5643d465c78a in getHashValue /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/DenseMap.h:445:12
    #6 0x5643d465c78a in bool llvm::DenseMapBase<llvm::SmallDenseMap<llvm::StringRef, llvm::detail::DenseSetEmpty, 4u, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseSetPair<llvm::StringRef>>, llvm::StringRef, llvm::detail::DenseSetEmpty, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseSetPair<llvm::StringRef>>::LookupBucketFor<llvm::StringRef>(llvm::StringRef const&, llvm::detail::DenseSetPair<llvm::StringRef> const*&) const /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/DenseMap.h:626:25
    #7 0x5643d4664642 in LookupBucketFor<llvm::StringRef> /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/DenseMap.h:662:9
    #8 0x5643d4664642 in try_emplace<llvm::detail::DenseSetEmpty &> /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/DenseMap.h:249:9
    #9 0x5643d4664642 in insert /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/DenseSet.h:208:19
    #10 0x5643d4664642 in insert<const llvm::StringRef *> /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/DenseSet.h:232:7
    #11 0x5643d4664642 in DenseSetImpl<const llvm::StringRef *> /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/DenseSet.h:72:5
    #12 0x5643d4664642 in DenseSetImpl /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/DenseSet.h:297:16
    #13 0x5643d4664642 in (anonymous namespace)::DummyAliasOperationPrinter::printOptionalAttrDict(llvm::ArrayRef<mlir::NamedAttribute>, llvm::ArrayRef<llvm::StringRef>) /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/IR/AsmPrinter.cpp:721:36
    #14 0x5643d15c0864 in printShortForm(mlir::OpAsmPrinter&, mlir::Operation*) /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp:1100:5
    #15 0x5643d15c0c67 in mlir::linalg::MapOp::print(mlir::OpAsmPrinter&) /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp:1108:5
    #16 0x5643d1498d1c in operator() /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/include/mlir/IR/OpDefinition.h:1823:39
    #17 0x5643d1498d1c in void llvm::detail::UniqueFunctionBase<void, mlir::Operation*, mlir::OpAsmPrinter&, llvm::StringRef>::CallImpl<mlir::Op<mlir::linalg::MapOp, mlir::OpTrait::OneRegion, mlir::OpTrait::VariadicResults, mlir::OpTrait::ZeroSuccessors, mlir::OpTrait::AtLeastNOperands<1u>::Impl, mlir::OpTrait::SingleBlockImplicitTerminator<mlir::linalg::YieldOp>::Impl, mlir::OpTrait::OpInvariants, mlir::MemoryEffectOpInterface::Trait, mlir::DestinationStyleOpInterface::Trait, mlir::linalg::LinalgOp::Trait, mlir::RegionBranchOpInterface::Trait, mlir::ReifyRankedShapedTypeOpInterface::Trait, mlir::OpAsmOpInterface::Trait>::getPrintAssemblyFn()::'lambda'(mlir::Operation*, mlir::OpAsmPrinter&, llvm::StringRef) const>(void*, mlir::Operation*, mlir::OpAsmPrinter&, llvm::StringRef) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/FunctionExtras.h:221:12
    #18 0x5643d466b350 in (anonymous namespace)::DummyAliasOperationPrinter::print(mlir::Block*, bool, bool) /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/IR/AsmPrinter.cpp:663:7
    #19 0x5643d46654ab in (anonymous namespace)::DummyAliasOperationPrinter::printRegion(mlir::Region&, bool, bool, bool) /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/IR/AsmPrinter.cpp:674:5
    #20 0x5643d47eda14 in mlir::function_interface_impl::printFunctionOp(mlir::OpAsmPrinter&, mlir::FunctionOpInterface, bool, llvm::StringRef, mlir::StringAttr, mlir::StringAttr) /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/IR/FunctionImplementation.cpp:337:7
    #21 0x5643d0d6d387 in mlir::func::FuncOp::print(mlir::OpAsmPrinter&) /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/lib/Dialect/Func/IR/FuncOps.cpp:272:3
    #22 0x5643d0d8230c in operator() /b/sanitizer-x86_64-linux-fast/build/llvm-project/mlir/include/mlir/IR/OpDefinition.h:1823:39
    #23 0x5643d0d8230c in void llvm::detail::UniqueFunctionBase<void, mlir::Operation*, mlir::OpAsmPrinter&, llvm::StringRef>::CallImpl<mlir::Op<mlir::func::FuncOp, mlir::OpTrait::OneRegion, mlir::OpTrait::ZeroResults, mlir::OpTrait::ZeroSuccessors, mlir::OpTrait::ZeroOperands, mlir::OpTrait::OpInvariants, mlir::OpTrait::AffineScope, mlir::OpTrait::AutomaticAllocationScope, mlir::CallableOpInterface::Trait, mlir::FunctionOpInterface::Trait, mlir::OpTrait::IsIsolatedFromAbove, mlir::OpAsmOpInterface::Trait, mlir::SymbolOpInterface::Trait>::getPrintAssemblyFn()::'lambda'(mlir::Operation*, mlir::OpAsmPrinter&, llvm::StringRef) const>(void*, mlir::Operation*, mlir::OpAsmPrinter&, llvm::StringRef) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/include/llvm/ADT/FunctionExtras.h:221:12