]> granicus.if.org Git - llvm/commit
PowerPC/SPE: Fix load/store handling for SPE
authorJustin Hibbits <jrh29@alumni.cwru.edu>
Wed, 17 Jul 2019 12:30:04 +0000 (12:30 +0000)
committerJustin Hibbits <jrh29@alumni.cwru.edu>
Wed, 17 Jul 2019 12:30:04 +0000 (12:30 +0000)
commit46ff7007477a327809ca1172eee18ab5124f930f
tree4c54da8e2f477c603101c37a06062150484831d8
parenta3dad916d65e957c0df99cf2235aafb663cf956c
PowerPC/SPE: Fix load/store handling for SPE

Summary:
Pointed out in a comment for D49754, register spilling will currently
spill SPE registers at almost any offset.  However, the instructions
`evstdd` and `evldd` require a) 8-byte alignment, and b) a limit of 256
(unsigned) bytes from the base register, as the offset must fix into a
5-bit offset, which ranges from 0-31 (indexed in double-words).

The update to the register spill test is taken partially from the test
case shown in D49754.

Additionally, pointed out by Kei Thomsen, globals will currently use
evldd/evstdd, though the offset isn't known at compile time, so may
exceed the 8-bit (unsigned) offset permitted.  This fixes that as well,
by forcing it to always use evlddx/evstddx when accessing globals.

Part of the patch contributed by Kei Thomsen.

Reviewers: nemanjai, hfinkel, joerg

Subscribers: kbarton, jsji, llvm-commits

Differential Revision: https://reviews.llvm.org/D54409

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@366318 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/PowerPC/PPCISelLowering.cpp
lib/Target/PowerPC/PPCISelLowering.h
lib/Target/PowerPC/PPCRegisterInfo.cpp
test/CodeGen/PowerPC/spe.ll