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 21 namespace llvm { 22 class Constant; 23 template <typename T> class SmallVectorImpl; 24 25 /// Decode a PSHUFB mask from an IR-level vector constant. 26 void DecodePSHUFBMask(const Constant *C, unsigned Width, 27 SmallVectorImpl<int> &ShuffleMask); 28 29 /// Decode a VPERMILP variable mask from an IR-level vector constant. 30 void 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. 34 void 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. 38 void DecodeVPPERMMask(const Constant *C, unsigned Width, 39 SmallVectorImpl<int> &ShuffleMask); 40 41 } // llvm namespace 42 43 #endif 44