This is an archive of the discontinued LLVM Phabricator instance.

Reapply: [flang] use greedy mlir driver for stack arrays pass
ClosedPublic

Authored by tblah on May 30 2023, 8:53 AM.

Details

Summary

In upstream mlir, the dialect conversion infrastructure is used for
lowering from one dialect to another: the passes are of the form
XToYPass. Whereas, transformations within the same dialect tend to use
applyPatternsAndFoldGreedily.

In this case, the full complexity of applyPatternsAndFoldGreedily isn't
needed so we can get away with the simpler applyOpPatternsAndFold.

This change was suggested by @jeanPerier

The old differential revision for this patch was
https://reviews.llvm.org/D150853

Re-applying here fixing the issue which led to the patch being reverted. The
issue was from erasing uses of the allocation operation while still iterating
over those uses (leading to a use-after-free). I have added a regression
test which catches this bug for -fsanitize=address builds, but it is
hard to reliably cause a crash from the use-after-free in normal builds.

Diff Detail

Event Timeline

tblah created this revision.May 30 2023, 8:53 AM
Herald added projects: Restricted Project, Restricted Project. · View Herald TranscriptMay 30 2023, 8:53 AM
tblah requested review of this revision.May 30 2023, 8:53 AM
tblah retitled this revision from [flang] use greedy mlir driver for stack arrays pass to Reapply: [flang] use greedy mlir driver for stack arrays pass.May 30 2023, 8:53 AM
vzakhari accepted this revision.May 30 2023, 12:01 PM

LGTM. Thank you!

This revision is now accepted and ready to land.May 30 2023, 12:01 PM
This revision was automatically updated to reflect the committed changes.