1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 19:52:54 +01:00
llvm-mirror/test/CodeGen/PowerPC
Evan Cheng da55c4ffb7 Fix PR3149. If an early clobber def is a physical register and it is tied to an input operand, it effectively extends the live range of the physical register. Currently we do not have a good way to represent this.
172     %ECX<def> = MOV32rr %reg1039<kill>
180     INLINEASM <es:subl $5,$1
        sbbl $3,$0>, 10, %EAX<def>, 14, %ECX<earlyclobber,def>, 9, %EAX<kill>,
36, <fi#0>, 1, %reg0, 0, 9, %ECX<kill>, 36, <fi#1>, 1, %reg0, 0
188     %EAX<def> = MOV32rr %EAX<kill>
196     %ECX<def> = MOV32rr %ECX<kill>
204     %ECX<def> = MOV32rr %ECX<kill>
212     %EAX<def> = MOV32rr %EAX<kill>
220     %EAX<def> = MOV32rr %EAX
228     %reg1039<def> = MOV32rr %ECX<kill>

The early clobber operand ties ECX input to the ECX def.

The live interval of ECX is represented as this:
%reg20,inf = [46,47:1)[174,230:0)  0@174-(230) 1@46-(47)

The right way to represent this is something like
%reg20,inf = [46,47:2)[174,182:1)[181:230:0)  0@174-(182) 1@181-230 @2@46-(47)

Of course that won't work since that means overlapping live ranges defined by two val#.

The workaround for now is to add a bit to val# which says the val# is redefined by a early clobber def somewhere. This prevents the move at 228 from being optimized away by SimpleRegisterCoalescing::AdjustCopiesBackFrom.

