| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
|
|
|
|
|
| |
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: 145510
|
| |
|
|
| |
llvm-svn: 145504
|
| |
|
|
| |
llvm-svn: 145450
|
| |
|
|
| |
llvm-svn: 145442
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The EmitBasePointerRecalculation function has 2 problems, one minor and one
fatal. The minor problem is that it inserts the code at the setjmp
instead of in the dispatch block. The fatal problem is that at the point
where this code runs, we don't know whether there will be a base pointer,
so the entire function is a no-op. The base pointer recalculation needs to
be handled as it was before, by inserting a pseudo instruction that gets
expanded late.
Most of the support for the old approach is still here, but it no longer
has any connection to the eh_sjlj_dispatchsetup intrinsic. Clean up the
parts related to the intrinsic and just generate the pseudo instruction
directly.
llvm-svn: 144781
|
| |
|
|
|
|
| |
Original commit msg: 'ARM assembly parsing for VST1 two-register encoding.'
llvm-svn: 144437
|
| |
|
|
| |
llvm-svn: 143369
|
| |
|
|
|
|
|
| |
The _fixed variants have a writeback operand, but not a stride operand.
Split the conditional flag to distinguish the cases.
llvm-svn: 143356
|
| |
|
|
| |
llvm-svn: 142877
|
| |
|
|
|
|
| |
Three entry register list variation.
llvm-svn: 142876
|
| |
|
|
|
|
|
|
| |
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: 142704
|
| |
|
|
| |
llvm-svn: 142691
|
| |
|
|
| |
llvm-svn: 142682
|
| |
|
|
| |
llvm-svn: 142675
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Next step in the ongoing saga of NEON load/store assmebly parsing. Handle
VLD1 instructions that take a two-register register list.
Adjust the instruction definitions to only have the single encoded register
as an operand. The super-register from the pseudo is kept as an implicit def,
so passes which come after pseudo-expansion still know that the instruction
defines the other subregs.
llvm-svn: 142670
|
| |
|
|
| |
llvm-svn: 139024
|
| |
|
|
| |
llvm-svn: 138177
|
| |
|
|
|
|
|
| |
Therefore, rather then generate a pseudo instruction, which is later expanded,
generate the necessary instructions in place.
llvm-svn: 138163
|
| |
|
|
| |
llvm-svn: 138025
|
| |
|
|
|
|
|
| |
Apparently we never added code to expand these pseudo instructions, and in
over a year, no one has noticed. Our register allocator must be awesome!
llvm-svn: 137551
|
| |
|
|
|
|
|
|
|
|
| |
This hidden llc option runs the machine code verifier after expanding
ARM pseudo-instructions, but before if-conversion.
The machine code verifier is much better at pointing out liveness errors
that can trip up the register scavenger.
llvm-svn: 136439
|
| |
|
|
|
|
| |
necessitates a lot of changes to related bits.
llvm-svn: 135722
|
| |
|
|
|
|
| |
allowing us to distinguish the encodings that use shifted registers from those that use shifted immediates. This is necessary to allow the fixed-length decoder to distinguish things like BICS vs LDRH.
llvm-svn: 135693
|
| |
|
|
|
|
| |
ARM MC code from target.
llvm-svn: 135636
|
| |
|
|
|
|
| |
to simplify the path towards an auto-generated disassembler.
llvm-svn: 135290
|
| |
|
|
| |
llvm-svn: 135047
|
| |
|
|
|
|
|
|
| |
t2MOVCC[ri] are just t2MOV[ri] instructions, so properly pseudo-ize them.
The Thumb1 versions, tMOVCC[ri] were only present for use by the size-
reduction pass, so they're no longer necessary at all and can be deleted.
llvm-svn: 134242
|
| |
|
|
|
|
|
| |
It's just a call to a special helper function. Get rid of the T2 variant
entirely, as it's identical to the Thumb1 version.
llvm-svn: 134178
|
| |
|
|
|
|
|
|
| |
sink them into MC layer.
- Added MCInstrInfo, which captures the tablegen generated static data. Chang
TargetInstrInfo so it's based off MCInstrInfo.
llvm-svn: 134021
|
| |
|
|
|
|
| |
There are probably more instances of this floating around.
llvm-svn: 130474
|
| |
|
|
| |
llvm-svn: 129738
|
| |
|
|
|
|
| |
doing the expansion earlier (using a custom inserter) to allow for the chance of predicating these instructions.
llvm-svn: 128940
|
| |
|
|
|
|
| |
ADC/ABC with the appropriate S-bit input value.
llvm-svn: 128892
|
| |
|
|
|
|
| |
actually exist.
llvm-svn: 128461
|
| |
|
|
| |
llvm-svn: 127840
|
| |
|
|
| |
llvm-svn: 127506
|
| |
|
|
| |
llvm-svn: 127505
|
| |
|
|
|
|
| |
and VDUPLN32d, respectively.
llvm-svn: 127486
|
| |
|
|
| |
llvm-svn: 127482
|
| |
|
|
| |
llvm-svn: 127442
|
| |
|
|
| |
llvm-svn: 127434
|
| |
|
|
|
|
|
| |
This is just very first approximation how the stuff should be done
(e.g. ARM-only for now). More to follow.
llvm-svn: 127101
|
| |
|
|
|
|
| |
(which worked around it). This should get us back to the old, correct behavior, though it will make the integrated assembler unhappy for the time being.
llvm-svn: 125127
|
| |
|
|
|
|
|
|
|
|
|
|
| |
These operations are expanded to pairs of loads or stores, and the first one
uses the address register update to produce the address for the second one.
So far, the second load/store has also updated the address register, just
for convenience, since that output has never been used. In anticipation of
actually supporting post-increment updates for these operations, this changes
the non-updating operations to use a non-updating load/store for the second
instruction.
llvm-svn: 125013
|
| |
|
|
|
|
|
|
|
|
| |
clang's -Wuninitialized-experimental warning.
While these don't look like real bugs, clang's
-Wuninitialized-experimental analysis is stricter
than GCC's, and these fixes have the benefit
of being general nice cleanups.
llvm-svn: 124073
|
| |
|
|
|
|
|
|
|
|
| |
1. Fixed ARM pc adjustment.
2. Fixed dynamic-no-pic codegen
3. CSE of pc-relative load of global addresses.
It's now enabled by default for Darwin.
llvm-svn: 123991
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
TargetInstrInfo:
Change produceSameValue() to take MachineRegisterInfo as an optional argument.
When in SSA form, targets can use it to make more aggressive equality analysis.
Machine LICM:
1. Eliminate isLoadFromConstantMemory, use MI.isInvariantLoad instead.
2. Fix a bug which prevent CSE of instructions which are not re-materializable.
3. Use improved form of produceSameValue.
ARM:
1. Teach ARM produceSameValue to look pass some PIC labels.
2. Look for operands from different loads of different constant pool entries
which have same values.
3. Re-implement PIC GA materialization using movw + movt. Combine the pair with
a "add pc" or "ldr [pc]" to form pseudo instructions. This makes it possible
to re-materialize the instruction, allow machine LICM to hoist the set of
instructions out of the loop and make it possible to CSE them. It's a bit
hacky, but it significantly improve code quality.
4. Some minor bug fixes as well.
With the fixes, using movw + movt to materialize GAs significantly outperform the
load from constantpool method. 186.crafty and 255.vortex improved > 20%, 254.gap
and 176.gcc ~10%.
llvm-svn: 123905
|
| |
|
|
|
|
|
|
|
|
|
|
| |
movw r0, :lower16:(L_foo$non_lazy_ptr-(LPC0_0+4))
movt r0, :upper16:(L_foo$non_lazy_ptr-(LPC0_0+4))
LPC0_0:
add r0, pc, r0
It's not yet enabled by default as some tests are failing. I suspect bugs in
down stream tools.
llvm-svn: 123619
|