This is an archive of the discontinued LLVM Phabricator instance.

[AArch64][FastISel] Handle call with multiple return regs
ClosedPublic

Authored by aengelke on Apr 14 2023, 7:58 AM.

Details

Summary

The code closely follows the X86 back-end. Applications that make heavy
use of {i64, i64} returns to use two registers strongly benefit from the
reduced number of SelectionDAG fallbacks.

Diff Detail

Event Timeline

aengelke created this revision.Apr 14 2023, 7:58 AM
Herald added a project: Restricted Project. · View Herald TranscriptApr 14 2023, 7:58 AM
aengelke requested review of this revision.Apr 14 2023, 7:58 AM
Herald added a project: Restricted Project. · View Herald TranscriptApr 14 2023, 7:58 AM

Can you verify this bails out correctly for a function that returns {i64, i64, i64, i64, i64, i64, i64, i64, i64, i64}?

llvm/test/CodeGen/AArch64/fast-isel-call-struct-return.ll
8

I don't usually like CHECK-NOT checks... is there some other way you could verify this? (Maybe use "-stats" output?)

aengelke updated this revision to Diff 517168.Apr 26 2023, 7:33 AM

Add test case for sret fallback and replace CHECK-NOT with -fast-isel-abort=3

aengelke updated this revision to Diff 517188.Apr 26 2023, 8:25 AM
aengelke marked an inline comment as done.

(no change, re-trigger CI)

This revision is now accepted and ready to land.Apr 26 2023, 10:19 AM