| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Since r274013, we've been looking through bitcasts on broadcast inputs.
In the scalar-folding case (from a load, build_vector, or sc2vec),
the input type didn't matter, as we'd simply bitcast the resulting
scalar back.
However, when broadcasting a 128-bit-lane-aligned element, we create an
EXTRACT_SUBVECTOR. Use proper types, by creating an extract_subvector
of the original input type.
llvm-svn: 294774
|
| |
|
|
|
|
| |
Also reordered an if statement to test low cost comparisons first
llvm-svn: 294748
|
| |
|
|
|
|
|
| |
In some cases we call getTargetConstantBitsFromNode for nodes that haven't been lowered from BUILD_VECTOR yet
Note: We're getting very close to being able to move most of the constant extraction code from getTargetShuffleMaskIndices into getTargetConstantBitsFromNode
llvm-svn: 294746
|
| |
|
|
| |
llvm-svn: 294745
|
| |
|
|
| |
llvm-svn: 294726
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
[X86][GlobalISel] Add general-purpose Register Bank.
Add trivial handling of G_ADD legalization .
Add Regestry Bank selection for COPY and G_ADD instructions
Reviewers: rovka, zvi, ab, t.p.northover, qcolombet
Reviewed By: qcolombet
Subscribers: qcolombet, mgorny, dberris, kristof.beyls, llvm-commits
Differential Revision: https://reviews.llvm.org/D29771
llvm-svn: 294723
|
| |
|
|
|
|
|
|
|
| |
until we can get better TargetMachine::isCompatibleDataLayout to compare - otherwise
we can't code generate existing bitcode without a string equality data layout.
This reverts commit r294702.
llvm-svn: 294709
|
| |
|
|
|
|
|
|
|
|
|
|
| |
For other platforms we should find out what they need and likely
make the same change, however, a smaller additional change is easier
for platforms we know have it specified in the ABI. As part of this
rewrite some of the handling in the backends for data layout and update
a bunch of testcases.
Based on a patch by Simonas Kazlauskas!
llvm-svn: 294702
|
| |
|
|
| |
llvm-svn: 294640
|
| |
|
|
|
|
| |
Differential Revision: https://reviews.llvm.org/D28690
llvm-svn: 294636
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This requires that we communicate to X86InstrInfo::optimizeCompareInstr
that the second operand is neither a register nor an immediate. The way we
do that is by setting CmpMask to zero.
Note that there were already instructions where the second operand was not a
register nor an immediate, namely X86::SUB*rm, so also set CmpMask to zero
for those instructions. This seems like a latent bug, but I was unable to
trigger it.
Differential Revision: https://reviews.llvm.org/D28621
llvm-svn: 294634
|
| |
|
|
| |
llvm-svn: 294610
|
| |
|
|
| |
llvm-svn: 294596
|
| |
|
|
|
|
|
|
|
|
| |
math.
In combineOrCmpEqZeroToCtlzSrl, replace "getConstantOperand == 0" by "isNullConstant" to account for floating point constants.
Differential Revision: https://reviews.llvm.org/D29756
llvm-svn: 294588
|
| |
|
|
|
|
|
|
|
|
|
|
| |
LowerBuildVectorv16i8/LowerBuildVectorv8i16 insert values into a UNDEF vector if the build vector doesn't contain any zero elements, resulting in register dependencies with a previous use of the register.
This patch attempts to break the register dependency by either always zeroing the vector before hand or (if we're inserting to the 0'th element) by using VZEXT_MOVL(SCALAR_TO_VECTOR(i32 AEXT(Elt))) which lowers to (V)MOVD and performs a similar function. Additionally (V)MOVD is a shorter instruction than PINSRB/PINSRW. We already do something similar for SSE41 PINSRD.
On pre-SSE41 LowerBuildVectorv16i8 we go a little further and use VZEXT_MOVL(SCALAR_TO_VECTOR(i32 ZEXT(Elt))) if the build vector contains zeros to avoid the vector zeroing at the cost of a scalar zero extension, which can probably be brought over to the other cases in a future patch in some cases (load folding etc.)
Differential Revision: https://reviews.llvm.org/D29720
llvm-svn: 294581
|
| |
|
|
|
|
| |
We only implemented it for one of the 3 HLE instructions and that instruction is also under the RTM flag. Clang only implements the RTM flag from its command line.
llvm-svn: 294562
|
| |
|
|
|
|
|
|
| |
any instructions and not tested.
If we implement intrinsics for their instructions in the future, the feature flags can be added back with proper testing.
llvm-svn: 294561
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch does the following.
1. Adds an Intrinsic int_x86_clzero which works with __builtin_ia32_clzero
2. Identifies clzero feature using cpuid info. (Function:8000_0008, Checks if EBX[0]=1)
3. Adds the clzero feature under znver1 architecture.
4. The custom inserter is added in Lowering.
5. A testcase is added to check the intrinsic.
6. The clzero instruction is added to assembler test.
Patch by Ganesh Gopalasubramanian with a couple formatting tweaks, a disassembler test, and using update_llc_test.py from me.
Differential revision: https://reviews.llvm.org/D29385
llvm-svn: 294558
|
| |
|
|
|
|
| |
Run clang-format and standardized variable names between functions.
llvm-svn: 294456
|
| |
|
|
|
|
| |
the feature flag is set.
llvm-svn: 294407
|
| |
|
|
|
|
|
|
| |
we have no support for codegening vmfunc instructions today.
If that support ever gets added, the full feature flag support should come along with it.
llvm-svn: 294406
|
| |
|
|
|
|
|
|
| |
instruction with no plans to release products with it.
Intel's documentation for the deprecation https://software.intel.com/en-us/blogs/2016/09/12/deprecate-pcommit-instruction
llvm-svn: 294405
|
| |
|
|
|
|
|
|
|
| |
They are currently modelled incorrectly (as calls, which clobber
registers, confusing e.g. Machine Copy Propagation).
Reverting until we figure out the proper solution.
llvm-svn: 294348
|
| |
|
|
| |
llvm-svn: 294344
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
This change allows usage of store instruction for implicit null check.
Memory Aliasing Analisys is not used and change conservatively supposes
that any store and load may access the same memory. As a result
re-ordering of store-store, store-load and load-store is prohibited.
Patch by Serguei Katkov!
Reviewers: reames, sanjoy
Reviewed By: sanjoy
Subscribers: atrick, llvm-commits
Differential Revision: https://reviews.llvm.org/D29400
llvm-svn: 294338
|
| |
|
|
| |
llvm-svn: 294337
|
| |
|
|
| |
llvm-svn: 294333
|
| |
|
|
|
|
|
|
|
|
| |
bitcast to the result type
vXi8/vXi64 vector shifts are often shifted as vYi16/vYi32 types but we weren't always remembering to bitcast the input.
Tested with a new assert as we don't currently manipulate these shifts enough for test cases to catch them.
llvm-svn: 294308
|
| |
|
|
|
|
| |
folding tables.
llvm-svn: 294287
|
| |
|
|
|
|
| |
This adds the masked versions of everything, but the shift by immediate instructions.
llvm-svn: 294286
|
| |
|
|
|
|
|
|
| |
This includes unmasked forms of variable shift and shifting by the lower element of a register.
Still need to do shift by immediate which was not foldable prior to avx512 and all the masked forms.
llvm-svn: 294285
|
| |
|
|
|
|
| |
YMM16-31.
llvm-svn: 294277
|
| |
|
|
|
|
| |
This is preparation to reduce MCExpr.h dependencies.(vlsj-clangbuild)[622]
llvm-svn: 294246
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
being combined.
Currently we only combine shuffle nodes if they have a single user to prevent us from causing code bloat by splitting the shuffles into several different combines.
We don't take into account that in some cases we will already have combined all the users during recursively calling up the shuffle tree.
This patch keeps a list of all the shuffle nodes that have been combined so far and permits combining of further shuffle nodes if all its users are in that list.
Differential Revision: https://reviews.llvm.org/D29399
llvm-svn: 294183
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
Support return lowering for i8/i16/i32/i64/float/double, vector type supported for 64bit platform only.
Support argument lowering for float/double types.
Reviewers: t.p.northover, zvi, ab, rovka
Reviewed By: zvi
Subscribers: dberris, kristof.beyls, delena, llvm-commits
Differential Revision: https://reviews.llvm.org/D29261
llvm-svn: 294173
|
| |
|
|
| |
llvm-svn: 294170
|
| |
|
|
| |
llvm-svn: 294169
|
| |
|
|
| |
llvm-svn: 294168
|
| |
|
|
| |
llvm-svn: 294164
|
| |
|
|
|
|
| |
load folding tables.
llvm-svn: 294163
|
| |
|
|
|
|
| |
Similar to what we already do for zero elt insertion, we can quickly rematerialize 'allbits' vectors so to avoid a unnecessary gpr value and insertion into a vector
llvm-svn: 294162
|
| |
|
|
|
|
| |
folding tables.
llvm-svn: 294153
|
| |
|
|
|
|
| |
load folding tables.
llvm-svn: 294152
|
| |
|
|
|
|
| |
isNonFoldablePartialRegisterLoad to improve load folding of scalar loads.
llvm-svn: 294151
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
Make this interface reusable similarly to std::call_once and std::once_flag interface.
This makes porting LLDB to NetBSD easier as there was in the original approach a portable way to specify a non-static once_flag. With this change translating std::once_flag to llvm::once_flag is mechanical.
Sponsored by <The NetBSD Foundation>
Reviewers: mehdi_amini, labath, joerg
Reviewed By: mehdi_amini
Subscribers: emaste, clayborg
Differential Revision: https://reviews.llvm.org/D29566
llvm-svn: 294143
|
| |
|
|
| |
llvm-svn: 294132
|
| |
|
|
|
|
| |
%xmm0 argument. This makes codegen output more obvious about the %xmm0 usage.
llvm-svn: 294131
|
| |
|
|
|
|
|
|
|
|
|
|
| |
creating a PSHUFB. This will be lowered by regular shuffle lowering to a PSHUFB later.
Similar was already done for several other shuffles in this function.
The test changes are because the old code used explicity zeroing for elements that could have been undef.
While I was here I also changed other shuffle vectors in the same function to use the same input twice instead of creating UNDEF nodes. getVectorShuffle can create the UNDEF for us.
llvm-svn: 294130
|
| |
|
|
|
|
| |
vec2, idx1), idx1) -> (blendi vec2, vec1).
llvm-svn: 294112
|
| |
|
|
| |
llvm-svn: 294111
|