|  | Commit message (Collapse) | Author | Age | Files | Lines | 
|---|
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | This patch corrects the definition of umlal/smlal instructions and adds support
for matching them to the ARM dag combiner.
Bug 12213
Patch by Yin Ma!
llvm-svn: 163136 | 
| | 
| 
| 
| 
| 
| 
| | These nodes are no longer needed because the peephole pass can fold
CMOV+AND into ANDCC etc.
llvm-svn: 162179 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | When predicating this instruction:
  Rd = ADD Rn, Rm
We need an extra operand to represent the value given to Rd when the
predicate is false:
  Rd = ADDCC Rfalse, Rn, Rm, pred
The Rd and Rfalse operands are different registers while in SSA form.
Rfalse is tied to Rd to make sure they get the same register during
register allocation.
Previously, Rd and Rn were tied, but that is not required.
Compare to MOVCC:
  Rd = MOVCC Rfalse, Rtrue, pred
llvm-svn: 161955 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| | architecture
It broke MultiSource/Applications/JM/ldecod/ldecod on armv7 thumb O0 g and armv7
thumb O3.
llvm-svn: 161736 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | This patch corrects the definition of umlal/smlal instructions and adds support
for matching them to the ARM dag combiner.
Bug 12213
Patch by Yin Ma!
llvm-svn: 161581 | 
| | 
| 
| 
| | llvm-svn: 161133 | 
| | 
| 
| 
| | llvm-svn: 161132 | 
| | 
| 
| 
| 
| 
| | to pass the tables around.
llvm-svn: 157373 | 
| | 
| 
| 
| | llvm-svn: 155626 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| | While there is an encoding for it in VUZP, the result of that is undefined,
so we should avoid it. Define the instruction as a pseudo for VTRN.32
instead, as the ARM ARM indicates.
rdar://11222366
llvm-svn: 154511 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| | While there is an encoding for it in VZIP, the result of that is undefined,
so we should avoid it. Define the instruction as a pseudo for VTRN.32
instead, as the ARM ARM indicates.
rdar://11221911
llvm-svn: 154505 | 
| | 
| 
| 
| 
| 
| 
| | Register pair VLD1/VLD2 all-lanes instructions. Kill off more of the
pseudos as a result.
llvm-svn: 152150 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| | With the new composite physical registers to represent arbitrary pairs
of DPR registers, we don't need the pseudo-registers anymore. Get rid of
a bunch of them that use DPR register pairs and just use the real
instructions directly instead.
llvm-svn: 152045 | 
| | 
| 
| 
| | llvm-svn: 151251 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | value is zero. Instead of a cmov + op, issue an conditional op instead. e.g.
    cmp   r9, r4
    mov   r4, #0
    moveq r4, #1 
    orr   lr, lr, r4
should be:
    cmp   r9, r4
    orreq lr, lr, #1
