Page MenuHomePhabricator

[GlobalISel] Accept multiple vregs for lowerCall's result
ClosedPublic

Authored by rovka on Jun 19 2019, 6:57 AM.

Details

Summary

Change the interface of CallLowering::lowerCall to accept several
virtual registers for the call result, instead of just one. This is a
follow-up to D46018.

CallLowering::lowerReturn was similarly refactored in D49660 and
lowerFormalArguments in D63549.

With this change, we no longer pack the virtual registers generated for
aggregates into one big lump before delegating to the target. Therefore,
the target can decide itself whether it wants to handle them as separate
pieces or use one big register.

ARM and AArch64 have been updated to use the passed in virtual registers
directly, which means we no longer need to generate so many
merge/extract instructions.

NFCI for AMDGPU, Mips and X86.

Diff Detail

Repository
rL LLVM

Event Timeline

rovka created this revision.Jun 19 2019, 6:57 AM
rovka updated this revision to Diff 205759.Jun 20 2019, 2:34 AM

More context.

This revision is now accepted and ready to land.Jun 20 2019, 11:36 AM
This revision was automatically updated to reflect the committed changes.