llvm-6502/test/CodeGen/PowerPC
Bill Schmidt 57ac1f458a This patch implements the general dynamic TLS model for 64-bit PowerPC.
Given a thread-local symbol x with global-dynamic access, the generated
code to obtain x's address is:

     Instruction                            Relocation            Symbol
  addis ra,r2,x@got@tlsgd@ha           R_PPC64_GOT_TLSGD16_HA       x
  addi  r3,ra,x@got@tlsgd@l            R_PPC64_GOT_TLSGD16_L        x
  bl __tls_get_addr(x@tlsgd)           R_PPC64_TLSGD                x
                                       R_PPC64_REL24           __tls_get_addr
  nop
  <use address in r3>

The implementation borrows from the medium code model work for introducing
special forms of ADDIS and ADDI into the DAG representation.  This is made
slightly more complicated by having to introduce a call to the external
function __tls_get_addr.  Using the full call machinery is overkill and,
more importantly, makes it difficult to add a special relocation.  So I've
introduced another opcode GET_TLS_ADDR to represent the function call, and
surrounded it with register copies to set up the parameter and return value.

Most of the code is pretty straightforward.  I ran into one peculiarity
when I introduced a new PPC opcode BL8_NOP_ELF_TLSGD, which is just like
BL8_NOP_ELF except that it takes another parameter to represent the symbol
("x" above) that requires a relocation on the call.  Something in the 
TblGen machinery causes BL8_NOP_ELF and BL8_NOP_ELF_TLSGD to be treated
identically during the emit phase, so this second operand was never
visited to generate relocations.  This is the reason for the slightly
messy workaround in PPCMCCodeEmitter.cpp:getDirectBrEncoding().

Two new tests are included to demonstrate correct external assembly and
correct generation of relocations using the integrated assembler.

Comments welcome!

Thanks,
Bill


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169910 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-11 20:30:11 +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
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
2008-03-17-RegScavengerCrash.ll
2008-03-18-RegScavengerAssert.ll
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
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
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
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
2011-12-08-DemandedBitsMiscompile.ll
2012-09-16-TOC-entry-check.ll This patch is in preparation for adding medium code model support to the 2012-11-14 23:23:27 +00:00
2012-10-11-dynalloc.ll Do not consider a machine instruction that uses and defines the same 2012-11-13 18:40:58 +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
2012-11-16-mischedcall.ll Use a full triple for a PPC test case for asm syntax. 2012-11-18 06:21:03 +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
asm-Zy.ll Add support for the PowerPC-specific inline asm Z constraint and y modifier. 2012-11-05 18:18:42 +00:00
atomic-1.ll
atomic-2.ll
Atomics-32.ll
Atomics-64.ll
available-externally.ll PPC: MCize most of the darwin PIC emission. 2012-11-24 13:18:25 +00:00
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 test/CodeGen/PowerPC: Add explicit -march=ppc32. 2012-11-30 13:28:31 +00:00
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
cmp-cmp.ll
coalesce-ext.ll On PowerPC64, integer return values (as well as arguments) are supposed 2012-11-05 19:39:45 +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
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
delete-node.ll
div-2.ll
empty-functions.ll
emptystruct.ll This patch addresses an ABI compatibility issue with empty aggregate 2012-10-31 01:15:05 +00:00
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
Frames-large.ll
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 Rewrite test to not use a FileCheck variable and redefine it on the same line. 2012-11-26 14:09:46 +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
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 In various places throughout the code generator, there were special 2012-10-29 18:35:49 +00:00
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
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
mcm-1.ll This patch implements medium code model support for 64-bit PowerPC. 2012-11-27 17:35:46 +00:00
mcm-2.ll This patch implements medium code model support for 64-bit PowerPC. 2012-11-27 17:35:46 +00:00
mcm-3.ll This patch implements medium code model support for 64-bit PowerPC. 2012-11-27 17:35:46 +00:00
mcm-4.ll This patch implements medium code model support for 64-bit PowerPC. 2012-11-27 17:35:46 +00:00
mcm-5.ll This patch implements medium code model support for 64-bit PowerPC. 2012-11-27 17:35:46 +00:00
mcm-6.ll This patch implements medium code model support for 64-bit PowerPC. 2012-11-27 17:35:46 +00:00
mcm-7.ll This patch implements medium code model support for 64-bit PowerPC. 2012-11-27 17:35:46 +00:00
mcm-default.ll This patch makes medium code model the default for 64-bit PowerPC ELF. 2012-11-27 23:36:26 +00:00
mcm-obj.ll This patch implements medium code model support for 64-bit PowerPC. 2012-11-27 17:35:46 +00:00
mem_update.ll This patch is in preparation for adding medium code model support to the 2012-11-14 23:23:27 +00:00
mem-rr-addr-mode.ll
misched.ll Fix assertions in updateRegMaskSlots(). 2012-11-09 19:18:49 +00:00
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-abi-extend.ll On PowerPC64, integer return values (as well as arguments) are supposed 2012-11-05 19:39:45 +00:00
ppc64-align-long-double.ll This patch adds alignment information for long double to the 64-bit PowerPC 2012-10-29 14:59:36 +00:00
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
ppc64-toc.ll This patch is in preparation for adding medium code model support to the 2012-11-14 23:23:27 +00:00
ppc64-vaarg-int.ll
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
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
pr12757.ll Allow i32/i64 for 'f' constraint on PowerPC. 2012-10-29 17:49:34 +00:00
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
s000-alias-misched.ll Use GetUnderlyingObjects in misched 2012-12-10 18:49:16 +00:00
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 PPC: MCize most of the darwin PIC emission. 2012-11-24 13:18:25 +00:00
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-gd-obj.ll This patch implements the general dynamic TLS model for 64-bit PowerPC. 2012-12-11 20:30:11 +00:00
tls-gd.ll This patch implements the general dynamic TLS model for 64-bit PowerPC. 2012-12-11 20:30:11 +00:00
tls-ie-obj.ll This patch introduces initial-exec model support for thread-local storage 2012-12-04 16:18:08 +00:00
tls-ie.ll This patch introduces initial-exec model support for thread-local storage 2012-12-04 16:18:08 +00:00
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-struct-float.ll This patch solves a problem with passing varargs parameters under the PPC64 2012-10-29 21:18:16 +00:00
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 PowerPC: More support for Altivec compare operations 2012-10-30 13:50:19 +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_extload.ll This patch is in preparation for adding medium code model support to the 2012-11-14 23:23:27 +00:00
vec_fneg.ll
vec_insert.ll
vec_misaligned.ll
vec_mul.ll test/CodeGen/PowerPC/vec_mul.ll: Add a triple. Thanks, Hal. 2012-11-30 19:15:10 +00:00
vec_perf_shuffle.ll
vec_rounding.ll PowerPC: Lowering floor intrinsic for Altivec 2012-11-15 20:56:03 +00:00
vec_shift.ll
vec_shuffle.ll
vec_splat_constant.ll
vec_splat.ll
vec_sqrt.ll PowerPC: Expand FSRQT for vector types 2012-10-30 18:29:42 +00:00
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