| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 147966
|
| |
|
|
|
|
|
|
| |
Allow LDRD to be formed from pairs with different LDR encodings. This was the original intention of the pass. Somewhere along the way, the LDR opcodes were refined which broke the optimization. We really don't care what the original opcodes are as long as they both map to the same LDRD and the immediate still fits.
Fixes rdar://10435045 ARMLoadStoreOptimization cannot handle mixed LDRi8/LDRi12
llvm-svn: 147922
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This function runs after all constant islands have been placed, and may
shrink some instructions to their 2-byte forms. This can actually cause
some constant pool entries to move out of range because of growing
alignment padding.
Treat instructions that may be shrunk the same as inline asm - they
erode the known alignment bits.
Also reinstate an old assertion in verify(). It is correct now that
basic block offsets include alignments.
Add a single large test case that will hopefully exercise many parts of
the constant island pass.
<rdar://problem/10670199>
llvm-svn: 147885
|
| |
|
|
|
|
| |
rdar://10663487
llvm-svn: 147876
|
| |
|
|
| |
llvm-svn: 147870
|
| |
|
|
| |
llvm-svn: 147867
|
| |
|
|
| |
llvm-svn: 147855
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
On Thumb, the displacement computation hardware uses the address of the
current instruction rouned down to a multiple of 4. Include this
rounding in the UserOffset we compute for each instruction.
When inline asm is present, the instruction alignment may not be known.
Constrain the maximum displacement instead in that case.
This makes it possible for CreateNewWater() and OffsetIsInRange() to
agree about the valid displacements. When they disagree, infinite
looping happens.
As always, test cases for this stuff are insane.
<rdar://problem/10660175>
llvm-svn: 147825
|
| |
|
|
|
|
|
|
|
| |
The pass is prone to looping, and it is better to crash than loop
forever, even in a -Asserts build.
<rdar://problem/10660175>
llvm-svn: 147806
|
| |
|
|
| |
llvm-svn: 147752
|
| |
|
|
|
|
| |
Darwin doesn't do static, and ELF targets only support static.
llvm-svn: 147740
|
| |
|
|
|
|
| |
is discouraged now.
llvm-svn: 147738
|
| |
|
|
|
|
|
|
|
| |
This enables basic local CSE, giving us 20% smaller code for
consumer-typeset in -O0 builds.
<rdar://problem/10658692>
llvm-svn: 147720
|
| |
|
|
|
|
|
| |
exposed with an upcoming change will would delete the copy to return register
because there is no use! It's amazing anything works.
llvm-svn: 147715
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
This eliminates a lot of constant pool entries for -O0 builds of code
with many global variable accesses.
This speeds up -O0 codegen of consumer-typeset by 2x because the
constant island pass no longer has to look at thousands of constant pool
entries.
<rdar://problem/10629774>
llvm-svn: 147712
|
| |
|
|
|
|
| |
Experiments show this to be a small speedup for modern ARM cores.
llvm-svn: 147689
|
| |
|
|
| |
llvm-svn: 147685
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Now that canRealignStack() understands frozen reserved registers, it is
safe to use it for aligned spill instructions.
It will only return true if the registers reserved at the beginning of
register allocation allow for dynamic stack realignment.
<rdar://problem/10625436>
llvm-svn: 147579
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Once register allocation has started the reserved registers are frozen.
Fix the ARM canRealignStack() hook to respect the frozen register state.
Now the hook returns false if register allocation was started with frame
pointer elimination enabled.
It also returns false if register allocation started without a reserved
base pointer, and stack realignment would require a base pointer. This
bug was breaking oggenc on armv6.
No test case, an upcoming patch will use this functionality to realign
the stack for spill slots when possible.
llvm-svn: 147578
|
| |
|
|
| |
llvm-svn: 147513
|
| |
|
|
|
|
|
|
|
| |
This patch caused a miscompilation of oggenc because a frame pointer was
suddenly needed halfway through register allocation.
<rdar://problem/10625436>
llvm-svn: 147487
|
| |
|
|
|
|
|
|
| |
If anybody has strong feelings about 'default: assert(0 && "blah")' vs
'default: llvm_unreachable("blah")', feel free to regularize the instances of
each in this file.
llvm-svn: 147459
|
| |
|
|
| |
llvm-svn: 147238
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
ARM targets with NEON units have access to aligned vector loads and
stores that are potentially faster than unaligned operations.
Add support for spilling the callee-saved NEON registers to an aligned
stack area using 16-byte aligned NEON loads and store.
This feature is off by default, controlled by an -align-neon-spills
command line option.
llvm-svn: 147211
|
| |
|
|
|
|
|
|
|
|
|
| |
My change r146949 added register clobbers to the eh_sjlj_dispatchsetup pseudo
instruction, but on Thumb1 some of those registers cannot be used. This
caused massive failures on the testsuite when compiling for Thumb1. While
fixing that, I noticed that the eh_sjlj_setjmp instruction has a "nofp"
variant, and I realized that dispatchsetup needs the same thing, so I have
added that as well.
llvm-svn: 147204
|
| |
|
|
|
|
| |
rdar://10558523
llvm-svn: 147189
|
| |
|
|
|
|
| |
Noticed by inspection; I don't have a testcase for this.
llvm-svn: 147188
|
| |
|
|
| |
llvm-svn: 147184
|
| |
|
|
|
|
| |
Fixes PR11214.
llvm-svn: 147180
|
| |
|
|
|
|
|
|
|
|
| |
The value from the operands isn't right yet, but we weren't encoding it at
all previously. The parser needs to twiddle the values when building the
instruction.
Partial for: rdar://10558523
llvm-svn: 147170
|
| |
|
|
| |
llvm-svn: 147169
|
| |
|
|
| |
llvm-svn: 147158
|
| |
|
|
|
|
|
|
| |
Just treat it as-if the shift wasn't there at all. 'as' compatibility.
rdar://10604767
llvm-svn: 147153
|
| |
|
|
| |
llvm-svn: 147152
|
| |
|
|
| |
llvm-svn: 147151
|
| |
|
|
| |
llvm-svn: 147150
|
| |
|
|
| |
llvm-svn: 147132
|
| |
|
|
| |
llvm-svn: 147121
|
| |
|
|
| |
llvm-svn: 147119
|
| |
|
|
| |
llvm-svn: 147117
|
| |
|
|
| |
llvm-svn: 147115
|
| |
|
|
| |
llvm-svn: 147109
|
| |
|
|
| |
llvm-svn: 147104
|
| |
|
|
| |
llvm-svn: 147103
|
| |
|
|
| |
llvm-svn: 147102
|
| |
|
|
|
|
|
|
|
|
| |
Rather than require the symbol to be explicitly an argument of the directive,
allow it to look ahead and grab the symbol from the next non-whitespace
line.
rdar://10611140
llvm-svn: 147100
|
| |
|
|
|
|
|
|
| |
Maps to the RRX instruction. Missed this case earlier.
rdar://10615373
llvm-svn: 147096
|
| |
|
|
|
|
|
|
| |
These map to the ASR, LSR, LSL, ROR instruction definitions.
rdar://10615373
llvm-svn: 147094
|
| |
|
|
| |
llvm-svn: 147071
|
| |
|
|
| |
llvm-svn: 147069
|