This is an archive of the discontinued LLVM Phabricator instance.

[IR] Add a Location to BlockArgument
ClosedPublic

Authored by lattner on May 23 2021, 2:08 PM.

Details

Summary

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

Diff Detail

Event Timeline

lattner created this revision.May 23 2021, 2:08 PM
lattner requested review of this revision.May 23 2021, 2:08 PM
lattner accepted this revision.May 23 2021, 2:09 PM

Self approving since this is effectively the same as the patch applied in 3043be9d2db4d0cdf079adb5e1bdff032405e941

This revision is now accepted and ready to land.May 23 2021, 2:09 PM
This revision was landed with ongoing or failed builds.May 23 2021, 2:10 PM
This revision was automatically updated to reflect the committed changes.