This is an archive of the discontinued LLVM Phabricator instance.

[AArch64][GlobalISel] Share address mode selection code for memops
ClosedPublic

Authored by paquette on Sep 9 2020, 10:13 AM.

Details

Summary

We were missing support for the G_ADD_LOW + ADRP folding optimization in the manual selection code for G_LOAD, G_STORE, and G_ZEXTLOAD.

As a result, we were missing cases like this, where we don't import a pattern (or no pattern exists)

@foo = external hidden global i32*
define void @baz(i32* %0) {
store i32* %0, i32** @foo
ret void
}

https://godbolt.org/z/16r7ad

This functionality already existed in the addressing mode functions for the importer. So, this patch makes the manual selection code use selectAddrModeIndexed rather than duplicating work.

This is a 0.2% geomean code size improvement for CTMark at -O3.

There is one code size increase (0.1% on lencod) which is likely because selectAddrModeIndexed doesn't look through constants right now.

Diff Detail

Event Timeline

paquette created this revision.Sep 9 2020, 10:13 AM
paquette requested review of this revision.Sep 9 2020, 10:13 AM
aemerson accepted this revision.Sep 9 2020, 2:54 PM

Nice clean up, LGTM.

This revision is now accepted and ready to land.Sep 9 2020, 2:54 PM