1
//======- X86InstrFragmentsSIMD.td - x86 ISA -------------*- tablegen -*-=====//
3
// The LLVM Compiler Infrastructure
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
8
//===----------------------------------------------------------------------===//
10
// This file provides pattern fragments useful for SIMD instructions.
12
//===----------------------------------------------------------------------===//
14
//===----------------------------------------------------------------------===//
15
// MMX Pattern Fragments
16
//===----------------------------------------------------------------------===//
18
def load_mmx : PatFrag<(ops node:$ptr), (v1i64 (load node:$ptr))>;
20
def bc_v8i8 : PatFrag<(ops node:$in), (v8i8 (bitconvert node:$in))>;
21
def bc_v4i16 : PatFrag<(ops node:$in), (v4i16 (bitconvert node:$in))>;
22
def bc_v2i32 : PatFrag<(ops node:$in), (v2i32 (bitconvert node:$in))>;
23
def bc_v1i64 : PatFrag<(ops node:$in), (v1i64 (bitconvert node:$in))>;
25
//===----------------------------------------------------------------------===//
27
//===----------------------------------------------------------------------===//
29
// MMX_SHUFFLE_get_shuf_imm xform function: convert vector_shuffle mask to
31
def MMX_SHUFFLE_get_shuf_imm : SDNodeXForm<vector_shuffle, [{
32
return getI8Imm(X86::getShuffleSHUFImmediate(N));
35
// Patterns for: vector_shuffle v1, v2, <2, 6, 3, 7, ...>
36
def mmx_unpckh : PatFrag<(ops node:$lhs, node:$rhs),
37
(vector_shuffle node:$lhs, node:$rhs), [{
38
return X86::isUNPCKHMask(cast<ShuffleVectorSDNode>(N));
41
// Patterns for: vector_shuffle v1, v2, <0, 4, 2, 5, ...>
42
def mmx_unpckl : PatFrag<(ops node:$lhs, node:$rhs),
43
(vector_shuffle node:$lhs, node:$rhs), [{
44
return X86::isUNPCKLMask(cast<ShuffleVectorSDNode>(N));
47
// Patterns for: vector_shuffle v1, <undef>, <0, 0, 1, 1, ...>
48
def mmx_unpckh_undef : PatFrag<(ops node:$lhs, node:$rhs),
49
(vector_shuffle node:$lhs, node:$rhs), [{
50
return X86::isUNPCKH_v_undef_Mask(cast<ShuffleVectorSDNode>(N));
53
// Patterns for: vector_shuffle v1, <undef>, <2, 2, 3, 3, ...>
54
def mmx_unpckl_undef : PatFrag<(ops node:$lhs, node:$rhs),
55
(vector_shuffle node:$lhs, node:$rhs), [{
56
return X86::isUNPCKL_v_undef_Mask(cast<ShuffleVectorSDNode>(N));
59
def mmx_pshufw : PatFrag<(ops node:$lhs, node:$rhs),
60
(vector_shuffle node:$lhs, node:$rhs), [{
61
return X86::isPSHUFDMask(cast<ShuffleVectorSDNode>(N));
62
}], MMX_SHUFFLE_get_shuf_imm>;