mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
6682076a17
This patch introduces a new intrinsic @llvm.experimental.vector.splice that constructs a vector of the same type as the two input vectors, based on a immediate where the sign of the immediate distinguishes two variants. A positive immediate specifies an index into the first vector and a negative immediate specifies the number of trailing elements to extract from the first vector. For example: @llvm.experimental.vector.splice(<A,B,C,D>, <E,F,G,H>, 1) ==> <B, C, D, E> ; index @llvm.experimental.vector.splice(<A,B,C,D>, <E,F,G,H>, -3) ==> <B, C, D, E> ; trailing element count These intrinsics support both fixed and scalable vectors, where the former is lowered to a shufflevector to maintain existing behaviour, although while marked as experimental the recommended way to express this operation for fixed-width vectors is to use shufflevector. For scalable vectors where it is not possible to express a shufflevector mask for this operation, a new ISD node has been implemented. This is one of the named shufflevector intrinsics proposed on the mailing-list in the RFC at [1]. Patch by Paul Walker and Cullen Rhodes. [1] https://lists.llvm.org/pipermail/llvm-dev/2020-November/146864.html Reviewed By: sdesmalen Differential Revision: https://reviews.llvm.org/D94708 |
||
---|---|---|
.. | ||
GlobalISel | ||
CGPassBuilderOption.h | ||
CodeGenCWrappers.h | ||
GenericOpcodes.td | ||
Target.td | ||
TargetCallingConv.td | ||
TargetInstrPredicate.td | ||
TargetIntrinsicInfo.h | ||
TargetItinerary.td | ||
TargetLoweringObjectFile.h | ||
TargetMachine.h | ||
TargetOptions.h | ||
TargetPfmCounters.td | ||
TargetSchedule.td | ||
TargetSelectionDAG.td |