| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
We were relying on constant folding of the legalized instructions to do what constant folding we had previously
llvm-svn: 292114
|
| |
|
|
|
|
|
|
| |
Simplify a pshufb shuffle mask based on the elements of the mask that are actually demanded.
Differential Revision: https://reviews.llvm.org/D28745
llvm-svn: 292101
|
| |
|
|
|
|
| |
the size information from the ENCODING field. NFCI
llvm-svn: 292096
|
| |
|
|
|
|
|
|
|
| |
with. NFCI
We were frequently checking for a list of types and the different types
conveyed no real information. So lump them together explicitly.
llvm-svn: 292095
|
| |
|
|
|
|
| |
instructions.
llvm-svn: 292094
|
| |
|
|
|
|
|
|
| |
different encoding than regular addressing modes.
This part first teaches it not to check error if EVEX.V2 is used by a VSIB instruction.
llvm-svn: 292093
|
| |
|
|
|
|
|
|
|
| |
with ZMM index. Similar for SCATTER and the prefetch gather and scatter
instructions.
Fixes PR31618.
llvm-svn: 292088
|
| |
|
|
|
|
| |
that all 32 bit registers can be allowed.
llvm-svn: 292087
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
Use getLoopLatch in place of isLoopSimplifyForm. we do not need
to know whether the loop has a preheader nor dedicated exits.
Reviewers: hfinkel, sanjoy, atrick, mkuper
Subscribers: mzolotukhin, llvm-commits
Differential Revision: https://reviews.llvm.org/D28724
llvm-svn: 292078
|
| |
|
|
|
|
| |
We already have patterns in place to support 128/256-bit shifts without AVX512VL
llvm-svn: 292077
|
| |
|
|
| |
llvm-svn: 292073
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
Previously there were three ways to inform the NVVMReflect pass whether
you wanted to flush denormals to zero:
* An LLVM command-line option
* Parameters to the NVVMReflect constructor
* Metadata on the module itself.
This change removes the first two, leaving only the third.
The motivation for this change, aside from simplifying things, is that
we want LLVM to be aware of whether it's operating in FTZ mode, so other
passes can use this information. Ideally we'd have a target-generic
piece of metadata on the module. This change moves us in that
direction.
Reviewers: tra
Subscribers: jholewinski, llvm-commits
Differential Revision: https://reviews.llvm.org/D28700
llvm-svn: 292068
|
| |
|
|
|
|
| |
opposite mask then Select NODE.
llvm-svn: 292066
|
| |
|
|
| |
llvm-svn: 292064
|
| |
|
|
|
|
| |
Commits r291882 and related r291887.
llvm-svn: 292062
|
| |
|
|
|
|
|
|
|
|
| |
This reverts commit r291973.
The test fails in a Release build with LLVM_BUILD_GLOBAL_ISEL enabled.
AFAICT, llc segfaults. I'll add a few more details to the original
commit.
llvm-svn: 292061
|
| |
|
|
|
|
| |
should not be creating new entries
llvm-svn: 292059
|
| |
|
|
|
|
|
|
|
|
| |
events.
This pass sometimes has a pointer to BlockFrequencyInfo so it needs
custom invalidation logic. It is also otherwise immutable so we can
reduce the number of invalidations that happen substantially.
llvm-svn: 292058
|
| |
|
|
|
|
|
|
|
|
| |
negotiateFunction where appropriate.
Replacing the old ECError with a custom type allows us to attach the name of
the function that could not be negotiated, enabling better diagnostics for
negotiation failures.
llvm-svn: 292055
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
a function's CFG when that CFG is unchanged.
This allows transformation passes to simply claim they preserve the CFG
and analysis passes to check for the CFG being preserved to remove the
fanout of all analyses being listed in all passes.
I've gone through and removed or cleaned up as many of the comments
reminding us to do this as I could.
Differential Revision: https://reviews.llvm.org/D28627
llvm-svn: 292054
|
| |
|
|
| |
llvm-svn: 292053
|
| |
|
|
|
|
| |
patterns when VLX is available.
llvm-svn: 292051
|
| |
|
|
|
|
|
|
| |
These all involve bitcasts around the memory operands. This isn't
something we normally do for isel patterns. I suspect DAG combine should
convert the load type making this unnecessary.
llvm-svn: 292050
|
| |
|
|
| |
llvm-svn: 292043
|
| |
|
|
|
|
|
|
|
|
| |
This patch adds a new class NameHashTableBuilder which creates /names streams.
This patch contains a test to confirm that a stream created by
NameHashTableBuilder can be read by NameHashTable reader class.
Differential Revision: https://reviews.llvm.org/D28707
llvm-svn: 292040
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
mark it as never invalidated in the new PM.
The old PM already required this to work, and after a discussion with
Hal this seems to really be the only sensible answer. The cache
gracefully degrades as the IR is mutated, and most things which do this
should already be incrementally updating the cache.
This gets rid of a bunch of logic preserving and testing the
invalidation of this analysis.
llvm-svn: 292039
|
| |
|
|
|
|
|
|
|
|
|
| |
cover domtree and alias analysis. These are the pretty clear analyses
that we would always want to survive this pass.
To make these survive, we also need to preserve the assumption cache.
Added a test that verifies the important bits of this preservation.
llvm-svn: 292037
|
| |
|
|
| |
llvm-svn: 292036
|
| |
|
|
|
|
|
| |
Patch by Gonsolo.
Differential Revision: https://reviews.llvm.org/D28731
llvm-svn: 292031
|
| |
|
|
| |
llvm-svn: 292026
|
| |
|
|
| |
llvm-svn: 292025
|
| |
|
|
| |
llvm-svn: 292024
|
| |
|
|
|
|
| |
has landed
llvm-svn: 292023
|
| |
|
|
|
|
| |
VPMADCSWD act as VPADDD( VPMADDWD( x, y ), z ) - multiply+extend+hadd and add to v4i32 accumulator
llvm-svn: 292021
|
| |
|
|
|
|
| |
VPMACSDQH/VPMACSDQL act as VPADDQ( VPMULDQ( x, y ), z ) - multiply+extending either the odd/even 4i32 input elements and adding to v2i64 accumulator
llvm-svn: 292020
|
| |
|
|
|
|
| |
VPMACSWW/VPMACSDD act as add( mul( x, y ), z ) - ignoring any upper bits from both the multiply and add stages
llvm-svn: 292019
|
| |
|
|
|
|
|
|
|
|
|
|
| |
instructions with blendm instructions when its beneficial.
Isel now selects masked move instructions for vselect instead of blendm. But sometimes it beneficial to register allocation to remove the tied register constraint by using blendm instructions.
This also picks up cases where the masked move was created due to a masked load intrinsic.
Differential Revision: https://reviews.llvm.org/D28454
llvm-svn: 292005
|
| |
|
|
|
|
|
|
|
|
| |
AVX512_128_SET0 expansion to make this possible.
We'll now expand AVX512_128_SET0 to an EVEX VXORD if VLX available. Or if its not, but register allocation has selected a non-extended register we will use VEX VXORPS. And if its an extended register without VLX we'll use a 512-bit XOR. Do the same for AVX512_FsFLD0SS/SD.
This makes it possible for the register allocator to have all 32 registers available to work with.
llvm-svn: 292004
|
| |
|
|
|
|
|
|
| |
This fallthrough if other cases are added between fabs and default
could cause fabs to fall to the next case resulting in a bug.
Better getting rid of it immediately just to be sure.
llvm-svn: 292003
|
| |
|
|
|
|
| |
second loop.
llvm-svn: 291996
|
| |
|
|
|
|
|
|
| |
Also add 32-bit mode command lines to the test case that exercises this just to make sure we sanely handle the 64-bit immediate there.
This fixes a undefined sanitizer failure from r291888.
llvm-svn: 291994
|
| |
|
|
|
|
| |
warnings; other minor fixes (NFC).
llvm-svn: 291983
|
| |
|
|
|
|
|
|
|
|
| |
extractProfTotalWeight checks if the profile type is sample profile, but
before that we have to ensure that summary is available. Also expanded
the unittest to test the case where there is no summar
Differential Revision: https://reviews.llvm.org/D28708
llvm-svn: 291982
|
| |
|
|
| |
llvm-svn: 291981
|
| |
|
|
|
|
|
|
|
|
| |
When GlobalISel is configured to abort rather than fallback the only
thing that resetting the machine function does is make things harder
to debug. If we ever get to this point in the abort configuration it
indicates that we've already hit a bug, so this changes the behaviour
to abort instead.
llvm-svn: 291977
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Allows LLVM to optimize sequences like the following:
%add = add nuw i32 %x, 1
%cmp = icmp ugt i32 %add, %y
Into:
%cmp = icmp uge i32 %x, %y
Previously, only signed comparisons were being handled.
Decrements could also be handled, but 'sub nuw %x, 1' is currently canonicalized to
'add %x, -1' in InstCombineAddSub, losing the nuw flag. Removing that canonicalization
seems like it might have far-reaching ramifications so I kept this simple for now.
Patch by Matti Niemenmaa!
Differential Revision: https://reviews.llvm.org/D24700
llvm-svn: 291975
|
| |
|
|
|
|
|
|
| |
Correctly populating Machine PHIs relies on knowing exactly how the IR level
CFG was lowered to MachineIR. This needs to be tracked by any translation
phases that meddle (currently only SwitchInst handling).
llvm-svn: 291973
|
| |
|
|
| |
llvm-svn: 291972
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
dominating leader. Fixes PR 31613.
Summary:
This is a testcase where phi node cycling happens, and because we do
not order the leaders by domination or anything similar, the leader
keeps changing.
Using std::set for the members is too expensive, and we actually don't
need them sorted all the time, only at leader changes.
We could keep both a set and a vector, and keep them mostly sorted and
resort as necessary, or use a set and a fibheap, but all of this seems
premature.
After running some statistics, we are able to avoid the vast majority
of sorting by keeping a "next leader" field. Most congruence classes only have
leader changes once or twice during GVN.
Reviewers: davide
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D28594
llvm-svn: 291968
|
| |
|
|
|
|
|
|
|
|
| |
a llvm::ArrayRef<dwarf::Attribute>.
This allows us efficiently look for more than one attribute, something that is quite common in DWARF consumption.
Differential Revision: https://reviews.llvm.org/D28704
llvm-svn: 291967
|