| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
| |
AMDGPU testcase isn't broken now, but will be in a future patch
without this.
llvm-svn: 367591
|
|
|
|
|
|
| |
-DLLVM_ENABLE_ASSERTIONS=off builds after r367498
llvm-svn: 367514
|
|
|
|
| |
llvm-svn: 367513
|
|
|
|
|
|
|
| |
This regresses the weird types that are newly treated as legal load
types, but fixes incorrectly using flat instrucions on SI.
llvm-svn: 367512
|
|
|
|
| |
llvm-svn: 367511
|
|
|
|
| |
llvm-svn: 367509
|
|
|
|
| |
llvm-svn: 367507
|
|
|
|
| |
llvm-svn: 367504
|
|
|
|
|
|
|
| |
AMDGPU change and test is a placeholder until a future patch with
complete handling.
llvm-svn: 367503
|
|
|
|
| |
llvm-svn: 367498
|
|
|
|
| |
llvm-svn: 367369
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Reviewers: arsenm
Reviewed By: arsenm
Subscribers: volkan, kzhuravl, jvesely, wdng, nhaehnle, yaxunl, rovka, dstuttard, tpr, t-tye, hiraditya, Petar.Avramovic, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D64966
llvm-svn: 367344
|
|
|
|
|
|
|
|
|
| |
handleAssignments gives up pretty easily on structs, and i8 values for
some reason. The other case that doesn't work is when an implicit sret
needs to be inserted if the return size exceeds the number of return
registers.
llvm-svn: 367082
|
|
|
|
|
|
|
| |
Removes illegal intermediate vectors if an operation was lowering to
concat_vectors, and the next operation is scalarized.
llvm-svn: 367081
|
|
|
|
|
|
|
| |
The G_ANYEXT handling can end up reaching selectCOPY, which mutates
the instruction in place.
llvm-svn: 366915
|
|
|
|
| |
llvm-svn: 366688
|
|
|
|
|
|
|
| |
The legality check is only done under NDEBUG, so the failure cases are
different in a release build.
llvm-svn: 366680
|
|
|
|
| |
llvm-svn: 366621
|
|
|
|
|
|
| |
The DAG lowering sets dereferencable and invariant, not nontemporal.
llvm-svn: 366597
|
|
|
|
|
|
|
| |
v2f16 case doesn't work yet because the VOP3P complex patterns haven't
been ported yet.
llvm-svn: 366585
|
|
|
|
|
|
| |
Handles structs used directly in argument lists.
llvm-svn: 366584
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This should now handle everything except structs passed as multiple
registers.
I think most of the packing logic should be handled by
handleAssignments, but I'm unclear on what the contract is for
multiple registers. This is copying how x86 handles this.
This does change the behavior of the test_sgpr_alignment0 amdgpu_vs
test. I don't think shader arguments should try to follow the
alignment, and registers need to be repacked. I also don't think it
matters, since I think the pointers are packed to the beginning of the
argument list anyway.
llvm-svn: 366582
|
|
|
|
|
|
|
|
|
|
| |
This is the more natural lowering, and presents more opportunities to
reduce 64-bit ops to 32-bit.
This should also help avoid issues graphics shaders have had with
64-bit values, and simplify argument lowering in globalisel.
llvm-svn: 366578
|
|
|
|
|
|
|
|
|
|
|
| |
Extract the sources to the GCD of the original size and target size,
padding with implicit_def as necessary.
Also fix the case where the requested source type is wider than the
original result type. This was ignoring the type, and just using the
destination. Do the operation in the requested type and truncate back.
llvm-svn: 366367
|
|
|
|
|
|
|
|
|
|
|
|
| |
Use an anyext to the requested type for the leftover operand to
produce a slightly wider type, and then truncate the final merge.
I have another implementation almost ready which handles arbitrary
widens, but I think it produces worse code in this example (which I
think is 90% due to not folding redundant copies or folding out
implicit_def users), so I wanted to add this as a baseline first.
llvm-svn: 366366
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary: Change-Id: I854fbf7d48e937bef9f8f3f5d0c8aeb970652630
Reviewers: rampitec, mareko
Subscribers: arsenm, kzhuravl, jvesely, wdng, yaxunl, dstuttard, tpr, t-tye, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D64807
Change-Id: I4405b3a7f84186acea5a78d291bff71056e745fc
llvm-svn: 366314
|
|
|
|
| |
llvm-svn: 366257
|
|
|
|
| |
llvm-svn: 366256
|
|
|
|
|
|
|
|
|
|
| |
I think this manages to not break the DAG handling with the divergent
predicates because the stadalone divergent patterns end up with a
higher priority than the pattern on the instruction definition.
The 16-bit versions don't work yet.
llvm-svn: 366254
|
|
|
|
| |
llvm-svn: 366249
|
|
|
|
| |
llvm-svn: 366248
|
|
|
|
| |
llvm-svn: 366246
|
|
|
|
|
|
|
|
| |
Now that the patterns use the new PatFrag address space support, the
only blocker to importing most load patterns is the addressing mode
complex patterns.
llvm-svn: 366237
|
|
|
|
|
|
|
|
|
|
|
|
| |
Apparently the check for legal instructions during instruction
select does not happen without an asserts build, so these would
successfully select in release, and fail in debug.
Make s16 and/or/xor legal. These can just be selected directly
to the 32-bit operation, as is already done in SelectionDAG, so just
make them legal.
llvm-svn: 366210
|
|
|
|
|
|
|
|
| |
If a 1-bit value is in a 32-bit VGPR, the scalar opcodes set SCC to
whether the result is 0. If the inputs are SCC, these can be copied to
a 32-bit SGPR to produce an SCC result.
llvm-svn: 366125
|
|
|
|
| |
llvm-svn: 366121
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is a hack until I come up with a better way of dealing with the
pseudo-register banks used for boolean values. If the use instruction
constrains the register, the selector for the def instruction won't
see that the bank was VCC. A 1-bit SReg_32 is could ambiguously have
been SCCRegBank or VCCRegBank in wave32.
This is necessary to successfully select branches with and and/or/xor
condition.
llvm-svn: 366120
|
|
|
|
|
|
|
|
|
| |
The extra test change is correct, although how it arrives there is a
bug that needs work. With wave32, the test for isVCC ambiguously
reports true for an SCC or VCC source. A new allocatable pseudo
register class for SCC may be necesssary.
llvm-svn: 366119
|
|
|
|
| |
llvm-svn: 366118
|
|
|
|
|
|
| |
This was emitting a copy from a 32-bit register to a 64-bit.
llvm-svn: 366117
|
|
|
|
| |
llvm-svn: 366116
|
|
|
|
|
|
| |
Turn the constant cases into G_EXTRACTs.
llvm-svn: 366115
|
|
|
|
| |
llvm-svn: 366114
|
|
|
|
| |
llvm-svn: 366113
|
|
|
|
| |
llvm-svn: 366103
|
|
|
|
| |
llvm-svn: 366102
|
|
|
|
| |
llvm-svn: 366099
|
|
|
|
| |
llvm-svn: 366087
|
|
|
|
| |
llvm-svn: 366086
|
|
|
|
|
|
|
|
| |
Before 2018, mesa used to use byval interchangably with inreg, which
didn't really make sense. Fix tests still using it to avoid breaking
in a future commit.
llvm-svn: 365953
|