This is an archive of the discontinued LLVM Phabricator instance.

[BasicAA] Deoptimize intrinsics don't modify memory
ClosedPublic

Authored by apilipenko on Nov 17 2020, 1:35 PM.

Details

Summary

Similarly to assumes and guards deoptimize intrinsics are marked as writing to ensure proper control dependencies but they never modify any particular memory location.

In most cases aliasing of deoptimize calls doesn't matter because these calls never return to the compiled code. One case were it does matter is transformations of the deopt operand bundle attached to the deoptimize. According to the lang ref "operand bundles represent an alternate “safe” continuation for the call site they’re attached to". Semantically the deopt bundle values are used after the call. (This is true for any call with deopt operand bundle, not only deoptimize calls). When we rewrite the deopt bundle values we need to take the effects of the call into account.

Diff Detail

Event Timeline

apilipenko created this revision.Nov 17 2020, 1:35 PM
Herald added a project: Restricted Project. · View Herald TranscriptNov 17 2020, 1:35 PM
Herald added a subscriber: hiraditya. · View Herald Transcript
apilipenko requested review of this revision.Nov 17 2020, 1:35 PM
yrouban accepted this revision.Nov 19 2020, 5:54 AM
This revision is now accepted and ready to land.Nov 19 2020, 5:54 AM
This revision was automatically updated to reflect the committed changes.