| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
| |
Fixing this Windows build error:
..\lib\Target\Mips\MipsSEISelLowering.cpp(997) : error C2027: use of undefined type 'llvm::raw_ostream'
llvm-svn: 193696
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
normal IR (i.e. not intrinsics)
Also corrected the definition of the intrinsics for these instructions (the
result register is also the first operand), and added intrinsics for bsel and
bseli to clang (they already existed in the backend).
These four operations are mostly equivalent to bsel, and bseli (the difference
is which operand is tied to the result). As a result some of the tests changed
as described below.
bitwise.ll:
- bsel.v test adapted so that the mask is unknown at compile-time. This stops
it emitting bmnzi.b instead of the intended bsel.v.
- The bseli.b test now tests the right thing. Namely the case when one of the
values is an uimm8, rather than when the condition is a uimm8 (which is
covered by bmnzi.b)
compare.ll:
- bsel.v tests now (correctly) emits bmnz.v instead of bsel.v because this
is the same operation (see MSA.txt).
i8.ll
- CHECK-DAG-ized test.
- bmzi.b test now (correctly) emits equivalent bmnzi.b with swapped operands
because this is the same operation (see MSA.txt).
- bseli.b still emits bseli.b though because the immediate makes it
distinguishable from bmnzi.b.
vec.ll:
- CHECK-DAG-ized test.
- bmz.v tests now (correctly) emits bmnz.v with swapped operands (see
MSA.txt).
- bsel.v tests now (correctly) emits bmnz.v with swapped operands (see
MSA.txt).
llvm-svn: 193693
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
not intrinsics)
This required correcting the definition of the bins[lr]i intrinsics because
the result is also the first operand.
It also required removing the (arbitrary) check for 32-bit immediates in
MipsSEDAGToDAGISel::selectVSplat().
Currently using binsli.d with 2 bits set in the mask doesn't select binsli.d
because the constant is legalized into a ConstantPool. Similar things can
happen with binsri.d with more than 10 bits set in the mask. The resulting
code when this happens is correct but not optimal.
llvm-svn: 193687
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(or (and $a, $mask), (and $b, $inverse_mask)) => (vselect $mask, $a, $b).
where $mask is a constant splat. This allows bitwise operations to make use
of bsel.
It's also a stepping stone towards matching bins[lr], and bins[lr]i from
normal IR.
Two sets of similar tests have been added in this commit. The bsel_* functions
test the case where binsri cannot be used. The binsr_*_i functions will
start to use the binsri instruction in the next commit.
llvm-svn: 193682
|
|
|
|
|
|
|
|
| |
-debug-only=mips-isel
No test since -debug output is intended for developers and not end-users.
llvm-svn: 193681
|
|
|
|
|
|
|
|
|
|
| |
intrinsics)
splat.d is implemented but this subtest is currently disabled. This is because
it is difficult to match the appropriate IR on MIPS32. There is a patch under
review that should help with this so I hope to enable the subtest soon.
llvm-svn: 193680
|
|
|
|
|
|
| |
intrinsics)
llvm-svn: 193239
|
|
|
|
| |
llvm-svn: 192895
|
|
|
|
|
|
|
|
| |
These were present in a previous version of the MSA spec but are not
present in the published version. There is no hardware that uses these
instructions.
llvm-svn: 192888
|
|
|
|
| |
llvm-svn: 192699
|
|
|
|
| |
llvm-svn: 192663
|
|
|
|
| |
llvm-svn: 192660
|
|
|
|
|
|
| |
normal IR (i.e. not intrinsics)
llvm-svn: 192438
|
|
|
|
|
|
| |
intrinsics)
llvm-svn: 192435
|
|
|
|
|
|
| |
intrinsics)
llvm-svn: 192430
|
|
|
|
|
|
| |
from normal IR (i.e. not intrinsics)
llvm-svn: 192429
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
accumulator instead of its sub-registers, $hi and $lo.
We need this change to prevent a mflo following a mtlo from reading an
unpredictable/undefined value, as shown in the following example:
mult $6, $7 // result of $6 * $7 is written to $lo and $hi.
mflo $2 // read lower 32-bit result from $lo.
mtlo $4 // write to $lo. the content of $hi becomes unpredictable.
mfhi $3 // read higher 32-bit from $hi, which has an unpredictable value.
I don't have a test case for this change that reliably reproduces the problem.
llvm-svn: 192119
|
|
|
|
|
|
| |
intrinsics)
llvm-svn: 191737
|
|
|
|
|
|
|
| |
This intrinsic is lowered into an equivalent INSERT_VECTOR_ELT which is
further lowered into a sequence of insert.w's on MIPS32.
llvm-svn: 191521
|
|
|
|
|
|
|
| |
This intrinsic is lowered into an equivalent BUILD_VECTOR which is further
lowered into a sequence of insert.w's on MIPS32.
llvm-svn: 191519
|
|
|
|
|
|
|
| |
This intrinsic is lowered into equivalent copy_s.w instructions during
legalization.
llvm-svn: 191518
|
|
|
|
|
|
|
| |
For v4f32 and v2f64, INSERT_VECTOR_ELT is matched by a pseudo-insn which is
later expanded to appropriate insve.[wd] insns.
llvm-svn: 191515
|
|
|
|
|
|
|
| |
For v4f32 and v2f64, EXTRACT_VECTOR_ELT is matched by a pseudo-insn which may
be expanded to subregister copies and/or instructions as appropriate.
llvm-svn: 191514
|
|
|
|
|
|
|
|
| |
intrinsics)
Updated some of the vshf since they (correctly) emit splati's now
llvm-svn: 191511
|
|
|
|
|
|
|
|
|
|
|
|
| |
lowerMSABinaryIntr, lowerMSABinaryImmIntr, lowerMSABranchIntr,
and lowerMSAUnaryIntr were trivially small functions. Inlined them into
their callers.
lowerMSASplat now takes its callers SDLoc instead of making a new one.
No functional change.
llvm-svn: 191503
|
|
|
|
| |
llvm-svn: 191496
|
|
|
|
|
|
|
|
|
|
| |
Reviewers: jacksprat, dsanders
Reviewed By: dsanders
Differential Revision: http://llvm-reviews.chandlerc.com/D1755
llvm-svn: 191495
|
|
|
|
|
|
| |
not intrinsics)
llvm-svn: 191306
|
|
|
|
|
|
| |
IR (i.e. not intrinsics)
llvm-svn: 191304
|
|
|
|
| |
llvm-svn: 191302
|
|
|
|
| |
llvm-svn: 191301
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
BUILD_VECTOR.
Most constant BUILD_VECTOR's are matched using ComplexPatterns which cover
bitcasted as well as normal vectors. However, it doesn't seem to be possible to
match ldi.[bhwd] in a type-agnostic manner (e.g. to support the widest range of
immediates, it should be possible to use ldi.b to load v2i64) using TableGen so
ldi.[bhwd] is matched using custom code in MipsSEISelDAGToDAG.cpp
This made the majority of the constant splat BUILD_VECTOR lowering redundant.
The only transformation remaining for constant splats is when an (up-to) 32-bit
constant splat is possible but the value does not fit into a 10-bit signed
integer. In this case, the BUILD_VECTOR is transformed into a bitcasted
BUILD_VECTOR so that fill.[bhw] can be used to splat the vector from a GPR32
register (which is initialized using the usual lui/addui sequence).
There are no additional tests since this is a re-implementation of previous
functionality. The change is intended to make it easier to implement some of
the upcoming instruction selection patches since they can rely on existing
support for BUILD_VECTOR's in the DAGCombiner.
compare_float.ll changed slightly because a BITCAST is no longer
introduced during legalization.
llvm-svn: 191299
|
|
|
|
|
|
|
|
| |
INSERT_VECTOR_ELT instead of memory operations.
The resulting code is the same length, but doesnt cause memory traffic or latency.
llvm-svn: 191297
|
|
|
|
|
|
|
|
| |
not intrinsics)
This covers the case where fmax_a can be used to implement ISD::FABS.
llvm-svn: 191296
|
|
|
|
|
|
| |
IR (i.e. not intrinsics)
llvm-svn: 191293
|
|
|
|
|
|
| |
(i.e. not intrinsics)
llvm-svn: 191291
|
|
|
|
|
|
|
|
| |
not intrinsics)
This required correcting the definition of the bsel and bseli intrinsics.
llvm-svn: 191290
|
|
|
|
|
|
|
|
|
| |
intrinsics)
MIPS SelectionDAG changes:
* Added VCEQ, VCL[ET]_[SU] nodes to represent vector comparisons that produce a bitmask.
llvm-svn: 191286
|
|
|
|
|
|
| |
(i.e. not intrinsics)
llvm-svn: 191285
|
|
|
|
|
|
| |
not intrinsics)
llvm-svn: 191203
|
|
|
|
|
|
|
|
|
|
|
| |
not intrinsics)
Changes to MIPS SelectionDAG:
* Added nodes VEXTRACT_[SZ]EXT_ELT to represent extract and extend in a single
operation and implemented the DAG combines necessary to fold sign/zero
extends into the extract.
llvm-svn: 191199
|
|
|
|
| |
llvm-svn: 191198
|
|
|
|
| |
llvm-svn: 191195
|
|
|
|
|
|
| |
not intrinsics)
llvm-svn: 191194
|
|
|
|
|
|
|
|
|
| |
disabled and -Werror is in use.
An unrelated change crept in because 'svn revert' isn't recursive by default.
The unrelated changes have been reverted.
llvm-svn: 191193
|
|
|
|
| |
llvm-svn: 191192
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
SelectionDAG nodes (VSPLAT and VSPLATD)
Note: There's a later patch on my branch that re-implements this to select
build_vector without the custom SelectionDAG nodes. The future patch avoids
the constant-folding problems stemming from the custom node (i.e. it doesn't
need to re-implement all the DAG combines related to BUILD_VECTOR).
Changes to MIPS specific SelectionDAG nodes:
* Added VSPLAT
This is a special case of BUILD_VECTOR that covers the case the
BUILD_VECTOR is a splat operation.
* Added VSPLATD
This is a special case of VSPLAT that handles the cases when v2i64 is legal
llvm-svn: 191191
|
|
|
|
|
|
| |
from normal IR (i.e. not intrinsics)
llvm-svn: 190518
|
|
|
|
|
|
| |
fsqrt, and fsub from normal IR (i.e. not intrinsics)
llvm-svn: 190512
|
|
|
|
|
|
| |
intrinsics)
llvm-svn: 190509
|