| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
| |
This function was longer than 250 lines, which is way too long
in my own standard. This patch reduces the size. It is still
too long, but this patch should be toward the right direction.
llvm-svn: 256411
|
| |
|
|
| |
llvm-svn: 256410
|
| |
|
|
| |
llvm-svn: 256409
|
| |
|
|
|
|
|
|
| |
This patch moves statically-allocated Elf_Sym objects out
of DefinedRegular class, so that the class definition becomes
smaller.
llvm-svn: 256408
|
| |
|
|
| |
llvm-svn: 256407
|
| |
|
|
|
|
| |
definitions to DerivedTypes.h so they can be inlined by the compiler.
llvm-svn: 256406
|
| |
|
|
| |
llvm-svn: 256405
|
| |
|
|
| |
llvm-svn: 256404
|
| |
|
|
|
|
| |
It broke lldb build.
llvm-svn: 256403
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Move RegStackify after coalescing and teach it to use LiveIntervals instead
of depending on SSA form. This avoids a problem where a register in a COPY
instruction is stackified and then subsequently coalesced with a register
that is not stackified.
This also puts it after the scheduler, which allows us to simplify the
EXPR_STACK constraint, as we no longer have instructions being reordered
after stackification and before coloring.
llvm-svn: 256402
|
| |
|
|
| |
llvm-svn: 256401
|
| |
|
|
| |
llvm-svn: 256400
|
| |
|
|
| |
llvm-svn: 256399
|
| |
|
|
| |
llvm-svn: 256398
|
| |
|
|
|
|
| |
CodeCompleteObjCProtocolReferences. NFC
llvm-svn: 256397
|
| |
|
|
|
|
| |
r255281.
llvm-svn: 256396
|
| |
|
|
| |
llvm-svn: 256395
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is an extension of the shuffle combining from r203229:
http://reviews.llvm.org/rL203229
The idea is to widen a short input vector with undef elements so the
existing shuffle transform for extract/insert can kick in.
The motivation is to finally solve PR2109:
https://llvm.org/bugs/show_bug.cgi?id=2109
For that example, the IR becomes:
%1 = bitcast <2 x i32>* %P to <2 x float>*
%ld1 = load <2 x float>, <2 x float>* %1, align 8
%2 = shufflevector <2 x float> %ld1, <2 x float> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
%i2 = shufflevector <4 x float> %A, <4 x float> %2, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
ret <4 x float> %i2
And x86 SSE output improves from:
movq (%rdi), %xmm1 ## xmm1 = mem[0],zero
movdqa %xmm1, %xmm2
shufps $229, %xmm2, %xmm2 ## xmm2 = xmm2[1,1,2,3]
shufps $48, %xmm0, %xmm1 ## xmm1 = xmm1[0,0],xmm0[3,0]
shufps $132, %xmm1, %xmm0 ## xmm0 = xmm0[0,1],xmm1[0,2]
shufps $32, %xmm0, %xmm2 ## xmm2 = xmm2[0,0],xmm0[2,0]
shufps $36, %xmm2, %xmm0 ## xmm0 = xmm0[0,1],xmm2[2,0]
retq
To the almost optimal:
movhpd (%rdi), %xmm0
Note: There's a tension in the existing transform related to generating
arbitrary shufflevector masks. We avoid that in other places in InstCombine
because we're scared that codegen can't handle strange masks, but it looks
like we're ok with producing those here. I purposely chose weird insert/extract
indexes for the regression tests to see the effect in these cases.
For PowerPC+Altivec, AArch64, and X86+SSE/AVX, I think the codegen is equal or
better for these examples.
Differential Revision: http://reviews.llvm.org/D15096
llvm-svn: 256394
|
| |
|
|
| |
llvm-svn: 256393
|
| |
|
|
|
|
| |
We cannot just pad with 0s as that would be a terminator mark.
llvm-svn: 256392
|
| |
|
|
|
|
|
| |
Several test cases that used to fail on both power LE and BE
now run correctly on LE.
llvm-svn: 256391
|
| |
|
|
| |
llvm-svn: 256390
|
| |
|
|
| |
llvm-svn: 256389
|
| |
|
|
| |
llvm-svn: 256388
|
| |
|
|
| |
llvm-svn: 256387
|
| |
|
|
| |
llvm-svn: 256386
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary: This diff is the initial implementation of the LLVM CodeView library. There is much more work to be done, namely a CodeView dumper and tests. This patch should help others make progress on the LLVM->CodeView debug info emission while I continue with the implementation of the dumper and tests.
This library implements support for emitting debug info in the CodeView format. This phase of the implementation only includes support for CodeView type records. Clients that need to emit type records will use a class derived from TypeTableBuilder. TypeTableBuilder provides member functions for writing each kind of type record; each of these functions eventually calls the writeRecord virtual function to emit the actual bits of the record. Derived classes override writeRecord to implement the folding of duplicate records and the actual emission to the appropriate destination. LLVMCodeView provides MemoryTypeTableBuilder, which creates the table in memory. In the future, other classes derived from TypeTableBuilder will write to other destinations, such as the type stream in a PDB.
The rest of the types in LLVMCodeView define the actual CodeView type records and all of the supporting enums and other types used in the type records. The TypeIndex class is of particular interest, because it is used by clients as a handle to a type in the type table.
The library provides a relatively low-level interface based on the actual on-disk format of CodeView. For example, type records refer to other type records by TypeIndex, rather than by an actual pointer to the referent record. This allows clients to emit type records one at a time, rather than having to keep the entire transitive closure of type records in memory until everything has been emitted. At some point, having a higher-level interface layered on top of this one may be useful for debuggers and other tools that want a more holistic view of the debug info. The lower-level interface should be sufficient for compilers and linkers to do the debug info manipulation that they need to do efficiently.
Reviewers: rnk, majnemer
Subscribers: silvas, rnk, jevinskie, llvm-commits
Differential Revision: http://reviews.llvm.org/D14961
llvm-svn: 256385
|
| |
|
|
|
|
|
| |
Since the only missing bit was the size, I just replaced the Elf_Sym
with the size.
llvm-svn: 256384
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
There are 3 symbol types that a .bc can provide during lto: defined,
undefined, common.
Defined and undefined symbols have already been refactored. I was
working on common and noticed that absolute symbols would become an
oddity: They would be the only symbol type present in a .o but not in
a.bc.
Looking a bit more, other than the special section number they were only
used for special rules for computing values. In that way they are
similar to TLS, and we don't have a DefinedTLS.
This patch deletes it. With it we have a reasonable rule of the thumb
for having a symbol kind: It exists if it has special resolution
semantics.
llvm-svn: 256383
|
| |
|
|
|
|
|
|
|
|
| |
include structs
Test case for commit 256381
Differential Revision: http://reviews.llvm.org/D15749
llvm-svn: 256382
|
| |
|
|
|
|
|
|
|
| |
Add ability to reference struct symbols in memory operands.
Test case will be added on the clang side (review http://reviews.llvm.org/D15749)
Differential Revision: http://reviews.llvm.org/D15748
llvm-svn: 256381
|
| |
|
|
| |
llvm-svn: 256380
|
| |
|
|
| |
llvm-svn: 256379
|
| |
|
|
|
|
|
| |
This change eliminates a string comparison from the
garbage collector.
llvm-svn: 256378
|
| |
|
|
| |
llvm-svn: 256377
|
| |
|
|
| |
llvm-svn: 256376
|
| |
|
|
|
|
| |
No functional change.
llvm-svn: 256375
|
| |
|
|
|
|
| |
No functional change.
llvm-svn: 256374
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In FreeBSD, rtld expects .ctors containing -1 (0xffffffff), and a
.ctors section containing the correct bits is provided to the linker as
input (/usr/lib/crtbegin.o).
Contents of section .ctors:
0000 ffffffff ffffffff ........
This section is not stripped even if not referenced or empty, also in
gold or ld.bfd. It would be nice to strip it when not needed but
since existing object files rely on that we can't do better to keep it
around.
Differential Revision: http://reviews.llvm.org/D15767
llvm-svn: 256373
|
| |
|
|
| |
llvm-svn: 256372
|
| |
|
|
|
|
| |
has always been missing. =/
llvm-svn: 256371
|
| |
|
|
| |
llvm-svn: 256370
|
| |
|
|
| |
llvm-svn: 256369
|
| |
|
|
| |
llvm-svn: 256368
|
| |
|
|
| |
llvm-svn: 256367
|
| |
|
|
|
|
| |
Differential Revision: http://reviews.llvm.org/D15711
llvm-svn: 256366
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The patterns that set a mask register to 0/1
KXOR %kn, %kn, %kn / KXNOR %kn, %kn, %kn
are replaced with
KXOR %k0, %k0, %kn / KXNOR %k0, %k0, %kn - AVX-512 targets optimization.
KNL does not recognize dependency-breaking idioms for mask registers,
so kxnor %k1, %k1, %k2 has a RAW dependence on %k1.
Using %k0 as the undef input register is a performance heuristic based
on the assumption that %k0 is used less frequently than the other mask
registers, since it is not usable as a write mask.
Differential Revision: http://reviews.llvm.org/D15739
llvm-svn: 256365
|
| |
|
|
|
|
| |
Differential Revision: http://reviews.llvm.org//D15747
llvm-svn: 256364
|
| |
|
|
| |
llvm-svn: 256363
|
| |
|
|
| |
llvm-svn: 256362
|