1//===-- X86ShuffleDecodeConstantPool.h - X86 shuffle decode -----*-C++-*---===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// Define several functions to decode x86 specific shuffle semantics using 10// constants from the constant pool. 11// 12//===----------------------------------------------------------------------===// 13 14#ifndef LLVM_LIB_TARGET_X86_X86SHUFFLEDECODECONSTANTPOOL_H 15#define LLVM_LIB_TARGET_X86_X86SHUFFLEDECODECONSTANTPOOL_H 16 17//===----------------------------------------------------------------------===// 18// Vector Mask Decoding 19//===----------------------------------------------------------------------===// 20 21namespace llvm { 22class Constant; 23template <typename T> class SmallVectorImpl; 24 25/// Decode a PSHUFB mask from an IR-level vector constant. 26void DecodePSHUFBMask(const Constant *C, unsigned Width, 27 SmallVectorImpl<int> &ShuffleMask); 28 29/// Decode a VPERMILP variable mask from an IR-level vector constant. 30void DecodeVPERMILPMask(const Constant *C, unsigned ElSize, unsigned Width, 31 SmallVectorImpl<int> &ShuffleMask); 32 33/// Decode a VPERMILP2 variable mask from an IR-level vector constant. 34void DecodeVPERMIL2PMask(const Constant *C, unsigned M2Z, unsigned ElSize, 35 unsigned Width, SmallVectorImpl<int> &ShuffleMask); 36 37/// Decode a VPPERM variable mask from an IR-level vector constant. 38void DecodeVPPERMMask(const Constant *C, unsigned Width, 39 SmallVectorImpl<int> &ShuffleMask); 40 41/// Decode a VPERM W/D/Q/PS/PD mask from an IR-level vector constant. 42void DecodeVPERMVMask(const Constant *C, unsigned ElSize, unsigned Width, 43 SmallVectorImpl<int> &ShuffleMask); 44 45/// Decode a VPERMT2 W/D/Q/PS/PD mask from an IR-level vector constant. 46void DecodeVPERMV3Mask(const Constant *C, unsigned ElSize, unsigned Width, 47 SmallVectorImpl<int> &ShuffleMask); 48 49} // llvm namespace 50 51#endif 52