xref: /llvm-project/llvm/test/Transforms/SLPVectorizer/RISCV/fround.ll (revision 09058654f68dd4cc5435f49502de33bac2b7f8fa)
1a06be8a2SRamkumar Ramachandra; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 3
2a06be8a2SRamkumar Ramachandra; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=riscv32 -mattr=+m,+v | FileCheck %s
3a06be8a2SRamkumar Ramachandra; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=riscv64 -mattr=+m,+v | FileCheck %s
4*09058654SEric Biggers; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=riscv32 -mattr=+v,+zvbb | FileCheck %s
5*09058654SEric Biggers; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=riscv64 -mattr=+v,+zvbb | FileCheck %s
6a06be8a2SRamkumar Ramachandra
7a06be8a2SRamkumar Ramachandradefine <4 x float> @rint_v4f32(ptr %a) {
8a06be8a2SRamkumar Ramachandra; CHECK-LABEL: define <4 x float> @rint_v4f32(
9a06be8a2SRamkumar Ramachandra; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0:[0-9]+]] {
10a06be8a2SRamkumar Ramachandra; CHECK-NEXT:  entry:
11a06be8a2SRamkumar Ramachandra; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A]], align 16
12a06be8a2SRamkumar Ramachandra; CHECK-NEXT:    [[TMP1:%.*]] = call <4 x float> @llvm.rint.v4f32(<4 x float> [[TMP0]])
13a06be8a2SRamkumar Ramachandra; CHECK-NEXT:    ret <4 x float> [[TMP1]]
14a06be8a2SRamkumar Ramachandra;
15a06be8a2SRamkumar Ramachandraentry:
16a06be8a2SRamkumar Ramachandra  %0 = load <4 x float>, ptr %a
17a06be8a2SRamkumar Ramachandra  %vecext = extractelement <4 x float> %0, i64 0
18a06be8a2SRamkumar Ramachandra  %1 = call float @llvm.rint.f32(float %vecext)
19a06be8a2SRamkumar Ramachandra  %vecins = insertelement <4 x float> undef, float %1, i64 0
20a06be8a2SRamkumar Ramachandra  %vecext.1 = extractelement <4 x float> %0, i64 1
21a06be8a2SRamkumar Ramachandra  %2 = call float @llvm.rint.f32(float %vecext.1)
22a06be8a2SRamkumar Ramachandra  %vecins.1 = insertelement <4 x float> %vecins, float %2, i64 1
23a06be8a2SRamkumar Ramachandra  %vecext.2 = extractelement <4 x float> %0, i64 2
24a06be8a2SRamkumar Ramachandra  %3 = call float @llvm.rint.f32(float %vecext.2)
25a06be8a2SRamkumar Ramachandra  %vecins.2 = insertelement <4 x float> %vecins.1, float %3, i64 2
26a06be8a2SRamkumar Ramachandra  %vecext.3 = extractelement <4 x float> %0, i64 3
27a06be8a2SRamkumar Ramachandra  %4 = call float @llvm.rint.f32(float %vecext.3)
28a06be8a2SRamkumar Ramachandra  %vecins.3 = insertelement <4 x float> %vecins.2, float %4, i64 3
29a06be8a2SRamkumar Ramachandra  ret <4 x float> %vecins.3
30a06be8a2SRamkumar Ramachandra}
31a06be8a2SRamkumar Ramachandra
32aa30018eSRamkumar Ramachandradefine <2 x i32> @lrint_v2i32f32(ptr %a) {
33aa30018eSRamkumar Ramachandra; CHECK-LABEL: define <2 x i32> @lrint_v2i32f32(
34aa30018eSRamkumar Ramachandra; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
35aa30018eSRamkumar Ramachandra; CHECK-NEXT:  entry:
36aa30018eSRamkumar Ramachandra; CHECK-NEXT:    [[TMP0:%.*]] = load <2 x float>, ptr [[A]], align 8
372302e4c3SRamkumar Ramachandra; CHECK-NEXT:    [[TMP1:%.*]] = call <2 x i32> @llvm.lrint.v2i32.v2f32(<2 x float> [[TMP0]])
382302e4c3SRamkumar Ramachandra; CHECK-NEXT:    ret <2 x i32> [[TMP1]]
39aa30018eSRamkumar Ramachandra;
40aa30018eSRamkumar Ramachandraentry:
41aa30018eSRamkumar Ramachandra  %0 = load <2 x float>, ptr %a
42aa30018eSRamkumar Ramachandra  %vecext = extractelement <2 x float> %0, i32 0
43aa30018eSRamkumar Ramachandra  %1 = call i32 @llvm.lrint.i32.f32(float %vecext)
44aa30018eSRamkumar Ramachandra  %vecins = insertelement <2 x i32> undef, i32 %1, i32 0
45aa30018eSRamkumar Ramachandra  %vecext.1 = extractelement <2 x float> %0, i32 1
46aa30018eSRamkumar Ramachandra  %2 = call i32 @llvm.lrint.i32.f32(float %vecext.1)
47aa30018eSRamkumar Ramachandra  %vecins.1 = insertelement <2 x i32> %vecins, i32 %2, i32 1
48aa30018eSRamkumar Ramachandra  ret <2 x i32> %vecins.1
49aa30018eSRamkumar Ramachandra}
50aa30018eSRamkumar Ramachandra
51aa30018eSRamkumar Ramachandradefine <4 x i32> @lrint_v4i32f32(ptr %a) {
52aa30018eSRamkumar Ramachandra; CHECK-LABEL: define <4 x i32> @lrint_v4i32f32(
53aa30018eSRamkumar Ramachandra; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
54aa30018eSRamkumar Ramachandra; CHECK-NEXT:  entry:
55aa30018eSRamkumar Ramachandra; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A]], align 16
562302e4c3SRamkumar Ramachandra; CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i32> @llvm.lrint.v4i32.v4f32(<4 x float> [[TMP0]])
572302e4c3SRamkumar Ramachandra; CHECK-NEXT:    ret <4 x i32> [[TMP1]]
58aa30018eSRamkumar Ramachandra;
59aa30018eSRamkumar Ramachandraentry:
60aa30018eSRamkumar Ramachandra  %0 = load <4 x float>, ptr %a
61aa30018eSRamkumar Ramachandra  %vecext = extractelement <4 x float> %0, i32 0
62aa30018eSRamkumar Ramachandra  %1 = call i32 @llvm.lrint.i32.f32(float %vecext)
63aa30018eSRamkumar Ramachandra  %vecins = insertelement <4 x i32> undef, i32 %1, i32 0
64aa30018eSRamkumar Ramachandra  %vecext.1 = extractelement <4 x float> %0, i32 1
65aa30018eSRamkumar Ramachandra  %2 = call i32 @llvm.lrint.i32.f32(float %vecext.1)
66aa30018eSRamkumar Ramachandra  %vecins.1 = insertelement <4 x i32> %vecins, i32 %2, i32 1
67aa30018eSRamkumar Ramachandra  %vecext.2 = extractelement <4 x float> %0, i32 2
68aa30018eSRamkumar Ramachandra  %3 = call i32 @llvm.lrint.i32.f32(float %vecext.2)
69aa30018eSRamkumar Ramachandra  %vecins.2 = insertelement <4 x i32> %vecins.1, i32 %3, i32 2
70aa30018eSRamkumar Ramachandra  %vecext.3 = extractelement <4 x float> %0, i32 3
71aa30018eSRamkumar Ramachandra  %4 = call i32 @llvm.lrint.i32.f32(float %vecext.3)
72aa30018eSRamkumar Ramachandra  %vecins.3 = insertelement <4 x i32> %vecins.2, i32 %4, i32 3
73aa30018eSRamkumar Ramachandra  ret <4 x i32> %vecins.3
74aa30018eSRamkumar Ramachandra}
75aa30018eSRamkumar Ramachandra
76aa30018eSRamkumar Ramachandradefine <8 x i32> @lrint_v8i32f32(ptr %a) {
77aa30018eSRamkumar Ramachandra; CHECK-LABEL: define <8 x i32> @lrint_v8i32f32(
78aa30018eSRamkumar Ramachandra; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
79aa30018eSRamkumar Ramachandra; CHECK-NEXT:  entry:
80aa30018eSRamkumar Ramachandra; CHECK-NEXT:    [[TMP0:%.*]] = load <8 x float>, ptr [[A]], align 32
812302e4c3SRamkumar Ramachandra; CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i32> @llvm.lrint.v8i32.v8f32(<8 x float> [[TMP0]])
822302e4c3SRamkumar Ramachandra; CHECK-NEXT:    ret <8 x i32> [[TMP1]]
83aa30018eSRamkumar Ramachandra;
84aa30018eSRamkumar Ramachandraentry:
85aa30018eSRamkumar Ramachandra  %0 = load <8 x float>, ptr %a
86aa30018eSRamkumar Ramachandra  %vecext = extractelement <8 x float> %0, i32 0
87aa30018eSRamkumar Ramachandra  %1 = call i32 @llvm.lrint.i32.f32(float %vecext)
88aa30018eSRamkumar Ramachandra  %vecins = insertelement <8 x i32> undef, i32 %1, i32 0
89aa30018eSRamkumar Ramachandra  %vecext.1 = extractelement <8 x float> %0, i32 1
90aa30018eSRamkumar Ramachandra  %2 = call i32 @llvm.lrint.i32.f32(float %vecext.1)
91aa30018eSRamkumar Ramachandra  %vecins.1 = insertelement <8 x i32> %vecins, i32 %2, i32 1
92aa30018eSRamkumar Ramachandra  %vecext.2 = extractelement <8 x float> %0, i32 2
93aa30018eSRamkumar Ramachandra  %3 = call i32 @llvm.lrint.i32.f32(float %vecext.2)
94aa30018eSRamkumar Ramachandra  %vecins.2 = insertelement <8 x i32> %vecins.1, i32 %3, i32 2
95aa30018eSRamkumar Ramachandra  %vecext.3 = extractelement <8 x float> %0, i32 3
96aa30018eSRamkumar Ramachandra  %4 = call i32 @llvm.lrint.i32.f32(float %vecext.3)
97aa30018eSRamkumar Ramachandra  %vecins.3 = insertelement <8 x i32> %vecins.2, i32 %4, i32 3
98aa30018eSRamkumar Ramachandra  %vecext.4 = extractelement <8 x float> %0, i32 4
99aa30018eSRamkumar Ramachandra  %5 = call i32 @llvm.lrint.i32.f32(float %vecext.4)
100aa30018eSRamkumar Ramachandra  %vecins.4 = insertelement <8 x i32> %vecins.3, i32 %5, i32 4
101aa30018eSRamkumar Ramachandra  %vecext.5 = extractelement <8 x float> %0, i32 5
102aa30018eSRamkumar Ramachandra  %6 = call i32 @llvm.lrint.i32.f32(float %vecext.5)
103aa30018eSRamkumar Ramachandra  %vecins.5 = insertelement <8 x i32> %vecins.4, i32 %6, i32 5
104aa30018eSRamkumar Ramachandra  %vecext.6 = extractelement <8 x float> %0, i32 6
105aa30018eSRamkumar Ramachandra  %7 = call i32 @llvm.lrint.i32.f32(float %vecext.6)
106aa30018eSRamkumar Ramachandra  %vecins.6 = insertelement <8 x i32> %vecins.5, i32 %7, i32 6
107aa30018eSRamkumar Ramachandra  %vecext.7 = extractelement <8 x float> %0, i32 7
108aa30018eSRamkumar Ramachandra  %8 = call i32 @llvm.lrint.i32.f32(float %vecext.7)
109aa30018eSRamkumar Ramachandra  %vecins.7 = insertelement <8 x i32> %vecins.6, i32 %8, i32 7
110aa30018eSRamkumar Ramachandra  ret <8 x i32> %vecins.7
111aa30018eSRamkumar Ramachandra}
112aa30018eSRamkumar Ramachandra
113aa30018eSRamkumar Ramachandradefine <2 x i64> @lrint_v2i64f32(ptr %a) {
114aa30018eSRamkumar Ramachandra; CHECK-LABEL: define <2 x i64> @lrint_v2i64f32(
115aa30018eSRamkumar Ramachandra; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
116aa30018eSRamkumar Ramachandra; CHECK-NEXT:  entry:
117aa30018eSRamkumar Ramachandra; CHECK-NEXT:    [[TMP0:%.*]] = load <2 x float>, ptr [[A]], align 8
1182302e4c3SRamkumar Ramachandra; CHECK-NEXT:    [[TMP1:%.*]] = call <2 x i64> @llvm.lrint.v2i64.v2f32(<2 x float> [[TMP0]])
1192302e4c3SRamkumar Ramachandra; CHECK-NEXT:    ret <2 x i64> [[TMP1]]
120aa30018eSRamkumar Ramachandra;
121aa30018eSRamkumar Ramachandraentry:
122aa30018eSRamkumar Ramachandra  %0 = load <2 x float>, ptr %a
123aa30018eSRamkumar Ramachandra  %vecext = extractelement <2 x float> %0, i64 0
124aa30018eSRamkumar Ramachandra  %1 = call i64 @llvm.lrint.i64.f32(float %vecext)
125aa30018eSRamkumar Ramachandra  %vecins = insertelement <2 x i64> undef, i64 %1, i64 0
126aa30018eSRamkumar Ramachandra  %vecext.1 = extractelement <2 x float> %0, i64 1
127aa30018eSRamkumar Ramachandra  %2 = call i64 @llvm.lrint.i64.f32(float %vecext.1)
128aa30018eSRamkumar Ramachandra  %vecins.1 = insertelement <2 x i64> %vecins, i64 %2, i64 1
129aa30018eSRamkumar Ramachandra  ret <2 x i64> %vecins.1
130aa30018eSRamkumar Ramachandra}
131aa30018eSRamkumar Ramachandra
132a06be8a2SRamkumar Ramachandradefine <4 x i64> @lrint_v4i64f32(ptr %a) {
133a06be8a2SRamkumar Ramachandra; CHECK-LABEL: define <4 x i64> @lrint_v4i64f32(
134a06be8a2SRamkumar Ramachandra; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
135a06be8a2SRamkumar Ramachandra; CHECK-NEXT:  entry:
136a06be8a2SRamkumar Ramachandra; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A]], align 16
1372302e4c3SRamkumar Ramachandra; CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i64> @llvm.lrint.v4i64.v4f32(<4 x float> [[TMP0]])
1382302e4c3SRamkumar Ramachandra; CHECK-NEXT:    ret <4 x i64> [[TMP1]]
139a06be8a2SRamkumar Ramachandra;
140a06be8a2SRamkumar Ramachandraentry:
141a06be8a2SRamkumar Ramachandra  %0 = load <4 x float>, ptr %a
142a06be8a2SRamkumar Ramachandra  %vecext = extractelement <4 x float> %0, i64 0
143a06be8a2SRamkumar Ramachandra  %1 = call i64 @llvm.lrint.i64.f32(float %vecext)
144a06be8a2SRamkumar Ramachandra  %vecins = insertelement <4 x i64> undef, i64 %1, i64 0
145a06be8a2SRamkumar Ramachandra  %vecext.1 = extractelement <4 x float> %0, i64 1
146a06be8a2SRamkumar Ramachandra  %2 = call i64 @llvm.lrint.i64.f32(float %vecext.1)
147a06be8a2SRamkumar Ramachandra  %vecins.1 = insertelement <4 x i64> %vecins, i64 %2, i64 1
148a06be8a2SRamkumar Ramachandra  %vecext.2 = extractelement <4 x float> %0, i64 2
149a06be8a2SRamkumar Ramachandra  %3 = call i64 @llvm.lrint.i64.f32(float %vecext.2)
150a06be8a2SRamkumar Ramachandra  %vecins.2 = insertelement <4 x i64> %vecins.1, i64 %3, i64 2
151a06be8a2SRamkumar Ramachandra  %vecext.3 = extractelement <4 x float> %0, i64 3
152a06be8a2SRamkumar Ramachandra  %4 = call i64 @llvm.lrint.i64.f32(float %vecext.3)
153a06be8a2SRamkumar Ramachandra  %vecins.3 = insertelement <4 x i64> %vecins.2, i64 %4, i64 3
154a06be8a2SRamkumar Ramachandra  ret <4 x i64> %vecins.3
155a06be8a2SRamkumar Ramachandra}
156a06be8a2SRamkumar Ramachandra
157aa30018eSRamkumar Ramachandradefine <8 x i64> @lrint_v8i64f32(ptr %a) {
158aa30018eSRamkumar Ramachandra; CHECK-LABEL: define <8 x i64> @lrint_v8i64f32(
159aa30018eSRamkumar Ramachandra; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
160aa30018eSRamkumar Ramachandra; CHECK-NEXT:  entry:
161aa30018eSRamkumar Ramachandra; CHECK-NEXT:    [[TMP0:%.*]] = load <8 x float>, ptr [[A]], align 32
1622302e4c3SRamkumar Ramachandra; CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <8 x float> [[TMP0]], <8 x float> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1632302e4c3SRamkumar Ramachandra; CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i64> @llvm.lrint.v4i64.v4f32(<4 x float> [[TMP1]])
1642302e4c3SRamkumar Ramachandra; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <4 x i64> [[TMP2]], <4 x i64> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>
1652302e4c3SRamkumar Ramachandra; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <8 x float> [[TMP0]], <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
1662302e4c3SRamkumar Ramachandra; CHECK-NEXT:    [[TMP5:%.*]] = call <4 x i64> @llvm.lrint.v4i64.v4f32(<4 x float> [[TMP4]])
1672302e4c3SRamkumar Ramachandra; CHECK-NEXT:    [[TMP6:%.*]] = shufflevector <4 x i64> [[TMP5]], <4 x i64> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>
1682302e4c3SRamkumar Ramachandra; CHECK-NEXT:    [[VECINS_71:%.*]] = shufflevector <8 x i64> [[TMP3]], <8 x i64> [[TMP6]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>
1692302e4c3SRamkumar Ramachandra; CHECK-NEXT:    ret <8 x i64> [[VECINS_71]]
170aa30018eSRamkumar Ramachandra;
171aa30018eSRamkumar Ramachandraentry:
172aa30018eSRamkumar Ramachandra  %0 = load <8 x float>, ptr %a
173aa30018eSRamkumar Ramachandra  %vecext = extractelement <8 x float> %0, i64 0
174aa30018eSRamkumar Ramachandra  %1 = call i64 @llvm.lrint.i64.f32(float %vecext)
175aa30018eSRamkumar Ramachandra  %vecins = insertelement <8 x i64> undef, i64 %1, i64 0
176aa30018eSRamkumar Ramachandra  %vecext.1 = extractelement <8 x float> %0, i64 1
177aa30018eSRamkumar Ramachandra  %2 = call i64 @llvm.lrint.i64.f32(float %vecext.1)
178aa30018eSRamkumar Ramachandra  %vecins.1 = insertelement <8 x i64> %vecins, i64 %2, i64 1
179aa30018eSRamkumar Ramachandra  %vecext.2 = extractelement <8 x float> %0, i64 2
180aa30018eSRamkumar Ramachandra  %3 = call i64 @llvm.lrint.i64.f32(float %vecext.2)
181aa30018eSRamkumar Ramachandra  %vecins.2 = insertelement <8 x i64> %vecins.1, i64 %3, i64 2
182aa30018eSRamkumar Ramachandra  %vecext.3 = extractelement <8 x float> %0, i64 3
183aa30018eSRamkumar Ramachandra  %4 = call i64 @llvm.lrint.i64.f32(float %vecext.3)
184aa30018eSRamkumar Ramachandra  %vecins.3 = insertelement <8 x i64> %vecins.2, i64 %4, i64 3
185aa30018eSRamkumar Ramachandra  %vecext.4 = extractelement <8 x float> %0, i64 4
186aa30018eSRamkumar Ramachandra  %5 = call i64 @llvm.lrint.i64.f32(float %vecext.4)
187aa30018eSRamkumar Ramachandra  %vecins.4 = insertelement <8 x i64> %vecins.3, i64 %5, i64 4
188aa30018eSRamkumar Ramachandra  %vecext.5 = extractelement <8 x float> %0, i64 5
189aa30018eSRamkumar Ramachandra  %6 = call i64 @llvm.lrint.i64.f32(float %vecext.5)
190aa30018eSRamkumar Ramachandra  %vecins.5 = insertelement <8 x i64> %vecins.4, i64 %6, i64 5
191aa30018eSRamkumar Ramachandra  %vecext.6 = extractelement <8 x float> %0, i64 6
192aa30018eSRamkumar Ramachandra  %7 = call i64 @llvm.lrint.i64.f32(float %vecext.6)
193aa30018eSRamkumar Ramachandra  %vecins.6 = insertelement <8 x i64> %vecins.5, i64 %7, i64 6
194aa30018eSRamkumar Ramachandra  %vecext.7 = extractelement <8 x float> %0, i64 7
195aa30018eSRamkumar Ramachandra  %8 = call i64 @llvm.lrint.i64.f32(float %vecext.7)
196aa30018eSRamkumar Ramachandra  %vecins.7 = insertelement <8 x i64> %vecins.6, i64 %8, i64 7
197aa30018eSRamkumar Ramachandra  ret <8 x i64> %vecins.7
198aa30018eSRamkumar Ramachandra}
199aa30018eSRamkumar Ramachandra
200aa30018eSRamkumar Ramachandradefine <2 x i64> @llrint_v2i64f32(ptr %a) {
201aa30018eSRamkumar Ramachandra; CHECK-LABEL: define <2 x i64> @llrint_v2i64f32(
202aa30018eSRamkumar Ramachandra; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
203aa30018eSRamkumar Ramachandra; CHECK-NEXT:  entry:
204aa30018eSRamkumar Ramachandra; CHECK-NEXT:    [[TMP0:%.*]] = load <2 x float>, ptr [[A]], align 8
2052302e4c3SRamkumar Ramachandra; CHECK-NEXT:    [[TMP1:%.*]] = call <2 x i64> @llvm.llrint.v2i64.v2f32(<2 x float> [[TMP0]])
2062302e4c3SRamkumar Ramachandra; CHECK-NEXT:    ret <2 x i64> [[TMP1]]
207aa30018eSRamkumar Ramachandra;
208aa30018eSRamkumar Ramachandraentry:
209aa30018eSRamkumar Ramachandra  %0 = load <2 x float>, ptr %a
210aa30018eSRamkumar Ramachandra  %vecext = extractelement <2 x float> %0, i64 0
211aa30018eSRamkumar Ramachandra  %1 = call i64 @llvm.llrint.i64.f32(float %vecext)
212aa30018eSRamkumar Ramachandra  %vecins = insertelement <2 x i64> undef, i64 %1, i64 0
213aa30018eSRamkumar Ramachandra  %vecext.1 = extractelement <2 x float> %0, i64 1
214aa30018eSRamkumar Ramachandra  %2 = call i64 @llvm.llrint.i64.f32(float %vecext.1)
215aa30018eSRamkumar Ramachandra  %vecins.1 = insertelement <2 x i64> %vecins, i64 %2, i64 1
216aa30018eSRamkumar Ramachandra  ret <2 x i64> %vecins.1
217aa30018eSRamkumar Ramachandra}
218aa30018eSRamkumar Ramachandra
219aa30018eSRamkumar Ramachandradefine <4 x i64> @llrint_v4i64f32(ptr %a) {
220aa30018eSRamkumar Ramachandra; CHECK-LABEL: define <4 x i64> @llrint_v4i64f32(
221aa30018eSRamkumar Ramachandra; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
222aa30018eSRamkumar Ramachandra; CHECK-NEXT:  entry:
223aa30018eSRamkumar Ramachandra; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A]], align 16
2242302e4c3SRamkumar Ramachandra; CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i64> @llvm.llrint.v4i64.v4f32(<4 x float> [[TMP0]])
2252302e4c3SRamkumar Ramachandra; CHECK-NEXT:    ret <4 x i64> [[TMP1]]
226aa30018eSRamkumar Ramachandra;
227aa30018eSRamkumar Ramachandraentry:
228aa30018eSRamkumar Ramachandra  %0 = load <4 x float>, ptr %a
229aa30018eSRamkumar Ramachandra  %vecext = extractelement <4 x float> %0, i64 0
230aa30018eSRamkumar Ramachandra  %1 = call i64 @llvm.llrint.i64.f32(float %vecext)
231aa30018eSRamkumar Ramachandra  %vecins = insertelement <4 x i64> undef, i64 %1, i64 0
232aa30018eSRamkumar Ramachandra  %vecext.1 = extractelement <4 x float> %0, i64 1
233aa30018eSRamkumar Ramachandra  %2 = call i64 @llvm.llrint.i64.f32(float %vecext.1)
234aa30018eSRamkumar Ramachandra  %vecins.1 = insertelement <4 x i64> %vecins, i64 %2, i64 1
235aa30018eSRamkumar Ramachandra  %vecext.2 = extractelement <4 x float> %0, i64 2
236aa30018eSRamkumar Ramachandra  %3 = call i64 @llvm.llrint.i64.f32(float %vecext.2)
237aa30018eSRamkumar Ramachandra  %vecins.2 = insertelement <4 x i64> %vecins.1, i64 %3, i64 2
238aa30018eSRamkumar Ramachandra  %vecext.3 = extractelement <4 x float> %0, i64 3
239aa30018eSRamkumar Ramachandra  %4 = call i64 @llvm.llrint.i64.f32(float %vecext.3)
240aa30018eSRamkumar Ramachandra  %vecins.3 = insertelement <4 x i64> %vecins.2, i64 %4, i64 3
241aa30018eSRamkumar Ramachandra  ret <4 x i64> %vecins.3
242aa30018eSRamkumar Ramachandra}
243aa30018eSRamkumar Ramachandra
244aa30018eSRamkumar Ramachandradefine <8 x i64> @llrint_v8i64f32(ptr %a) {
245aa30018eSRamkumar Ramachandra; CHECK-LABEL: define <8 x i64> @llrint_v8i64f32(
246aa30018eSRamkumar Ramachandra; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
247aa30018eSRamkumar Ramachandra; CHECK-NEXT:  entry:
248aa30018eSRamkumar Ramachandra; CHECK-NEXT:    [[TMP0:%.*]] = load <8 x float>, ptr [[A]], align 32
2492302e4c3SRamkumar Ramachandra; CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <8 x float> [[TMP0]], <8 x float> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
2502302e4c3SRamkumar Ramachandra; CHECK-NEXT:    [[TMP2:%.*]] = call <4 x i64> @llvm.llrint.v4i64.v4f32(<4 x float> [[TMP1]])
2512302e4c3SRamkumar Ramachandra; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <4 x i64> [[TMP2]], <4 x i64> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>
2522302e4c3SRamkumar Ramachandra; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <8 x float> [[TMP0]], <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
2532302e4c3SRamkumar Ramachandra; CHECK-NEXT:    [[TMP5:%.*]] = call <4 x i64> @llvm.llrint.v4i64.v4f32(<4 x float> [[TMP4]])
2542302e4c3SRamkumar Ramachandra; CHECK-NEXT:    [[TMP6:%.*]] = shufflevector <4 x i64> [[TMP5]], <4 x i64> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>
2552302e4c3SRamkumar Ramachandra; CHECK-NEXT:    [[VECINS_71:%.*]] = shufflevector <8 x i64> [[TMP3]], <8 x i64> [[TMP6]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>
2562302e4c3SRamkumar Ramachandra; CHECK-NEXT:    ret <8 x i64> [[VECINS_71]]
257aa30018eSRamkumar Ramachandra;
258aa30018eSRamkumar Ramachandraentry:
259aa30018eSRamkumar Ramachandra  %0 = load <8 x float>, ptr %a
260aa30018eSRamkumar Ramachandra  %vecext = extractelement <8 x float> %0, i64 0
261aa30018eSRamkumar Ramachandra  %1 = call i64 @llvm.llrint.i64.f32(float %vecext)
262aa30018eSRamkumar Ramachandra  %vecins = insertelement <8 x i64> undef, i64 %1, i64 0
263aa30018eSRamkumar Ramachandra  %vecext.1 = extractelement <8 x float> %0, i64 1
264aa30018eSRamkumar Ramachandra  %2 = call i64 @llvm.llrint.i64.f32(float %vecext.1)
265aa30018eSRamkumar Ramachandra  %vecins.1 = insertelement <8 x i64> %vecins, i64 %2, i64 1
266aa30018eSRamkumar Ramachandra  %vecext.2 = extractelement <8 x float> %0, i64 2
267aa30018eSRamkumar Ramachandra  %3 = call i64 @llvm.llrint.i64.f32(float %vecext.2)
268aa30018eSRamkumar Ramachandra  %vecins.2 = insertelement <8 x i64> %vecins.1, i64 %3, i64 2
269aa30018eSRamkumar Ramachandra  %vecext.3 = extractelement <8 x float> %0, i64 3
270aa30018eSRamkumar Ramachandra  %4 = call i64 @llvm.llrint.i64.f32(float %vecext.3)
271aa30018eSRamkumar Ramachandra  %vecins.3 = insertelement <8 x i64> %vecins.2, i64 %4, i64 3
272aa30018eSRamkumar Ramachandra  %vecext.4 = extractelement <8 x float> %0, i64 4
273aa30018eSRamkumar Ramachandra  %5 = call i64 @llvm.llrint.i64.f32(float %vecext.4)
274aa30018eSRamkumar Ramachandra  %vecins.4 = insertelement <8 x i64> %vecins.3, i64 %5, i64 4
275aa30018eSRamkumar Ramachandra  %vecext.5 = extractelement <8 x float> %0, i64 5
276aa30018eSRamkumar Ramachandra  %6 = call i64 @llvm.llrint.i64.f32(float %vecext.5)
277aa30018eSRamkumar Ramachandra  %vecins.5 = insertelement <8 x i64> %vecins.4, i64 %6, i64 5
278aa30018eSRamkumar Ramachandra  %vecext.6 = extractelement <8 x float> %0, i64 6
279aa30018eSRamkumar Ramachandra  %7 = call i64 @llvm.llrint.i64.f32(float %vecext.6)
280aa30018eSRamkumar Ramachandra  %vecins.6 = insertelement <8 x i64> %vecins.5, i64 %7, i64 6
281aa30018eSRamkumar Ramachandra  %vecext.7 = extractelement <8 x float> %0, i64 7
282aa30018eSRamkumar Ramachandra  %8 = call i64 @llvm.llrint.i64.f32(float %vecext.7)
283aa30018eSRamkumar Ramachandra  %vecins.7 = insertelement <8 x i64> %vecins.6, i64 %8, i64 7
284aa30018eSRamkumar Ramachandra  ret <8 x i64> %vecins.7
285aa30018eSRamkumar Ramachandra}
286aa30018eSRamkumar Ramachandra
287a06be8a2SRamkumar Ramachandradeclare float @llvm.rint.f32(float)
288aa30018eSRamkumar Ramachandradeclare i32 @llvm.lrint.i32.f32(float)
289a06be8a2SRamkumar Ramachandradeclare i64 @llvm.lrint.i64.f32(float)
290aa30018eSRamkumar Ramachandradeclare i64 @llvm.llrint.i64.f32(float)
291