llvm-6502/test/CodeGen/PowerPC
Bill Schmidt 37900c5dcb This patch addresses a PPC64 ELF issue with passing parameters consisting of
structs having size 3, 5, 6, or 7.  Such a struct must be passed and received
as right-justified within its register or memory slot.  The problem is only
present for structs that are passed in registers.

Previously, as part of a patch handling all structs of size less than 8, I
added logic to rotate the incoming register so that the struct was left-
justified prior to storing the whole register.  This was incorrect because
the address of the parameter had already been adjusted earlier to point to
the right-adjusted value in the storage slot.  Essentially I had accidentally
accounted for the right-adjustment twice.

In this patch, I removed the incorrect logic and reorganized the code to make
the flow clearer.

The removal of the rotates changes the expected code generation, so test case
structsinregs.ll has been modified to reflect this.  I also added a new test
case, jaggedstructs.ll, to demonstrate that structs of these sizes can now
be properly received and passed.

I've built and tested the code on powerpc64-unknown-linux-gnu with no new
regressions.  I also ran the GCC compatibility test suite and verified that
earlier problems with these structs are now resolved, with no new regressions.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166680 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-25 13:38:09 +00:00
..
2004-11-29-ShrCrash.ll
2004-11-30-shift-crash.ll
2004-11-30-shr-var-crash.ll
2004-12-12-ZeroSizeCommon.ll
2005-01-14-SetSelectCrash.ll
2005-01-14-UndefLong.ll
2005-08-12-rlwimi-crash.ll
2005-09-02-LegalizeDuplicatesCalls.ll Convert all tests using TCL-style quoting to use shell-style quoting. 2012-07-02 12:47:22 +00:00
2005-10-08-ArithmeticRotate.ll
2005-11-30-vastart-crash.ll
2006-01-11-darwin-fp-argument.ll Fix the remaining TCL-style quotes found in the testsuite. This is 2012-07-02 19:09:46 +00:00
2006-01-20-ShiftPartsCrash.ll
2006-04-01-FloatDoubleExtend.ll
2006-04-05-splat-ish.ll Convert all tests using TCL-style quoting to use shell-style quoting. 2012-07-02 12:47:22 +00:00
2006-04-19-vmaddfp-crash.ll
2006-05-12-rlwimi-crash.ll
2006-07-07-ComputeMaskedBits.ll
2006-07-19-stwbrx-crash.ll
2006-08-11-RetVector.ll
2006-08-15-SelectionCrash.ll
2006-09-28-shift_64.ll
2006-10-13-Miscompile.ll
2006-10-17-brcc-miscompile.ll
2006-10-17-ppc64-alloca.ll
2006-11-10-DAGCombineMiscompile.ll
2006-11-29-AltivecFPSplat.ll
2006-12-07-LargeAlloca.ll
2006-12-07-SelectCrash.ll
2007-01-04-ArgExtension.ll
2007-01-15-AsmDialect.ll
2007-01-29-lbrx-asm.ll
2007-01-31-InlineAsmAddrMode.ll
2007-02-16-AlignPacked.ll
2007-02-16-InlineAsmNConstraint.ll
2007-02-23-lr-saved-twice.ll
2007-03-24-cntlzd.ll Manually upgrade the test suite to specify the flag to cttz and ctlz. 2011-12-12 11:59:10 +00:00
2007-03-30-SpillerCrash.ll
2007-04-24-InlineAsm-I-Modifier.ll Convert all tests using TCL-style quoting to use shell-style quoting. 2012-07-02 12:47:22 +00:00
2007-04-30-InlineAsmEarlyClobber.ll Don't run RAFast in the optimizing regalloc pipeline. 2012-06-08 23:15:12 +00:00
2007-05-03-InlineAsm-S-Constraint.ll
2007-05-14-InlineAsmSelectCrash.ll
2007-05-22-tailmerge-3.ll Enable tail merging on PPC. 2012-06-09 03:14:50 +00:00
2007-05-30-dagcombine-miscomp.ll Convert all tests using TCL-style quoting to use shell-style quoting. 2012-07-02 12:47:22 +00:00
2007-06-28-BCCISelBug.ll
2007-08-04-CoalescerAssert.ll
2007-09-04-AltivecDST.ll
2007-09-07-LoadStoreIdxForms.ll
2007-09-08-unaligned.ll
2007-09-11-RegCoalescerAssert.ll
2007-09-12-LiveIntervalsAssert.ll
2007-10-16-InlineAsmFrameOffset.ll
2007-10-18-PtrArithmetic.ll
2007-10-21-LocalRegAllocAssert2.ll Don't run RAFast in the optimizing regalloc pipeline. 2012-06-08 23:15:12 +00:00
2007-10-21-LocalRegAllocAssert.ll Don't run RAFast in the optimizing regalloc pipeline. 2012-06-08 23:15:12 +00:00
2007-11-04-CoalescerCrash.ll
2007-11-16-landingpad-split.ll
2007-11-19-VectorSplitting.ll
2008-02-05-LiveIntervalsAssert.ll
2008-02-09-LocalRegAllocAssert.ll Don't run RAFast in the optimizing regalloc pipeline. 2012-06-08 23:15:12 +00:00
2008-03-05-RegScavengerAssert.ll enable PPC register scavenging by default (update tests and remove some FIXMEs) 2011-12-05 17:55:17 +00:00
2008-03-17-RegScavengerCrash.ll enable PPC register scavenging by default (update tests and remove some FIXMEs) 2011-12-05 17:55:17 +00:00
2008-03-18-RegScavengerAssert.ll enable PPC register scavenging by default (update tests and remove some FIXMEs) 2011-12-05 17:55:17 +00:00
2008-03-24-AddressRegImm.ll
2008-03-24-CoalescerBug.ll
2008-03-26-CoalescerBug.ll
2008-04-10-LiveIntervalCrash.ll
2008-04-16-CoalescerBug.ll
2008-04-23-CoalescerCrash.ll Upgrade syntax of tests using volatile instructions to use 'load volatile' instead of 'volatile load', which is archaic. 2011-11-27 06:54:59 +00:00
2008-05-01-ppc_fp128.ll
2008-06-19-LegalizerCrash.ll
2008-06-21-F128LoadStore.ll
2008-06-23-LiveVariablesCrash.ll
2008-07-10-SplatMiscompile.ll
2008-07-15-Bswap.ll
2008-07-15-Fabs.ll
2008-07-15-SignExtendInreg.ll
2008-07-17-Fneg.ll
2008-07-24-PPC64-CCBug.ll
2008-09-12-CoalescerBug.ll
2008-10-17-AsmMatchingOperands.ll test/CodeGen/PowerPC/2008-10-17-AsmMatchingOperands.ll: [PR11218] Mark "REQUIRES: asserts" for now. 2011-10-28 23:11:03 +00:00
2008-10-28-f128-i32.ll
2008-10-28-UnprocessedNode.ll
2008-10-31-PPCF128Libcalls.ll
2008-12-02-LegalizeTypeAssert.ll
2008-12-12-EH.ll
2009-01-16-DeclareISelBug.ll
2009-03-17-LSRBug.ll
2009-05-28-LegalizeBRCC.ll
2009-07-16-InlineAsm-M-Operand.ll
2009-08-17-inline-asm-addr-mode-breakage.ll Enable ILP scheduling for all nodes by default on PPC. 2012-06-10 19:32:29 +00:00
2009-08-23-linkerprivate.ll
2009-09-18-carrybit.ll
2009-11-15-ProcImpDefsBug.ll
2009-11-25-ImpDefBug.ll
2010-02-04-EmptyGlobal.ll
2010-02-12-saveCR.ll Cleanup stack/frame register define/kill states. This fixes two bugs: 2011-12-30 00:34:00 +00:00
2010-03-09-indirect-call.ll Allow overlaps between virtreg and physreg live ranges. 2012-09-06 18:15:23 +00:00
2010-04-01-MachineCSEBug.ll
2010-04-07-DbgValueOtherTargets.ll
2010-05-03-retaddr1.ll
2010-10-11-Fast-Varargs.ll
2010-12-18-PPCStackRefs.ll
2011-12-05-NoSpillDupCR.ll Enable ILP scheduling for all nodes by default on PPC. 2012-06-10 19:32:29 +00:00
2011-12-06-SpillAndRestoreCR.ll add a test case that uses RESTORE_CR 2011-12-06 20:55:41 +00:00
2011-12-08-DemandedBitsMiscompile.ll Fix a couple of logic bugs in TargetLowering::SimplifyDemandedBits. PR11514. 2011-12-09 01:16:26 +00:00
2012-09-16-TOC-entry-check.ll Avoid symbol name clash when filling TOC. 2012-09-18 17:10:37 +00:00
2012-10-12-bitcast.ll llvm/test/CodeGen/PowerPC/2012-10-12-bitcast.ll: Try to fix failure on non-ppc hosts, to add -mattr=+altivec. 2012-10-12 16:01:08 +00:00
a2-fp-basic.ll Rename fp-op fusion option (yet again) for compatibility with GCC option. 2012-06-22 22:31:00 +00:00
addc.ll
addi-reassoc.ll
align.ll
and_add.ll
and_sext.ll
and_sra.ll
and-branch.ll
and-elim.ll
and-imm.ll Convert all tests using TCL-style quoting to use shell-style quoting. 2012-07-02 12:47:22 +00:00
atomic-1.ll
atomic-2.ll
Atomics-32.ll
Atomics-64.ll
available-externally.ll
big-endian-actual-args.ll Convert all tests using TCL-style quoting to use shell-style quoting. 2012-07-02 12:47:22 +00:00
big-endian-call-result.ll Convert all tests using TCL-style quoting to use shell-style quoting. 2012-07-02 12:47:22 +00:00
big-endian-formal-args.ll Allow remat of LI on PPC. 2012-08-28 02:10:33 +00:00
branch-opt.ll Convert all tests using TCL-style quoting to use shell-style quoting. 2012-07-02 12:47:22 +00:00
bswap-load-store.ll
buildvec_canonicalize.ll
calls.ll Convert all tests using TCL-style quoting to use shell-style quoting. 2012-07-02 12:47:22 +00:00
can-lower-ret.ll Test case for CanLowerReturn fix (r141981) 2011-10-17 04:03:59 +00:00
cmp-cmp.ll
coalesce-ext.ll Add a triple. 2012-06-19 21:46:25 +00:00
compare-duplicate.ll
compare-simm.ll Convert all tests using TCL-style quoting to use shell-style quoting. 2012-07-02 12:47:22 +00:00
constants.ll Convert all tests using TCL-style quoting to use shell-style quoting. 2012-07-02 12:47:22 +00:00
cr1eq-no-extra-moves.ll Eliminate redundant CR moves on PPC32. 2012-08-28 02:10:27 +00:00
cr1eq.ll
cr_spilling.ll
crsave.ll This patch corrects logic in PPCFrameLowering for save and restore of 2012-09-12 14:47:47 +00:00
ctrloop-reg.ll Enable PPC CTR loop formation by default. 2012-06-08 19:19:53 +00:00
ctrloop-s000.ll Cleanup trip-count finding for PPC CTR loops (and some bug fixes). 2012-06-16 20:34:07 +00:00
ctrloop-sums.ll Cleanup trip-count finding for PPC CTR loops (and some bug fixes). 2012-06-16 20:34:07 +00:00
ctrloops.ll Improve ext/trunc patterns on PPC64. 2012-06-09 22:10:19 +00:00
cttz.ll Manually upgrade the test suite to specify the flag to cttz and ctlz. 2011-12-12 11:59:10 +00:00
darwin-labels.ll Convert all tests using TCL-style quoting to use shell-style quoting. 2012-07-02 12:47:22 +00:00
dbg.ll AggressiveAntiDepBreaker needs to skip debug values because a debug value does not have a corresponding SUnit 2012-01-16 22:53:41 +00:00
delete-node.ll
div-2.ll
empty-functions.ll
eqv-andc-orc-nor.ll
extsh.ll
fabs.ll Refactor and check "onlyReadsMemory" before optimizing builtins. 2012-08-03 23:29:17 +00:00
floatPSA.ll This patch addresses PR13947. 2012-10-11 15:38:20 +00:00
fma.ll Convert all tests using TCL-style quoting to use shell-style quoting. 2012-07-02 12:47:22 +00:00
fnabs.ll Refactor and check "onlyReadsMemory" before optimizing builtins. 2012-08-03 23:29:17 +00:00
fneg.ll
fold-li.ll
fp_to_uint.ll
fp-branch.ll
fp-int-fp.ll
fpcopy.ll
Frames-alloca.ll enable PPC register scavenging by default (update tests and remove some FIXMEs) 2011-12-05 17:55:17 +00:00
Frames-large.ll Cleanup stack/frame register define/kill states. This fixes two bugs: 2011-12-30 00:34:00 +00:00
Frames-leaf.ll Convert all tests using TCL-style quoting to use shell-style quoting. 2012-07-02 12:47:22 +00:00
Frames-small.ll Convert all tests using TCL-style quoting to use shell-style quoting. 2012-07-02 12:47:22 +00:00
frounds.ll
fsl-e500mc.ll Add PPC Freescale e500mc and e5500 subtargets. 2012-08-28 16:12:39 +00:00
fsl-e5500.ll Add PPC Freescale e500mc and e5500 subtargets. 2012-08-28 16:12:39 +00:00
fsqrt.ll Convert all tests using TCL-style quoting to use shell-style quoting. 2012-07-02 12:47:22 +00:00
hello.ll
hidden-vis-2.ll
hidden-vis.ll
i64_fp_round.ll This patch fixes failures in the SingleSource/Regression/C/uint64_to_float 2012-10-18 13:16:11 +00:00
i64_fp.ll
i128-and-beyond.ll
iabs.ll Convert the uses of '|&' to use '2>&1 |' instead, which works on old 2012-07-02 18:37:59 +00:00
illegal-element-type.ll
indirectbr.ll adjust the instruction ordering in some PPC tests: changes due to postRA haz. rec. 2011-12-02 04:58:12 +00:00
inlineasm-copy.ll Move tie checks into MachineVerifier::visitMachineOperand. 2012-09-04 18:38:28 +00:00
int-fp-conv-0.ll
int-fp-conv-1.ll
inverted-bool-compares.ll
isel.ll Add support for the PPC isel instruction. 2012-06-22 23:10:08 +00:00
ispositive.ll Convert all tests using TCL-style quoting to use shell-style quoting. 2012-07-02 12:47:22 +00:00
itofp128.ll
jaggedstructs.ll This patch addresses a PPC64 ELF issue with passing parameters consisting of 2012-10-25 13:38:09 +00:00
LargeAbsoluteAddr.ll Convert all tests using TCL-style quoting to use shell-style quoting. 2012-07-02 12:47:22 +00:00
lbzux.ll During the CodeGenPrepare we often lower intrinsics (such as objsize) 2012-08-14 05:19:07 +00:00
lha.ll
lit.local.cfg Continue cleanup of LIT, getting rid of the remaining artifacts from dejagnu 2012-03-25 09:02:19 +00:00
load-constant-addr.ll
long-compare.ll Fix the remaining TCL-style quotes found in the testsuite. This is 2012-07-02 19:09:46 +00:00
longdbl-truncate.ll
lsr-postinc-pos.ll Convert the uses of '|&' to use '2>&1 |' instead, which works on old 2012-07-02 18:37:59 +00:00
mask64.ll
mem_update.ll Enable generating PPC pre-increment (r+imm) instructions by default. 2012-06-04 02:21:00 +00:00
mem-rr-addr-mode.ll
mul-neg-power-2.ll
mul-with-overflow.ll
mulhs.ll
mult-alt-generic-powerpc64.ll
mult-alt-generic-powerpc.ll
neg.ll
no-dead-strip.ll Convert all tests using TCL-style quoting to use shell-style quoting. 2012-07-02 12:47:22 +00:00
novrsave.ll The PowerPC VRSAVE register has been somewhat of an odd beast since 2012-10-10 20:54:15 +00:00
or-addressing-mode.ll
ppc64-32bit-addic.ll
ppc64-calls.ll Add test for r164155 and remove two tests superseded by ppc64-calls.ll. 2012-09-18 19:51:44 +00:00
ppc64-crash.ll
ppc64-cyclecounter.ll MFTB on PPC64 should really be encoded using MFSPR. 2012-08-06 21:21:44 +00:00
ppc64-linux-func-size.ll On PPC64 emit the environment pointer. Patch by Adhemerval Zanella. 2012-09-18 16:55:29 +00:00
ppc64-prefetch.ll Enable prefetch generation on PPC64. 2012-04-01 20:08:17 +00:00
ppc64-toc.ll Convert to unix line endings. 2012-10-05 13:32:38 +00:00
ppc64-vaarg-int.ll Fix small-integer VAARG on SVR4 ABI PPC64. 2012-03-24 03:53:55 +00:00
ppc64-zext.ll Optimize zext on PPC64. 2012-08-28 02:10:15 +00:00
ppc440-fp-basic.ll Rename fp-op fusion option (yet again) for compatibility with GCC option. 2012-06-22 22:31:00 +00:00
ppc440-msync.ll use FileCheck and not grep in new tests 2011-10-17 16:01:41 +00:00
ppc-prologue.ll
ppc-vaarg-agg.ll Remove dead SD nodes after the combining pass. Fixes PR12201. 2012-04-16 03:33:22 +00:00
ppcf128-1-opt.ll
ppcf128-1.ll
ppcf128-2.ll
ppcf128-3.ll
ppcf128-4.ll
pr3711_widen_bit.ll
pr13641.ll Reserve space for the mandatory traceback fields on PPC64. 2012-08-29 20:22:24 +00:00
pr13891.ll Specify MachinePointerInfo as refering to the argument value and offset of the 2012-09-24 20:47:19 +00:00
private.ll
reg-coalesce-simple.ll
remat-imm.ll Allow remat of LI on PPC. 2012-08-28 02:10:33 +00:00
retaddr.ll Convert all tests using TCL-style quoting to use shell-style quoting. 2012-07-02 12:47:22 +00:00
return-val-i128.ll
rlwimi2.ll
rlwimi3.ll Convert the uses of '|&' to use '2>&1 |' instead, which works on old 2012-07-02 18:37:59 +00:00
rlwimi-commute.ll Fix the remaining TCL-style quotes found in the testsuite. This is 2012-07-02 19:09:46 +00:00
rlwimi-keep-rsh.ll
rlwimi.ll
rlwinm2.ll
rlwinm.ll
rotl-2.ll
rotl-64.ll
rotl.ll
sections.ll
select_lt0.ll
select-cc.ll
setcc_no_zext.ll
seteq-0.ll Convert all tests using TCL-style quoting to use shell-style quoting. 2012-07-02 12:47:22 +00:00
shift128.ll
shl_elim.ll
shl_sext.ll
sign_ext_inreg1.ll
small-arguments.ll Convert all tests using TCL-style quoting to use shell-style quoting. 2012-07-02 12:47:22 +00:00
stack-protector.ll Convert all tests using TCL-style quoting to use shell-style quoting. 2012-07-02 12:47:22 +00:00
stfiwx-2.ll
stfiwx.ll
store-load-fwd.ll
structsinmem.ll This patch addresses PR13949. 2012-10-16 13:30:53 +00:00
structsinregs.ll This patch addresses a PPC64 ELF issue with passing parameters consisting of 2012-10-25 13:38:09 +00:00
stubs.ll
stwu8.ll Enable generating PPC pre-increment (r+imm) instructions by default. 2012-06-04 02:21:00 +00:00
stwu-gta.ll Treat TargetGlobalAddress as a constant for the purpose of matching pre-inc stores on PPC. 2012-06-21 20:10:48 +00:00
stwux.ll Add support for generating reg+reg preinc stores on PPC. 2012-06-19 02:34:32 +00:00
subc.ll
tailcall1-64.ll
tailcall1.ll
tailcallpic1.ll
tls.ll Implement local-exec TLS on PowerPC. 2012-06-04 17:36:38 +00:00
trampoline.ll Convert all tests using TCL-style quoting to use shell-style quoting. 2012-07-02 12:47:22 +00:00
unsafe-math.ll
varargs.ll
vcmp-fold.ll
vec_auto_constant.ll
vec_br_cmp.ll
vec_buildvector_loadstore.ll Enable ILP scheduling for all nodes by default on PPC. 2012-06-10 19:32:29 +00:00
vec_call.ll
vec_cmp.ll PR12716: PPC crashes on vector compare 2012-10-08 18:59:53 +00:00
vec_constants.ll
vec_conv.ll Add floating-point to and from integer conversion 2012-10-08 17:27:24 +00:00
vec_fneg.ll
vec_insert.ll
vec_misaligned.ll
vec_mul.ll
vec_perf_shuffle.ll
vec_shift.ll
vec_shuffle.ll
vec_splat_constant.ll
vec_splat.ll
vec_vrsave.ll
vec_zero.ll
vector-identity-shuffle.ll
vector.ll
vrspill.ll Add -mattr=+altivec and remove XFAIL. 2012-10-10 22:25:11 +00:00