llvm-project/llvm
Bill Schmidt 48081cad0d This patch addresses PR13949.
For the PowerPC 64-bit ELF Linux ABI, aggregates of size less than 8
bytes are to be passed in the low-order bits ("right-adjusted") of the
doubleword register or memory slot assigned to them.  A previous patch
addressed this for aggregates passed in registers.  However, small
aggregates passed in the overflow portion of the parameter save area are
still being passed left-adjusted.

The fix is made in PPCTargetLowering::LowerCall_Darwin_Or_64SVR4 on the
caller side, and in PPCTargetLowering::LowerFormalArguments_64SVR4 on
the callee side.  The main fix on the callee side simply extends
existing logic for 1- and 2-byte objects to 1- through 7-byte objects,
and correcting a constant left over from 32-bit code.  There is also a
fix to a bogus calculation of the offset to the following argument in
the parameter save area.

On the caller side, again a constant left over from 32-bit code is
fixed.  Additionally, some code for 1, 2, and 4-byte objects is
duplicated to handle the 3, 5, 6, and 7-byte objects for SVR4 only.  The
LowerCall_Darwin_Or_64SVR4 logic is getting fairly convoluted trying to
handle both ABIs, and I propose to separate this into two functions in a
future patch, at which time the duplication can be removed.

The patch adds a new test (structsinmem.ll) to demonstrate correct
passing of structures of all seven sizes.  Eight dummy parameters are
used to force these structures to be in the overflow portion of the
parameter save area.

As a side effect, this corrects the case when aggregates passed in
registers are saved into the first eight doublewords of the parameter
save area:  Previously they were stored left-justified, and now are
properly stored right-justified.  This requires changing the expected
output of existing test case structsinregs.ll.

llvm-svn: 166022
2012-10-16 13:30:53 +00:00
..
autoconf Re-enable support for --program-prefix. 2012-10-01 18:40:32 +00:00
bindings Fix the ocaml binding breakage from TargetData -> DataLayout changes. 2012-10-08 17:06:25 +00:00
cmake [CMake] add_lit_testsuite: EXCLUDE_FROM_ALL excludes the test ${target} out of check-all. 2012-10-10 13:32:55 +00:00
docs Fix a typo in bitcode docs, from 165814. 2012-10-15 16:47:58 +00:00
examples ExceptionDemo.cpp: Use Function::setDoesNotReturn(). Attributes stuff was updated. 2012-10-12 14:11:48 +00:00
include Issue: 2012-10-16 07:16:47 +00:00
lib This patch addresses PR13949. 2012-10-16 13:30:53 +00:00
projects Re-enable support for --program-prefix. 2012-10-01 18:40:32 +00:00
runtime Place temporary LTO files into their own subdirectory. 2012-10-10 05:29:15 +00:00
test This patch addresses PR13949. 2012-10-16 13:30:53 +00:00
tools LTO also needs to initialize the TargetTransform infrastructure. 2012-10-15 22:50:02 +00:00
unittests Fix a bug in the set(I,E)/reset(I,E) methods that I recently added. The boundary condition for checking if I and E were in the same word were incorrect, and, beyond that, the mask computation was not using a wide enough constant. 2012-10-16 06:04:27 +00:00
utils Add an enum for the return and function indexes into the AttrListPtr object. This gets rid of some magic numbers. 2012-10-15 07:29:08 +00:00
.gitignore Add extra vim swap file pattern 2012-10-09 23:48:34 +00:00
CMakeLists.txt Removing dependency on third party library for Intel JIT event support. 2012-09-28 17:35:20 +00:00
CODE_OWNERS.TXT Add the list of code owners to the top level of the LLVM source tree to 2012-07-26 08:04:09 +00:00
CREDITS.TXT Move TargetData to DataLayout. 2012-10-08 16:40:38 +00:00
LICENSE.TXT Add YAML parser to Support. 2012-04-03 23:09:22 +00:00
LLVMBuild.txt
Makefile Remove dead variable. 2012-10-10 18:20:49 +00:00
Makefile.common [docs] Remove unsupported references to ExtraSource variable. 2012-05-15 21:32:27 +00:00
Makefile.config.in Re-enable support for --program-prefix. 2012-10-01 18:40:32 +00:00
Makefile.rules Use MACOSX_DEPLOYMENT_TARGET when it is set. <rdar://problem/12433905> 2012-10-12 21:48:14 +00:00
README.txt test commit 2012-07-11 17:34:12 +00:00
configure Re-enable support for --program-prefix. 2012-10-01 18:40:32 +00:00
llvm.spec.in

README.txt

Low Level Virtual Machine (LLVM)
================================

This directory and its subdirectories contain source code for the Low Level
Virtual Machine, a toolkit for the construction of highly optimized compilers,
optimizers, and runtime environments.

LLVM is open source software. You may freely distribute it under the terms of
the license agreement found in LICENSE.txt.

Please see the HTML documentation provided in docs/index.html for further
assistance with LLVM.

If you're writing a package for LLVM, see docs/Packaging.html for our
suggestions.