| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
llvm-svn: 239657
|
|
|
|
|
|
|
|
| |
- Add glc, slc, and tfe operands to flat instructions
- Add missing flat instructions
- Fix the encoding of flat_load_dwordx3 and flat_store_dwordx3.
llvm-svn: 239637
|
|
|
|
|
|
| |
That can change as we change the buffering.
llvm-svn: 239602
|
|
|
|
|
|
|
|
| |
This reverts commit r239539.
It was causing SDAG assertions while building freetype.
llvm-svn: 239543
|
|
|
|
|
|
|
|
|
|
| |
Now actually stores the non-zero constant instead of 0.
I somehow forgot to include this part of r238108.
The test change was just an independent instruction order swap,
so just add another check line to satisfy CHECK-NEXT.
llvm-svn: 239539
|
|
|
|
|
|
|
| |
Flat instructions don't exist on SI, but there is a bug in the backend that
allows them to be selected.
llvm-svn: 239533
|
|
|
|
| |
llvm-svn: 239378
|
|
|
|
|
|
|
|
|
|
| |
For targets with a free fneg, this fold is always a net loss if it
ends up duplicating the multiply, so definitely avoid it.
This might be true for some targets without a free fneg too, but
I'll leave that for future investigation.
llvm-svn: 239167
|
|
|
|
|
|
|
|
|
|
|
| |
Now that we sometimes know the address space, this can
theoretically do a better job.
This needs better test coverage, but this mostly depends on
first updating the loop optimizatiosn to provide the address
space.
llvm-svn: 239053
|
|
|
|
|
|
|
| |
Mostly argument loads were producing broken zextloads
from an FP type.
llvm-svn: 239049
|
|
|
|
|
|
| |
The bug in the R600 backend that this uncovered has been fixed.
llvm-svn: 238999
|
|
|
|
|
|
|
|
| |
Only set the triple from the command line options.
Some of these were still testing SI features and using the
old r600-- triple.
llvm-svn: 238958
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If a dead instruction we may not only have a last-use in the main live
range but also in a subregister range if subregisters are tracked. We
need to partially rebuild live ranges in both cases.
The testcase only broke when subregister liveness was enabled. I
commited it in the current form because there is currently no flag to
enable/disable subregister liveness.
This fixes PR23720.
llvm-svn: 238785
|
|
|
|
|
|
| |
Signed-off-by: Jan Vesely <jan.vesely@rutgers.edu>
Reviewed-by: Matt Arsenault <Matthew.Arsenault@amd.com>
llvm-svn: 238229
|
|
|
|
|
|
| |
The src and dst register cannot be the same on chips with 16 lds banks.
llvm-svn: 238147
|
|
|
|
|
|
|
|
|
|
| |
On GPU targets, materializing constants is cheap and stores are
expensive, so only doing this for zero vectors was silly.
Most of the new testcases aren't optimally merged, and are for
later improvements.
llvm-svn: 238108
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Spilling can insert instructions almost anywhere, and this can mess
up control flow lowering in a multitude of ways, due to instruction
reordering. Let's sort this out the easy way: never spill registers
involved with control flow, i.e. saved EXEC masks.
Unfortunately, this does not work at all with optimizations disabled,
as the register allocator ignores spill weights. This should be
addressed in a future commit.
The test was reduced from the "stacks" shader of [1]. Some issues
trigger the machine verifier while another one is checked manually.
[1] http://madebyevan.com/webgl-path-tracing/
v2: only insert pass with optimizations enabled, merge test runs.
Patch by: Grigori Goronzy
llvm-svn: 237152
|
|
|
|
|
|
| |
It is no longer used.
llvm-svn: 237142
|
|
|
|
|
|
|
| |
Instead add m0 as an implicit operand. This helps avoid spills
of the m0 register in some cases.
llvm-svn: 237141
|
|
|
|
|
|
| |
We want to make sure that the m0 copies are being cse'd.
llvm-svn: 237134
|
|
|
|
|
|
| |
When SI_KILL has a register operand, its lowered form writes to vcc.
llvm-svn: 236307
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This pass was generating 'Instruction does not dominate all uses!'
errors for programs which had loops with a condition variable that
depended on the result of a phi instruction from outside of the loop.
The pass was inserting new phi nodes outside of the loop which used values
defined inside the loop.
http://bugs.freedesktop.org/show_bug.cgi?id=90056
llvm-svn: 236306
|
|
|
|
|
|
|
|
|
| |
changes:
Don't apply on hexagon and NVPTX since they no longer claim to support UADDO/USUBO
Add location to getConstant
Drop comment about the ops being turned into expand
llvm-svn: 236240
|
|
|
|
|
|
|
|
|
|
|
| |
Fixes a crash with basically any OpenGL application using the radeonsi
driver.
Patch by: Michel Dänzer
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=90176
Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
llvm-svn: 236004
|
|
|
|
| |
llvm-svn: 235813
|
|
|
|
|
|
| |
Copy the kill flags when swapping the operands.
llvm-svn: 235687
|
|
|
|
|
|
|
| |
This enables the rematerialization of some R600 MOV instructions in the
RegisterCoalescer and adds a testcase for r235668.
llvm-svn: 235675
|
|
|
|
| |
llvm-svn: 235662
|
|
|
|
|
|
|
|
|
|
|
| |
When the base register index of the vector plus the constant offset
was less than zero, we were passing the wrong base register to the indirect
addressing instruction.
In this case, we need to set the base register to v0 and then add
the computed (negative) index to m0.
llvm-svn: 235641
|
|
|
|
|
|
| |
No test since calls are not actually supported yet.
llvm-svn: 235524
|
|
|
|
|
|
|
|
| |
This folds:
(select (setcc x, -0.0, *lt), NaN, (fsqrt x)) -> ( fsqrt x)
llvm-svn: 235333
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This pass will always try to insert llvm.SI.ifbreak intrinsics
in the same block that its conditional value is computed in. This is
a problem when conditions for breaks or continue are computed outside
of the loop, because the llvm.SI.ifbreak intrinsic ends up being inserted
outside of the loop.
This patch fixes this problem by inserting the llvm.SI.ifbreak
intrinsics in the loop header when the condition is computed outside
the loop.
llvm-svn: 234891
|
|
|
|
|
|
|
|
|
|
|
| |
Revert "Remove default in fully-covered switch (to fix Clang -Werror -Wcovered-switch-default)"
Revert "R600: Add carry and borrow instructions. Use them to implement UADDO/USUBO"
Revert "LegalizeDAG: Try to use Overflow operations when expanding ADD/SUB"
Using overflow operations fails CodeGen/Generic/2011-07-07-ScheduleDAGCrash.ll
on hexagon, nvptx, and r600. Revert while I investigate.
llvm-svn: 234768
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
v2: tighten the sub64 tests
v3: rename to CARRY/BORROW
v4: fixup test cmdline
add known bits computation
use sign extend instead of sub 0,x
better add test
v5: remove redundant break
move lowering to separate functions
fix comments
Signed-off-by: Jan Vesely <jan.vesely@rutgers.edu>
Reviewers: arsenm
llvm-svn: 234759
|
|
|
|
|
|
|
|
|
|
| |
v2: consider BooleanContents when processing overflow
Signed-off-by: Jan Vesely <jan.vesely@rutgers.edu>
Reviewers: resistor, jholewinsky (nvidia parts)
Differential Revision: http://reviews.llvm.org/D6340
llvm-svn: 234755
|
|
|
|
|
|
|
|
|
| |
like r204118.
<stdin>:202:2: note: possible intended match here
2143289344(1.#QNAN0e+00), 2(2.802597e-45)
llvm-svn: 234719
|
|
|
|
|
|
|
|
| |
v2: Add tests
Signed-off-by: Jan Vesely <jan.vesely@rutgers.edu>
reviewer: arsenm
llvm-svn: 234716
|
|
|
|
| |
llvm-svn: 234379
|
|
|
|
|
|
| |
Missing colon, instruction typo.
llvm-svn: 233414
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
"Fix the MachineScheduler's logic for updating ready times for in-order.
Now the scheduler updates a node's ready time as soon as it is
scheduled, before releasing dependent nodes."
This fix was only made in one variant of the ScheduleDAGMI driver.
Francois de Ferriere reported the issue in the other bit of code where
it was also needed.
I never got around to coming up with a test case, but it's an
obvious fix that shouldn't be delayed any longer.
I'll try to refactor this code a little better.
I did verify performance on a wide variety of targets and saw no
negative impact with this fix.
llvm-svn: 233366
|
|
|
|
| |
llvm-svn: 233079
|
|
|
|
| |
llvm-svn: 233078
|
|
|
|
| |
llvm-svn: 233077
|
|
|
|
|
|
|
| |
Other f64 opcodes not supported on SI can be lowered in a similar way.
v2: use complex VOP3 patterns
llvm-svn: 233076
|
|
|
|
|
|
|
|
|
| |
V_FRACT is buggy on SI.
R600-specific code is left intact.
v2: drop the multiclass, use complex VOP3 patterns
llvm-svn: 233075
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This enables very common cases to switch to the
smaller encoding.
All of the standard LLVM canonicalizations of comparisons
are the opposite of what we want. Compares with constants
are moved to the RHS, but the first operand can be an inline
immediate, literal constant, or SGPR using the 32-bit VOPC
encoding.
There are additional bad canonicalizations that should
also be fixed, such as canonicalizing ge x, k to gt x, (k + 1)
if this makes k no longer an inline immediate value.
llvm-svn: 232988
|
|
|
|
|
|
|
| |
This function assumed that SMRD instructions always have immediate
offsets, which is not always the case.
llvm-svn: 232957
|
|
|
|
| |
llvm-svn: 232901
|
|
|
|
| |
llvm-svn: 232797
|
|
|
|
|
|
|
|
|
| |
This should bring the windows bots back.
It is a bit ugly, but it is better than what we had before: The triple would
say that the object format was COFF, but llc/llvm-mc would produce an ELF.
llvm-svn: 232683
|