- User Since
- Sep 5 2014, 5:55 AM (281 w, 11 h)
Superseded by D66302
Superseded by D65448
Superseded by D68203
Nov 26 2019
Nov 18 2019
Nov 14 2019
- Removed const qualifier from queries
- Swapped to std::make_tuple for the comparisons in CodeGenDAGPatterns.cpp
Nov 13 2019
Nov 12 2019
I also changed the SelectionDAGBuilder code for masked loads/stores/gathers/scatters to use the known min size when creating a MachineMemoryOperand, since MMO isn't aware of scalable types yet. I've left TODOs as reminders.
- Switched the lambdas in CodeGenDAGPatterns to use std::tie for ordering. This needed the TypeSize objects to be constant (I get a "non-const lvalue reference" error otherwise), so I changed all query methods to return const objects.
- Changed stack offset to deliberately use a TypeSize. This hit another problem with implicit promotion and signed v. unsigned casting, so I've added explicit casts.
Nov 5 2019
Oct 30 2019
Oct 29 2019
Oct 25 2019
- Refactored to match the same approach used in D53137 -- TypeSize returned for all size queries instead of introducing separate interfaces and relying on implicit conversion to be (mostly) compatible with existing code.
- Added 'isByteSized()' interface to TypeSize.
- Minor bugfix to DAGCombiner::ForwardStoreValueToDirectLoad, where implicit conversions allowed an unsigned number to wrap and then be converted to a larger signed integer; with TypeSize using uint64_t instead, this showed up during a make check-all run with ubsan active. Can't write a test for that one since the transform bailed out when Offset was non-zero.
Oct 23 2019
I was also expecting something that says "setOperationAction(ISD::MLOAD, VT, Legal)" somewhere, but I guess that's already the default?
Oct 22 2019
Hi, thanks for waiting a bit. LGTM.
Oct 18 2019
Oct 17 2019
- Fixed legalization action code, which was trying to use widening for all integer scalable vector types after the new MVT ranges were added
- Added unit tests for legalizing the result via promotion
- Minor cleanups, additional comments as requested
Oct 16 2019
Oct 8 2019
Hmm, forgot to add the last round of minor fixes before committing. Sorry about that, will push them as well.
Oct 3 2019
- Added DAG combine to canonicalize a build_vector splat into a splat_vector if the target supports the splat_vector operation (by overriding the default Expand legalization action)
Oct 2 2019
Oct 1 2019
- Renamed ScalableSize to TypeSize, including header name.
- added alignTo function that takes and returns a TypeSize. I wasn't sure if this should be added to MathExtras.h where the other variants live, so just kept it in TypeSize.h for now
Sep 30 2019
- Removed intrinsic and supporting code
- Added new ISD as discussed on llvm-dev: http://lists.llvm.org/pipermail/llvm-dev/2019-August/134809.html
You can add the extra multiclass for ftsmul if you wish, but it's not needed until someone implements a matching pattern for that instruction. We only match it against an ACLE intrinsic downstream, not common SDag nodes.
Sep 27 2019
Thanks for taking an interest in SVE codegen. The tests look fine, but we had a different approach in mind for generating many of the patterns. In this case instead of making separate def : Pat< lines for each type, we add an SDPatternOperator and pattern to the multiclass for that instruction type.
Sep 23 2019
- Changed existing interface to return ScalableSize objects and added a (mostly) transparent conversion, as per Sander's suggestion.
- Removed new interfaces for DataLayout and Type.
- Fixed cases where the transparent conversion doesn't quite work (e.g. std::max/min, where the types must be the same)
Sep 17 2019
Aug 29 2019
Does anyone like Sander's suggestion to make ScalableSize (or whatever we end up naming it) the return value for all size queries and provide an overloaded cast operator to transparently work with existing code comparing against unsigned values? Or is it preferable to keep the current split?
Aug 28 2019
Aug 27 2019
- Split out backend code into separate patches
- Renamed 'Min' to 'KnownMin' in method names.
- Added a few more comments.
Aug 21 2019
- Reordered MVTs to group fixed-length types together (and the same for scalable).
- Replaced existing range accessors to remove explicit isScalableVector checks on MVTs in various backends.
Aug 16 2019
Split out from D53137.
Created D66339 to split out the code to skip scalable vector types in other backends.
Aug 9 2019
Aug 6 2019
- Added comments explaining the new methods
- Added tests for the MVT/EVT/DataLayout interfaces
- Refactored ScalableSize class operators to build on '==' and '<'
- Added checks in various backends that don't support scalable vectors to prevent legalizing operations involving scalable MVTs
Aug 5 2019
Aug 2 2019
- Added inline comments to clarify boolean parameter meaning.
Aug 1 2019
Thanks for the reviews; I left a couple of inline comments, and will make the requested changes.
- Updated to head
- Removed MVT-specific ElementCount in favour of using the common struct
- Added unit tests.
Jul 31 2019
- Removed most of the changes in favour of reintroducing them in separate patches later with appropriate tests.
- Added tests for core IR instructions to make sure they don't drop the scalable flag.
- Fixed up a couple places which broke the new tests.
Jul 23 2019
Jul 16 2019
Updated based on where scalable size queries were required when running with an SVE-capable loop vectorizer on several codebases (all of LNT, various flavours of SpecCPU, lots of HPC and embedded benchmarks).
Jul 5 2019
Jul 2 2019
Jun 18 2019
Jun 17 2019
Jun 14 2019
Jun 10 2019
May 29 2019
May 28 2019
May 23 2019
- Simplified wording for extract/insertelement semantics
May 22 2019
- Changed textual IR format to <vscale x n x <ty>>
May 20 2019
It seems like there's enough support for changing to <vscale x as the prefix, so I'll revise the patch.
May 10 2019
- Changed (extract|insert)element semantics to return poison values at runtime if the index exceeds hardware vector length.
- Changed shufflevector semantics to note that only zeroinitializer and undef can be used as mask values for scalable vectors for now.
May 2 2019
May 1 2019
Apr 30 2019
Noted the change in semantics for extractelement and insertelement in the langref.