- User Since
- Sep 5 2014, 5:55 AM (403 w, 1 d)
Wed, May 4
Apr 12 2022
Apr 7 2022
Mar 17 2022
Mar 3 2022
Rebased, added a recursion limit to the SCEV building function.
Feb 8 2022
Rebased and changed to use @fhahn 's lighter-weight approach from D114487 combined with my recursive function to find the SCEVs. Although the simplified tests are handled with a couple levels of checking, the real applications I was working on had additional operations between the ptr value for the load or store and a select.
Nov 26 2021
Revised based on @fhahn 's initial suggestions, rebased.
Nov 24 2021
Nov 22 2021
Rebased, disabled by default, added a couple of different instructions into the tests to ensure those paths are at least covered even if they aren't in a positive case right now; I'm still planning to leave those cases (known strides, g/s, uniform) for a followup patch; I suppose I could start a patch series if people want to see those earlier.
Nov 17 2021
Rebased, and changed the membership of a checking group to be a pair of PointerInfo index and fork so that printing can show which forks are present in a group.
Nov 10 2021
Superseded by @lebedev.ri 's patches. I'll continue looking at the metadata angle separately.
Nov 5 2021
Added the ability to look through GEPs for a call. I've limited this to using indexes of all 0, and only for single value types, so I'm not sure how often we'll encounter that. The limitation on the indexes does match the existing checks for whether promotion is allowed.
Nov 2 2021
Updated the diff based on the suggestion from @lebedev.ri
Oct 21 2021
Rebased, minor fixes from review comments.
Oct 20 2021
Oct 12 2021
Rebased, updated based on review comments.
Sep 14 2021
Sep 7 2021
Sep 6 2021
Rebased, ran clang-format over the patch.
Aug 25 2021
Jun 22 2021
I'm fixing up the buildbot failure - other parts of the repo (e.g. openmp) fail to build with -Werror so I don't normally use it.
Jun 17 2021
Jun 7 2021
Apologies for not including more of the diff for context, but the test files are large enough that the full diff exceeds the maximum upload size.
Mar 4 2020
Looks good, I agree with @dmgreen that a clang driver test would be nice.
Mar 2 2020
- Removed the ) my editor helpfully added to the CHECK line
- Added a test to declare_simd_aarch64.c
Feb 28 2020
- Added a function body to the test so that it would generate symbols
- Added check lines to ensure the mangled name is present
- Reformatted the params of Sema::CheckOpenMPLinearDecl to comply with coding style.
Jan 23 2020
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.