llvm-6502/test/CodeGen/ARM
Bob Wilson 9d928c223f Fix pr4100. Do not remove no-op copies when they are dead. The register
scavenger gets confused about register liveness if it doesn't see them.
I'm not thrilled with this solution, but it only comes up when there are dead
copies in the code, which is something that hopefully doesn't happen much.

Here is what happens in pr4100: As shown in the following excerpt from the
debug output of llc, the source of a move gets reloaded from the stack,
inserting a new load instruction before the move.  Since that source operand
is a kill, the physical register is free to be reused for the destination
of the move.  The move ends up being a no-op, copying R3 to R3, so it is
deleted.  But, it leaves behind the load to reload %reg1028 into R3, and
that load is not updated to show that it's destination operand (R3) is dead.
The scavenger gets confused by that load because it thinks that R3 is live.

Starting RegAlloc of: %reg1025<def,dead> = MOVr %reg1028<kill>, 14, %reg0, %reg0
  Regs have values: 
  Reloading %reg1028 into R3
  Last use of R3[%reg1028], removing it from live set
  Assigning R3 to %reg1025
  Register R3 [%reg1025] is never used, removing it from live set

Alternative solutions might be either marking the load as dead, or zapping
the load along with the no-op copy.  I couldn't see an easy way to do
either of those, though.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@71196 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-07 23:47:03 +00:00
..
2006-11-10-CycleInDAG.ll
2007-01-19-InfiniteLoop.ll
2007-01-31-RegInfoAssert.ll
2007-02-02-JoinIntervalsCrash.ll
2007-03-06-AddR7.ll
2007-03-07-CombinerCrash.ll
2007-03-13-InstrSched.ll Expand GEPs in ScalarEvolution expressions. SCEV expressions can now 2009-04-16 03:18:22 +00:00
2007-03-21-JoinIntervalsCrash.ll
2007-03-26-RegScavengerAssert.ll
2007-03-27-RegScavengerAssert.ll
2007-03-30-RegScavengerAssert.ll
2007-04-02-RegScavengerAssert.ll
2007-04-03-PEIBug.ll
2007-04-03-UndefinedSymbol.ll
2007-04-30-CombinerCrash.ll
2007-05-03-BadPostIndexedLd.ll
2007-05-05-InvalidPushPop.ll
2007-05-07-jumptoentry.ll
2007-05-07-tailmerge-1.ll
2007-05-09-tailmerge-2.ll
2007-05-14-InlineAsmCstCrash.ll
2007-05-14-RegScavengerAssert.ll
2007-05-22-tailmerge-3.ll
2007-05-23-BadPreIndexedStore.ll
2007-05-31-RegScavengerInfiniteLoop.ll
2007-08-15-ReuseBug.ll
2008-02-04-LocalRegAllocBug.ll
2008-02-29-RegAllocLocal.ll
2008-03-05-SxtInRegBug.ll
2008-03-07-RegScavengerAssert.ll
2008-04-04-ScavengerAssert.ll
2008-04-10-ScavengerAssert.ll
2008-04-11-PHIofImpDef.ll
2008-05-19-LiveIntervalsBug.ll
2008-05-19-ScavengerAssert.ll
2008-07-17-Fdiv.ll
2008-07-24-CodeGenPrepCrash.ll
2008-08-07-AsmPrintBug.ll Clean up some ARM GV asm printing out; minor fixes to match what gcc does. 2008-12-06 02:00:55 +00:00
2008-09-14-CoaleserBug.ll
2008-09-17-CoalescerBug.ll Unallocatable registers do not have live intervals. 2008-09-17 18:36:25 +00:00
2008-11-18-ScavengerAssert.ll Register scavenger should process early clobber defs first. A dead early clobber def should not interfere with a normal def which happens one slot later. 2008-11-18 22:28:38 +00:00
2008-11-19-ScavengerAssert.ll Previously, RecursivelyDeleteDeadInstructions provided an option 2009-05-02 18:29:22 +00:00
2009-02-16-SpillerBug.ll A couple of places where reused use operands should be marked kill. This is exposed by recent availability fallthrough changes. 2009-02-17 06:41:03 +00:00
2009-02-22-SoftenFloatVaArg.ll move a target-specific test into its directory so it isn't run if you 2009-04-10 23:58:38 +00:00
2009-02-27-SpillerBug.ll Last commit accidentially deleted this code. 2009-02-28 06:02:14 +00:00
2009-03-07-SpillerBug.ll If a MI uses the same register more than once, only mark one of them as 'kill'. 2009-03-08 03:58:35 +00:00
2009-03-09-AddrModeBug.ll ARM isLegalAddressImmediate should check if type is a simple type now that optimizer can create values of funky scalar types. 2009-03-09 19:15:00 +00:00
2009-04-06-AsmModifier.ll Use the output of the asm so the optimizer won't 2009-04-14 01:51:40 +00:00
2009-04-08-AggregateAddr.ll Add testcase for PR3795. 2009-04-08 18:00:55 +00:00
2009-04-08-FloatUndef.ll Soft float support for undef. Reported by Xerxes Rånby. 2009-04-08 13:33:37 +00:00
2009-04-08-FREM.ll Soft float support for FREM. 2009-04-08 16:20:57 +00:00
2009-04-09-RegScavengerAsm.ll Fix pr3954. The register scavenger asserts for inline assembly with 2009-04-09 17:16:43 +00:00
2009-05-05-DAGCombineBug.ll Do not use register as base ptr of pre- and post- inc/dec load / store nodes. 2009-05-06 18:25:01 +00:00
2009-05-07-RegAllocLocal.ll Fix pr4100. Do not remove no-op copies when they are dead. The register 2009-05-07 23:47:03 +00:00
addrmode.ll
aliases.ll
align.ll
alloca.ll
argaddr.ll
arguments2.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
arguments3.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
arguments4.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
arguments5.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
arguments6.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
arguments7.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
arguments8.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
arguments.ll
arm-asm.ll
arm-negative-stride.ll
bits.ll
branch.ll
bx_fold.ll
call_nolink.ll
call.ll
clz.ll
compare-call.ll
constants.ll Do not emit comments unless -asm-verbose. 2009-03-24 00:17:40 +00:00
cse-libcalls.ll Re-enable SelectionDAG CSE for calls. It matters in the case of 2008-09-15 19:46:03 +00:00
ctors_dtors.ll
dg.exp
div.ll
dyn-stackalloc.ll
extloadi1.ll
fcopysign.ll
fixunsdfdi.ll Custom lower bit_convert i64 -> f64 into FMDRR. This is now happening with legalizetypes. 2008-11-04 19:57:48 +00:00
fmdrr-fmrrd.ll
fnmul.ll
formal.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
fp.ll
fparith.ll
fpcmp_ueq.ll
fpcmp.ll
fpconv.ll
fpmem.ll
fpow.ll Implement function notes as function attributes. 2008-09-26 23:51:19 +00:00
fpowi.ll
fptoint.ll
frame_thumb.ll
hello.ll
hidden-vis-2.ll Clean up some ARM GV asm printing out; minor fixes to match what gcc does. 2008-12-06 02:00:55 +00:00
hidden-vis-3.ll Clean up some ARM GV asm printing out; minor fixes to match what gcc does. 2008-12-06 02:00:55 +00:00
hidden-vis.ll Clean up some ARM GV asm printing out; minor fixes to match what gcc does. 2008-12-06 02:00:55 +00:00
iabs.ll
ifcvt1.ll
ifcvt2.ll
ifcvt3.ll
ifcvt4.ll
ifcvt5.ll
ifcvt6.ll
ifcvt7.ll
ifcvt8.ll
illegal-vector-bitcast.ll
imm.ll
inlineasm2.ll
inlineasm-imm-arm.ll Fix PR3862: Recognize some ARM-specific constraints for immediates in inline 2009-04-01 17:58:54 +00:00
inlineasm-imm-thumb.ll Fix PR3862: Recognize some ARM-specific constraints for immediates in inline 2009-04-01 17:58:54 +00:00
inlineasm.ll
insn-sched1.ll
ispositive.ll
large-stack.ll
ldm.ll
ldr_ext.ll
ldr_frame.ll
ldr_post.ll
ldr_pre.ll
ldr.ll
load-global.ll
load.ll
long_shift.ll
long-setcc.ll
long.ll Do not emit comments unless -asm-verbose. 2009-03-24 00:17:40 +00:00
lsr-code-insertion.ll Re-enable machine sinking pass now that the coalescer bugs and the AnalyzeBrnach bug are fixed. 2009-02-09 08:45:39 +00:00
lsr-scale-addr-mode.ll
mem.ll
memcpy-inline.ll Fix PR3457: Ignore control successors when looking for closest scheduled successor. A control successor doesn't read result(s) produced by the scheduling unit being evaluated. 2009-02-10 08:30:11 +00:00
memfunc.ll
mul.ll
mulhi.ll
mvn.ll
pack.ll
pr3502.ll If a use operand is marked isKill, don't forget to add kill to its live interval as well. 2009-02-22 08:35:56 +00:00
private.ll Add the private linkage. 2009-01-15 20:18:42 +00:00
remat.ll Turn on machine LICM in non-fast mode. 2009-02-05 08:46:33 +00:00
ret0.ll
ret_arg1.ll
ret_arg2.ll
ret_arg3.ll
ret_arg4.ll
ret_arg5.ll
ret_f32_arg2.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
ret_f32_arg5.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
ret_f64_arg2.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
ret_f64_arg_reg_split.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
ret_f64_arg_split.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
ret_f64_arg_stack.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
ret_i64_arg2.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
ret_i64_arg3.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
ret_i64_arg_split.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
ret_i128_arg2.ll Rename file to have the correct suffix. 2009-04-17 20:40:20 +00:00
ret_void.ll
rev.ll
section.ll
select_xform.ll add no-unwind, remove duplicate run line. 2009-03-12 05:56:37 +00:00
select.ll
shifter_operand.ll
smul.ll
stack-frame.ll
str_post.ll
str_pre.ll
str_trunc.ll
sxt_rot.ll
thread_pointer.ll
thumb-imm.ll
tls1.ll
tls2.ll
tls3.ll
trunc_ldr.ll
truncstore-dag-combine.ll
tst_teq.ll
uint64tof64.ll Actually ARM / Mac OS X does have UINTTOFP_I64_F{64|32} libcalls. 2008-11-04 22:19:55 +00:00
unaligned_load_store.ll
unord.ll
uxt_rot.ll
uxtb.ll Recognize triplets starting with armv5-, armv6- etc. And set the ARM arch version accordingly. 2009-03-08 04:02:49 +00:00
vargs2.ll
vargs_align.ll
vargs.ll
vfp.ll
weak2.ll
weak.ll