Change ARM ld/st multiple instructions to have variant instructions for
authorBob Wilson <bob.wilson@apple.com>
Sat, 13 Mar 2010 01:08:20 +0000 (01:08 +0000)
committerBob Wilson <bob.wilson@apple.com>
Sat, 13 Mar 2010 01:08:20 +0000 (01:08 +0000)
commit815baebe1c8dc02accf128ae10dff9a1742d3244
treee33fba11b18d0987b5512337f77c9e8334d889c9
parentafc33fa6d5f16089e7747ad761ae2d498ce43e90
Change ARM ld/st multiple instructions to have variant instructions for
writebacks to the address register.  This gets rid of the hack that the
first register on the list was the magic writeback register operand.  There
was an implicit constraint that if that operand was not reg0 it had to match
the base register operand.  The post-RA scheduler's antidependency breaker
did not understand that constraint and sometimes changed one without the
other.  This also fixes Radar 7495976 and should help the verifier work
better for ARM code.

There are now new ld/st instructions explicit writeback operands and explicit
constraints that tie those registers together.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98409 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/ARM/ARMConstantIslandPass.cpp
lib/Target/ARM/ARMInstrFormats.td
lib/Target/ARM/ARMInstrInfo.td
lib/Target/ARM/ARMInstrThumb.td
lib/Target/ARM/ARMInstrThumb2.td
lib/Target/ARM/ARMInstrVFP.td
lib/Target/ARM/ARMLoadStoreOptimizer.cpp
lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
lib/Target/ARM/Thumb1InstrInfo.cpp
lib/Target/ARM/Thumb1RegisterInfo.cpp
lib/Target/ARM/Thumb2SizeReduction.cpp