Commit message (Collapse) | Author | Age | Files | Lines | ||
---|---|---|---|---|---|---|
... | ||||||
* | GlobalISel: Implement fewerElementsVector for shifts | Matt Arsenault | 2019-02-07 | 3 | -108/+1263 | |
| | | | | | | | | | Introduce a new function which handles instructions with multiple type indices, but have the same number of vector elements. Also legalize v2s16 shifts when applicable. llvm-svn: 353432 | |||||
* | GlobalISel: Consolidate load/store legalization | Matt Arsenault | 2019-02-05 | 2 | -51/+88 | |
| | | | | | | | | | | The fewerElementsVectors implementation for load/stores handles the scalar reduction case just as well, so drop the redundant code in narrowScalar. This also introduces support for narrowing irregular size breakdowns for scalars. llvm-svn: 353125 | |||||
* | GlobalISel: Implement narrowScalar for select | Matt Arsenault | 2019-02-05 | 1 | -2/+143 | |
| | | | | | | | | | | Don't handle vector conditions. I think this can be merged in the future with fewerElementsVectorSelect, although this becomes slightly tricky with a vector condition. llvm-svn: 353122 | |||||
* | GlobalISel: Combine g_extract with g_merge_values | Matt Arsenault | 2019-02-04 | 1 | -0/+470 | |
| | | | | | | | | | | | | | | Try to use the underlying source registers. This enables legalization in more cases where some irregular operations are widened and others narrowed. This seems to make the test_combines_2 AArch64 test worse, since the MERGE_VALUES has multiple uses. Since this should be required for legalization, a hasOneUse check is probably inappropriate (or maybe should only be used if the merge is legal?). llvm-svn: 353121 | |||||
* | GlobalISel: Enforce operand types for constants | Matt Arsenault | 2019-02-04 | 13 | -46/+47 | |
| | | | | | | | | A number of of tests were using imm operands, not cimm. Since CSE relies on the exact ConstantInt* pointer used, and implicit conversions are generally evil, also enforce the bitsize of the types. llvm-svn: 353113 | |||||
* | GlobalISel: Fix not calling observer when legalizing bitcount ops | Matt Arsenault | 2019-02-04 | 5 | -20/+41 | |
| | | | | | | This was hiding bugs from never legalizing the source type. llvm-svn: 353102 | |||||
* | AMDGPU/GlobalISel: Legalize select for v4s16 | Matt Arsenault | 2019-02-04 | 1 | -1/+206 | |
| | | | | | | | Also add some more select tests to help show future legalization changes. llvm-svn: 353045 | |||||
* | GlobalISel: Implement widenScalar for G_UNMERGE_VALUES | Matt Arsenault | 2019-02-03 | 1 | -1/+232 | |
| | | | | | | | | | For the scalar case only. Also move the similar G_MERGE_VALUES handling to a separate function and cleanup to make them look more similar. llvm-svn: 352979 | |||||
* | GlobalISel: Implement widenScalar for G_EXTRACT vector sources | Matt Arsenault | 2019-02-02 | 1 | -0/+132 | |
| | | | | | | Handle the basic element extract case. llvm-svn: 352978 | |||||
* | AMDGPU/GlobalISel: Legalize icmp for pointer types | Matt Arsenault | 2019-02-02 | 1 | -0/+175 | |
| | | | | llvm-svn: 352976 | |||||
* | AMDGPU/GlobalISel: Legalize constant for pointer types | Matt Arsenault | 2019-02-02 | 1 | -0/+84 | |
| | | | | llvm-svn: 352975 | |||||
* | AMDGPU/GlobalISel: Legalize select for pointer types | Matt Arsenault | 2019-02-02 | 1 | -76/+514 | |
| | | | | llvm-svn: 352974 | |||||
* | GlobalISel: Legalization for inttoptr/ptrtoint | Matt Arsenault | 2019-02-02 | 2 | -28/+323 | |
| | | | | llvm-svn: 352973 | |||||
* | GlobalISel: Handle odd splits in fewerElementsVector for load/store | Matt Arsenault | 2019-01-31 | 2 | -123/+248 | |
| | | | | llvm-svn: 352720 | |||||
* | GlobalISel: Implement narrowScalar for bswap | Matt Arsenault | 2019-01-31 | 1 | -0/+125 | |
| | | | | llvm-svn: 352719 | |||||
* | GlobalISel: Allow bitcount ops to have different result type | Matt Arsenault | 2019-01-31 | 5 | -0/+440 | |
| | | | | | | For AMDGPU the result is always 32-bit for 64-bit inputs. llvm-svn: 352717 | |||||
* | GlobalISel: Implement fewerElementsVector for select | Matt Arsenault | 2019-01-30 | 1 | -0/+209 | |
| | | | | llvm-svn: 352601 | |||||
* | AMDGPU/GlobalISel: Fix clamping shifts with 16-bit insts | Matt Arsenault | 2019-01-30 | 3 | -0/+126 | |
| | | | | llvm-svn: 352599 | |||||
* | GlobalISel: Support narrowScalar for uneven loads | Matt Arsenault | 2019-01-30 | 1 | -1/+120 | |
| | | | | llvm-svn: 352594 | |||||
* | GlobalISel: Handle some odd splits in fewerElementsVector | Matt Arsenault | 2019-01-30 | 1 | -3/+75 | |
| | | | | | | Also add some quick hacks to AMDGPU legality for the tests. llvm-svn: 352591 | |||||
* | GlobalISel: Handle more cases for widenScalar for G_STORE | Matt Arsenault | 2019-01-30 | 1 | -0/+99 | |
| | | | | llvm-svn: 352585 | |||||
* | GlobalISel: Verify pointer casts | Matt Arsenault | 2019-01-29 | 1 | -8/+8 | |
| | | | | | | | Not sure if the old AArch64 tests should be just deleted or not. llvm-svn: 352562 | |||||
* | GlobalISel: Partially implement widenScalar for MERGE_VALUES | Matt Arsenault | 2019-01-29 | 1 | -0/+156 | |
| | | | | llvm-svn: 352560 | |||||
* | GlobalISel: Fix narrowScalar for load/store with different mem size | Matt Arsenault | 2019-01-29 | 2 | -0/+132 | |
| | | | | | | | | | | This was ignoring the memory size, and producing multiple loads/stores if the operand size was different from the memory size. I assume this is the intent of not having an explicit G_ANYEXTLOAD (although I think that would probably be better). llvm-svn: 352523 | |||||
* | GlobalISel: Don't reduce elements for atomic load/store | Matt Arsenault | 2019-01-27 | 1 | -0/+46 | |
| | | | | | | | This is invalid for the same reason as in the narrowScalar handling for load. llvm-svn: 352334 | |||||
* | GlobalISel: Verify load/store has a pointer input | Matt Arsenault | 2019-01-27 | 13 | -38/+38 | |
| | | | | | | | I expected this to be automatically verified, but it seems nothing uses that the type index was declared as a "ptype" llvm-svn: 352319 | |||||
* | GlobalISel: Implement narrowScalar for mul | Matt Arsenault | 2019-01-27 | 1 | -0/+26 | |
| | | | | llvm-svn: 352300 | |||||
* | GlobalISel: fewerElementsVector for intrinsic_trunc/intrinsic_round | Matt Arsenault | 2019-01-27 | 2 | -8/+92 | |
| | | | | llvm-svn: 352298 | |||||
* | AMDGPU/GlobalISel: Legalize more bit ops | Matt Arsenault | 2019-01-26 | 3 | -24/+567 | |
| | | | | llvm-svn: 352295 | |||||
* | AMDGPU/GlobalISel: Widen small uaddo/usubo | Matt Arsenault | 2019-01-26 | 2 | -0/+194 | |
| | | | | llvm-svn: 352294 | |||||
* | AMDGPU/GlobalISel: Scalarize add/sub | Matt Arsenault | 2019-01-25 | 2 | -2/+64 | |
| | | | | llvm-svn: 352167 | |||||
* | GlobalISel: fewerElementsVector for more cast types | Matt Arsenault | 2019-01-25 | 4 | -0/+151 | |
| | | | | llvm-svn: 352166 | |||||
* | GlobalISel: fewerElementsVector for a few more trivial ops | Matt Arsenault | 2019-01-25 | 6 | -0/+332 | |
| | | | | llvm-svn: 352165 | |||||
* | AMDGPU/GlobalISel: Legalize smulh/umulh and scalarize mul | Matt Arsenault | 2019-01-25 | 5 | -2/+238 | |
| | | | | llvm-svn: 352162 | |||||
* | GlobalISel: Support fewerElementsVector for icmp/fcmp | Matt Arsenault | 2019-01-25 | 2 | -13/+285 | |
| | | | | | | Also legalize 64-bit compares for AMDGPU llvm-svn: 352157 | |||||
* | GlobalISel: Implement fewerElementsVector for extensions | Matt Arsenault | 2019-01-25 | 5 | -7/+483 | |
| | | | | llvm-svn: 352155 | |||||
* | [GISel]: Change how CSE is enabled by default for each pass | Aditya Nandakumar | 2019-01-24 | 1 | -1/+1 | |
| | | | | | | | | | | | | | | | https://reviews.llvm.org/D57178 Now add a hook in TargetPassConfig to query if CSE needs to be enabled. By default this hook returns false only for O0 opt level but this can be overridden by the target. As a consequence of the default of enabled for non O0, a few tests needed to be updated to not use CSE (by passing in -O0) to the run line. reviewed by: arsenm llvm-svn: 352126 | |||||
* | RegBankSelect: Support some more complex part mappings | Matt Arsenault | 2019-01-24 | 1 | -0/+386 | |
| | | | | llvm-svn: 352123 | |||||
* | AMDGPU/GlobalISel: Start selectively legalizing 16-bit operations | Matt Arsenault | 2019-01-22 | 3 | -51/+603 | |
| | | | | | | | | It might be a bit nicer to use the fancy .legalIf and co. predicates, but this was requiring more boilerplate and disables the coverage assertions. llvm-svn: 351886 | |||||
* | AMDGPU/GlobalISel: Handle legality/regbanks for 32/64-bit shifts | Matt Arsenault | 2019-01-22 | 7 | -16/+374 | |
| | | | | llvm-svn: 351884 | |||||
* | GlobalISel: Implement widen for extract_vector_elt elt type | Matt Arsenault | 2019-01-22 | 1 | -11/+92 | |
| | | | | llvm-svn: 351871 | |||||
* | GlobalISel: Implement fewerElementsVector for basic FP ops | Matt Arsenault | 2019-01-22 | 6 | -0/+2146 | |
| | | | | llvm-svn: 351866 | |||||
* | GlobalISel: Support narrowing zextload/sextload | Matt Arsenault | 2019-01-22 | 8 | -0/+747 | |
| | | | | llvm-svn: 351856 | |||||
* | GlobalISel: Disallow vectors for G_CONSTANT/G_FCONSTANT | Matt Arsenault | 2019-01-22 | 1 | -25/+25 | |
| | | | | llvm-svn: 351853 | |||||
* | AMDGPU/GlobalISel: Legalize more fp<->int conversions | Matt Arsenault | 2019-01-22 | 4 | -7/+90 | |
| | | | | llvm-svn: 351767 | |||||
* | AMDGPU: Legalize more bitcasts | Matt Arsenault | 2019-01-20 | 1 | -5/+169 | |
| | | | | llvm-svn: 351700 | |||||
* | AMDGPU/GlobalISel: Really legalize exts from i1 | Matt Arsenault | 2019-01-20 | 2 | -20/+42 | |
| | | | | | | | | There is a combine that was hiding these tests not actually testing what they should be, although they were producing the expected end result. llvm-svn: 351698 | |||||
* | GlobalISel: Implement widenScalar for basic FP ops | Matt Arsenault | 2019-01-20 | 6 | -57/+490 | |
| | | | | llvm-svn: 351696 | |||||
* | AMDGPU/GlobalISel: Legalize f32->f16 fptrunc | Matt Arsenault | 2019-01-20 | 1 | -2/+19 | |
| | | | | llvm-svn: 351695 | |||||
* | AMDGPU/GlobalISel: Fix some crashs in g_unmerge_values/g_merge_values | Matt Arsenault | 2019-01-20 | 2 | -4/+77 | |
| | | | | | | | | | | | This was crashing in the predicate function assuming the value is a vector. Copy more of what AArch64 uses. This probably needs more refinement later, but I don't exactly understand what it means in some cases, particularly since any legalization for these seems to be missing. llvm-svn: 351693 |