That is, optimize (or x, (cmov 0, y, cond)) to (or.cond x, y). Similarly extend
this to xor as well as (and x, (cmov -1, y, cond)) => (and.cond x, y).
It's possible to extend this to ADD and SUB but I don't think they are common.
rdar://8659097
llvm-svn: 151224 | 
| | 
| 
| 
| | llvm-svn: 149961 | 
| | 
| 
| 
| | llvm-svn: 148578 | 
| | 
| 
| 
| 
| 
| | rdar://10663487
llvm-svn: 147876 | 
| | 
| 
| 
| | llvm-svn: 147069 | 
| | 
| 
| 
| 
| 
| 
| | In addition to improving the representation, this adds support for assembly
parsing of these instructions.
llvm-svn: 146588 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | Refactor the instructions into fixed writeback and register-stride
writeback variants to simplify the offset operand (no more optional
register operand using reg0). This is a simpler representation and allows
the assembly parser to more easily handle these instructions.
Add tests for the instruction variants now supported.
llvm-svn: 146278 | 
| | 
| 
| 
| | llvm-svn: 145450 | 
| | 
| 
| 
| | llvm-svn: 145442 | 
| | 
| 
| 
| | llvm-svn: 143369 | 
| | 
| 
| 
| 
| 
| 
| | Previously, we were only setting the alignment bits on over-aligned
loads and stores.
llvm-svn: 143160 | 
| | 
| 
| 
| | llvm-svn: 143158 | 
| | 
| 
| 
| 
| 
| 
| 
| | Split am6offset into fixed and register offset variants so the instruction
encodings are explicit rather than relying an a magic reg0 marker.
Needed to being able to parse these.
llvm-svn: 142853 | 
| | 
| 
| 
| | llvm-svn: 142332 | 
| | 
| 
| 
| | llvm-svn: 141591 | 
| | 
| 
| 
| 
| 
| | hang, and possibly SPEC/CINT2006/464_h264ref.
llvm-svn: 141560 | 
| | 
| 
| 
| 
| 
| | instructions there.
llvm-svn: 141481 | 
| | 
| 
| 
| 
| 
| | Patch by Ana Pazos!
llvm-svn: 141365 | 
| | 
| 
| 
| | llvm-svn: 141248 | 
| | 
| 
| 
| 
| 
| 
| 
| | merging an lsl #2 that has multiple uses on A9. This shift is free, so there is
no problem merging it in multiple places. Other unprofitable shifts will not be
merged.
llvm-svn: 141247 | 
| | 
| 
| 
| | llvm-svn: 141173 | 
| | 
| 
| 
| 
| 
| | it returns false, at least as far as I could tell by reading the code.
llvm-svn: 141172 | 
| | 
| 
| 
| 
| 
| 
| 
| | Math is hard, and isScaledConstantInRange() always returned false for
negative constants.  It was doing unsigned division of negative numbers
before casting back to signed.
llvm-svn: 140425 | 
| | 
| 
| 
| | llvm-svn: 139636 | 
| | 
| 
| 
| 
| 
| 
| 
| | need to preserve the sign of the index.  This fixes miscompilations of Quicksort in the nightly testsuite, and hopefully others as well.
<rdar://problem/10046188>
llvm-svn: 138885 | 
| | 
| 
| 
| | llvm-svn: 138868 | 
| | 
| 
| 
| | llvm-svn: 138845 | 
| | 
| 
| 
| 
| 
| | differently.  Update the manual instruction selection code that was encoding them the addrmode2 way even though LDR_PRE_IMM/LDRB_PRE_IMM had switched to addrmode_imm12.  Should fix a number of nightly test failures.
llvm-svn: 138758 | 
| | 
| 
| 
| | llvm-svn: 138657 | 
| | 
| 
| 
| 
| 
| | were failing to specify enough fixed bits of LDR_PRE/LDRB_PRE, resulting in decoding conflicts.  Separate them into immediate vs. register versions, allowing us to specify the necessary fixed bits.  This in turn results in the test being decoded properly, and being rejected as UNPREDICTABLE rather than a hard failure.
llvm-svn: 138653 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| | Add the predicate operand to the instructions. Update the back end
accordingly where the instructions are used. Restrict the SP operands
to actually only be SP, as otherwise these break assembly parsing for the
normal instruction variants.
llvm-svn: 138445 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| | Refactor STR[B] pre and post indexed instructions to use addressing modes for
memory operands, which is necessary for assembly parsing and is more consistent
with the rest of the memory instruction definitions. Make some incremental
progress on refactoring away the mega-operand addrmode2 along the way, which
is nice.
llvm-svn: 136978 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| | Encode the width operand as it encodes in the instruction, which simplifies
the disassembler and the encoder, by using the imm1_32 operand def. Add a
diagnostic for the context-sensitive constraint that the width must be in
the range [1,32-lsb].
llvm-svn: 136264 | 
| | 
| 
| 
| 
| 
| | for allowing the fixed-length disassembler to distinguish between SBFX and STR_PRE.
llvm-svn: 136141 | 
| | 
| 
| 
| | llvm-svn: 135785 | 
| | 
| 
| 
| 
| 
| | necessitates a lot of changes to related bits.
llvm-svn: 135722 |