| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 89214
|
| |
|
|
|
|
|
|
|
|
|
|
| |
when LiveVariables is available.
The -split-phi-edges is now gone, and so is the hack to disable it when using
the local register allocator. The PHIElimination pass no longer has
LiveVariables as a prerequisite - that is what broke the local allocator.
Instead we do critical edge splitting when possible - that is when
LiveVariables is available.
llvm-svn: 89213
|
| |
|
|
| |
llvm-svn: 89198
|
| |
|
|
|
|
|
|
|
| |
contents of the block to be duplicated. Use this for ARM Cortex A8/9 to
be more aggressive tail duplicating indirect branches, since it makes it
much more likely that they will be predicted in the branch target buffer.
Testcase coming soon.
llvm-svn: 89187
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is probably not confined to *just* these two things.
Anyway, the llvm-gcc front-end may look up the structure layout information for
an abstract type. That information will be stored into a table with the FE's
TD. Instruction combine can come along and also ask for information on that
abstract type, but for a separate TD (the one associated with the pass manager).
After the type is refined, the old structure layout information in the pass
manager's TD file is out of date. If a new type is allocated in the same space
as the old-unrefined type, then the structure type information in the pass
manager's TD file will be wrong, but won't know it.
Fix this by making the TD's structure type information an abstract type user.
llvm-svn: 89176
|
| |
|
|
| |
llvm-svn: 89175
|
| |
|
|
| |
llvm-svn: 89167
|
| |
|
|
| |
llvm-svn: 89156
|
| |
|
|
|
|
| |
and creation interfaces.
llvm-svn: 89151
|
| |
|
|
| |
llvm-svn: 89145
|
| |
|
|
| |
llvm-svn: 89143
|
| |
|
|
| |
llvm-svn: 89142
|
| |
|
|
| |
llvm-svn: 89139
|
| |
|
|
|
|
| |
alignment imm (in the same way). Fix asmprinting for non-darwin platforms.
llvm-svn: 89137
|
| |
|
|
| |
llvm-svn: 89130
|
| |
|
|
| |
llvm-svn: 89129
|
| |
|
|
|
|
|
| |
The local register allocator doesn't like it when LiveVariables is run.
We should also disable edge splitting under -O0, but that has to wait a bit.
llvm-svn: 89125
|
| |
|
|
| |
llvm-svn: 89123
|
| |
|
|
|
|
| |
OS and Vendor independent target assembler arch.
llvm-svn: 89122
|
| |
|
|
|
|
|
|
|
|
|
| |
unnecessary. It is broken because the "isIdenticalTo" check should be
negated. If that is fixed, this code causes the CodeGen/X86/tail-opts.ll
test to fail, in the dont_merge_oddly function. And, I confirmed that the
regression is real -- the generated code is worse. As far as I can tell,
that tail-opts.ll test is checking for what this code is supposed to handle
and we're doing the right thing anyway.
llvm-svn: 89121
|
| |
|
|
|
|
| |
use postinc iv.
llvm-svn: 89116
|
| |
|
|
| |
llvm-svn: 89114
|
| |
|
|
|
|
|
| |
of failure. The x86 target didn't like empty cpu names and broke x86 tests on
non-x86 buildbots.
llvm-svn: 89111
|
| |
|
|
| |
llvm-svn: 89110
|
| |
|
|
|
|
| |
folding optimizations.
llvm-svn: 89109
|
| |
|
|
|
|
| |
distinguish between them and the more generic instructions (add, mov, and ldr).
llvm-svn: 89108
|
| |
|
|
|
|
|
| |
It was too difficult to keep the heuristics for merging and duplication
consistent.
llvm-svn: 89105
|
| |
|
|
| |
llvm-svn: 89082
|
| |
|
|
| |
llvm-svn: 89081
|
| |
|
|
| |
llvm-svn: 89076
|
| |
|
|
| |
llvm-svn: 89075
|
| |
|
|
| |
llvm-svn: 89066
|
| |
|
|
|
|
|
| |
libffi support and that the interpreter can't call external functions without
it. Patch by Timo Juhani Lindfors! Fixes PR5466.
llvm-svn: 89062
|
| |
|
|
| |
llvm-svn: 89056
|
| |
|
|
|
|
| |
more than one place. No intended functionality change.
llvm-svn: 89024
|
| |
|
|
|
|
|
| |
is analyzable so it can be updated. If it's not, be safe and don't move the
block.
llvm-svn: 89022
|
| |
|
|
| |
llvm-svn: 89021
|
| |
|
|
| |
llvm-svn: 89019
|
| |
|
|
|
|
|
|
|
|
| |
unconditional branches or fallthroghes. Instcombine/SimplifyCFG
should be simplifying branches with known conditions.
This fixes some problems caused by these transformations not
updating the MachineBasicBlock CFG.
llvm-svn: 89017
|
| |
|
|
| |
llvm-svn: 89016
|
| |
|
|
|
|
| |
right type.
llvm-svn: 89014
|
| |
|
|
| |
llvm-svn: 89011
|
| |
|
|
|
|
|
| |
0b1110 (ALways). This is so that the disassembler decoder can distinguish among
BX_RET, BRIND, and BXr9.
llvm-svn: 89000
|
| |
|
|
|
|
| |
uninitialized memory.
llvm-svn: 88985
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The large code model is documented at
http://www.x86-64.org/documentation/abi.pdf and says that calls should
assume their target doesn't live within the 32-bit pc-relative offset
that fits in the call instruction.
To do this, we turn off the global-address->target-global-address
conversion in X86TargetLowering::LowerCall(). The first attempt at
this broke the lazy JIT because it can separate the movabs(imm->reg)
from the actual call instruction. The lazy JIT receives the address of
the movabs as a relocation and needs to record the return address from
the call; and then when that call happens, it needs to patch the
movabs with the newly-compiled target. We could thread the call
instruction into the relocation and record the movabs<->call mapping
explicitly, but that seems to require at least as much new
complication in the code generator as this change.
To fix this, we make lazy functions _always_ go through a call
stub. You'd think we'd only have to force lazy calls through a stub on
difficult platforms, but that turns out to break indirect calls
through a function pointer. The right fix for that is to distinguish
between calls and address-of operations on uncompiled functions, but
that's complex enough to leave for someone else to do.
Another attempt at this defined a new CALL64i pseudo-instruction,
which expanded to a 2-instruction sequence in the assembly output and
was special-cased in the X86CodeEmitter's emitInstruction()
function. That broke indirect calls in the same way as above.
This patch also removes a hack forcing Darwin to the small code model.
Without far-call-stubs, the small code model requires things of the
JITMemoryManager that the DefaultJITMemoryManager can't provide.
Thanks to echristo for lots of testing!
llvm-svn: 88984
|
| |
|
|
|
|
|
|
| |
/ store folding instructions are not referencing spill stack slots.
- Mark MOVUPSrm re-materializable.
llvm-svn: 88974
|
| |
|
|
| |
llvm-svn: 88973
|
| |
|
|
|
|
|
| |
The Mask and LHSMask may not be of the same size, so don't do the
transformation if they're different.
llvm-svn: 88972
|
| |
|
|
| |
llvm-svn: 88964
|
| |
|
|
| |
llvm-svn: 88961
|