| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 325731
|
|
|
|
|
|
|
|
|
|
| |
Enable multiple COPY hints to eliminate more COPYs during register allocation.
Note that this is something all targets should do, see
https://reviews.llvm.org/D38128.
Review: Krzysztof Parzyszek
llvm-svn: 325697
|
|
|
|
| |
llvm-svn: 325606
|
|
|
|
| |
llvm-svn: 325580
|
|
|
|
|
|
|
| |
Use the FunctionType of the callee when it's available. It may not be
available for synthetic calls to functions specified by external symbols.
llvm-svn: 325269
|
|
|
|
|
|
| |
This is breaking lit tests.
llvm-svn: 325266
|
|
|
|
|
|
|
| |
The FunctionType of the callee is always available, even if the Function
of the callee is not. Use that to get the number of fixed parameters.
llvm-svn: 325259
|
|
|
|
|
|
| |
Lowering of formal arguments needs to be aware of vararg functions.
llvm-svn: 325255
|
|
|
|
| |
llvm-svn: 325169
|
|
|
|
| |
llvm-svn: 325014
|
|
|
|
| |
llvm-svn: 325013
|
|
|
|
|
|
|
|
|
|
|
| |
Add a common -trap-unreachable option, similar to the target
specific hexagon equivalent, which has been replaced. This
turns unreachable instructions into traps, which is useful for
debugging.
Differential Revision: https://reviews.llvm.org/D42965
llvm-svn: 324880
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
This change is part of step five in the series of changes to remove alignment argument from
memcpy/memmove/memset in favour of alignment attributes. In particular, this changes the
Hexagon LoopIdiom pass to cease using the old IRBuilder createMemCpy/createMemMove
single-alignment APIs in favour of the new API that allows setting source and
destination alignments independently.
Steps:
Step 1) Remove alignment parameter and create alignment parameter attributes for
memcpy/memmove/memset. ( rL322965, rC322964, rL322963 )
Step 2) Expand the IRBuilder API to allow creation of memcpy/memmove with differing
source and dest alignments. ( rL323597 )
Step 3) Update Clang to use the new IRBuilder API. ( rC323617 )
Step 4) Update Polly to use the new IRBuilder API. ( rL323618 )
Step 5) Update LLVM passes that create memcpy/memmove calls to use the new IRBuilder API,
and those that use use MemIntrinsicInst::[get|set]Alignment() to use [get|set]DestAlignment()
and [get|set]SourceAlignment() instead. ( rL323886, rL323891, rL324148, rL324273, rL324278,
rL324384, rL324395, rL324402, rL324626, rL324642, rL324653, rL324654, rL324773, rL324774,
rL324781 )
Step 6) Remove the single-alignment IRBuilder API for memcpy/memmove, and the
MemIntrinsicInst::[get|set]Alignment() methods.
Reference
http://lists.llvm.org/pipermail/llvm-dev/2015-August/089384.html
http://lists.llvm.org/pipermail/llvm-commits/Week-of-Mon-20151109/312083.html
llvm-svn: 324784
|
|
|
|
|
|
| |
Fixes http://llvm.org/PR36320.
llvm-svn: 324763
|
|
|
|
|
|
| |
Additionally, simplify the rest of the argument/parameter lowering code.
llvm-svn: 324737
|
|
|
|
| |
llvm-svn: 324392
|
|
|
|
| |
llvm-svn: 324391
|
|
|
|
|
|
|
| |
Additionally, verify that the register defined by the producer is a
32-bit register.
llvm-svn: 324381
|
|
|
|
| |
llvm-svn: 324352
|
|
|
|
|
|
|
|
| |
Vector pairs are legal types, but not every operation can work on pairs.
For those operations that are legal for single vectors, generate a concat
of their results on pair halves.
llvm-svn: 324350
|
|
|
|
| |
llvm-svn: 324349
|
|
|
|
|
|
|
|
|
|
| |
It was expanded directly into instructions earlier. That was to avoid
loads from a constant pool for a vector negation: "xor x, splat(i1 -1)".
Implement ISD opcodes QTRUE and QFALSE to denote logical vectors of
all true and all false values, and handle setcc with negations through
selection patterns.
llvm-svn: 324348
|
|
|
|
| |
llvm-svn: 324250
|
|
|
|
|
|
|
|
|
|
| |
defining file.
Patch by Dean Sturtevant!
Differential Revision: https://reviews.llvm.org/D42907
llvm-svn: 324245
|
|
|
|
| |
llvm-svn: 324244
|
|
|
|
|
|
|
|
| |
The function shuffp2 was breaking up a wide shuffle into a pair of
narrower ones, except that the narrower shuffle masks were actually
uninitialized.
llvm-svn: 324243
|
|
|
|
|
|
|
| |
Unlike V6_vmpyhv, it produces the result in the exact form that is
expected without the need for a shuffle.
llvm-svn: 324241
|
|
|
|
| |
llvm-svn: 323916
|
|
|
|
| |
llvm-svn: 323914
|
|
|
|
| |
llvm-svn: 323912
|
|
|
|
| |
llvm-svn: 323911
|
|
|
|
| |
llvm-svn: 323889
|
|
|
|
|
|
|
|
| |
Selecting of constant HVX vectors involves some "manual processing",
which mishandled an unrelated BITCAST operation causing a selection
error.
llvm-svn: 323887
|
|
|
|
| |
llvm-svn: 323831
|
|
|
|
|
|
|
| |
This is in anticipation of https://reviews.llvm.org/D42424, which would
otherwise break one of the pmpy testcases.
llvm-svn: 323824
|
|
|
|
|
|
|
|
|
|
| |
Instructions like memd(r0+##global+1) are legal as long as the entire
address is properly aligned. Assuming that "global" is aligned at an
8-byte boundary, the expression "global+1" appears to be misaligned.
Handle such cases in HexagonConstExtenders, and make sure that any non-
extended offsets generated are still aligned accordingly.
llvm-svn: 323799
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
requirements
This reverts r323562, since it wasn't actually necessary. Constant-
extended offsets do not need to be aligned, as long as the effective
address is aligned.
Keep the testcase, with a modification which checks that such offsets
are not unnecessarily avoided.
llvm-svn: 323798
|
|
|
|
| |
llvm-svn: 323569
|
|
|
|
| |
llvm-svn: 323568
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A correctly aligned address may happen to be separated into a variable
part and a constant part, where the constant part does not match the
alignment needed in a load/store that uses this address. Such a constant
cannot be used as an immediate offset in an indexed instruction.
When lowering a global address, make sure that if there is an offset
folded into the global, the offset is valid for all uses in load/store
instructions.
llvm-svn: 323562
|
|
|
|
| |
llvm-svn: 323561
|
|
|
|
| |
llvm-svn: 323548
|
|
|
|
|
|
| |
"in in" -> "in", "on on" -> "on" etc.
llvm-svn: 323508
|
|
|
|
| |
llvm-svn: 323452
|
|
|
|
|
|
| |
This reverts r323374. The fix needs a different approach.
llvm-svn: 323438
|
|
|
|
|
|
|
|
|
| |
The code in EmitFunctionEntryCode needs to know the maximum stack
alignment, but it runs very early in the selection process (before
lowering). The final stack alignment may change during lowering, so
the code needs to be moved to where the alignment is known.
llvm-svn: 323374
|
|
|
|
| |
llvm-svn: 323346
|
|
|
|
| |
llvm-svn: 323324
|
|
|
|
| |
llvm-svn: 323295
|
|
|
|
| |
llvm-svn: 323258
|