| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
| |
new ranges.
When a large live range is evicted, it will usually be split when it comes
around again. By deferring evicted live ranges, the splitting happens at a time
when the interference pattern is more realistic. This prevents repeated
splitting and evictions.
llvm-svn: 126282
|
|
|
|
| |
llvm-svn: 126277
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Use interval sizes instead of spill weights to determine if it is legal to evict
interference. A smaller interval can evict interference if all interfering live
ranges are larger.
Allow multiple interferences to be evicted as along as they are all larger than
the live range being allocated.
Spill weights are still used to select the preferred eviction candidate.
llvm-svn: 126276
|
|
|
|
| |
llvm-svn: 126264
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
allocated first.
This is based on the observation that long live ranges are more difficult to
allocate, so there is a better chance of solving the puzzle by handling the big
pieces first. The allocator will evict and split long alive ranges when they get
in the way.
RABasic is still using spill weights for its priority queue, so the interface to
the queue has been virtualized.
llvm-svn: 126259
|
|
|
|
| |
llvm-svn: 126258
|
|
|
|
|
|
| |
values from all of the loop's exiting blocks are equal. Patch by Andrew Clinton.
llvm-svn: 126253
|
|
|
|
| |
llvm-svn: 126244
|
|
|
|
|
|
| |
Cortex-A8 only.
llvm-svn: 126238
|
|
|
|
|
|
| |
clang uses DBuilder, so it requries corresponding change.
llvm-svn: 126231
|
|
|
|
| |
llvm-svn: 126226
|
|
|
|
|
|
| |
parser.
llvm-svn: 126225
|
|
|
|
|
|
|
|
|
| |
share entries. Add a DenseSet to MachineConstantPool for the MachineCPVs that
it owns.
This will hopefully fix the MC/ARM/elf-reloc-01.ll failure on the leaks bots.
llvm-svn: 126218
|
|
|
|
| |
llvm-svn: 126192
|
|
|
|
|
|
| |
rdar://9027648.
llvm-svn: 126191
|
|
|
|
|
|
|
| |
Apparently it's ok for multiple operands to "kill" the same register.
Fixes PR9237.
llvm-svn: 126190
|
|
|
|
| |
llvm-svn: 126185
|
|
|
|
|
|
|
|
|
| |
up by the dynamic linker, but it's better to use the correct instruction
to begin with.
Fixes rdar://9011034
llvm-svn: 126176
|
|
|
|
|
|
|
|
|
| |
registers
at phis. This enables us to eliminate a lot of pointless zexts during the DAGCombine
phase. This fixes <rdar://problem/8760114>.
llvm-svn: 126170
|
|
|
|
|
|
| |
allows for the information propagated across basic blocks to be merged at phis.
llvm-svn: 126169
|
|
|
|
|
|
| |
From Dimitry Andric.
llvm-svn: 126168
|
|
|
|
|
|
| |
Patch by Jai Menon.
llvm-svn: 126165
|
|
|
|
| |
llvm-svn: 126163
|
|
|
|
|
|
| |
in a IT block. rdar://9030770
llvm-svn: 126159
|
|
|
|
| |
llvm-svn: 126158
|
|
|
|
| |
llvm-svn: 126157
|
|
|
|
|
|
|
|
|
|
|
| |
LiveIns."
In other words, do not keep track of argument's location. The debugger (gdb) is not prepared to see line table entries for arguments. For the debugger, "second" line table entry marks beginning of function body.
This requires some coordination with debugger to get this working.
- The debugger needs to be aware of prolog_end attribute attached with line table entries.
- The compiler needs to accurately mark prolog_end in line table entries (at -O0 and at -O1+)
llvm-svn: 126155
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
terminate.
An original endpoint is an instruction that killed or defined the original live
range before any live ranges were split.
When splitting global live ranges, avoid creating local live ranges without any
original endpoints. We may still create global live ranges without original
endpoints, but such a range won't be split again, and live range splitting still
terminates.
llvm-svn: 126151
|
|
|
|
|
|
|
|
| |
X86 instruction decode structure was being interpreted as
being in units of bits, although it is actually stored in
units of bytes.
llvm-svn: 126147
|
|
|
|
| |
llvm-svn: 126141
|
|
|
|
| |
llvm-svn: 126132
|
|
|
|
| |
llvm-svn: 126130
|
|
|
|
|
|
|
|
|
|
|
|
| |
itself without going via a phi node then we could return false here in
spite of making a change. Also, tweak the comment because this method
can (and always could) return true without deleting the original phi node.
For example, if the phi node was used by a read-only invoke instruction
which is used by another phi node phi2 which is only used by and only uses
the invoke, then phi2 would be deleted but not the invoke instruction and
not the original phi node.
llvm-svn: 126129
|
|
|
|
|
|
| |
Radar 9012638.
llvm-svn: 126127
|
|
|
|
|
|
| |
but which is responsible for us doing really bad things to 256.bzip2.
llvm-svn: 126126
|
|
|
|
| |
llvm-svn: 126125
|
|
|
|
|
|
|
|
| |
should be that if the phi is used by a side-effect free instruction with
no uses then the phi and the instruction now get zapped (checked by the
unittest).
llvm-svn: 126124
|
|
|
|
|
|
|
| |
"dllimport" function must not be GlobalVariable, but Function. It is enough to check with GlobalValue.
test/CodeGen/X86/dll-linkage.ll is updated to check llc -O0.
llvm-svn: 126110
|
|
|
|
| |
llvm-svn: 126108
|
|
|
|
| |
llvm-svn: 126103
|
|
|
|
| |
llvm-svn: 126102
|
|
|
|
| |
llvm-svn: 126101
|
|
|
|
|
|
| |
on Core 2 and Nehalem, so the code we generate is better than GCC's here.
llvm-svn: 126100
|
|
|
|
|
|
| |
independent vectors.
llvm-svn: 126099
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
approximation
of a constant had a minor typo introduced when copying it from the book, which
caused it to favor negative approximations over positive approximations in many
cases. Positive approximations require fewer operations beyond the multiplication.
In the case of division by 3, we still generate code that is a single instruction
larger than GCC's code.
llvm-svn: 126097
|
|
|
|
|
|
| |
PR9245.
llvm-svn: 126091
|
|
|
|
|
|
|
|
|
| |
test for that. With this change, test/CodeGen/X86/codegen-dce.ll no longer finds
any instructions to DCE, so delete the test.
Also renamed J and JP to I and IP in RecursivelyDeleteDeadPHINode.
llvm-svn: 126088
|
|
|
|
| |
llvm-svn: 126082
|
|
|
|
|
|
|
|
|
| |
We usually catch this kind of optimization through InstSimplify's distributive
magic, but or doesn't distribute over xor in general.
"A | ~(A | B) -> A | ~B" hits 24 times on gcc.c.
llvm-svn: 126081
|
|
|
|
|
|
|
|
| |
The DAGCombiner folds the zext into complex load instructions. This patch
prevents this optimization on vectors since none of the supported targets
knows how to perform load+vector_zext in one instruction.
llvm-svn: 126080
|