Split and process a shuffle mask across real input and output registers.
Synopsis
Declared in <llvm/Analysis/VectorUtils.h>
void
processShuffleMasks(
ArrayRef<int> Mask,
unsigned int NumOfSrcRegs,
unsigned int NumOfDestRegs,
unsigned int NumOfUsedRegs,
function_ref<void()> NoInputAction,
function_ref<void(xref:llvm/ArrayRef-08.adoc[ArrayRef<int>, unsigned int, unsigned int)>] SingleInputAction,
function_ref<void(xref:llvm/ArrayRef-08.adoc[ArrayRef<int>, unsigned int, unsigned int, bool)>] ManyInputsAction);
Description
The function does 2 main things: 1) splits the source/destination vectors into real registers; 2) do the mask analysis to identify which real registers are permuted. Then the function processes resulting registers mask using provided action items. If no input register is defined, NoInputAction action is used. If only 1 input register is used, SingleInputAction is used, otherwise ManyInputsAction is used to process > 2 input registers and masks.
Parameters
Name |
Description |
Mask |
Original shuffle mask. |
NumOfSrcRegs |
Number of source registers. |
NumOfDestRegs |
Number of destination registers. |
NumOfUsedRegs |
Number of actually used destination registers. |
NoInputAction |
Callback when no input register is defined. |
SingleInputAction |
Callback when exactly one input register is used. |
ManyInputsAction |
Callback when two or more input registers are used. |
Created with MrDocs