| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
| |
take r13, so we can just make it a GPR. This fixes PR8825.
llvm-svn: 131507
|
|
|
|
|
|
|
|
| |
encodings. They
were marked as taking a tGPR when in reality they take an rGPR.
llvm-svn: 131506
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
sub-registers.
LiveVariables doesn't understand that clobbering D0 and D1 completely overwrites
Q0, so if Q0 is live-in to a function, its live range will extend beyond a
function call that only clobbers D0 and D1. This shows up in the
ARM/2009-11-01-NeonMoves test case.
LiveVariables should probably implement the much stricter rules for physreg
liveness that RAFast imposes - a physreg is killed by the first use of any
alias.
llvm-svn: 130801
|
|
|
|
|
|
| |
it's possible.
llvm-svn: 130764
|
|
|
|
| |
llvm-svn: 130763
|
|
|
|
|
|
| |
ARM/Thumb2 patterns.
llvm-svn: 130552
|
|
|
|
|
|
| |
Generalization of Nate Begeman's patch!
llvm-svn: 130502
|
|
|
|
|
|
|
|
| |
immediate patterns in arm to using the pattern.
Handles rdar://9299434
llvm-svn: 130386
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Fixes Thumb2 ADCS and SBCS lowering: <rdar://problem/9275821>.
t2ADCS/t2SBCS are now pseudo instructions, consistent with ARM, so the
assembly printer correctly prints the 's' suffix.
Fixes Thumb2 adde -> SBC matching to check for live/dead carry flags.
Fixes the internal ARM machine opcode mnemonic for ADCS/SBCS.
Fixes ARM SBC lowering to check for live carry (potential bug).
llvm-svn: 130048
|
|
|
|
|
|
| |
rdar://problem/9292717
llvm-svn: 129619
|
|
|
|
|
|
| |
Luis Felipe Strano Moraes!
llvm-svn: 129558
|
|
|
|
|
| |
Ref: I.1 Instruction encoding diagrams and pseudocode
llvm-svn: 129552
|
|
|
|
|
|
| |
rdar://problem/9279440
llvm-svn: 129469
|
|
|
|
|
|
| |
http://llvm.org/viewvc/llvm-project?view=rev&revision=129387.
llvm-svn: 129451
|
|
|
|
|
|
|
|
|
|
| |
instructions.
The ARMARM specifies these instructions as unpredictable when storing the
writeback register. This shouldn't affect code generation much since storing a
pointer to itself is quite rare.
llvm-svn: 129409
|
|
|
|
|
|
|
|
|
|
| |
In addition, the base register is not rGPR, but GPR with th exception that:
if n == 15 then UNPREDICTABLE
rdar://problem/9273836
llvm-svn: 129391
|
|
|
|
|
|
|
|
|
|
| |
its Inst{23}
be specified as '1' (add = TRUE).
Also add a utility function for Thumb2.
llvm-svn: 129377
|
|
|
|
| |
llvm-svn: 128236
|
|
|
|
| |
llvm-svn: 128085
|
|
|
|
| |
llvm-svn: 127913
|
|
|
|
| |
llvm-svn: 127888
|
|
|
|
| |
llvm-svn: 127601
|
|
|
|
|
|
| |
testcases for the disassembler to make sure it still works for "msr".
llvm-svn: 125948
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Add custom operand matching for imod and iflags.
- Rename SplitMnemonicAndCC to SplitMnemonic since it splits more than CC
from mnemonic.
- While adding ".w" as an operand, don't change "Head" to avoid passing the
wrong mnemonic to ParseOperand.
- Add asm parser tests.
- Add disassembler tests just to make sure it can catch all cps versions.
llvm-svn: 125489
|
|
|
|
|
|
| |
(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
|
|
|
|
|
|
| |
until the instructions are emitted or printed.
llvm-svn: 125010
|
|
|
|
| |
llvm-svn: 124288
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
| |
qadd and qdadd uses "rd, rm, rn", the same applies to the 'sub' variants. This
is described in ARM manuals and matches the encoding used by the gnu assembler.
llvm-svn: 123975
|
|
|
|
| |
llvm-svn: 123936
|
|
|
|
| |
llvm-svn: 123930
|
|
|
|
| |
llvm-svn: 123929
|
|
|
|
| |
llvm-svn: 123919
|
|
|
|
| |
llvm-svn: 123907
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
| |
materialize GA indirect symbols.
llvm-svn: 123809
|
|
|
|
| |
llvm-svn: 123778
|
|
|
|
| |
llvm-svn: 123776
|
|
|
|
|
|
| |
instruction
llvm-svn: 123770
|
|
|
|
| |
llvm-svn: 123722
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
| |
in the right direction. It eliminated some hacks and will unblock codegen
work. But it's far from being done. It doesn't reject illegal expressions,
e.g. (FOO - :lower16:BAR). It also doesn't work in Thumb2 mode at all.
llvm-svn: 123369
|
|
|
|
|
|
| |
instructions but are restricted pseudo forms.
llvm-svn: 123177
|
|
|
|
| |
llvm-svn: 122076
|
|
|
|
| |
llvm-svn: 121878
|
|
|
|
|
|
| |
rdar://8768390
llvm-svn: 121876
|
|
|
|
| |
llvm-svn: 121789
|
|
|
|
|
|
|
|
| |
much later, which makes the entire
process cleaner.
llvm-svn: 121735
|
|
|
|
| |
llvm-svn: 121726
|
|
|
|
|
|
|
|
| |
Provide correct fixups for Thumb2 ADR,
which is _of course_ different from ARM ADR fixups, or any other Thumb2 fixup.
llvm-svn: 121721
|