forked from OSchip/llvm-project
81467f500f
This adds the ability to specify a location when creating BlockArguments. Notably Value::getLoc() will return this correctly, which makes diagnostics more precise (e.g. the example in test-legalize-type-conversion.mlir). This is currently optional to avoid breaking any existing code - if absent, the BlockArgument defaults to using the location of its enclosing operation (preserving existing behavior). The bulk of this change is plumbing location tracking through the parser and printer to make sure it can round trip (in -mlir-print-debuginfo mode). This is complete for generic operations, but requires manual adoption for custom ops. I added support for function-like ops to round trip their argument locations - they print correctly, but when parsing the locations are dropped on the floor. I intend to fix this, but it will require more invasive plumbing through "function_like_impl" stuff so I think it best to split it out to its own patch. This is a reapply of the patch here: https://reviews.llvm.org/D102567 with an additional change: we now never defer block argument locations, guaranteeing that we can round trip correctly. This isn't required in all cases, but allows us to hill climb here and works around unrelated bugs like https://bugs.llvm.org/show_bug.cgi?id=50451 Differential Revision: https://reviews.llvm.org/D102991 |
||
---|---|---|
.. | ||
attrdefs.td | ||
dialect.td | ||
directive-common.td | ||
expect-symbol.td | ||
interfaces.mlir | ||
llvm-intrinsics.td | ||
op-attribute.td | ||
op-decl-and-defs.td | ||
op-derived-attribute.mlir | ||
op-error.td | ||
op-format-spec.td | ||
op-format.mlir | ||
op-interface.td | ||
op-operand.td | ||
op-python-bindings.td | ||
op-result.td | ||
op-side-effects.td | ||
pattern.mlir | ||
predicate.td | ||
return-types.mlir | ||
rewriter-errors.td | ||
rewriter-indexing.td | ||
testdialect-attrdefs.mlir | ||
testdialect-typedefs.mlir | ||
trait.mlir | ||
typedefs.td | ||
types.mlir |