| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 319568
|
| |
|
|
| |
llvm-svn: 319559
|
| |
|
|
| |
llvm-svn: 319558
|
| |
|
|
| |
llvm-svn: 319554
|
| |
|
|
| |
llvm-svn: 319553
|
| |
|
|
| |
llvm-svn: 319551
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
1/ Operand folding during complex pattern matching for LEAs has been extended, such that it promotes Scale to
accommodate similar operand appearing in the DAG e.g.
T1 = A + B
T2 = T1 + 10
T3 = T2 + A
For above DAG rooted at T3, X86AddressMode will now look like
Base = B , Index = A , Scale = 2 , Disp = 10
2/ During OptimizeLEAPass down the pipeline factorization is now performed over LEAs so that if there is an opportunity
then complex LEAs (having 3 operands) could be factored out e.g.
leal 1(%rax,%rcx,1), %rdx
leal 1(%rax,%rcx,2), %rcx
will be factored as following
leal 1(%rax,%rcx,1), %rdx
leal (%rdx,%rcx) , %edx
3/ Aggressive operand folding for AM based selection for LEAs is sensitive to loops, thus avoiding creation of any complex LEAs within a loop.
4/ Simplify LEA converts (lea (BASE,1,INDEX,0) --> add (BASE, INDEX) which offers better through put.
PR32755 will be taken care of by this pathc.
Previous patch revisions : r313343 , r314886
Reviewers: lsaba, RKSimon, craig.topper, qcolombet, jmolloy, jbhateja
Reviewed By: lsaba, RKSimon, jbhateja
Subscribers: jmolloy, spatel, igorb, llvm-commits
Differential Revision: https://reviews.llvm.org/D35014
llvm-svn: 319543
|
| |
|
|
| |
llvm-svn: 319540
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary: LegalizerInfo assumes all G_MERGE_VALUES and G_UNMERGE_VALUES instructions are legal, so it is not possible to legalize vector operations on illegal vector types. This patch fixes the problem by removing the related check and adding default actions for G_MERGE_VALUES and G_UNMERGE_VALUES.
Reviewers: qcolombet, ab, dsanders, aditya_nandakumar, t.p.northover, kristof.beyls
Reviewed By: dsanders
Subscribers: rovka, javed.absar, igorb, llvm-commits
Differential Revision: https://reviews.llvm.org/D39823
llvm-svn: 319524
|
| |
|
|
|
|
|
|
| |
The default legalization for v2i32 is promotion to v2i64. This results in a gather that reads 64-bit elements rather than 32. If one of the elements is near a page boundary this can cause an illegal access that can fault.
We also miscalculate the scale for the gather which is an even worse problem, but we probably could have found a separate way to fix that.
llvm-svn: 319521
|
| |
|
|
|
|
| |
AVX2 gathers only use the upper bit of the mask allowing us to simplify sign_extend_inreg to a shift left.
llvm-svn: 319514
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
These command line options are not intended for public use, and often
don't even make sense in the context of a particular tool anyway. About
90% of them are already hidden, but when people add new options they
forget to hide them, so if you were to make a brand new tool today, link
against one of LLVM's libraries, and run tool -help you would get a
bunch of junk that doesn't make sense for the tool you're writing.
This patch hides these options. The real solution is to not have
libraries defining command line options, but that's a much larger effort
and not something I'm prepared to take on.
Differential Revision: https://reviews.llvm.org/D40674
llvm-svn: 319505
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Summary: This strengthens the guard and matches MSVC.
Reviewers: hans, etienneb
Subscribers: hiraditya, JDevlieghere, vlad.tsyrklevich, llvm-commits
Differential Revision: https://reviews.llvm.org/D40622
llvm-svn: 319490
|
| |
|
|
|
|
|
|
| |
instruction.
The 32-bit version is shorter to encode and the zext we emit for the promotion is likely going to be a 32-bit zero extend anyway.
llvm-svn: 319468
|
| |
|
|
| |
llvm-svn: 319433
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
As part of the unification of the debug format and the MIR format, avoid
printing "vreg" for virtual registers (which is one of the current MIR
possibilities).
Basically:
* find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" \) -type f -print0 | xargs -0 sed -i '' -E "s/%vreg([0-9]+)/%\1/g"
* grep -nr '%vreg' . and fix if needed
* find . \( -name "*.mir" -o -name "*.cpp" -o -name "*.h" -o -name "*.ll" \) -type f -print0 | xargs -0 sed -i '' -E "s/ vreg([0-9]+)/ %\1/g"
* grep -nr 'vreg[0-9]\+' . and fix if needed
Differential Revision: https://reviews.llvm.org/D40420
llvm-svn: 319427
|
| |
|
|
| |
llvm-svn: 319424
|
| |
|
|
| |
llvm-svn: 319418
|
| |
|
|
|
|
| |
Normal type legalization will widen everything. This requires forcing 0s into the mask register. We can instead choose the form that only reads 2 elements without zeroing the mask.
llvm-svn: 319406
|
| |
|
|
|
|
| |
We don't use k-registers and instead use the MSB so we need to make sure we sign extend the mask to the msb.
llvm-svn: 319405
|
| |
|
|
|
|
|
|
|
|
| |
a VZEXT to create a larger VSEXT.
If the input the vzext was signed this would do the wrong thing.
Not sure how to test this.
llvm-svn: 319382
|
| |
|
|
|
|
| |
Accidental commit of incomplete patch
llvm-svn: 319346
|
| |
|
|
| |
llvm-svn: 319338
|
| |
|
|
|
|
| |
scheduler classes
llvm-svn: 319337
|
| |
|
|
|
|
| |
All default to NoItinerary
llvm-svn: 319326
|
| |
|
|
| |
llvm-svn: 319316
|
| |
|
|
|
|
| |
instruction scheduler classes
llvm-svn: 319312
|
| |
|
|
|
|
| |
NFCI.
llvm-svn: 319310
|
| |
|
|
|
|
| |
templates. NFCI.
llvm-svn: 319308
|
| |
|
|
|
|
|
|
| |
MVT::v8i16/v16i8/v16i16.
A DAG combine ensures these ops are always promoted to vXi32.
llvm-svn: 319298
|
| |
|
|
| |
llvm-svn: 319266
|
| |
|
|
|
|
|
|
|
|
| |
legal. Fix infinite loop in op legalization when promotion requires 2 steps.
Previously we had an isel pattern to add the truncate. Instead use Promote to add the truncate to the DAG before isel.
The Promote legalization code had to be updated to prevent an infinite loop if promotion took multiple steps because it wasn't remembering the previously tried value.
llvm-svn: 319259
|
| |
|
|
| |
llvm-svn: 319253
|
| |
|
|
|
|
|
|
| |
Update multi-classes to take the scheduling OpndItins instead of hard coding it.
Will be reused in the AVX512 equivalents.
llvm-svn: 319249
|
| |
|
|
|
|
|
|
| |
Update multi-classes to take the scheduling OpndItins instead of hard coding it.
Will be reused in the AVX512 equivalents.
llvm-svn: 319245
|
| |
|
|
|
|
|
|
| |
Update multi-classes to take the scheduling OpndItins instead of hard coding it.
SSE_PACK will be reused in the AVX512 equivalents.
llvm-svn: 319243
|
| |
|
|
| |
llvm-svn: 319239
|
| |
|
|
|
|
|
|
| |
legal when zero extending from vXi8/vX816.
The UINT_TO_FP is immediately converted to SINT_TO_FP when the node is re-evaluated because we'll detect that the sign bit is zero.
llvm-svn: 319234
|
| |
|
|
|
|
| |
We have a DAG combine that uses a zero extend that should prevent this from ever occurring now.
llvm-svn: 319233
|
| |
|
|
|
|
|
|
| |
Update multi-classes to take the scheduling OpndItins instead of hard coding it.
Will be reused in the AVX512 equivalents.
llvm-svn: 319209
|
| |
|
|
|
|
|
|
|
|
| |
i8 or i16 and need to zero extend it, make sure we use a vXi32 type of the full vector width.
Previously, this was hardcoded to v4i32, but if the input type is 256 bits we need to use v8i32.
Fixes PR35443
llvm-svn: 319208
|
| |
|
|
|
|
| |
We don't need scheduling info for pseudos
llvm-svn: 319197
|
| |
|
|
|
|
|
|
|
|
|
| |
As part of the unification of the debug format and the MIR format,
always print registers as lowercase.
* Only debug printing is affected. It now follows MIR.
Differential Revision: https://reviews.llvm.org/D40417
llvm-svn: 319187
|
| |
|
|
|
|
| |
Looking through Agner, FTST is very similar to generic float compare behaviour, so I've added them to the existing IIC_FCOMI (WriteFAdd) tags.
llvm-svn: 319184
|
| |
|
|
|
|
|
| |
Atom's FABS/FCHS/FSQRT latencies taken from Agner.
Note: I just added FSIN and FCOS to the existing IIC_FSINCOS itinerary, which is actually a more costly instruction.
llvm-svn: 319175
|
| |
|
|
|
|
| |
femms/prefetch/prefetchw
llvm-svn: 319167
|
| |
|
|
| |
llvm-svn: 319143
|
| |
|
|
|
|
| |
under AVX512.
llvm-svn: 319136
|
| |
|
|
|
|
|
|
| |
block. NFCI
These lines all exist identically either under SSE2, AVX2 or AVX512. Given that VLX implies all of those, these aren't providing anything new.
llvm-svn: 319124
|
| |
|
|
|
|
| |
These same calls exist a few lines down.
llvm-svn: 319122
|