| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 168886
|
|
|
|
|
|
| |
style requirement.
llvm-svn: 168229
|
|
|
|
|
|
|
|
|
| |
This patch replaces the hard coded GPR pair [R0, R1] of
Intrinsic:arm_ldrexd and [R2, R3] of Intrinsic:arm_strexd with
even/odd GPRPair reg class.
Similar to the lowering of atomic_64 operation.
llvm-svn: 168207
|
|
|
|
| |
llvm-svn: 164899
|
|
|
|
|
|
| |
See: http://en.wikipedia.org/wiki/If_and_only_if Commit 164767
llvm-svn: 164768
|
|
|
|
| |
llvm-svn: 164767
|
|
|
|
|
|
|
|
|
|
| |
* wrap code blocks in \code ... \endcode;
* refer to parameter names in paragraphs correctly (\arg is not what most
people want -- it starts a new paragraph);
* use \param instead of \arg to document parameters in order to be consistent
with the rest of the codebase.
llvm-svn: 163902
|
|
|
|
| |
llvm-svn: 163803
|
|
|
|
|
|
|
|
|
|
|
| |
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
|