This is an archive of the discontinued LLVM Phabricator instance.

[GlobalISel][AArch64] Allow CallLowering to handle types
ClosedPublic

Authored by aemerson on Apr 8 2019, 3:49 PM.

Details

Summary

Allow CallLowering to handle types which are normally required to be passed as different register types. E.g. <2 x i16> may need to be passed as a larger <2 x i32> type, so formal arg lowering needs to be able truncate it back. Likewise, when dealing with returns of these types, they need to be widened in the appropriate way back

Diff Detail

Repository
rL LLVM

Event Timeline

aemerson created this revision.Apr 8 2019, 3:49 PM
aemerson updated this revision to Diff 194215.Apr 8 2019, 3:54 PM

Forgot to stage an additional change.

paquette accepted this revision.Apr 9 2019, 9:53 AM

LGTM, some debug output would be nice to show what it is that we intend to implement

llvm/lib/CodeGen/GlobalISel/CallLowering.cpp
161 ↗(On Diff #194215)

Are we going to handle this? Debug output if so?

llvm/lib/Target/AArch64/AArch64CallLowering.cpp
259 ↗(On Diff #194215)

Some debug output here would be nice?

This revision is now accepted and ready to land.Apr 9 2019, 9:53 AM
aemerson marked an inline comment as done.Apr 9 2019, 10:03 AM
aemerson added inline comments.
llvm/lib/CodeGen/GlobalISel/CallLowering.cpp
161 ↗(On Diff #194215)

I don't have a test case yet, this was meant to just enable the vector icmp work. I'll add some debug here and the return handling too.

This revision was automatically updated to reflect the committed changes.
phosek added a subscriber: phosek.May 3 2019, 4:41 PM

We're seeing a failing assertion when building Skia for AArch64 which seems to have been introduced by this change, see PR41738 for more details.

We're seeing a failing assertion when building Skia for AArch64 which seems to have been introduced by this change, see PR41738 for more details.

Should be fixed in r360068.