| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
| |
This saves a second compare and an and / or by using
the unordered comparison instructions.
llvm-svn: 224066
|
|
|
|
| |
llvm-svn: 224065
|
|
|
|
| |
llvm-svn: 223940
|
|
|
|
| |
llvm-svn: 223614
|
|
|
|
|
|
| |
We don't support scratch buffers yet with HSA.
llvm-svn: 223130
|
|
|
|
| |
llvm-svn: 223125
|
|
|
|
|
|
|
| |
This was trying to create an MVT with 3x vectors which
created an invalid EVT
llvm-svn: 222942
|
|
|
|
|
|
|
|
|
|
|
|
| |
This s_mov_b32 will write to a virtual register from the M0Reg
class and all the ds instructions now take an extra M0Reg explicit
argument.
This change is necessary to prevent issues with the scheduler
mixing together instructions that expect different values in the m0
registers.
llvm-svn: 222583
|
|
|
|
| |
llvm-svn: 222253
|
|
|
|
| |
llvm-svn: 222109
|
|
|
|
| |
llvm-svn: 222032
|
|
|
|
| |
llvm-svn: 222012
|
|
|
|
|
|
|
| |
It's not necessary. Also use complex patterns to allow
src modifier usage.
llvm-svn: 221916
|
|
|
|
| |
llvm-svn: 221383
|
|
|
|
| |
llvm-svn: 221382
|
|
|
|
| |
llvm-svn: 221118
|
|
|
|
| |
llvm-svn: 220342
|
|
|
|
| |
llvm-svn: 220304
|
|
|
|
|
|
|
| |
Just use REG_SEQUENCE directly, so there are fewer
instructions to need to deal with later.
llvm-svn: 220056
|
|
|
|
|
|
|
|
|
| |
This effectively reverts revert 219707. After fixing the test to work with
new function name format and renamed intrinsic.
Reviewed-by: Tom Stellard <tom@stellard.net>
Signed-off-by: Jan Vesely <jan.vesely@rutgers.edu>
llvm-svn: 219710
|
|
|
|
|
|
|
|
| |
This reverts commit r219705.
CodeGen/R600/work-item-intrinsics.ll was failing on linux.
llvm-svn: 219707
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
v2: Add SI lowering
Add test
v3: Place work dimensions after the kernel arguments.
v4: Calculate offset while lowering arguments
v5: rebase
v6: change prefix to AMDGPU
Reviewed-by: Tom Stellard <tom@stellard.net>
Signed-off-by: Jan Vesely <jan.vesely@rutgers.edu>
llvm-svn: 219705
|
|
|
|
|
|
|
| |
The instruction emitter will crash if it encounters a CopyToReg
node with a non-register operand like FrameIndex.
llvm-svn: 219428
|
|
|
|
|
|
|
|
| |
LLVM assumes INSERT_SUBREG will always have register operands, so
we need to legalize non-register operands, like FrameIndexes, to
avoid random assertion failures.
llvm-svn: 219420
|
|
|
|
| |
llvm-svn: 219038
|
|
|
|
| |
llvm-svn: 218609
|
|
|
|
|
|
|
|
|
| |
These turn into fadds, so combine them into the target
mad node.
fadd (fadd (a, a), b) -> mad 2.0, a, b
llvm-svn: 218608
|
|
|
|
|
|
|
|
|
| |
Disable the SGPR usage restriction parts of the DAG legalizeOperands.
It now should only be doing immediate folding until it can be replaced
later. The real legalization work is now done by the other
SIInstrInfo::legalizeOperands
llvm-svn: 218531
|
|
|
|
|
|
|
|
| |
No tests hit this, and I don't see any way a GlobalAddress
node would survive beyond lowering on SI. It it would, the
move should probably be inserted by selection.
llvm-svn: 218526
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
There are new register classes VCSrc_* which represent operands that
can take an SGPR, VGPR or inline constant. The VSrc_* class is now used
to represent operands that can take an SGPR, VGPR, or a 32-bit
immediate.
This allows us to have more accurate checks for legality of
immediates, since before we had no way to distinguish between operands
that supported any 32-bit immediate and operands which could only
support inline constants.
llvm-svn: 218334
|
|
|
|
| |
llvm-svn: 218250
|
|
|
|
|
|
|
|
| |
Instructions are now generally selected to the e64 forms originally,
and shrunk down later. Rename foldOperands to legalizeOperands,
since that's really most of what it tries to do.
llvm-svn: 217959
|
|
|
|
|
|
|
| |
The lost chain resulting in earlier side effecting nodes
being deleted.
llvm-svn: 217561
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Assert in scheduler from an inserted copy_to_regclass from
a constant.
This only seems to break sometimes when a constant initializer
address is forced into VGPRs in a non-entry block. No test
since the only case I've managed to hit only happens with a future
patch, and that case will also not be a problem once scalar instructions
are used in non-entry blocks.
llvm-svn: 217380
|
|
|
|
| |
llvm-svn: 217379
|
|
|
|
|
|
|
| |
We can use a negate source modifier to match
this for fsub.
llvm-svn: 216735
|
|
|
|
|
|
|
| |
int may not have enough bits in it, which was detected by UBSan
bootstrap (it reported left shift by a too large constant).
llvm-svn: 216579
|
|
|
|
|
|
|
|
|
| |
These pointers are really just offsets and they will always be
less than 16-bits. Using AssertZExt allows us to use computeKnownBits
to prove that these values are positive. We will use this information
in a later commit.
llvm-svn: 216277
|
|
|
|
|
|
| |
This fixes a crash in an ocl conformance test.
llvm-svn: 216219
|
|
|
|
|
|
| |
from an outer scope. NFC.
llvm-svn: 215888
|
|
|
|
| |
llvm-svn: 215749
|
|
|
|
| |
llvm-svn: 215748
|
|
|
|
| |
llvm-svn: 215747
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Ordinarily (shl (add x, c1), c2) -> (add (shl x, c2), c1 << c2)
is only done if the add has one use. If the resulting constant
add can be folded into an addressing mode, force this to happen
for the pointer operand.
This ends up happening a lot because of how LDS objects are allocated.
Since the globals are allocated next to each other, acessing the first
element of the second object is directly indexed by a shifted pointer.
llvm-svn: 215739
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The default assumes that a 16-bit signed offset is used.
LDS instruction use a 16-bit unsigned offset, so it wasn't
being used in some cases where it was assumed a negative offset
could be used.
More should be done here, but first isLegalAddressingMode needs
to gain an addressing mode argument. For now, copy most of the rest
of the default implementation with the immediate offset change.
llvm-svn: 215732
|
|
|
|
|
|
|
| |
This will lower them using register copies rather than loads and stores
to the stack.
llvm-svn: 215270
|
|
|
|
|
|
|
|
|
| |
to get the subtarget and that's accessible from the MachineFunction
now. This helps clear the way for smaller changes where we getting
a subtarget will require passing in a MachineFunction/Function as
well.
llvm-svn: 214988
|
|
|
|
|
|
| |
information and update all callers. No functional change.
llvm-svn: 214781
|
|
|
|
|
|
| |
Avoid weird line wrapping of BuildMI dest register.
llvm-svn: 214608
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
fromulation of the node, which isn't really the desired behavior from
within the combiner or legalizer, but is necessary within ISel. I've
added a hopefully helpful comment and fixed the only two places where
this took place.
Yet another step toward the combiner and legalizer not needing to use
update listeners with virtual calls to manage the worklists behind
legalization and combining.
llvm-svn: 214574
|