[SimplifyLibCalls] Remove useless bits of this tests.
[oota-llvm.git] / test / Transforms / InstCombine / blend_x86.ll
1 ; RUN: opt < %s -instcombine -mtriple=x86_64-apple-macosx -mcpu=core-avx2 -S | FileCheck %s
2
3 define <2 x double> @constant_blendvpd(<2 x double> %xy, <2 x double> %ab) {
4 ; CHECK-LABEL: @constant_blendvpd
5 ; CHECK-NEXT: %1 = select <2 x i1> <i1 true, i1 false>, <2 x double> %ab, <2 x double> %xy
6 ; CHECK-NEXT: ret <2 x double> %1
7   %1 = tail call <2 x double> @llvm.x86.sse41.blendvpd(<2 x double> %xy, <2 x double> %ab, <2 x double> <double 0xFFFFFFFFE0000000, double 0.000000e+00>)
8   ret <2 x double> %1
9 }
10
11 define <2 x double> @constant_blendvpd_zero(<2 x double> %xy, <2 x double> %ab) {
12 ; CHECK-LABEL: @constant_blendvpd_zero
13 ; CHECK-NEXT: ret <2 x double> %xy
14   %1 = tail call <2 x double> @llvm.x86.sse41.blendvpd(<2 x double> %xy, <2 x double> %ab, <2 x double> zeroinitializer)
15   ret <2 x double> %1
16 }
17
18 define <2 x double> @constant_blendvpd_dup(<2 x double> %xy, <2 x double> %sel) {
19 ; CHECK-LABEL: @constant_blendvpd_dup
20 ; CHECK-NEXT: ret <2 x double> %xy
21   %1 = tail call <2 x double> @llvm.x86.sse41.blendvpd(<2 x double> %xy, <2 x double> %xy, <2 x double> %sel)
22   ret <2 x double> %1
23 }
24
25 define <4 x float> @constant_blendvps(<4 x float> %xyzw, <4 x float> %abcd) {
26 ; CHECK-LABEL: @constant_blendvps
27 ; CHECK-NEXT: %1 = select <4 x i1> <i1 false, i1 false, i1 false, i1 true>, <4 x float> %abcd, <4 x float> %xyzw
28 ; CHECK-NEXT: ret <4 x float> %1
29   %1 = tail call <4 x float> @llvm.x86.sse41.blendvps(<4 x float> %xyzw, <4 x float> %abcd, <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0xFFFFFFFFE0000000>)
30   ret <4 x float> %1
31 }
32
33 define <4 x float> @constant_blendvps_zero(<4 x float> %xyzw, <4 x float> %abcd) {
34 ; CHECK-LABEL: @constant_blendvps_zero
35 ; CHECK-NEXT: ret <4 x float> %xyzw
36   %1 = tail call <4 x float> @llvm.x86.sse41.blendvps(<4 x float> %xyzw, <4 x float> %abcd, <4 x float> zeroinitializer)
37   ret <4 x float> %1
38 }
39
40 define <4 x float> @constant_blendvps_dup(<4 x float> %xyzw, <4 x float> %sel) {
41 ; CHECK-LABEL: @constant_blendvps_dup
42 ; CHECK-NEXT: ret <4 x float> %xyzw
43   %1 = tail call <4 x float> @llvm.x86.sse41.blendvps(<4 x float> %xyzw, <4 x float> %xyzw, <4 x float> %sel)
44   ret <4 x float> %1
45 }
46
47 define <16 x i8> @constant_pblendvb(<16 x i8> %xyzw, <16 x i8> %abcd) {
48 ; CHECK-LABEL: @constant_pblendvb
49 ; CHECK-NEXT: %1 = select <16 x i1> <i1 false, i1 false, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false>, <16 x i8> %abcd, <16 x i8> %xyzw
50 ; CHECK-NEXT: ret <16 x i8> %1
51   %1 = tail call <16 x i8> @llvm.x86.sse41.pblendvb(<16 x i8> %xyzw, <16 x i8> %abcd, <16 x i8> <i8 0, i8 0, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0>)
52   ret <16 x i8> %1
53 }
54
55 define <16 x i8> @constant_pblendvb_zero(<16 x i8> %xyzw, <16 x i8> %abcd) {
56 ; CHECK-LABEL: @constant_pblendvb_zero
57 ; CHECK-NEXT: ret <16 x i8> %xyzw
58   %1 = tail call <16 x i8> @llvm.x86.sse41.pblendvb(<16 x i8> %xyzw, <16 x i8> %abcd, <16 x i8> zeroinitializer)
59   ret <16 x i8> %1
60 }
61
62 define <16 x i8> @constant_pblendvb_dup(<16 x i8> %xyzw, <16 x i8> %sel) {
63 ; CHECK-LABEL: @constant_pblendvb_dup
64 ; CHECK-NEXT: ret <16 x i8> %xyzw
65   %1 = tail call <16 x i8> @llvm.x86.sse41.pblendvb(<16 x i8> %xyzw, <16 x i8> %xyzw, <16 x i8> %sel)
66   ret <16 x i8> %1
67 }
68
69 define <4 x double> @constant_blendvpd_avx(<4 x double> %xy, <4 x double> %ab) {
70 ; CHECK-LABEL: @constant_blendvpd_avx
71 ; CHECK-NEXT: %1 = select <4 x i1> <i1 true, i1 false, i1 true, i1 false>, <4 x double> %ab, <4 x double> %xy
72 ; CHECK-NEXT: ret <4 x double> %1
73   %1 = tail call <4 x double> @llvm.x86.avx.blendv.pd.256(<4 x double> %xy, <4 x double> %ab, <4 x double> <double 0xFFFFFFFFE0000000, double 0.000000e+00, double 0xFFFFFFFFE0000000, double 0.000000e+00>)
74   ret <4 x double> %1
75 }
76
77 define <4 x double> @constant_blendvpd_avx_zero(<4 x double> %xy, <4 x double> %ab) {
78 ; CHECK-LABEL: @constant_blendvpd_avx_zero
79 ; CHECK-NEXT: ret <4 x double> %xy
80   %1 = tail call <4 x double> @llvm.x86.avx.blendv.pd.256(<4 x double> %xy, <4 x double> %ab, <4 x double> zeroinitializer)
81   ret <4 x double> %1
82 }
83
84 define <4 x double> @constant_blendvpd_avx_dup(<4 x double> %xy, <4 x double> %sel) {
85 ; CHECK-LABEL: @constant_blendvpd_avx_dup
86 ; CHECK-NEXT: ret <4 x double> %xy
87   %1 = tail call <4 x double> @llvm.x86.avx.blendv.pd.256(<4 x double> %xy, <4 x double> %xy, <4 x double> %sel)
88   ret <4 x double> %1
89 }
90
91 define <8 x float> @constant_blendvps_avx(<8 x float> %xyzw, <8 x float> %abcd) {
92 ; CHECK-LABEL: @constant_blendvps_avx
93 ; CHECK-NEXT: %1 = select <8 x i1> <i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 true>, <8 x float> %abcd, <8 x float> %xyzw
94 ; CHECK-NEXT: ret <8 x float> %1
95   %1 = tail call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %xyzw, <8 x float> %abcd, <8 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0xFFFFFFFFE0000000, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0xFFFFFFFFE0000000>)
96   ret <8 x float> %1
97 }
98
99 define <8 x float> @constant_blendvps_avx_zero(<8 x float> %xyzw, <8 x float> %abcd) {
100 ; CHECK-LABEL: @constant_blendvps_avx_zero
101 ; CHECK-NEXT: ret <8 x float> %xyzw
102   %1 = tail call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %xyzw, <8 x float> %abcd, <8 x float> zeroinitializer)
103   ret <8 x float> %1
104 }
105
106 define <8 x float> @constant_blendvps_avx_dup(<8 x float> %xyzw, <8 x float> %sel) {
107 ; CHECK-LABEL: @constant_blendvps_avx_dup
108 ; CHECK-NEXT: ret <8 x float> %xyzw
109   %1 = tail call <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float> %xyzw, <8 x float> %xyzw, <8 x float> %sel)
110   ret <8 x float> %1
111 }
112
113 define <32 x i8> @constant_pblendvb_avx2(<32 x i8> %xyzw, <32 x i8> %abcd) {
114 ; CHECK-LABEL: @constant_pblendvb_avx2
115 ; CHECK-NEXT: %1 = select <32 x i1> <i1 false, i1 false, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false, i1 false, i1 false, i1 true, i1 false, i1 true, i1 true, i1 true, i1 false>, <32 x i8> %abcd, <32 x i8> %xyzw
116 ; CHECK-NEXT: ret <32 x i8> %1
117   %1 = tail call <32 x i8> @llvm.x86.avx2.pblendvb(<32 x i8> %xyzw, <32 x i8> %abcd,
118         <32 x i8> <i8 0, i8 0, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0,
119                    i8 0, i8 0, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0,
120                    i8 0, i8 0, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0,
121                    i8 0, i8 0, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0>)
122   ret <32 x i8> %1
123 }
124
125 define <32 x i8> @constant_pblendvb_avx2_zero(<32 x i8> %xyzw, <32 x i8> %abcd) {
126 ; CHECK-LABEL: @constant_pblendvb_avx2_zero
127 ; CHECK-NEXT: ret <32 x i8> %xyzw
128   %1 = tail call <32 x i8> @llvm.x86.avx2.pblendvb(<32 x i8> %xyzw, <32 x i8> %abcd, <32 x i8> zeroinitializer)
129   ret <32 x i8> %1
130 }
131
132 define <32 x i8> @constant_pblendvb_avx2_dup(<32 x i8> %xyzw, <32 x i8> %sel) {
133 ; CHECK-LABEL: @constant_pblendvb_avx2_dup
134 ; CHECK-NEXT: ret <32 x i8> %xyzw
135   %1 = tail call <32 x i8> @llvm.x86.avx2.pblendvb(<32 x i8> %xyzw, <32 x i8> %xyzw, <32 x i8> %sel)
136   ret <32 x i8> %1
137 }
138
139 declare <16 x i8> @llvm.x86.sse41.pblendvb(<16 x i8>, <16 x i8>, <16 x i8>)
140 declare <4 x float> @llvm.x86.sse41.blendvps(<4 x float>, <4 x float>, <4 x float>)
141 declare <2 x double> @llvm.x86.sse41.blendvpd(<2 x double>, <2 x double>, <2 x double>)
142
143 declare <32 x i8> @llvm.x86.avx2.pblendvb(<32 x i8>, <32 x i8>, <32 x i8>)
144 declare <8 x float> @llvm.x86.avx.blendv.ps.256(<8 x float>, <8 x float>, <8 x float>)
145 declare <4 x double> @llvm.x86.avx.blendv.pd.256(<4 x double>, <4 x double>, <4 x double>)