1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-24 21:42:54 +02:00
llvm-mirror/test/CodeGen/Thumb
Scott Douglass 9091dc1c0e [ARM] Modify codegen for memcpy intrinsic to prefer LDM/STM.
We were previously codegen'ing memcpy as regular load/store operations and
hoping that the register allocator would allocate registers in ascending order
so that we could apply an LDM/STM combine after register allocation. According
to the commit that first introduced this code (r37179), we planned to teach the
register allocator to allocate the registers in ascending order. This never got
implemented, and up to now we've been stuck with very poor codegen.

A much simpler approach for achieving better codegen is to create MEMCPY pseudo
instructions, attach scratch virtual registers to them and then, post register
allocation, expand the MEMCPYs into LDM/STM pairs using the scratch registers.
The register allocator will have picked arbitrary registers which we sort when
expanding the MEMCPY. This approach also avoids the need to repeatedly calculate
offsets which ultimately ought to be eliminated pre-RA in order to decrease
register pressure.

Fixes PR9199 and PR23768.

[This is based on Peter Collingbourne's r238473 which was reverted.]

Differential Revision: http://reviews.llvm.org/D13239

Change-Id: I727543c2e94136e0f80b8e22d5642d7b9ee5b458
Author: Peter Collingbourne <peter@pcc.me.uk>
llvm-svn: 249322
2015-10-05 14:49:54 +00:00
..
2007-01-31-RegInfoAssert.ll
2007-02-02-JoinIntervalsCrash.ll
2007-05-05-InvalidPushPop.ll
2009-06-18-ThumbCommuteMul.ll
2009-07-20-TwoAddrBug.ll
2009-07-27-PEIAssert.ll
2009-08-12-ConstIslandAssert.ll
2009-08-12-RegInfoAssert.ll
2009-08-20-ISelBug.ll
2009-12-17-pre-regalloc-taildup.ll
2010-06-18-SibCallCrash.ll
2010-07-01-FuncAlign.ll
2010-07-15-debugOrdering.ll DI: Require subprogram definitions to be distinct 2015-08-28 20:26:49 +00:00
2011-05-11-DAGLegalizer.ll
2011-06-16-NoGPRs.ll
2011-EpilogueBug.ll
2012-04-26-M0ISelBug.ll
2014-06-10-thumb1-ldst-opt-bug.ll
asmprinter-bug.ll
barrier.ll
copy_thumb.ll
cortex-m0-unaligned-access.ll [ARM] Define subtarget feature strict-align. 2015-07-28 22:44:28 +00:00
DbgValueOtherTargets.test
dyn-stackalloc.ll
fastcc.ll
fpconv.ll
fpow.ll
frame_thumb.ll
iabs.ll
inlineasm-imm-thumb.ll
inlineasm-thumb.ll
ispositive.ll
large-stack.ll
ldm-merge-call.ll
ldm-merge-struct.ll
ldm-stm-base-materialization-thumb2.ll [ARM] Modify codegen for memcpy intrinsic to prefer LDM/STM. 2015-10-05 14:49:54 +00:00
ldm-stm-base-materialization.ll [ARM] Modify codegen for memcpy intrinsic to prefer LDM/STM. 2015-10-05 14:49:54 +00:00
ldr_ext.ll
ldr_frame.ll
lit.local.cfg
long_shift.ll
long-setcc.ll
long.ll
mature-mc-support.ll
mul.ll
pop.ll [ARM] Refactor the prologue/epilogue emission to be more robust. 2015-07-20 21:42:14 +00:00
PR17309.ll
push.ll
rev.ll
segmented-stacks-dynamic.ll
segmented-stacks.ll ARM: correctly align constant pool value on Thumb1 targets. 2015-10-02 18:07:13 +00:00
select.ll
sjljehprepare-lower-vector.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
stack_guard_remat.ll
stack-access.ll
stack-coloring-without-frame-ptr.ll
stack-frame.ll
stm-merge.ll
thumb-imm.ll
thumb-ldm.ll
thumb-shrink-wrapping.ll [ARM] Make the frame lowering code ready for shrink-wrapping. 2015-07-22 16:34:37 +00:00
trap.ll
triple.ll
tst_teq.ll
unord.ll
vargs.ll [ARM] Refactor the prologue/epilogue emission to be more robust. 2015-07-20 21:42:14 +00:00