| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
| |
kill flag.
This could cause duplicate kill flags when the same register was used twice in a
continuous sequence of STRs.
There is no small test case. <rdar://problem/8218046>
llvm-svn: 112534
|
|
|
|
|
|
|
|
| |
the special values that for ARM would be used with IB or DA modes. Fall
through and consider materializing a new base address is it would be
profitable.
llvm-svn: 112329
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
all the other LDM/STM instructions. This fixes asm printer crashes when
compiling with -O0. I've changed one of the NEON tests (vst3.ll) to run
with -O0 to check this in the future.
Prior to this change VLDM/VSTM used addressing mode #5, but not really.
The offset field was used to hold a count of the number of registers being
loaded or stored, and the AM5 opcode field was expanded to specify the IA
or DB mode, instead of the standard ADD/SUB specifier. Much of the backend
was not aware of these special cases. The crashes occured when rewriting
a frameindex caused the AM5 offset field to be changed so that it did not
have a valid submode. I don't know exactly what changed to expose this now.
Maybe we've never done much with -O0 and NEON. Regardless, there's no longer
any reason to keep a count of the VLDM/VSTM registers, so we can use
addressing mode #4 and clean things up in a lot of places.
llvm-svn: 112322
|
|
|
|
| |
llvm-svn: 112300
|
|
|
|
| |
llvm-svn: 110460
|
|
|
|
| |
llvm-svn: 110410
|
|
|
|
|
|
|
|
| |
address of the static
ID member as the sole unique type identifier. Clean up APIs related to this change.
llvm-svn: 110396
|
|
|
|
| |
llvm-svn: 107114
|
|
|
|
| |
llvm-svn: 106542
|
|
|
|
|
|
| |
which have already been processed.
llvm-svn: 106481
|
|
|
|
|
|
| |
the combined load/store instruction. rdar://7797940
llvm-svn: 105982
|
|
|
|
|
|
|
|
| |
dbg_value immediately follows a sequence of ldr/str instructions that should
be combined into an ldm/stm and is the last instruction in the block, then
combine may end up being skipped.
llvm-svn: 105758
|
|
|
|
| |
llvm-svn: 105653
|
|
|
|
| |
llvm-svn: 105470
|
|
|
|
| |
llvm-svn: 105454
|
|
|
|
| |
llvm-svn: 105441
|
|
|
|
| |
llvm-svn: 105427
|
|
|
|
| |
llvm-svn: 105350
|
|
|
|
| |
llvm-svn: 101342
|
|
|
|
|
|
| |
Radar 7797856
llvm-svn: 99630
|
|
|
|
|
|
| |
Patch by John Tytgat!
llvm-svn: 99096
|
|
|
|
| |
llvm-svn: 98648
|
|
|
|
|
|
| |
instructions for ld/st with writeback, the flag is completely redundant.
llvm-svn: 98643
|
|
|
|
| |
llvm-svn: 98596
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
llvm-svn: 98409
|
|
|
|
|
|
| |
mostly the same.
llvm-svn: 98402
|
|
|
|
| |
llvm-svn: 98398
|
|
|
|
|
|
|
|
| |
an undef value. This is only going to come up for bugpoint-reduced tests --
correct programs will not access memory at undefined addresses -- so it's not
worth the effort of doing anything more aggressive.
llvm-svn: 97745
|
|
|
|
|
|
|
| |
<undef> operands, and can cause scavenger failures when it translates
<kill,undef> to <kill>.
llvm-svn: 97046
|
|
|
|
|
|
| |
up with a reasonable test case.
llvm-svn: 96023
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
An unaligned ldr causes a trap, and is then emulated by the kernel with
awesome performance. The darwin kernel does not emulate unaligned ldm/stm
Thumb2 instructions, so don't generate them.
This fixes the miscompilation of Multisource/Applications/JM/lencod for Thumb2.
Generating unaligned ldr/str pairs from a 16-bit aligned memcpy is probably
also a bad idea, but that is beyond the scope of this patch.
llvm-svn: 93393
|
|
|
|
| |
llvm-svn: 92058
|
|
|
|
| |
llvm-svn: 92054
|
|
|
|
|
|
|
| |
Rearrange arguments.
No functional changes
llvm-svn: 92053
|
|
|
|
| |
llvm-svn: 92052
|
|
|
|
| |
llvm-svn: 92051
|
|
|
|
| |
llvm-svn: 91764
|
|
|
|
|
|
| |
Patch by Howard Hinnant!
llvm-svn: 90365
|
|
|
|
| |
llvm-svn: 88734
|
|
|
|
| |
llvm-svn: 86494
|
|
|
|
|
|
| |
VISIBILITY_HIDDEN removal.
llvm-svn: 85043
|
|
|
|
|
|
|
| |
Chris claims we should never have visibility_hidden inside any .cpp file but
that's still not true even after this commit.
llvm-svn: 85042
|
|
|
|
|
|
| |
are at the end of the bb. Test case is already in, the bug is exposed by subsequent commit.
llvm-svn: 84842
|
|
|
|
|
|
| |
This fixes most of the -ldstopti-before-sched2 regressions.
llvm-svn: 83191
|
|
|
|
| |
llvm-svn: 83058
|
|
|
|
| |
llvm-svn: 82893
|
|
|
|
| |
llvm-svn: 82836
|
|
|
|
| |
llvm-svn: 82805
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Allocate MachineMemOperands and MachineMemOperand lists in MachineFunctions.
This eliminates MachineInstr's std::list member and allows the data to be
created by isel and live for the remainder of codegen, avoiding a lot of
copying and unnecessary translation. This also shrinks MemSDNode.
- Delete MemOperandSDNode. Introduce MachineSDNode which has dedicated
fields for MachineMemOperands.
- Change MemSDNode to have a MachineMemOperand member instead of its own
fields with the same information. This introduces some redundancy, but
it's more consistent with what MachineInstr will eventually want.
- Ignore alignment when searching for redundant loads for CSE, but remember
the greatest alignment.
Target-specific code which previously used MemOperandSDNodes with generic
SDNodes now use MemIntrinsicSDNodes, with opcodes in a designated range
so that the SelectionDAG framework knows that MachineMemOperand information
is available.
llvm-svn: 82794
|
|
|
|
|
|
| |
ARM::*RegisterClass names.
llvm-svn: 81556
|