llvm-svn: 61259
2008-12-19 20:58:01 +00:00
..
2004-11-29-ShrCrash.ll
2004-11-30-shift-crash.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2004-11-30-shr-var-crash.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2004-12-12-ZeroSizeCommon.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2005-01-14-SetSelectCrash.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2005-01-14-UndefLong.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2005-08-12-rlwimi-crash.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2005-09-02-LegalizeDuplicatesCalls.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2005-10-08-ArithmeticRotate.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2005-11-30-vastart-crash.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2006-01-11-darwin-fp-argument.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2006-01-20-ShiftPartsCrash.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2006-04-01-FloatDoubleExtend.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2006-04-05-splat-ish.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2006-04-19-vmaddfp-crash.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2006-05-12-rlwimi-crash.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2006-07-07-ComputeMaskedBits.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2006-07-19-stwbrx-crash.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2006-08-11-RetVector.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2006-08-15-SelectionCrash.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2006-09-28-shift_64.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2006-10-11-combiner-aa-regression.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2006-10-13-Miscompile.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2006-10-17-brcc-miscompile.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2006-10-17-ppc64-alloca.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2006-11-10-DAGCombineMiscompile.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2006-11-29-AltivecFPSplat.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2006-12-07-LargeAlloca.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
2006-12-07-SelectCrash.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
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 Implement a signficant optimization for inline asm: 2008-04-27 00:37:18 +00:00
2007-04-30-InlineAsmEarlyClobber.ll Fix PR3149. If an early clobber def is a physical register and it is tied to an input operand, it effectively extends the live range of the physical register. Currently we do not have a good way to represent this. 2008-12-19 20:58:01 +00:00
2007-05-03-InlineAsm-S-Constraint.ll
2007-05-14-InlineAsmSelectCrash.ll
2007-05-22-tailmerge-3.ll
2007-05-30-dagcombine-miscomp.ll
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
2007-10-21-LocalRegAllocAssert.ll
2007-11-04-CoalescerCrash.ll
2007-11-16-landingpad-split.ll
2007-11-19-VectorSplitting.ll
2008-01-25-EmptyFunction.ll
2008-02-05-LiveIntervalsAssert.ll
2008-02-09-LocalRegAllocAssert.ll
2008-03-05-RegScavengerAssert.ll
2008-03-06-KillInfo.ll
2008-03-17-RegScavengerCrash.ll Rewrite code that propagate isDead information after a dead copy is coalesced. This remove some ugly spaghetti code and fixed a number of subtle bugs. 2008-03-18 08:26:47 +00:00
2008-03-18-RegScavengerAssert.ll Fix live variables issues: 2008-03-19 00:52:20 +00:00
2008-03-24-AddressRegImm.ll Use the bit size of the operand instead of the hard-coded 32 to generate the 2008-03-24 23:16:37 +00:00
2008-03-24-CoalescerBug.ll lastRegisterUse() should ignore identity copies. Those will be erased. 2008-03-25 02:02:19 +00:00
2008-03-26-CoalescerBug.ll One more coalescer fix wrt deadness propagation. 2008-03-26 20:15:49 +00:00
2008-04-10-LiveIntervalCrash.ll A copy instruction may use a register multiple times on some targets. Change them all. 2008-04-10 18:38:47 +00:00
2008-04-16-CoalescerBug.ll After reading memory that's already freed. 2008-04-16 20:24:25 +00:00
2008-04-23-CoalescerCrash.ll New test. 2008-04-24 20:01:58 +00:00
2008-05-01-ppc_fp128.ll Adding testcase. 2008-05-01 18:41:09 +00:00
2008-06-19-LegalizerCrash.ll ISD::UNDEF should be expanded recursively / iteratively. 2008-06-19 22:01:11 +00:00
2008-06-21-F128LoadStore.ll Support for load/store of expanded float types. I 2008-06-21 17:00:47 +00:00
2008-06-23-LiveVariablesCrash.ll This situation can occur: 2008-06-23 23:41:14 +00:00
2008-07-10-SplatMiscompile.ll Fix an altivec constant miscompilation that Duncan found through 2008-07-10 16:33:38 +00:00
2008-07-15-Bswap.ll LegalizeTypes support for promotion of bswap. 2008-07-15 10:18:22 +00:00
2008-07-15-Fabs.ll LegalizeTypes support for fabs on ppc long double. 2008-07-15 15:02:44 +00:00
2008-07-15-SignExtendInreg.ll LegalizeTypes support for promotion of SIGN_EXTEND_INREG. 2008-07-15 10:14:24 +00:00
2008-07-17-Fneg.ll LegalizeTypes support for what seems to be the 2008-07-17 17:35:14 +00:00
2008-07-24-PPC64-CCBug.ll Fix a catastrophic PPC64 ABI bug: i32 operands which are passed in memory (all of the parameter registers are used) are loaded from sp offsets that were off by 4. 2008-07-24 08:17:07 +00:00
2008-09-12-CoalescerBug.ll On some targets, non-move instructions can become move instructions because of coalescing. e.g. 2008-09-12 18:13:14 +00:00
2008-10-17-AsmMatchingOperands.ll We have decided not to support inline asm where an output operand with a matching input operand with incompatible type (i.e. either one is a floating point and the other is an integer or the sizes of the types differ). SelectionDAGBuild will catch these and exit with an error. 2008-12-16 18:21:39 +00:00
2008-10-28-f128-i32.ll Fix darwin ppc llvm-gcc build breakage: intercept 2008-10-28 15:00:32 +00:00
2008-10-28-UnprocessedNode.ll Fix a testcase provided by Bill in which the node 2008-10-28 09:38:36 +00:00
2008-10-30-IllegalShift.ll Testcase for PR2986. 2008-10-30 20:34:30 +00:00
2008-10-31-PPCF128Libcalls.ll Add a bunch of libcalls for ppcf128 that were somehow 2008-10-31 14:06:52 +00:00
2008-12-02-LegalizeTypeAssert.ll Remove a (what appears to be) overly strict assertion. Here is what happened: 2008-12-02 21:57:09 +00:00
20081212.ll Fix bug 3202. 2008-12-19 10:55:56 +00:00
addc.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
addi-reassoc.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
align.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
and_add.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
and_sext.ll
and_sra.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
and-branch.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
and-elim.ll
and-imm.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
atomic-1.ll Adjust grep's for new code sequence. 2008-08-25 18:53:58 +00:00
atomic-2.ll Adjust grep's for new code sequence. 2008-08-25 18:53:58 +00:00
Atomics-32.ll Testcases for ppc atomics. 2008-08-30 00:54:31 +00:00
Atomics-64.ll Testcases for ppc atomics. 2008-08-30 00:54:31 +00:00
big-endian-actual-args.ll
big-endian-call-result.ll
big-endian-formal-args.ll
branch-opt.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
bswap-load-store.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
buildvec_canonicalize.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
calls.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
cmp-cmp.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
compare-duplicate.ll
compare-simm.ll
constants.ll
cr_spilling.ll Testcase for PR1638. 2008-10-15 18:27:15 +00:00
cttz.ll
darwin-labels.ll
delete-node.ll Make ISel ignore dead nodes. The DAGCombiner normally eliminates 2008-11-05 22:56:47 +00:00
dg.exp sabre brings to my attention that the 'tr' suffix is also obsolete 2008-05-20 21:00:03 +00:00
div-2.ll
eqv-andc-orc-nor.ll
extsh.ll
fabs.ll
fma.ll
fnabs.ll
fneg.ll
fold-li.ll Remove -unwind-tables-optional everywhere, since 2008-04-14 17:56:54 +00:00
fp_to_uint.ll
fp-branch.ll
fp-int-fp.ll
fpcopy.ll
Frames-alloca.ll
Frames-large.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
Frames-leaf.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
Frames-small.ll Byebye llvm-upgrade! 2008-03-25 04:26:08 +00:00
frounds.ll
fsqrt.ll
hello.ll
hidden-vis-2.ll Re-did 60519. It turns out Darwin's handling of hidden visibility symbols are a bit more complicate than I expected. Both declarations and weak definitions still need a stub indirection. However, the stubs are in data section and they contain the addresses of the actual symbols. 2008-12-05 01:06:39 +00:00
hidden-vis.ll Re-did 60519. It turns out Darwin's handling of hidden visibility symbols are a bit more complicate than I expected. Both declarations and weak definitions still need a stub indirection. However, the stubs are in data section and they contain the addresses of the actual symbols. 2008-12-05 01:06:39 +00:00
i64_fp.ll
i128-and-beyond.ll Split this test and move it into target-specific directories. 2008-10-01 19:46:30 +00:00
iabs.ll
illegal-element-type.ll
inlineasm-copy.ll
int-fp-conv-0.ll Check that running the DAG combiner between type 2008-11-26 16:44:30 +00:00
int-fp-conv-1.ll
invalid-memcpy.ll
inverted-bool-compares.ll
ispositive.ll
itofp128.ll
LargeAbsoluteAddr.ll Add a new function, ReplaceAllUsesOfValuesWith, which handles bulk 2008-07-17 19:10:17 +00:00
lha.ll
load-constant-addr.ll
long-compare.ll
longdbl-truncate.ll
mask64.ll
mem_update.ll
mem-rr-addr-mode.ll
mul-neg-power-2.ll
mulhs.ll
multiple-return-values.ll Add support for multiple return values for the PPC target by 2008-03-19 21:39:28 +00:00
neg.ll
no-dead-strip.ll
or-addressing-mode.ll
ppcf128-1-opt.ll
ppcf128-1.ll
ppcf128-2.ll
ppcf128-3.ll Make conversions of i8/i16 to ppcf128 work. 2008-03-18 17:28:38 +00:00
ppcf128-4.ll New testcase. 2008-03-22 22:27:01 +00:00
reg-coalesce-simple.ll Remove -unwind-tables-optional everywhere, since 2008-04-14 17:56:54 +00:00
retaddr.ll
return-val-i128.ll
rlwimi2.ll
rlwimi3.ll
rlwimi-commute.ll
rlwimi.ll
rlwinm2.ll
rlwinm.ll
rotl-2.ll Remove -unwind-tables-optional everywhere, since 2008-04-14 17:56:54 +00:00
rotl-64.ll
rotl.ll
select_lt0.ll
select-cc.ll Fix PR3011: LegalizeTypes support for scalarizing 2008-11-04 17:31:08 +00:00
setcc_no_zext.ll
seteq-0.ll
shift128.ll
shl_elim.ll
shl_sext.ll
sign_ext_inreg1.ll
small-arguments.ll
stfiwx-2.ll
stfiwx.ll
store-load-fwd.ll
subc.ll
tailcall1-64.ll Tail call optimization improvements: 2008-04-30 09:16:33 +00:00
tailcall1.ll Tail call optimization improvements: 2008-04-30 09:16:33 +00:00
tailcallpic1.ll Tail call optimization improvements: 2008-04-30 09:16:33 +00:00
trampoline.ll Add trampoline support to PPC. GCC simply calls the "__trampoline_setup" 2008-09-17 00:30:57 +00:00
unsafe-math.ll
vcmp-fold.ll
vec_br_cmp.ll
vec_call.ll
vec_constants.ll
vec_fneg.ll
vec_insert.ll
vec_misaligned.ll
vec_mul.ll
vec_perf_shuffle.ll
vec_shuffle.ll
vec_splat.ll Turn off LegalizeTypes for this test for the 2008-10-28 09:55:04 +00:00
vec_vrsave.ll
vec_zero.ll
vector-identity-shuffle.ll
vector.ll