| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
extra load.
llvm-svn: 44467
|
| |
|
|
| |
llvm-svn: 44446
|
| |
|
|
| |
llvm-svn: 44443
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
in the middle of a split basic block, create a new live interval starting at
the def. This avoid artifically extending the live interval over a number of
cycles where it is dead. e.g.
bb1:
= vr1204 (use / kill) <= new interval starts and ends here.
...
...
vr1204 = (new def) <= start a new interval here.
= vr1204 (use)
llvm-svn: 44436
|
| |
|
|
| |
llvm-svn: 44434
|
| |
|
|
| |
llvm-svn: 44428
|
| |
|
|
| |
llvm-svn: 44427
|
| |
|
|
|
|
| |
use them.
llvm-svn: 44403
|
| |
|
|
| |
llvm-svn: 44399
|
| |
|
|
| |
llvm-svn: 44386
|
| |
|
|
| |
llvm-svn: 44384
|
| |
|
|
| |
llvm-svn: 44371
|
| |
|
|
|
|
|
|
|
|
|
|
| |
the function type, instead they belong to functions
and function calls. This is an updated and slightly
corrected version of Reid Spencer's original patch.
The only known problem is that auto-upgrading of
bitcode files doesn't seem to work properly (see
test/Bitcode/AutoUpgradeIntrinsics.ll). Hopefully
a bitcode guru (who might that be? :) ) will fix it.
llvm-svn: 44359
|
| |
|
|
| |
llvm-svn: 44352
|
| |
|
|
| |
llvm-svn: 44351
|
| |
|
|
|
|
|
|
|
| |
optimized. This avoids creating illegal divisions when the combiner is
running after legalize; this fixes PR1815. Also, it produces better
code in the included testcase by avoiding the subtract and multiply
when the division isn't optimized.
llvm-svn: 44341
|
| |
|
|
| |
llvm-svn: 44304
|
| |
|
|
|
|
|
|
| |
Improve a comment.
Unbreak Duncan's carefully written path compression where I didn't realize
what was happening!
llvm-svn: 44301
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
1) Change the interface to TargetLowering::ExpandOperationResult to
take and return entire NODES that need a result expanded, not just
the value. This allows us to handle things like READCYCLECOUNTER,
which returns two values.
2) Implement (extremely limited) support in LegalizeDAG::ExpandOp for MERGE_VALUES.
3) Reimplement custom lowering in LegalizeDAGTypes in terms of the new
ExpandOperationResult. This makes the result simpler and fully
general.
4) Implement (fully general) expand support for MERGE_VALUES in LegalizeDAGTypes.
5) Implement ExpandOperationResult support for ARM f64->i64 bitconvert and ARM
i64 shifts, allowing them to work with LegalizeDAGTypes.
6) Implement ExpandOperationResult support for X86 READCYCLECOUNTER and FP_TO_SINT,
allowing them to work with LegalizeDAGTypes.
LegalizeDAGTypes now passes several more X86 codegen tests when enabled and when
type legalization in LegalizeDAG is ifdef'd out.
llvm-svn: 44300
|
| |
|
|
|
|
|
|
| |
node A gets back into the DAG again because it was hiding in
one of the node maps: make sure that node replacement happens
in those maps too.
llvm-svn: 44263
|
| |
|
|
|
|
| |
for Darwin PPC, but it's not fully working yet.
llvm-svn: 44258
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Fix a couple of problems:
1. Don't assume the VT-1 is a VT that is half the size.
2. Treat vectors of FP in the vector path, not the FP path.
This has a couple of remaining problems before it will work with
the code in PR1811: the code below this change assumes that it can
use extload/shift/or to construct the result, which isn't right for
vectors.
This also doesn't handle vectors of 1 or vectors that aren't pow-2.
llvm-svn: 44243
|
| |
|
|
| |
llvm-svn: 44242
|
| |
|
|
| |
llvm-svn: 44239
|
| |
|
|
| |
llvm-svn: 44233
|
| |
|
|
| |
llvm-svn: 44204
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When a live interval is being spilled, rather than creating short, non-spillable
intervals for every def / use, split the interval at BB boundaries. That is, for
every BB where the live interval is defined or used, create a new interval that
covers all the defs and uses in the BB.
This is designed to eliminate one common problem: multiple reloads of the same
value in a single basic block. Note, it does *not* decrease the number of spills
since no copies are inserted so the split intervals are *connected* through
spill and reloads (or rematerialization). The newly created intervals can be
spilled again, in that case, since it does not span multiple basic blocks, it's
spilled in the usual manner. However, it can reuse the same stack slot as the
previously split interval.
This is currently controlled by -split-intervals-at-bb.
llvm-svn: 44198
|
| |
|
|
|
|
| |
Codegen bits and llvm-gcc support will follow.
llvm-svn: 44182
|
| |
|
|
| |
llvm-svn: 44181
|
| |
|
|
| |
llvm-svn: 44167
|
| |
|
|
| |
llvm-svn: 44166
|
| |
|
|
| |
llvm-svn: 44154
|
| |
|
|
| |
llvm-svn: 44153
|
| |
|
|
|
|
|
|
| |
applied
to all targets uses GOT-relative offsets for PIC (Alpha?)
llvm-svn: 44108
|
| |
|
|
|
|
|
|
|
|
|
| |
MachineOperand auxInfo. Previous clunky implementation uses an external map
to track sub-register uses. That works because register allocator uses
a new virtual register for each spilled use. With interval splitting (coming
soon), we may have multiple uses of the same register some of which are
of using different sub-registers from others. It's too fragile to constantly
update the information.
llvm-svn: 44104
|
| |
|
|
|
|
| |
interference.
llvm-svn: 44064
|
| |
|
|
| |
llvm-svn: 44063
|
| |
|
|
|
|
|
|
| |
to use different mappings for EH and debug info;
no functional change yet.
Fix warning in X86CodeEmitter.
llvm-svn: 44056
|
| |
|
|
|
|
|
|
|
|
|
| |
adjustment fields, and an optional flag. If there is a "dynamic_stackalloc" in
the code, make sure that it's bracketed by CALLSEQ_START and CALLSEQ_END. If
not, then there is the potential for the stack to be changed while the stack's
being used by another instruction (like a call).
This can only result in tears...
llvm-svn: 44037
|
| |
|
|
| |
llvm-svn: 44019
|
| |
|
|
| |
llvm-svn: 44010
|
| |
|
|
|
|
| |
to be a pass of its own. Instead, move it out into a helper method.
llvm-svn: 44002
|
| |
|
|
| |
llvm-svn: 43960
|
| |
|
|
| |
llvm-svn: 43944
|
| |
|
|
|
|
|
|
| |
apints on big-endian machines if the bitwidth is
not a multiple of 8. Introduce a new helper,
MVT::getStoreSizeInBits, and use it.
llvm-svn: 43934
|
| |
|
|
| |
llvm-svn: 43933
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Then:
call "L1$pb"
"L1$pb":
popl %eax
...
LBB1_1: # entry
imull $4, %ecx, %ecx
leal LJTI1_0-"L1$pb"(%eax), %edx
addl LJTI1_0-"L1$pb"(%ecx,%eax), %edx
jmpl *%edx
.align 2
.set L1_0_set_3,LBB1_3-LJTI1_0
.set L1_0_set_2,LBB1_2-LJTI1_0
.set L1_0_set_5,LBB1_5-LJTI1_0
.set L1_0_set_4,LBB1_4-LJTI1_0
LJTI1_0:
.long L1_0_set_3
.long L1_0_set_2
Now:
call "L1$pb"
"L1$pb":
popl %eax
...
LBB1_1: # entry
addl LJTI1_0-"L1$pb"(%eax,%ecx,4), %eax
jmpl *%eax
.align 2
.set L1_0_set_3,LBB1_3-"L1$pb"
.set L1_0_set_2,LBB1_2-"L1$pb"
.set L1_0_set_5,LBB1_5-"L1$pb"
.set L1_0_set_4,LBB1_4-"L1$pb"
LJTI1_0:
.long L1_0_set_3
.long L1_0_set_2
llvm-svn: 43924
|
| |
|
|
| |
llvm-svn: 43923
|
| |
|
|
| |
llvm-svn: 43922
|
| |
|
|
| |
llvm-svn: 43911
|