| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
| |
Otherwise they get freed and the implicit "isa<XYZ>" tests following
turn out badly (at least under sanitizers).
Also corrects the ordering of unordered atomic stores.
llvm-svn: 212136
|
| |
|
|
|
|
|
|
| |
The argument list vector is never used after it has been passed to the
CallLoweringInfo and moving it to the CallLoweringInfo is cleaner and
pretty much as cheap as keeping a pointer to it.
llvm-svn: 212135
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
On targets without cmpxchg16b or cmpxchg8b, the borderline atomic
operations were slipping through the gaps.
X86AtomicExpand.cpp was delegating to ISelLowering. Generic
ISelLowering was delegating to X86ISelLowering and X86ISelLowering was
asserting. The correct behaviour is to expand to a libcall, preferably
in generic ISelLowering.
This can be achieved by X86ISelLowering deciding it doesn't want the
faff after all.
llvm-svn: 212134
|
| |
|
|
|
|
| |
down to the subtarget. Add an initialization routine to assist.
llvm-svn: 212124
|
| |
|
|
|
|
| |
from SystemZFrameLowering.
llvm-svn: 212123
|
| |
|
|
| |
llvm-svn: 212120
|
| |
|
|
|
|
|
|
|
|
|
|
| |
The logic for expanding atomics that aren't natively supported in
terms of cmpxchg loops is much simpler to express at the IR level. It
also allows the normal optimisations and CodeGen improvements to help
out with atomics, instead of using a limited set of possible
instructions..
rdar://problem/13496295
llvm-svn: 212119
|
| |
|
|
|
|
|
|
|
| |
For now I only updated the _alt variants. The main variants are used by
codegen and that will need a bit more work to trigger.
<rdar://problem/17492620>
llvm-svn: 212114
|
| |
|
|
|
|
|
|
|
| |
Adding a writemask variant would require a third asm string to be passed to
the template. Generate the AsmString in the template instead.
No change in X86.td.expanded.
llvm-svn: 212113
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
seh_stackalloc 0 is not representable in Win64 SEH info, so emitting it
is a bug.
Reviewers: rnk
Differential Revision: http://reviews.llvm.org/D4334
Patch by Vadim Chugunov!
llvm-svn: 212081
|
| |
|
|
|
|
|
|
| |
In r212073 I missed a call of `use_begin()` that assumed the wrong
semantics. It's not clear to me at all what this code does without the
fix, so I'm not sure how to write a testcase.
llvm-svn: 212075
|
| |
|
|
|
|
|
|
| |
AArch64AddressTypePromotion was doing nothing because it was using the
old semantics of `Use` and `uses()`, when it really wanted to get at the
`users()`.
llvm-svn: 212073
|
| |
|
|
| |
llvm-svn: 212056
|
| |
|
|
| |
llvm-svn: 212052
|
| |
|
|
| |
llvm-svn: 212051
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch adds support for a new builtin instruction called
__builtin_ia32_rdpmc.
Builtin '__builtin_ia32_rdpmc' is defined as a 'GCC builtin'; on X86, it can
be used to read performance monitoring counters. It takes as input the index
of the performance counter to read, and returns the value of the specified
performance counter as a 64-bit number.
Calls to this new builtin will map to instruction RDPMC.
The index in input to the builtin call is moved to register %ECX. The result
of the builtin call is the value of the specified performance counter (RDPMC
would return that quantity in registers RDX:RAX).
This patch:
- Adds builtin int_x86_rdpmc as a GCCBuiltin;
- Adds a new x86 DAG node called 'RDPMC_DAG';
- Teaches how to lower this new builtin;
- Adds an ISel pattern to select instruction RDPMC;
- Fixes the definition of instruction RDPMC adding %RAX and %RDX as
implicit definitions, and adding %ECX as implicit use;
- Adds a LLVM test to verify that the new builtin is correctly selected.
llvm-svn: 212049
|
| |
|
|
|
|
| |
PR20109
llvm-svn: 212045
|
| |
|
|
|
|
|
| |
The combine for mul x, pow2 +/- 1 is unchanged. Test cases for
both combines as well as mul x, pow2 have been added as well.
llvm-svn: 212044
|
| |
|
|
|
|
|
|
| |
This fixes LNT SingleSource/UnitTests/Threads with -mthumb.
Differential Revision: http://reviews.llvm.org/D4324
llvm-svn: 212029
|
| |
|
|
|
|
| |
Fix a comment typo `DbgLocLImport` instead of `DLLImport`.
llvm-svn: 212012
|
| |
|
|
|
|
|
| |
This just changes the constant value to the symbolic name corresponding to it.
NFC.
llvm-svn: 212011
|
| |
|
|
|
|
|
|
|
|
| |
This exception format is not specific to Windows x64. A similar approach is
taken on nearly all architectures. Generalise the name to reflect reality.
This will eventually be used for Windows on ARM data emission as well.
Switch the enum and namespace into an enum class.
llvm-svn: 212000
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Rename the routines to reflect the reality that they are more related to call
frame information than to Win64 EH. Although EH is implemented in an intertwined
manner by augmenting with an exception handler and an associated parameter, the
majority of these routines emit information required to unwind the frames. This
also helps identify that these routines are generic for most windows platforms
(they apply equally to nearly all architectures except x86) although the
encoding of the information is architecture dependent.
Unwinding data is emitted via EmitWinCFI* and exception handling information via
EmitWinEH*.
llvm-svn: 211994
|
| |
|
|
|
|
| |
simplify some code.
llvm-svn: 211993
|
| |
|
|
|
|
|
|
|
|
|
| |
lowering for v16i8.
ASan and some bots caught this bug with existing test cases. Fixing it
even fixed a miscompile with one of the test cases. I'm still a bit
suspicious of this test case as I've not taken a proper amount of time
to think about it, but the fix here is strict goodness.
llvm-svn: 211976
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
These show up really frequently, not the least with actual splats. =] We
lowered these quite badly before. The new code path tries to widen i8
shuffles to i16 shuffles in a splat-like way. There are still some
inefficiencies in our i16 splat logic though, so we aren't really done
here.
Also, for certain patterns (bit of a gather-and-splat) we still
generate pretty silly code, and I've left a fixme for addressing it.
However, I'm not actually worried about this code pattern as much. The
old shuffle lowering generates a 29 instruction monstrosity for it that
should execute much more slowly.
llvm-svn: 211974
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
lowering.
For maximum irony, I had already discovered this bug, diagnosed it, and
left FIXMEs about it in the test cases. =[ I just failed to go back over
those until after i had reduced a bootstrap miscompile down to a single
TU, stared at the assembly for an hour, and figured out the bug. Again.
Oh well.
llvm-svn: 211955
|
| |
|
|
|
|
| |
own. Thanks Hal!
llvm-svn: 211952
|
| |
|
|
|
|
| |
Also clean up some of the logic in NVVMReflect.cpp while we're messing around in there.
llvm-svn: 211948
|
| |
|
|
|
|
| |
ones representable as MVTs
llvm-svn: 211947
|
| |
|
|
| |
llvm-svn: 211946
|
| |
|
|
| |
llvm-svn: 211945
|
| |
|
|
| |
llvm-svn: 211944
|
| |
|
|
|
|
| |
that does not support initialization
llvm-svn: 211943
|
| |
|
|
| |
llvm-svn: 211942
|
| |
|
|
|
|
| |
common linkage
llvm-svn: 211941
|
| |
|
|
|
|
| |
be emitted
llvm-svn: 211940
|
| |
|
|
|
|
|
|
|
|
| |
The address space of the pointer must be global (1) for these intrinsics. There must also be alignment metadata attached to the intrinsic calls, e.g.
%val = tail call i32 @llvm.nvvm.ldu.i.global.i32.p1i32(i32 addrspace(1)* %ptr), !align !0
!0 = metadata !{i32 4}
llvm-svn: 211939
|
| |
|
|
|
|
| |
structs and vectors
llvm-svn: 211938
|
| |
|
|
| |
llvm-svn: 211937
|
| |
|
|
| |
llvm-svn: 211936
|
| |
|
|
|
|
| |
This also introduces DAGCombiner patterns for mul.wide to multiply two smaller integers and produce a larger integer
llvm-svn: 211935
|
| |
|
|
| |
llvm-svn: 211934
|
| |
|
|
| |
llvm-svn: 211933
|
| |
|
|
| |
llvm-svn: 211932
|
| |
|
|
| |
llvm-svn: 211931
|
| |
|
|
| |
llvm-svn: 211930
|
| |
|
|
|
|
| |
Default PTX version is set to PTX 3.2
llvm-svn: 211929
|
| |
|
|
| |
llvm-svn: 211928
|
| |
|
|
|
|
|
| |
NVPTX is a bit special in the optimizations it requires, so this gives
us better control over the backend optimization pipeline.
llvm-svn: 211927
|