1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 18:54:02 +01:00
llvm-mirror/lib
Sanne Wouda bf6c4851ee [InstCombine] Add a combine for a shuffle of similar bitcasts
Some intrinsics wrapper code has the habit of ignoring the type of the
elements in vectors, thinking of vector registers as a "bag of bits". As
a consequence, some operations are shared between vectors of different
types are shared. For example, functions that rearrange elements in a
vector can be shared between vectors of int32 and float.

This can result in bitcasts in awkward places that prevent the backend
from recognizing some instructions. For AArch64 in particular, it
inhibits the selection of dup from a general purpose register (GPR), and
mov from GPR to a vector lane.

This patch adds a pattern in InstCombine to move the bitcasts past the
shufflevector if this is possible. Sometimes this even allows
InstCombine to remove the bitcast entirely, as in the included tests.

Alternatively this could be done with a few extra patterns in the
AArch64 backend, but InstCombine seems like a better place for this.

Differential Revision: https://reviews.llvm.org/D97397
2021-03-08 16:32:30 +00:00
..
Analysis [LoopInterchange] Replace tightly-nesting-ness check with the one from LoopNest 2021-03-08 11:36:08 +08:00
AsmParser [DebugInfo] Add DIArgList MD to store multple values in DbgVariableIntrinsics 2021-03-05 17:02:24 +00:00
BinaryFormat Reapply "[DebugInfo] Add new instruction and DIExpression operator for variadic debug values" 2021-03-05 12:32:05 +00:00
Bitcode [DebugInfo] Support DIArgList in DbgVariableIntrinsic 2021-03-08 14:36:13 +00:00
Bitstream
CodeGen [DebugInfo] Support DIArgList in DbgVariableIntrinsic 2021-03-08 14:36:13 +00:00
DebugInfo [PDB] Fix unsigned integer overflow 2021-02-26 11:26:53 -05:00
Demangle
DWARFLinker [llvm] Add assertions for the smart pointers with the possibility to be null in DWARFLinker::loadClangModule 2021-02-27 10:14:39 +03:00
ExecutionEngine [JITLink] Fix Wtype-limits gcc warning (NFC) 2021-03-05 15:28:01 +08:00
Extensions
FileCheck [FileCheck] Do not skip end of line in diagnostics 2021-03-03 08:20:39 +00:00
Frontend [clang][OpenMP] Use OpenMPIRBuilder for workshare loops. 2021-03-04 22:52:59 -06:00
Fuzzer
FuzzMutate
InterfaceStub
IR [ConstantFold] Handle icmp of global and null consistently 2021-03-08 17:18:01 +01:00
IRReader
LineEditor
Linker
LTO [IRSymTab] Set FB_used on llvm.compiler.used symbols 2021-03-03 16:22:30 -08:00
MC [NFC] Use ranged loop iteration instead of explicit looping 2021-03-08 11:50:21 +01:00
MCA [MCA] Add support for in-order CPUs 2021-03-04 14:08:19 +03:00
Object [MC] Support .symver *, *, remove 2021-03-06 15:23:02 -08:00
ObjectYAML [WebAssembly][yaml2obj][obj2yaml] Elem sections for nonzero tables 2021-03-05 11:45:15 +01:00
Option [clang][cli] NFC: Remove ArgList infrastructure for recording queries 2021-02-25 13:53:24 +01:00
Passes [NPM] Add -enable-loopinterchange option to NPM 2021-03-07 02:39:28 +08:00
ProfileData [SampleFDO] Another fix to prevent repeated indirect call promotion in 2021-03-04 18:44:12 -08:00
Remarks
Support [KnownBits] Add min/max shift amount handling to shl/lshr/ashr KnownBits helpers 2021-03-08 11:44:31 +00:00
TableGen [TableGen] Use range-based for loops (NFC) 2021-03-06 15:52:55 -08:00
Target [AIX][TLS] Generate 32-bit general-dynamic access code sequence 2021-03-08 09:30:19 -06:00
Testing
TextAPI [lld-macho] Change loadReexport to handle the case where a TAPI re-exports to reference documents nested within other TBD. 2021-03-02 12:14:31 -05:00
ToolDrivers
Transforms [InstCombine] Add a combine for a shuffle of similar bitcasts 2021-03-08 16:32:30 +00:00
WindowsManifest
XRay
CMakeLists.txt