xref: /llvm-project/llvm/test/Analysis/CostModel/X86/load-broadcast.ll (revision f89f670d92b5726fc61bf8252a6ecc273086c501)
1a9e87304SSimon Pilgrim; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 4
2a9e87304SSimon Pilgrim; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -mattr=+sse2 | FileCheck %s -check-prefixes=SSE,SSE2
3a9e87304SSimon Pilgrim; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -mattr=+ssse3 | FileCheck %s -check-prefixes=SSE,SSSE3
4a9e87304SSimon Pilgrim; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -mattr=+sse4.2 | FileCheck %s -check-prefixes=SSE,SSE42
5a9e87304SSimon Pilgrim; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -mattr=+avx | FileCheck %s -check-prefixes=AVX,AVX1
6a9e87304SSimon Pilgrim; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -mattr=+avx2 | FileCheck %s -check-prefixes=AVX,AVX2
7a9e87304SSimon Pilgrim; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -mattr=+avx512f | FileCheck %s --check-prefixes=AVX,AVX512
8a9e87304SSimon Pilgrim; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -mattr=+avx512f,+avx512bw | FileCheck %s --check-prefixes=AVX,AVX512
9a9e87304SSimon Pilgrim; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -mattr=+avx512f,+avx512bw,+avx512vbmi | FileCheck %s --check-prefixes=AVX,AVX512
10a9e87304SSimon Pilgrim;
11a9e87304SSimon Pilgrim; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -mcpu=slm | FileCheck %s --check-prefixes=SSE,SSE42
12a9e87304SSimon Pilgrim; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -mcpu=goldmont | FileCheck %s --check-prefixes=SSE,SSE42
13a9e87304SSimon Pilgrim; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -mcpu=btver2 | FileCheck %s --check-prefixes=AVX,AVX1
14a9e87304SSimon Pilgrim
15a9e87304SSimon Pilgrim;
16a9e87304SSimon Pilgrim; vXf64
17a9e87304SSimon Pilgrim;
18a9e87304SSimon Pilgrim
19a9e87304SSimon Pilgrimdefine <2 x double> @broadcast_load_v2f64_v2f64(ptr %src) {
20a9e87304SSimon Pilgrim; SSE2-LABEL: 'broadcast_load_v2f64_v2f64'
21a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <2 x double>, ptr %src, align 16
22a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <2 x double> %load, <2 x double> poison, <2 x i32> zeroinitializer
23a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x double> %bcst
24a9e87304SSimon Pilgrim;
25a9e87304SSimon Pilgrim; SSSE3-LABEL: 'broadcast_load_v2f64_v2f64'
26a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <2 x double>, ptr %src, align 16
27a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <2 x double> %load, <2 x double> poison, <2 x i32> zeroinitializer
28a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x double> %bcst
29a9e87304SSimon Pilgrim;
30a9e87304SSimon Pilgrim; SSE42-LABEL: 'broadcast_load_v2f64_v2f64'
31a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <2 x double>, ptr %src, align 16
32a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <2 x double> %load, <2 x double> poison, <2 x i32> zeroinitializer
33a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x double> %bcst
34a9e87304SSimon Pilgrim;
35a9e87304SSimon Pilgrim; AVX-LABEL: 'broadcast_load_v2f64_v2f64'
36a9e87304SSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <2 x double>, ptr %src, align 16
37a9e87304SSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <2 x double> %load, <2 x double> poison, <2 x i32> zeroinitializer
38a9e87304SSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x double> %bcst
39a9e87304SSimon Pilgrim;
40a9e87304SSimon Pilgrim  %load = load <2 x double>, ptr %src
41a9e87304SSimon Pilgrim  %bcst = shufflevector <2 x double> %load, <2 x double> poison, <2 x i32> zeroinitializer
42a9e87304SSimon Pilgrim  ret <2 x double> %bcst
43a9e87304SSimon Pilgrim}
44a9e87304SSimon Pilgrim
45a9e87304SSimon Pilgrimdefine <4 x double> @broadcast_load_v2f64_v4f64(ptr %src) {
46a9e87304SSimon Pilgrim; SSE2-LABEL: 'broadcast_load_v2f64_v4f64'
47a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <2 x double>, ptr %src, align 16
48a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <2 x double> %load, <2 x double> poison, <4 x i32> zeroinitializer
49a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x double> %bcst
50a9e87304SSimon Pilgrim;
51a9e87304SSimon Pilgrim; SSSE3-LABEL: 'broadcast_load_v2f64_v4f64'
52a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <2 x double>, ptr %src, align 16
53a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <2 x double> %load, <2 x double> poison, <4 x i32> zeroinitializer
54a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x double> %bcst
55a9e87304SSimon Pilgrim;
56a9e87304SSimon Pilgrim; SSE42-LABEL: 'broadcast_load_v2f64_v4f64'
57a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <2 x double>, ptr %src, align 16
58a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <2 x double> %load, <2 x double> poison, <4 x i32> zeroinitializer
59a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x double> %bcst
60a9e87304SSimon Pilgrim;
61*f89f670dSSimon Pilgrim; AVX-LABEL: 'broadcast_load_v2f64_v4f64'
62*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <2 x double>, ptr %src, align 16
63*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <2 x double> %load, <2 x double> poison, <4 x i32> zeroinitializer
64*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x double> %bcst
65a9e87304SSimon Pilgrim;
66a9e87304SSimon Pilgrim  %load = load <2 x double>, ptr %src
67a9e87304SSimon Pilgrim  %bcst = shufflevector <2 x double> %load, <2 x double> poison, <4 x i32> zeroinitializer
68a9e87304SSimon Pilgrim  ret <4 x double> %bcst
69a9e87304SSimon Pilgrim}
70a9e87304SSimon Pilgrim
71a9e87304SSimon Pilgrimdefine <8 x double> @broadcast_load_v2f64_v8f64(ptr %src) {
72a9e87304SSimon Pilgrim; SSE2-LABEL: 'broadcast_load_v2f64_v8f64'
73a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <2 x double>, ptr %src, align 16
74a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <2 x double> %load, <2 x double> poison, <8 x i32> zeroinitializer
75a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x double> %bcst
76a9e87304SSimon Pilgrim;
77a9e87304SSimon Pilgrim; SSSE3-LABEL: 'broadcast_load_v2f64_v8f64'
78a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <2 x double>, ptr %src, align 16
79a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <2 x double> %load, <2 x double> poison, <8 x i32> zeroinitializer
80a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x double> %bcst
81a9e87304SSimon Pilgrim;
82a9e87304SSimon Pilgrim; SSE42-LABEL: 'broadcast_load_v2f64_v8f64'
83a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <2 x double>, ptr %src, align 16
84a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <2 x double> %load, <2 x double> poison, <8 x i32> zeroinitializer
85a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x double> %bcst
86a9e87304SSimon Pilgrim;
87*f89f670dSSimon Pilgrim; AVX-LABEL: 'broadcast_load_v2f64_v8f64'
88*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <2 x double>, ptr %src, align 16
89*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <2 x double> %load, <2 x double> poison, <8 x i32> zeroinitializer
90*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x double> %bcst
91a9e87304SSimon Pilgrim;
92a9e87304SSimon Pilgrim  %load = load <2 x double>, ptr %src
93a9e87304SSimon Pilgrim  %bcst = shufflevector <2 x double> %load, <2 x double> poison, <8 x i32> zeroinitializer
94a9e87304SSimon Pilgrim  ret <8 x double> %bcst
95a9e87304SSimon Pilgrim}
96a9e87304SSimon Pilgrim
97a9e87304SSimon Pilgrimdefine <2 x double> @broadcast_load_f64_v2f64(ptr %src) {
98a9e87304SSimon Pilgrim; SSE-LABEL: 'broadcast_load_f64_v2f64'
99a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load double, ptr %src, align 8
100a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %insert = insertelement <2 x double> poison, double %load, i32 0
101a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <2 x double> %insert, <2 x double> poison, <2 x i32> zeroinitializer
102a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x double> %bcst
103a9e87304SSimon Pilgrim;
104a9e87304SSimon Pilgrim; AVX-LABEL: 'broadcast_load_f64_v2f64'
105a9e87304SSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load double, ptr %src, align 8
106a9e87304SSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %insert = insertelement <2 x double> poison, double %load, i32 0
107a9e87304SSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <2 x double> %insert, <2 x double> poison, <2 x i32> zeroinitializer
108a9e87304SSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x double> %bcst
109a9e87304SSimon Pilgrim;
110a9e87304SSimon Pilgrim  %load = load double, ptr %src
111a9e87304SSimon Pilgrim  %insert = insertelement <2 x double> poison, double %load, i32 0
112a9e87304SSimon Pilgrim  %bcst = shufflevector <2 x double> %insert, <2 x double> poison, <2 x i32> zeroinitializer
113a9e87304SSimon Pilgrim  ret <2 x double> %bcst
114a9e87304SSimon Pilgrim}
115a9e87304SSimon Pilgrim
116a9e87304SSimon Pilgrimdefine <4 x double> @broadcast_load_f64_v4f64(ptr %src) {
117a9e87304SSimon Pilgrim; SSE-LABEL: 'broadcast_load_f64_v4f64'
118a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load double, ptr %src, align 8
119a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %insert = insertelement <4 x double> poison, double %load, i32 0
120a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <4 x double> %insert, <4 x double> poison, <4 x i32> zeroinitializer
121a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x double> %bcst
122a9e87304SSimon Pilgrim;
123a9e87304SSimon Pilgrim; AVX1-LABEL: 'broadcast_load_f64_v4f64'
124a9e87304SSimon Pilgrim; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load double, ptr %src, align 8
125a9e87304SSimon Pilgrim; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %insert = insertelement <4 x double> poison, double %load, i32 0
126a9e87304SSimon Pilgrim; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %bcst = shufflevector <4 x double> %insert, <4 x double> poison, <4 x i32> zeroinitializer
127a9e87304SSimon Pilgrim; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x double> %bcst
128a9e87304SSimon Pilgrim;
129a9e87304SSimon Pilgrim; AVX2-LABEL: 'broadcast_load_f64_v4f64'
130a9e87304SSimon Pilgrim; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load double, ptr %src, align 8
131a9e87304SSimon Pilgrim; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %insert = insertelement <4 x double> poison, double %load, i32 0
132a9e87304SSimon Pilgrim; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <4 x double> %insert, <4 x double> poison, <4 x i32> zeroinitializer
133a9e87304SSimon Pilgrim; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x double> %bcst
134a9e87304SSimon Pilgrim;
135a9e87304SSimon Pilgrim; AVX512-LABEL: 'broadcast_load_f64_v4f64'
136a9e87304SSimon Pilgrim; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load double, ptr %src, align 8
137a9e87304SSimon Pilgrim; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %insert = insertelement <4 x double> poison, double %load, i32 0
138a9e87304SSimon Pilgrim; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <4 x double> %insert, <4 x double> poison, <4 x i32> zeroinitializer
139a9e87304SSimon Pilgrim; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x double> %bcst
140a9e87304SSimon Pilgrim;
141a9e87304SSimon Pilgrim  %load = load double, ptr %src
142a9e87304SSimon Pilgrim  %insert = insertelement <4 x double> poison, double %load, i32 0
143a9e87304SSimon Pilgrim  %bcst = shufflevector <4 x double> %insert, <4 x double> poison, <4 x i32> zeroinitializer
144a9e87304SSimon Pilgrim  ret <4 x double> %bcst
145a9e87304SSimon Pilgrim}
146a9e87304SSimon Pilgrim
147a9e87304SSimon Pilgrimdefine <8 x double> @broadcast_load_f64_v8f64(ptr %src) {
148a9e87304SSimon Pilgrim; SSE-LABEL: 'broadcast_load_f64_v8f64'
149a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load double, ptr %src, align 8
150a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %insert = insertelement <8 x double> poison, double %load, i32 0
151a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <8 x double> %insert, <8 x double> poison, <8 x i32> zeroinitializer
152a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x double> %bcst
153a9e87304SSimon Pilgrim;
154a9e87304SSimon Pilgrim; AVX1-LABEL: 'broadcast_load_f64_v8f64'
155a9e87304SSimon Pilgrim; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load double, ptr %src, align 8
156a9e87304SSimon Pilgrim; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %insert = insertelement <8 x double> poison, double %load, i32 0
157a9e87304SSimon Pilgrim; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %bcst = shufflevector <8 x double> %insert, <8 x double> poison, <8 x i32> zeroinitializer
158a9e87304SSimon Pilgrim; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x double> %bcst
159a9e87304SSimon Pilgrim;
160a9e87304SSimon Pilgrim; AVX2-LABEL: 'broadcast_load_f64_v8f64'
161a9e87304SSimon Pilgrim; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load double, ptr %src, align 8
162a9e87304SSimon Pilgrim; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %insert = insertelement <8 x double> poison, double %load, i32 0
163a9e87304SSimon Pilgrim; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <8 x double> %insert, <8 x double> poison, <8 x i32> zeroinitializer
164a9e87304SSimon Pilgrim; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x double> %bcst
165a9e87304SSimon Pilgrim;
166a9e87304SSimon Pilgrim; AVX512-LABEL: 'broadcast_load_f64_v8f64'
167a9e87304SSimon Pilgrim; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load double, ptr %src, align 8
168a9e87304SSimon Pilgrim; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %insert = insertelement <8 x double> poison, double %load, i32 0
169a9e87304SSimon Pilgrim; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <8 x double> %insert, <8 x double> poison, <8 x i32> zeroinitializer
170a9e87304SSimon Pilgrim; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x double> %bcst
171a9e87304SSimon Pilgrim;
172a9e87304SSimon Pilgrim  %load = load double, ptr %src
173a9e87304SSimon Pilgrim  %insert = insertelement <8 x double> poison, double %load, i32 0
174a9e87304SSimon Pilgrim  %bcst = shufflevector <8 x double> %insert, <8 x double> poison, <8 x i32> zeroinitializer
175a9e87304SSimon Pilgrim  ret <8 x double> %bcst
176a9e87304SSimon Pilgrim}
177a9e87304SSimon Pilgrim
178a9e87304SSimon Pilgrim;
179a9e87304SSimon Pilgrim; vXf32
180a9e87304SSimon Pilgrim;
181a9e87304SSimon Pilgrim
182a9e87304SSimon Pilgrimdefine <4 x float> @broadcast_load_v4f32_v4f32(ptr %src) {
183a9e87304SSimon Pilgrim; SSE-LABEL: 'broadcast_load_v4f32_v4f32'
184a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <4 x float>, ptr %src, align 16
185a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <4 x float> %load, <4 x float> poison, <4 x i32> zeroinitializer
186a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x float> %bcst
187a9e87304SSimon Pilgrim;
188a9e87304SSimon Pilgrim; AVX-LABEL: 'broadcast_load_v4f32_v4f32'
189a9e87304SSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <4 x float>, ptr %src, align 16
190*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <4 x float> %load, <4 x float> poison, <4 x i32> zeroinitializer
191a9e87304SSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x float> %bcst
192a9e87304SSimon Pilgrim;
193a9e87304SSimon Pilgrim  %load = load <4 x float>, ptr %src
194a9e87304SSimon Pilgrim  %bcst = shufflevector <4 x float> %load, <4 x float> poison, <4 x i32> zeroinitializer
195a9e87304SSimon Pilgrim  ret <4 x float> %bcst
196a9e87304SSimon Pilgrim}
197a9e87304SSimon Pilgrim
198a9e87304SSimon Pilgrimdefine <8 x float> @broadcast_load_v4f32_v8f32(ptr %src) {
199a9e87304SSimon Pilgrim; SSE-LABEL: 'broadcast_load_v4f32_v8f32'
200a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <4 x float>, ptr %src, align 16
201a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <4 x float> %load, <4 x float> poison, <8 x i32> zeroinitializer
202a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x float> %bcst
203a9e87304SSimon Pilgrim;
204*f89f670dSSimon Pilgrim; AVX-LABEL: 'broadcast_load_v4f32_v8f32'
205*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <4 x float>, ptr %src, align 16
206*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <4 x float> %load, <4 x float> poison, <8 x i32> zeroinitializer
207*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x float> %bcst
208a9e87304SSimon Pilgrim;
209a9e87304SSimon Pilgrim  %load = load <4 x float>, ptr %src
210a9e87304SSimon Pilgrim  %bcst = shufflevector <4 x float> %load, <4 x float> poison, <8 x i32> zeroinitializer
211a9e87304SSimon Pilgrim  ret <8 x float> %bcst
212a9e87304SSimon Pilgrim}
213a9e87304SSimon Pilgrim
214a9e87304SSimon Pilgrimdefine <16 x float> @broadcast_load_v4f32_v16f32(ptr %src) {
215a9e87304SSimon Pilgrim; SSE-LABEL: 'broadcast_load_v4f32_v16f32'
216a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <4 x float>, ptr %src, align 16
217a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <4 x float> %load, <4 x float> poison, <16 x i32> zeroinitializer
218a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x float> %bcst
219a9e87304SSimon Pilgrim;
220*f89f670dSSimon Pilgrim; AVX-LABEL: 'broadcast_load_v4f32_v16f32'
221*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <4 x float>, ptr %src, align 16
222*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <4 x float> %load, <4 x float> poison, <16 x i32> zeroinitializer
223*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x float> %bcst
224a9e87304SSimon Pilgrim;
225a9e87304SSimon Pilgrim  %load = load <4 x float>, ptr %src
226a9e87304SSimon Pilgrim  %bcst = shufflevector <4 x float> %load, <4 x float> poison, <16 x i32> zeroinitializer
227a9e87304SSimon Pilgrim  ret <16 x float> %bcst
228a9e87304SSimon Pilgrim}
229a9e87304SSimon Pilgrim
230a9e87304SSimon Pilgrimdefine <2 x i64> @broadcast_load_v2i64_v2i64(ptr %src) {
231a9e87304SSimon Pilgrim; SSE-LABEL: 'broadcast_load_v2i64_v2i64'
232a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <2 x i64>, ptr %src, align 16
233a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <2 x i64> %load, <2 x i64> poison, <2 x i32> zeroinitializer
234a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %bcst
235a9e87304SSimon Pilgrim;
236a9e87304SSimon Pilgrim; AVX-LABEL: 'broadcast_load_v2i64_v2i64'
237a9e87304SSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <2 x i64>, ptr %src, align 16
238*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <2 x i64> %load, <2 x i64> poison, <2 x i32> zeroinitializer
239a9e87304SSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %bcst
240a9e87304SSimon Pilgrim;
241a9e87304SSimon Pilgrim  %load = load <2 x i64>, ptr %src
242a9e87304SSimon Pilgrim  %bcst = shufflevector <2 x i64> %load, <2 x i64> poison, <2 x i32> zeroinitializer
243a9e87304SSimon Pilgrim  ret <2 x i64> %bcst
244a9e87304SSimon Pilgrim}
245a9e87304SSimon Pilgrim
246a9e87304SSimon Pilgrim;
247a9e87304SSimon Pilgrim; vXi64
248a9e87304SSimon Pilgrim;
249a9e87304SSimon Pilgrim
250a9e87304SSimon Pilgrimdefine <4 x i64> @broadcast_load_v2i64_v4i64(ptr %src) {
251a9e87304SSimon Pilgrim; SSE-LABEL: 'broadcast_load_v2i64_v4i64'
252a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <2 x i64>, ptr %src, align 16
253a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <2 x i64> %load, <2 x i64> poison, <4 x i32> zeroinitializer
254a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %bcst
255a9e87304SSimon Pilgrim;
256*f89f670dSSimon Pilgrim; AVX-LABEL: 'broadcast_load_v2i64_v4i64'
257*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <2 x i64>, ptr %src, align 16
258*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <2 x i64> %load, <2 x i64> poison, <4 x i32> zeroinitializer
259*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %bcst
260a9e87304SSimon Pilgrim;
261a9e87304SSimon Pilgrim  %load = load <2 x i64>, ptr %src
262a9e87304SSimon Pilgrim  %bcst = shufflevector <2 x i64> %load, <2 x i64> poison, <4 x i32> zeroinitializer
263a9e87304SSimon Pilgrim  ret <4 x i64> %bcst
264a9e87304SSimon Pilgrim}
265a9e87304SSimon Pilgrim
266a9e87304SSimon Pilgrimdefine <8 x i64> @broadcast_load_v2i64_v8i64(ptr %src) {
267a9e87304SSimon Pilgrim; SSE-LABEL: 'broadcast_load_v2i64_v8i64'
268a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <2 x i64>, ptr %src, align 16
269a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <2 x i64> %load, <2 x i64> poison, <8 x i32> zeroinitializer
270a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %bcst
271a9e87304SSimon Pilgrim;
272*f89f670dSSimon Pilgrim; AVX-LABEL: 'broadcast_load_v2i64_v8i64'
273*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <2 x i64>, ptr %src, align 16
274*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <2 x i64> %load, <2 x i64> poison, <8 x i32> zeroinitializer
275*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %bcst
276a9e87304SSimon Pilgrim;
277a9e87304SSimon Pilgrim  %load = load <2 x i64>, ptr %src
278a9e87304SSimon Pilgrim  %bcst = shufflevector <2 x i64> %load, <2 x i64> poison, <8 x i32> zeroinitializer
279a9e87304SSimon Pilgrim  ret <8 x i64> %bcst
280a9e87304SSimon Pilgrim}
281a9e87304SSimon Pilgrim
282a9e87304SSimon Pilgrim;
283a9e87304SSimon Pilgrim; vXi32
284a9e87304SSimon Pilgrim;
285a9e87304SSimon Pilgrim
286a9e87304SSimon Pilgrimdefine <4 x i32> @broadcast_load_v4i32_v4i32(ptr %src) {
287a9e87304SSimon Pilgrim; SSE-LABEL: 'broadcast_load_v4i32_v4i32'
288a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <4 x i32>, ptr %src, align 16
289a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <4 x i32> %load, <4 x i32> poison, <4 x i32> zeroinitializer
290a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %bcst
291a9e87304SSimon Pilgrim;
292a9e87304SSimon Pilgrim; AVX-LABEL: 'broadcast_load_v4i32_v4i32'
293a9e87304SSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <4 x i32>, ptr %src, align 16
294*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <4 x i32> %load, <4 x i32> poison, <4 x i32> zeroinitializer
295a9e87304SSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %bcst
296a9e87304SSimon Pilgrim;
297a9e87304SSimon Pilgrim  %load = load <4 x i32>, ptr %src
298a9e87304SSimon Pilgrim  %bcst = shufflevector <4 x i32> %load, <4 x i32> poison, <4 x i32> zeroinitializer
299a9e87304SSimon Pilgrim  ret <4 x i32> %bcst
300a9e87304SSimon Pilgrim}
301a9e87304SSimon Pilgrim
302a9e87304SSimon Pilgrimdefine <8 x i32> @broadcast_load_v4i32_v8i32(ptr %src) {
303a9e87304SSimon Pilgrim; SSE-LABEL: 'broadcast_load_v4i32_v8i32'
304a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <4 x i32>, ptr %src, align 16
305a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <4 x i32> %load, <4 x i32> poison, <8 x i32> zeroinitializer
306a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %bcst
307a9e87304SSimon Pilgrim;
308*f89f670dSSimon Pilgrim; AVX-LABEL: 'broadcast_load_v4i32_v8i32'
309*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <4 x i32>, ptr %src, align 16
310*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <4 x i32> %load, <4 x i32> poison, <8 x i32> zeroinitializer
311*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %bcst
312a9e87304SSimon Pilgrim;
313a9e87304SSimon Pilgrim  %load = load <4 x i32>, ptr %src
314a9e87304SSimon Pilgrim  %bcst = shufflevector <4 x i32> %load, <4 x i32> poison, <8 x i32> zeroinitializer
315a9e87304SSimon Pilgrim  ret <8 x i32> %bcst
316a9e87304SSimon Pilgrim}
317a9e87304SSimon Pilgrim
318a9e87304SSimon Pilgrimdefine <16 x i32> @broadcast_load_v4i32_v16i32(ptr %src) {
319a9e87304SSimon Pilgrim; SSE-LABEL: 'broadcast_load_v4i32_v16i32'
320a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <4 x i32>, ptr %src, align 16
321a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <4 x i32> %load, <4 x i32> poison, <16 x i32> zeroinitializer
322a9e87304SSimon Pilgrim; SSE-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %bcst
323a9e87304SSimon Pilgrim;
324*f89f670dSSimon Pilgrim; AVX-LABEL: 'broadcast_load_v4i32_v16i32'
325*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <4 x i32>, ptr %src, align 16
326*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <4 x i32> %load, <4 x i32> poison, <16 x i32> zeroinitializer
327*f89f670dSSimon Pilgrim; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %bcst
328a9e87304SSimon Pilgrim;
329a9e87304SSimon Pilgrim  %load = load <4 x i32>, ptr %src
330a9e87304SSimon Pilgrim  %bcst = shufflevector <4 x i32> %load, <4 x i32> poison, <16 x i32> zeroinitializer
331a9e87304SSimon Pilgrim  ret <16 x i32> %bcst
332a9e87304SSimon Pilgrim}
333a9e87304SSimon Pilgrim
334a9e87304SSimon Pilgrim;
335a9e87304SSimon Pilgrim; vXi16
336a9e87304SSimon Pilgrim;
337a9e87304SSimon Pilgrim
338a9e87304SSimon Pilgrimdefine <8 x i16> @broadcast_load_v8i16_v8i16(ptr %src) {
339a9e87304SSimon Pilgrim; SSE2-LABEL: 'broadcast_load_v8i16_v8i16'
340a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <8 x i16>, ptr %src, align 16
341a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %bcst = shufflevector <8 x i16> %load, <8 x i16> poison, <8 x i32> zeroinitializer
342a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %bcst
343a9e87304SSimon Pilgrim;
344a9e87304SSimon Pilgrim; SSSE3-LABEL: 'broadcast_load_v8i16_v8i16'
345a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <8 x i16>, ptr %src, align 16
346a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <8 x i16> %load, <8 x i16> poison, <8 x i32> zeroinitializer
347a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %bcst
348a9e87304SSimon Pilgrim;
349a9e87304SSimon Pilgrim; SSE42-LABEL: 'broadcast_load_v8i16_v8i16'
350a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <8 x i16>, ptr %src, align 16
351a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <8 x i16> %load, <8 x i16> poison, <8 x i32> zeroinitializer
352a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %bcst
353a9e87304SSimon Pilgrim;
354*f89f670dSSimon Pilgrim; AVX1-LABEL: 'broadcast_load_v8i16_v8i16'
355*f89f670dSSimon Pilgrim; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <8 x i16>, ptr %src, align 16
356*f89f670dSSimon Pilgrim; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <8 x i16> %load, <8 x i16> poison, <8 x i32> zeroinitializer
357*f89f670dSSimon Pilgrim; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %bcst
358*f89f670dSSimon Pilgrim;
359*f89f670dSSimon Pilgrim; AVX2-LABEL: 'broadcast_load_v8i16_v8i16'
360*f89f670dSSimon Pilgrim; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <8 x i16>, ptr %src, align 16
361*f89f670dSSimon Pilgrim; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <8 x i16> %load, <8 x i16> poison, <8 x i32> zeroinitializer
362*f89f670dSSimon Pilgrim; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %bcst
363*f89f670dSSimon Pilgrim;
364*f89f670dSSimon Pilgrim; AVX512-LABEL: 'broadcast_load_v8i16_v8i16'
365*f89f670dSSimon Pilgrim; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <8 x i16>, ptr %src, align 16
366*f89f670dSSimon Pilgrim; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <8 x i16> %load, <8 x i16> poison, <8 x i32> zeroinitializer
367*f89f670dSSimon Pilgrim; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %bcst
368a9e87304SSimon Pilgrim;
369a9e87304SSimon Pilgrim  %load = load <8 x i16>, ptr %src
370a9e87304SSimon Pilgrim  %bcst = shufflevector <8 x i16> %load, <8 x i16> poison, <8 x i32> zeroinitializer
371a9e87304SSimon Pilgrim  ret <8 x i16> %bcst
372a9e87304SSimon Pilgrim}
373a9e87304SSimon Pilgrim
374a9e87304SSimon Pilgrimdefine <16 x i16> @broadcast_load_v8i16_v16i16(ptr %src) {
375a9e87304SSimon Pilgrim; SSE2-LABEL: 'broadcast_load_v8i16_v16i16'
376a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <8 x i16>, ptr %src, align 16
377a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %bcst = shufflevector <8 x i16> %load, <8 x i16> poison, <16 x i32> zeroinitializer
378a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %bcst
379a9e87304SSimon Pilgrim;
380a9e87304SSimon Pilgrim; SSSE3-LABEL: 'broadcast_load_v8i16_v16i16'
381a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <8 x i16>, ptr %src, align 16
382a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <8 x i16> %load, <8 x i16> poison, <16 x i32> zeroinitializer
383a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %bcst
384a9e87304SSimon Pilgrim;
385a9e87304SSimon Pilgrim; SSE42-LABEL: 'broadcast_load_v8i16_v16i16'
386a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <8 x i16>, ptr %src, align 16
387a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <8 x i16> %load, <8 x i16> poison, <16 x i32> zeroinitializer
388a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %bcst
389a9e87304SSimon Pilgrim;
390a9e87304SSimon Pilgrim; AVX1-LABEL: 'broadcast_load_v8i16_v16i16'
391a9e87304SSimon Pilgrim; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <8 x i16>, ptr %src, align 16
392a9e87304SSimon Pilgrim; AVX1-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %bcst = shufflevector <8 x i16> %load, <8 x i16> poison, <16 x i32> zeroinitializer
393a9e87304SSimon Pilgrim; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %bcst
394a9e87304SSimon Pilgrim;
395a9e87304SSimon Pilgrim; AVX2-LABEL: 'broadcast_load_v8i16_v16i16'
396a9e87304SSimon Pilgrim; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <8 x i16>, ptr %src, align 16
397*f89f670dSSimon Pilgrim; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <8 x i16> %load, <8 x i16> poison, <16 x i32> zeroinitializer
398a9e87304SSimon Pilgrim; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %bcst
399a9e87304SSimon Pilgrim;
400a9e87304SSimon Pilgrim; AVX512-LABEL: 'broadcast_load_v8i16_v16i16'
401a9e87304SSimon Pilgrim; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <8 x i16>, ptr %src, align 16
402*f89f670dSSimon Pilgrim; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <8 x i16> %load, <8 x i16> poison, <16 x i32> zeroinitializer
403a9e87304SSimon Pilgrim; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %bcst
404a9e87304SSimon Pilgrim;
405a9e87304SSimon Pilgrim  %load = load <8 x i16>, ptr %src
406a9e87304SSimon Pilgrim  %bcst = shufflevector <8 x i16> %load, <8 x i16> poison, <16 x i32> zeroinitializer
407a9e87304SSimon Pilgrim  ret <16 x i16> %bcst
408a9e87304SSimon Pilgrim}
409a9e87304SSimon Pilgrim
410a9e87304SSimon Pilgrimdefine <32 x i16> @broadcast_load_v8i16_v32i16(ptr %src) {
411a9e87304SSimon Pilgrim; SSE2-LABEL: 'broadcast_load_v8i16_v32i16'
412a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <8 x i16>, ptr %src, align 16
413a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %bcst = shufflevector <8 x i16> %load, <8 x i16> poison, <32 x i32> zeroinitializer
414a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %bcst
415a9e87304SSimon Pilgrim;
416a9e87304SSimon Pilgrim; SSSE3-LABEL: 'broadcast_load_v8i16_v32i16'
417a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <8 x i16>, ptr %src, align 16
418a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <8 x i16> %load, <8 x i16> poison, <32 x i32> zeroinitializer
419a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %bcst
420a9e87304SSimon Pilgrim;
421a9e87304SSimon Pilgrim; SSE42-LABEL: 'broadcast_load_v8i16_v32i16'
422a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <8 x i16>, ptr %src, align 16
423a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <8 x i16> %load, <8 x i16> poison, <32 x i32> zeroinitializer
424a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %bcst
425a9e87304SSimon Pilgrim;
426a9e87304SSimon Pilgrim; AVX1-LABEL: 'broadcast_load_v8i16_v32i16'
427a9e87304SSimon Pilgrim; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <8 x i16>, ptr %src, align 16
428a9e87304SSimon Pilgrim; AVX1-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %bcst = shufflevector <8 x i16> %load, <8 x i16> poison, <32 x i32> zeroinitializer
429a9e87304SSimon Pilgrim; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %bcst
430a9e87304SSimon Pilgrim;
431a9e87304SSimon Pilgrim; AVX2-LABEL: 'broadcast_load_v8i16_v32i16'
432a9e87304SSimon Pilgrim; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <8 x i16>, ptr %src, align 16
433*f89f670dSSimon Pilgrim; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <8 x i16> %load, <8 x i16> poison, <32 x i32> zeroinitializer
434a9e87304SSimon Pilgrim; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %bcst
435a9e87304SSimon Pilgrim;
436a9e87304SSimon Pilgrim; AVX512-LABEL: 'broadcast_load_v8i16_v32i16'
437a9e87304SSimon Pilgrim; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <8 x i16>, ptr %src, align 16
438*f89f670dSSimon Pilgrim; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <8 x i16> %load, <8 x i16> poison, <32 x i32> zeroinitializer
439a9e87304SSimon Pilgrim; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %bcst
440a9e87304SSimon Pilgrim;
441a9e87304SSimon Pilgrim  %load = load <8 x i16>, ptr %src
442a9e87304SSimon Pilgrim  %bcst = shufflevector <8 x i16> %load, <8 x i16> poison, <32 x i32> zeroinitializer
443a9e87304SSimon Pilgrim  ret <32 x i16> %bcst
444a9e87304SSimon Pilgrim}
445a9e87304SSimon Pilgrim
446a9e87304SSimon Pilgrim;
447a9e87304SSimon Pilgrim; vXi8
448a9e87304SSimon Pilgrim;
449a9e87304SSimon Pilgrim
450a9e87304SSimon Pilgrimdefine <16 x i8> @broadcast_load_v16i8_v16i8(ptr %src) {
451a9e87304SSimon Pilgrim; SSE2-LABEL: 'broadcast_load_v16i8_v16i8'
452a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <16 x i8>, ptr %src, align 16
453a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %bcst = shufflevector <16 x i8> %load, <16 x i8> poison, <16 x i32> zeroinitializer
454a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %bcst
455a9e87304SSimon Pilgrim;
456a9e87304SSimon Pilgrim; SSSE3-LABEL: 'broadcast_load_v16i8_v16i8'
457a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <16 x i8>, ptr %src, align 16
458a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <16 x i8> %load, <16 x i8> poison, <16 x i32> zeroinitializer
459a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %bcst
460a9e87304SSimon Pilgrim;
461a9e87304SSimon Pilgrim; SSE42-LABEL: 'broadcast_load_v16i8_v16i8'
462a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <16 x i8>, ptr %src, align 16
463a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <16 x i8> %load, <16 x i8> poison, <16 x i32> zeroinitializer
464a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %bcst
465a9e87304SSimon Pilgrim;
466*f89f670dSSimon Pilgrim; AVX1-LABEL: 'broadcast_load_v16i8_v16i8'
467*f89f670dSSimon Pilgrim; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <16 x i8>, ptr %src, align 16
468*f89f670dSSimon Pilgrim; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <16 x i8> %load, <16 x i8> poison, <16 x i32> zeroinitializer
469*f89f670dSSimon Pilgrim; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %bcst
470*f89f670dSSimon Pilgrim;
471*f89f670dSSimon Pilgrim; AVX2-LABEL: 'broadcast_load_v16i8_v16i8'
472*f89f670dSSimon Pilgrim; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <16 x i8>, ptr %src, align 16
473*f89f670dSSimon Pilgrim; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <16 x i8> %load, <16 x i8> poison, <16 x i32> zeroinitializer
474*f89f670dSSimon Pilgrim; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %bcst
475*f89f670dSSimon Pilgrim;
476*f89f670dSSimon Pilgrim; AVX512-LABEL: 'broadcast_load_v16i8_v16i8'
477*f89f670dSSimon Pilgrim; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <16 x i8>, ptr %src, align 16
478*f89f670dSSimon Pilgrim; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <16 x i8> %load, <16 x i8> poison, <16 x i32> zeroinitializer
479*f89f670dSSimon Pilgrim; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %bcst
480a9e87304SSimon Pilgrim;
481a9e87304SSimon Pilgrim  %load = load <16 x i8>, ptr %src
482a9e87304SSimon Pilgrim  %bcst = shufflevector <16 x i8> %load, <16 x i8> poison, <16 x i32> zeroinitializer
483a9e87304SSimon Pilgrim  ret <16 x i8> %bcst
484a9e87304SSimon Pilgrim}
485a9e87304SSimon Pilgrim
486a9e87304SSimon Pilgrimdefine <32 x i8> @broadcast_load_v16i8_v32i8(ptr %src) {
487a9e87304SSimon Pilgrim; SSE2-LABEL: 'broadcast_load_v16i8_v32i8'
488a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <16 x i8>, ptr %src, align 16
489a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %bcst = shufflevector <16 x i8> %load, <16 x i8> poison, <32 x i32> zeroinitializer
490a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %bcst
491a9e87304SSimon Pilgrim;
492a9e87304SSimon Pilgrim; SSSE3-LABEL: 'broadcast_load_v16i8_v32i8'
493a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <16 x i8>, ptr %src, align 16
494a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <16 x i8> %load, <16 x i8> poison, <32 x i32> zeroinitializer
495a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %bcst
496a9e87304SSimon Pilgrim;
497a9e87304SSimon Pilgrim; SSE42-LABEL: 'broadcast_load_v16i8_v32i8'
498a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <16 x i8>, ptr %src, align 16
499a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <16 x i8> %load, <16 x i8> poison, <32 x i32> zeroinitializer
500a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %bcst
501a9e87304SSimon Pilgrim;
502a9e87304SSimon Pilgrim; AVX1-LABEL: 'broadcast_load_v16i8_v32i8'
503a9e87304SSimon Pilgrim; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <16 x i8>, ptr %src, align 16
504a9e87304SSimon Pilgrim; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %bcst = shufflevector <16 x i8> %load, <16 x i8> poison, <32 x i32> zeroinitializer
505a9e87304SSimon Pilgrim; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %bcst
506a9e87304SSimon Pilgrim;
507a9e87304SSimon Pilgrim; AVX2-LABEL: 'broadcast_load_v16i8_v32i8'
508a9e87304SSimon Pilgrim; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <16 x i8>, ptr %src, align 16
509*f89f670dSSimon Pilgrim; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <16 x i8> %load, <16 x i8> poison, <32 x i32> zeroinitializer
510a9e87304SSimon Pilgrim; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %bcst
511a9e87304SSimon Pilgrim;
512a9e87304SSimon Pilgrim; AVX512-LABEL: 'broadcast_load_v16i8_v32i8'
513a9e87304SSimon Pilgrim; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <16 x i8>, ptr %src, align 16
514*f89f670dSSimon Pilgrim; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <16 x i8> %load, <16 x i8> poison, <32 x i32> zeroinitializer
515a9e87304SSimon Pilgrim; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %bcst
516a9e87304SSimon Pilgrim;
517a9e87304SSimon Pilgrim  %load = load <16 x i8>, ptr %src
518a9e87304SSimon Pilgrim  %bcst = shufflevector <16 x i8> %load, <16 x i8> poison, <32 x i32> zeroinitializer
519a9e87304SSimon Pilgrim  ret <32 x i8> %bcst
520a9e87304SSimon Pilgrim}
521a9e87304SSimon Pilgrim
522a9e87304SSimon Pilgrimdefine <64 x i8> @broadcast_load_v16i8_v64i8(ptr %src) {
523a9e87304SSimon Pilgrim; SSE2-LABEL: 'broadcast_load_v16i8_v64i8'
524a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <16 x i8>, ptr %src, align 16
525a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %bcst = shufflevector <16 x i8> %load, <16 x i8> poison, <64 x i32> zeroinitializer
526a9e87304SSimon Pilgrim; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %bcst
527a9e87304SSimon Pilgrim;
528a9e87304SSimon Pilgrim; SSSE3-LABEL: 'broadcast_load_v16i8_v64i8'
529a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <16 x i8>, ptr %src, align 16
530a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <16 x i8> %load, <16 x i8> poison, <64 x i32> zeroinitializer
531a9e87304SSimon Pilgrim; SSSE3-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %bcst
532a9e87304SSimon Pilgrim;
533a9e87304SSimon Pilgrim; SSE42-LABEL: 'broadcast_load_v16i8_v64i8'
534a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <16 x i8>, ptr %src, align 16
535a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %bcst = shufflevector <16 x i8> %load, <16 x i8> poison, <64 x i32> zeroinitializer
536a9e87304SSimon Pilgrim; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %bcst
537a9e87304SSimon Pilgrim;
538a9e87304SSimon Pilgrim; AVX1-LABEL: 'broadcast_load_v16i8_v64i8'
539a9e87304SSimon Pilgrim; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <16 x i8>, ptr %src, align 16
540a9e87304SSimon Pilgrim; AVX1-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %bcst = shufflevector <16 x i8> %load, <16 x i8> poison, <64 x i32> zeroinitializer
541a9e87304SSimon Pilgrim; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %bcst
542a9e87304SSimon Pilgrim;
543a9e87304SSimon Pilgrim; AVX2-LABEL: 'broadcast_load_v16i8_v64i8'
544a9e87304SSimon Pilgrim; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <16 x i8>, ptr %src, align 16
545*f89f670dSSimon Pilgrim; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <16 x i8> %load, <16 x i8> poison, <64 x i32> zeroinitializer
546a9e87304SSimon Pilgrim; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %bcst
547a9e87304SSimon Pilgrim;
548a9e87304SSimon Pilgrim; AVX512-LABEL: 'broadcast_load_v16i8_v64i8'
549a9e87304SSimon Pilgrim; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %load = load <16 x i8>, ptr %src, align 16
550*f89f670dSSimon Pilgrim; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: %bcst = shufflevector <16 x i8> %load, <16 x i8> poison, <64 x i32> zeroinitializer
551a9e87304SSimon Pilgrim; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %bcst
552a9e87304SSimon Pilgrim;
553a9e87304SSimon Pilgrim  %load = load <16 x i8>, ptr %src
554a9e87304SSimon Pilgrim  %bcst = shufflevector <16 x i8> %load, <16 x i8> poison, <64 x i32> zeroinitializer
555a9e87304SSimon Pilgrim  ret <64 x i8> %bcst
556a9e87304SSimon Pilgrim}
557