| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
It helps compile exotic inline asm. In the test case, normal GR32
virtual registers use up eax-edx so the final GR32_ABCD live range has
no registers left. Since all the live ranges were tiny, we had no way of
prioritizing the smaller register class.
This patch allows tiny unspillable live ranges to be evicted by tiny
unspillable live ranges from a smaller register class.
<rdar://problem/11542429>
llvm-svn: 157715
|
| |
|
|
|
|
| |
Patch by Jack Carter.
llvm-svn: 157709
|
| |
|
|
|
|
| |
wrote and the usual LLVM convention.
llvm-svn: 157708
|
| |
|
|
|
|
| |
operands of an FMA node.
llvm-svn: 157707
|
| |
|
|
|
|
| |
just for 64-bit registers is silly. Just optimize 3 more.
llvm-svn: 157699
|
| |
|
|
|
|
|
|
|
|
|
|
| |
two values in
integer registers. This is already supported by the fastcc convention, but it doesn't
hurt to support it in the standard conventions as well.
In cases where we can cheat at the calling convention, this allows us to avoid returning
things through memory in more cases.
llvm-svn: 157698
|
| |
|
|
|
|
| |
Patch by Jush Lu <jush.msn@gmail.com>.
llvm-svn: 157696
|
| |
|
|
| |
llvm-svn: 157663
|
| |
|
|
|
|
|
|
|
|
| |
Besides adding the new insertPass function, this patch uses it to
enhance the existing -print-machineinstrs so that the MachineInstrs
after a specific pass can be printed.
Patch by Bin Zeng!
llvm-svn: 157655
|
| |
|
|
|
|
|
|
|
|
|
| |
extrq and insertq instructions.
This required light surgery on the assembler and disassembler
because the instructions use an uncommon encoding. They are
the only two instructions in x86 that use register operands
and two immediates.
llvm-svn: 157634
|
| |
|
|
| |
llvm-svn: 157594
|
| |
|
|
|
|
|
|
|
| |
because
the old verifier just checked that something "was a pointer", but not that the pointee
was correct.
llvm-svn: 157544
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
them by using edge weights.
SimplifyCFG tends to form a lot of 2-3 case switches when merging branches. Move
the most likely condition to the front so it is checked first and the others can
be skipped. This is currently not as effective as it could be because SimplifyCFG
destroys profiling metadata when merging branches and switches. Merging branch
weight metadata is tricky though.
This code touches at most 3 cases so I didn't use a proper sorting algorithm.
llvm-svn: 157521
|
| |
|
|
|
|
| |
NV_CONTRIB
llvm-svn: 157485
|
| |
|
|
|
|
| |
msvc-incompatible. (compatible to mingw32 and netbsd, though)
llvm-svn: 157474
|
| |
|
|
|
|
| |
stack-align=8, eg. win32 and netbsd.
llvm-svn: 157471
|
| |
|
|
|
|
| |
small bug in the process.
llvm-svn: 157446
|
| |
|
|
|
|
| |
Patch by Nicklas Bo Jensen.
llvm-svn: 157421
|
| |
|
|
|
|
|
|
| |
This back-end was deprecated in favor of the NVPTX back-end.
NV_CONTRIB
llvm-svn: 157417
|
| |
|
|
|
|
|
|
| |
Expand test case for this.
Patch by Reed Kotler.
llvm-svn: 157410
|
| |
|
|
|
|
|
|
| |
First code from the Mips16 compiler. Includes trivial test program.
Patch by Reed Kotler.
llvm-svn: 157408
|
| |
|
|
| |
llvm-svn: 157357
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Live ranges with a constrained register class may benefit from splitting
around individual uses. It allows the remaining live range to use a
larger register class where it may allocate. This is like spilling to a
different register class.
This is only attempted on constrained register classes.
<rdar://problem/11438902>
llvm-svn: 157354
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Now that the coalescer keeps live intervals and machine code in sync at
all times, it needs to deal with identity copies differently.
When merging two virtual registers, all identity copies are removed
right away. This means that other identity copies must come from
somewhere else, and they are going to have a value number.
Deal with such copies by merging the value numbers before erasing the
copy instruction. Otherwise, we leave dangling value numbers in the live
interval.
This fixes PR12927.
llvm-svn: 157340
|
| |
|
|
|
|
| |
Patch by Jush Lu <jush.msn@gmail.com>.
llvm-svn: 157336
|
| |
|
|
|
|
|
|
| |
objectsize intrinsic.
After a lot of discussion, we realized it's not the best option for run-time bounds checking
llvm-svn: 157255
|
| |
|
|
|
|
|
|
|
| |
Also make sure registers aren't erased twice if the dead def mentions
the register twice.
This fixes PR12911.
llvm-svn: 157254
|
| |
|
|
| |
llvm-svn: 157222
|
| |
|
|
|
|
| |
comes from two 128-bit pieces.
llvm-svn: 157175
|
| |
|
|
|
|
|
| |
may be RAUW'd by the recursive call to LegalizeOps; instead, retrieve
the other operands when calling UpdateNodeOperands. Fixes PR12889.
llvm-svn: 157162
|
| |
|
|
|
|
|
| |
This seems to fix the remaining compile-time failures on PPC64 when
compiling with -enable-ppc-preinc.
llvm-svn: 157159
|
| |
|
|
| |
llvm-svn: 157152
|
| |
|
|
|
|
| |
They need to go on the PICLDR as the verifier points out.
llvm-svn: 157151
|
| |
|
|
|
|
| |
Not all GR64 registers have sub_8bit sub-registers.
llvm-svn: 157150
|
| |
|
|
|
|
|
| |
X86 has 2-addr instructions with different constraints on the tied def
and use operands. One is GR32, one is GR32_NOSP.
llvm-svn: 157149
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Dead code elimination during coalescing could cause a virtual register
to be split into connected components. The following rewriting would be
confused about the already joined copies present in the code, but
without a corresponding value number in the live range.
Erase all joined copies instantly when joining intervals such that the
MI and LiveInterval representations are always in sync.
llvm-svn: 157135
|
| |
|
|
|
|
|
|
|
| |
The late dead code elimination is no longer necessary.
The test changes are cause by a register hint that can be either %rdi or
%rax. The choice depends on the use list order, which this patch changes.
llvm-svn: 157131
|
| |
|
|
| |
llvm-svn: 157129
|
| |
|
|
| |
llvm-svn: 157127
|
| |
|
|
|
|
| |
Patch by Jack Carter.
llvm-svn: 157093
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Use a dedicated MachO load command to annotate data-in-code regions.
This is the same format the linker produces for final executable images,
allowing consistency of representation and use of introspection tools
for both object and executable files.
Data-in-code regions are annotated via ".data_region"/".end_data_region"
directive pairs, with an optional region type.
data_region_directive := ".data_region" { region_type }
region_type := "jt8" | "jt16" | "jt32" | "jta32"
end_data_region_directive := ".end_data_region"
The previous handling of ARM-style "$d.*" labels was broken and has
been removed. Specifically, it didn't handle ARM vs. Thumb mode when
marking the end of the section.
rdar://11459456
llvm-svn: 157062
|
| |
|
|
|
|
| |
Patch by Jack Carter.
llvm-svn: 157057
|
| |
|
|
| |
llvm-svn: 157043
|
| |
|
|
|
|
|
|
|
| |
non-profitable commute using outdated info. The test case would still fail
because of poor pre-RA schedule. That will be fixed by MI scheduler.
rdar://11472010
llvm-svn: 157038
|
| |
|
|
|
|
|
|
|
|
| |
This is the same as the other tests: Clever tricks are required to make
the arguments and return value line up in a single-instruction function.
It rarely happens in real life.
We have plenty other examples of this behavior.
llvm-svn: 157030
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
This option has been disabled for a while, and it is going away so I can
clean up the coalescer code.
The tests that required physreg joining to be enabled were almost all of
the form "tiny function with interference between arguments and return
value". Such functions are usually inlined in the real world.
The problem exposed by phys_subreg_coalesce-3.ll is real, but fairly
rare.
llvm-svn: 157027
|
| |
|
|
|
|
| |
Patch by Meador Inge.
llvm-svn: 156989
|
| |
|
|
|
|
| |
rdar://11451474
llvm-svn: 156896
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
It is now possible to coalesce weird skewed sub-register copies by
picking a super-register class larger than both original registers. The
included test case produces code like this:
vld2.32 {d16, d17, d18, d19}, [r0]!
vst2.32 {d18, d19, d20, d21}, [r0]
We still perform interference checking as if it were a normal full copy
join, so this is still quite conservative. In particular, the f1 and f2
functions in the included test case still have remaining copies because
of false interference.
llvm-svn: 156878
|
| |
|
|
| |
llvm-svn: 156824
|