1
1
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5
2
- // RUN: %clang_cc1 -disable-llvm-passes -O3 -triple x86_64 %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK
2
+ // RUN: %clang_cc1 -x c++ -std=c++20 - disable-llvm-passes -O3 -triple x86_64 %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK
3
3
4
4
typedef _Float16 half8 __attribute__((ext_vector_type (8 )));
5
+ typedef __bf16 bf16x8 __attribute__((ext_vector_type (8 )));
5
6
typedef float float4 __attribute__((ext_vector_type (4 )));
6
7
typedef double double2 __attribute__((ext_vector_type (2 )));
7
8
typedef long double ldouble2 __attribute__((ext_vector_type (2 )));
8
9
9
- // CHECK-LABEL: define dso_local half @fmin16 (
10
+ // CHECK-LABEL: define dso_local noundef half @_Z6fmin16DF16_DF16_ (
10
11
// CHECK-SAME: half noundef [[A:%.*]], half noundef [[B:%.*]]) #[[ATTR0:[0-9]+]] {
11
12
// CHECK-NEXT: [[ENTRY:.*:]]
12
13
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca half, align 2
@@ -21,7 +22,7 @@ typedef long double ldouble2 __attribute__((ext_vector_type(2)));
21
22
_Float16 fmin16 (_Float16 a , _Float16 b ) {
22
23
return __builtin_minnum (a , b );
23
24
}
24
- // CHECK-LABEL: define dso_local <8 x half> @pfmin16 (
25
+ // CHECK-LABEL: define dso_local noundef <8 x half> @_Z7pfmin16Dv8_DF16_S_ (
25
26
// CHECK-SAME: <8 x half> noundef [[A:%.*]], <8 x half> noundef [[B:%.*]]) #[[ATTR2:[0-9]+]] {
26
27
// CHECK-NEXT: [[ENTRY:.*:]]
27
28
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca <8 x half>, align 16
@@ -36,22 +37,53 @@ _Float16 fmin16(_Float16 a, _Float16 b) {
36
37
half8 pfmin16 (half8 a , half8 b ) {
37
38
return __builtin_elementwise_minnum (a , b );
38
39
}
39
- // CHECK-LABEL: define dso_local float @fmin32(
40
+
41
+ // CHECK-LABEL: define dso_local noundef bfloat @_Z7fmin16bDF16bDF16b(
42
+ // CHECK-SAME: bfloat noundef [[A:%.*]], bfloat noundef [[B:%.*]]) #[[ATTR0]] {
43
+ // CHECK-NEXT: [[ENTRY:.*:]]
44
+ // CHECK-NEXT: [[A_ADDR:%.*]] = alloca bfloat, align 2
45
+ // CHECK-NEXT: [[B_ADDR:%.*]] = alloca bfloat, align 2
46
+ // CHECK-NEXT: store bfloat [[A]], ptr [[A_ADDR]], align 2, !tbaa [[TBAA7:![0-9]+]]
47
+ // CHECK-NEXT: store bfloat [[B]], ptr [[B_ADDR]], align 2, !tbaa [[TBAA7]]
48
+ // CHECK-NEXT: [[TMP0:%.*]] = load bfloat, ptr [[A_ADDR]], align 2, !tbaa [[TBAA7]]
49
+ // CHECK-NEXT: [[TMP1:%.*]] = load bfloat, ptr [[B_ADDR]], align 2, !tbaa [[TBAA7]]
50
+ // CHECK-NEXT: [[TMP2:%.*]] = call bfloat @llvm.minnum.bf16(bfloat [[TMP0]], bfloat [[TMP1]])
51
+ // CHECK-NEXT: ret bfloat [[TMP2]]
52
+ //
53
+ __bf16 fmin16b (__bf16 a , __bf16 b ) {
54
+ return __builtin_minnum (a , b );
55
+ }
56
+ // CHECK-LABEL: define dso_local noundef <8 x bfloat> @_Z8pfmin16bDv8_DF16bS_(
57
+ // CHECK-SAME: <8 x bfloat> noundef [[A:%.*]], <8 x bfloat> noundef [[B:%.*]]) #[[ATTR2]] {
58
+ // CHECK-NEXT: [[ENTRY:.*:]]
59
+ // CHECK-NEXT: [[A_ADDR:%.*]] = alloca <8 x bfloat>, align 16
60
+ // CHECK-NEXT: [[B_ADDR:%.*]] = alloca <8 x bfloat>, align 16
61
+ // CHECK-NEXT: store <8 x bfloat> [[A]], ptr [[A_ADDR]], align 16, !tbaa [[TBAA6]]
62
+ // CHECK-NEXT: store <8 x bfloat> [[B]], ptr [[B_ADDR]], align 16, !tbaa [[TBAA6]]
63
+ // CHECK-NEXT: [[TMP0:%.*]] = load <8 x bfloat>, ptr [[A_ADDR]], align 16, !tbaa [[TBAA6]]
64
+ // CHECK-NEXT: [[TMP1:%.*]] = load <8 x bfloat>, ptr [[B_ADDR]], align 16, !tbaa [[TBAA6]]
65
+ // CHECK-NEXT: [[ELT_MINNUM:%.*]] = call <8 x bfloat> @llvm.minnum.v8bf16(<8 x bfloat> [[TMP0]], <8 x bfloat> [[TMP1]])
66
+ // CHECK-NEXT: ret <8 x bfloat> [[ELT_MINNUM]]
67
+ //
68
+ bf16x8 pfmin16b (bf16x8 a , bf16x8 b ) {
69
+ return __builtin_elementwise_minnum (a , b );
70
+ }
71
+ // CHECK-LABEL: define dso_local noundef float @_Z6fmin32ff(
40
72
// CHECK-SAME: float noundef [[A:%.*]], float noundef [[B:%.*]]) #[[ATTR0]] {
41
73
// CHECK-NEXT: [[ENTRY:.*:]]
42
74
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca float, align 4
43
75
// CHECK-NEXT: [[B_ADDR:%.*]] = alloca float, align 4
44
- // CHECK-NEXT: store float [[A]], ptr [[A_ADDR]], align 4, !tbaa [[TBAA7 :![0-9]+]]
45
- // CHECK-NEXT: store float [[B]], ptr [[B_ADDR]], align 4, !tbaa [[TBAA7 ]]
46
- // CHECK-NEXT: [[TMP0:%.*]] = load float, ptr [[A_ADDR]], align 4, !tbaa [[TBAA7 ]]
47
- // CHECK-NEXT: [[TMP1:%.*]] = load float, ptr [[B_ADDR]], align 4, !tbaa [[TBAA7 ]]
76
+ // CHECK-NEXT: store float [[A]], ptr [[A_ADDR]], align 4, !tbaa [[TBAA9 :![0-9]+]]
77
+ // CHECK-NEXT: store float [[B]], ptr [[B_ADDR]], align 4, !tbaa [[TBAA9 ]]
78
+ // CHECK-NEXT: [[TMP0:%.*]] = load float, ptr [[A_ADDR]], align 4, !tbaa [[TBAA9 ]]
79
+ // CHECK-NEXT: [[TMP1:%.*]] = load float, ptr [[B_ADDR]], align 4, !tbaa [[TBAA9 ]]
48
80
// CHECK-NEXT: [[TMP2:%.*]] = call float @llvm.minnum.f32(float [[TMP0]], float [[TMP1]])
49
81
// CHECK-NEXT: ret float [[TMP2]]
50
82
//
51
83
float fmin32 (float a , float b ) {
52
84
return __builtin_minnum (a , b );
53
85
}
54
- // CHECK-LABEL: define dso_local <4 x float> @pfmin32 (
86
+ // CHECK-LABEL: define dso_local noundef <4 x float> @_Z7pfmin32Dv4_fS_ (
55
87
// CHECK-SAME: <4 x float> noundef [[A:%.*]], <4 x float> noundef [[B:%.*]]) #[[ATTR2]] {
56
88
// CHECK-NEXT: [[ENTRY:.*:]]
57
89
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca <4 x float>, align 16
@@ -66,22 +98,22 @@ float fmin32(float a, float b) {
66
98
float4 pfmin32 (float4 a , float4 b ) {
67
99
return __builtin_elementwise_minnum (a , b );
68
100
}
69
- // CHECK-LABEL: define dso_local double @fmin64 (
101
+ // CHECK-LABEL: define dso_local noundef double @_Z6fmin64dd (
70
102
// CHECK-SAME: double noundef [[A:%.*]], double noundef [[B:%.*]]) #[[ATTR0]] {
71
103
// CHECK-NEXT: [[ENTRY:.*:]]
72
104
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca double, align 8
73
105
// CHECK-NEXT: [[B_ADDR:%.*]] = alloca double, align 8
74
- // CHECK-NEXT: store double [[A]], ptr [[A_ADDR]], align 8, !tbaa [[TBAA9 :![0-9]+]]
75
- // CHECK-NEXT: store double [[B]], ptr [[B_ADDR]], align 8, !tbaa [[TBAA9 ]]
76
- // CHECK-NEXT: [[TMP0:%.*]] = load double, ptr [[A_ADDR]], align 8, !tbaa [[TBAA9 ]]
77
- // CHECK-NEXT: [[TMP1:%.*]] = load double, ptr [[B_ADDR]], align 8, !tbaa [[TBAA9 ]]
106
+ // CHECK-NEXT: store double [[A]], ptr [[A_ADDR]], align 8, !tbaa [[TBAA11 :![0-9]+]]
107
+ // CHECK-NEXT: store double [[B]], ptr [[B_ADDR]], align 8, !tbaa [[TBAA11 ]]
108
+ // CHECK-NEXT: [[TMP0:%.*]] = load double, ptr [[A_ADDR]], align 8, !tbaa [[TBAA11 ]]
109
+ // CHECK-NEXT: [[TMP1:%.*]] = load double, ptr [[B_ADDR]], align 8, !tbaa [[TBAA11 ]]
78
110
// CHECK-NEXT: [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[TMP0]], double [[TMP1]])
79
111
// CHECK-NEXT: ret double [[TMP2]]
80
112
//
81
113
double fmin64 (double a , double b ) {
82
114
return __builtin_minnum (a , b );
83
115
}
84
- // CHECK-LABEL: define dso_local <2 x double> @pfmin64 (
116
+ // CHECK-LABEL: define dso_local noundef <2 x double> @_Z7pfmin64Dv2_dS_ (
85
117
// CHECK-SAME: <2 x double> noundef [[A:%.*]], <2 x double> noundef [[B:%.*]]) #[[ATTR2]] {
86
118
// CHECK-NEXT: [[ENTRY:.*:]]
87
119
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca <2 x double>, align 16
@@ -97,22 +129,22 @@ double2 pfmin64(double2 a, double2 b) {
97
129
return __builtin_elementwise_minnum (a , b );
98
130
}
99
131
100
- // CHECK-LABEL: define dso_local x86_fp80 @fmin80 (
132
+ // CHECK-LABEL: define dso_local noundef x86_fp80 @_Z6fmin80ee (
101
133
// CHECK-SAME: x86_fp80 noundef [[A:%.*]], x86_fp80 noundef [[B:%.*]]) #[[ATTR0]] {
102
134
// CHECK-NEXT: [[ENTRY:.*:]]
103
135
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca x86_fp80, align 16
104
136
// CHECK-NEXT: [[B_ADDR:%.*]] = alloca x86_fp80, align 16
105
- // CHECK-NEXT: store x86_fp80 [[A]], ptr [[A_ADDR]], align 16, !tbaa [[TBAA11 :![0-9]+]]
106
- // CHECK-NEXT: store x86_fp80 [[B]], ptr [[B_ADDR]], align 16, !tbaa [[TBAA11 ]]
107
- // CHECK-NEXT: [[TMP0:%.*]] = load x86_fp80, ptr [[A_ADDR]], align 16, !tbaa [[TBAA11 ]]
108
- // CHECK-NEXT: [[TMP1:%.*]] = load x86_fp80, ptr [[B_ADDR]], align 16, !tbaa [[TBAA11 ]]
137
+ // CHECK-NEXT: store x86_fp80 [[A]], ptr [[A_ADDR]], align 16, !tbaa [[TBAA13 :![0-9]+]]
138
+ // CHECK-NEXT: store x86_fp80 [[B]], ptr [[B_ADDR]], align 16, !tbaa [[TBAA13 ]]
139
+ // CHECK-NEXT: [[TMP0:%.*]] = load x86_fp80, ptr [[A_ADDR]], align 16, !tbaa [[TBAA13 ]]
140
+ // CHECK-NEXT: [[TMP1:%.*]] = load x86_fp80, ptr [[B_ADDR]], align 16, !tbaa [[TBAA13 ]]
109
141
// CHECK-NEXT: [[TMP2:%.*]] = call x86_fp80 @llvm.minnum.f80(x86_fp80 [[TMP0]], x86_fp80 [[TMP1]])
110
142
// CHECK-NEXT: ret x86_fp80 [[TMP2]]
111
143
//
112
144
long double fmin80 (long double a , long double b ) {
113
145
return __builtin_minnum (a , b );
114
146
}
115
- // CHECK-LABEL: define dso_local <2 x x86_fp80> @pfmin80 (
147
+ // CHECK-LABEL: define dso_local noundef <2 x x86_fp80> @_Z7pfmin80Dv2_eS_ (
116
148
// CHECK-SAME: ptr noundef byval(<2 x x86_fp80>) align 32 [[TMP0:%.*]], ptr noundef byval(<2 x x86_fp80>) align 32 [[TMP1:%.*]]) #[[ATTR3:[0-9]+]] {
117
149
// CHECK-NEXT: [[ENTRY:.*:]]
118
150
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca <2 x x86_fp80>, align 32
@@ -130,7 +162,7 @@ ldouble2 pfmin80(ldouble2 a, ldouble2 b) {
130
162
return __builtin_elementwise_minnum (a , b );
131
163
}
132
164
133
- // CHECK-LABEL: define dso_local half @fmax16 (
165
+ // CHECK-LABEL: define dso_local noundef half @_Z6fmax16DF16_DF16_ (
134
166
// CHECK-SAME: half noundef [[A:%.*]], half noundef [[B:%.*]]) #[[ATTR0]] {
135
167
// CHECK-NEXT: [[ENTRY:.*:]]
136
168
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca half, align 2
@@ -145,7 +177,7 @@ ldouble2 pfmin80(ldouble2 a, ldouble2 b) {
145
177
_Float16 fmax16 (_Float16 a , _Float16 b ) {
146
178
return __builtin_maxnum (a , b );
147
179
}
148
- // CHECK-LABEL: define dso_local <8 x half> @pfmax16 (
180
+ // CHECK-LABEL: define dso_local noundef <8 x half> @_Z7pfmax16Dv8_DF16_S_ (
149
181
// CHECK-SAME: <8 x half> noundef [[A:%.*]], <8 x half> noundef [[B:%.*]]) #[[ATTR2]] {
150
182
// CHECK-NEXT: [[ENTRY:.*:]]
151
183
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca <8 x half>, align 16
@@ -160,22 +192,52 @@ _Float16 fmax16(_Float16 a, _Float16 b) {
160
192
half8 pfmax16 (half8 a , half8 b ) {
161
193
return __builtin_elementwise_maxnum (a , b );
162
194
}
163
- // CHECK-LABEL: define dso_local float @fmax32(
195
+ // CHECK-LABEL: define dso_local noundef bfloat @_Z7fmax16bDF16bDF16b(
196
+ // CHECK-SAME: bfloat noundef [[A:%.*]], bfloat noundef [[B:%.*]]) #[[ATTR0]] {
197
+ // CHECK-NEXT: [[ENTRY:.*:]]
198
+ // CHECK-NEXT: [[A_ADDR:%.*]] = alloca bfloat, align 2
199
+ // CHECK-NEXT: [[B_ADDR:%.*]] = alloca bfloat, align 2
200
+ // CHECK-NEXT: store bfloat [[A]], ptr [[A_ADDR]], align 2, !tbaa [[TBAA7]]
201
+ // CHECK-NEXT: store bfloat [[B]], ptr [[B_ADDR]], align 2, !tbaa [[TBAA7]]
202
+ // CHECK-NEXT: [[TMP0:%.*]] = load bfloat, ptr [[A_ADDR]], align 2, !tbaa [[TBAA7]]
203
+ // CHECK-NEXT: [[TMP1:%.*]] = load bfloat, ptr [[B_ADDR]], align 2, !tbaa [[TBAA7]]
204
+ // CHECK-NEXT: [[TMP2:%.*]] = call bfloat @llvm.maxnum.bf16(bfloat [[TMP0]], bfloat [[TMP1]])
205
+ // CHECK-NEXT: ret bfloat [[TMP2]]
206
+ //
207
+ __bf16 fmax16b (__bf16 a , __bf16 b ) {
208
+ return __builtin_maxnum (a , b );
209
+ }
210
+ // CHECK-LABEL: define dso_local noundef <8 x bfloat> @_Z8pfmax16bDv8_DF16bS_(
211
+ // CHECK-SAME: <8 x bfloat> noundef [[A:%.*]], <8 x bfloat> noundef [[B:%.*]]) #[[ATTR2]] {
212
+ // CHECK-NEXT: [[ENTRY:.*:]]
213
+ // CHECK-NEXT: [[A_ADDR:%.*]] = alloca <8 x bfloat>, align 16
214
+ // CHECK-NEXT: [[B_ADDR:%.*]] = alloca <8 x bfloat>, align 16
215
+ // CHECK-NEXT: store <8 x bfloat> [[A]], ptr [[A_ADDR]], align 16, !tbaa [[TBAA6]]
216
+ // CHECK-NEXT: store <8 x bfloat> [[B]], ptr [[B_ADDR]], align 16, !tbaa [[TBAA6]]
217
+ // CHECK-NEXT: [[TMP0:%.*]] = load <8 x bfloat>, ptr [[A_ADDR]], align 16, !tbaa [[TBAA6]]
218
+ // CHECK-NEXT: [[TMP1:%.*]] = load <8 x bfloat>, ptr [[B_ADDR]], align 16, !tbaa [[TBAA6]]
219
+ // CHECK-NEXT: [[ELT_MAXNUM:%.*]] = call <8 x bfloat> @llvm.maxnum.v8bf16(<8 x bfloat> [[TMP0]], <8 x bfloat> [[TMP1]])
220
+ // CHECK-NEXT: ret <8 x bfloat> [[ELT_MAXNUM]]
221
+ //
222
+ bf16x8 pfmax16b (bf16x8 a , bf16x8 b ) {
223
+ return __builtin_elementwise_maxnum (a , b );
224
+ }
225
+ // CHECK-LABEL: define dso_local noundef float @_Z6fmax32ff(
164
226
// CHECK-SAME: float noundef [[A:%.*]], float noundef [[B:%.*]]) #[[ATTR0]] {
165
227
// CHECK-NEXT: [[ENTRY:.*:]]
166
228
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca float, align 4
167
229
// CHECK-NEXT: [[B_ADDR:%.*]] = alloca float, align 4
168
- // CHECK-NEXT: store float [[A]], ptr [[A_ADDR]], align 4, !tbaa [[TBAA7 ]]
169
- // CHECK-NEXT: store float [[B]], ptr [[B_ADDR]], align 4, !tbaa [[TBAA7 ]]
170
- // CHECK-NEXT: [[TMP0:%.*]] = load float, ptr [[A_ADDR]], align 4, !tbaa [[TBAA7 ]]
171
- // CHECK-NEXT: [[TMP1:%.*]] = load float, ptr [[B_ADDR]], align 4, !tbaa [[TBAA7 ]]
230
+ // CHECK-NEXT: store float [[A]], ptr [[A_ADDR]], align 4, !tbaa [[TBAA9 ]]
231
+ // CHECK-NEXT: store float [[B]], ptr [[B_ADDR]], align 4, !tbaa [[TBAA9 ]]
232
+ // CHECK-NEXT: [[TMP0:%.*]] = load float, ptr [[A_ADDR]], align 4, !tbaa [[TBAA9 ]]
233
+ // CHECK-NEXT: [[TMP1:%.*]] = load float, ptr [[B_ADDR]], align 4, !tbaa [[TBAA9 ]]
172
234
// CHECK-NEXT: [[TMP2:%.*]] = call float @llvm.maxnum.f32(float [[TMP0]], float [[TMP1]])
173
235
// CHECK-NEXT: ret float [[TMP2]]
174
236
//
175
237
float fmax32 (float a , float b ) {
176
238
return __builtin_maxnum (a , b );
177
239
}
178
- // CHECK-LABEL: define dso_local <4 x float> @pfmax32 (
240
+ // CHECK-LABEL: define dso_local noundef <4 x float> @_Z7pfmax32Dv4_fS_ (
179
241
// CHECK-SAME: <4 x float> noundef [[A:%.*]], <4 x float> noundef [[B:%.*]]) #[[ATTR2]] {
180
242
// CHECK-NEXT: [[ENTRY:.*:]]
181
243
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca <4 x float>, align 16
@@ -190,22 +252,22 @@ float fmax32(float a, float b) {
190
252
float4 pfmax32 (float4 a , float4 b ) {
191
253
return __builtin_elementwise_maxnum (a , b );
192
254
}
193
- // CHECK-LABEL: define dso_local double @fmax64 (
255
+ // CHECK-LABEL: define dso_local noundef double @_Z6fmax64dd (
194
256
// CHECK-SAME: double noundef [[A:%.*]], double noundef [[B:%.*]]) #[[ATTR0]] {
195
257
// CHECK-NEXT: [[ENTRY:.*:]]
196
258
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca double, align 8
197
259
// CHECK-NEXT: [[B_ADDR:%.*]] = alloca double, align 8
198
- // CHECK-NEXT: store double [[A]], ptr [[A_ADDR]], align 8, !tbaa [[TBAA9 ]]
199
- // CHECK-NEXT: store double [[B]], ptr [[B_ADDR]], align 8, !tbaa [[TBAA9 ]]
200
- // CHECK-NEXT: [[TMP0:%.*]] = load double, ptr [[A_ADDR]], align 8, !tbaa [[TBAA9 ]]
201
- // CHECK-NEXT: [[TMP1:%.*]] = load double, ptr [[B_ADDR]], align 8, !tbaa [[TBAA9 ]]
260
+ // CHECK-NEXT: store double [[A]], ptr [[A_ADDR]], align 8, !tbaa [[TBAA11 ]]
261
+ // CHECK-NEXT: store double [[B]], ptr [[B_ADDR]], align 8, !tbaa [[TBAA11 ]]
262
+ // CHECK-NEXT: [[TMP0:%.*]] = load double, ptr [[A_ADDR]], align 8, !tbaa [[TBAA11 ]]
263
+ // CHECK-NEXT: [[TMP1:%.*]] = load double, ptr [[B_ADDR]], align 8, !tbaa [[TBAA11 ]]
202
264
// CHECK-NEXT: [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[TMP0]], double [[TMP1]])
203
265
// CHECK-NEXT: ret double [[TMP2]]
204
266
//
205
267
double fmax64 (double a , double b ) {
206
268
return __builtin_maxnum (a , b );
207
269
}
208
- // CHECK-LABEL: define dso_local <2 x double> @pfmax64 (
270
+ // CHECK-LABEL: define dso_local noundef <2 x double> @_Z7pfmax64Dv2_dS_ (
209
271
// CHECK-SAME: <2 x double> noundef [[A:%.*]], <2 x double> noundef [[B:%.*]]) #[[ATTR2]] {
210
272
// CHECK-NEXT: [[ENTRY:.*:]]
211
273
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca <2 x double>, align 16
@@ -221,22 +283,22 @@ double2 pfmax64(double2 a, double2 b) {
221
283
return __builtin_elementwise_maxnum (a , b );
222
284
}
223
285
224
- // CHECK-LABEL: define dso_local x86_fp80 @fmax80 (
286
+ // CHECK-LABEL: define dso_local noundef x86_fp80 @_Z6fmax80ee (
225
287
// CHECK-SAME: x86_fp80 noundef [[A:%.*]], x86_fp80 noundef [[B:%.*]]) #[[ATTR0]] {
226
288
// CHECK-NEXT: [[ENTRY:.*:]]
227
289
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca x86_fp80, align 16
228
290
// CHECK-NEXT: [[B_ADDR:%.*]] = alloca x86_fp80, align 16
229
- // CHECK-NEXT: store x86_fp80 [[A]], ptr [[A_ADDR]], align 16, !tbaa [[TBAA11 ]]
230
- // CHECK-NEXT: store x86_fp80 [[B]], ptr [[B_ADDR]], align 16, !tbaa [[TBAA11 ]]
231
- // CHECK-NEXT: [[TMP0:%.*]] = load x86_fp80, ptr [[A_ADDR]], align 16, !tbaa [[TBAA11 ]]
232
- // CHECK-NEXT: [[TMP1:%.*]] = load x86_fp80, ptr [[B_ADDR]], align 16, !tbaa [[TBAA11 ]]
291
+ // CHECK-NEXT: store x86_fp80 [[A]], ptr [[A_ADDR]], align 16, !tbaa [[TBAA13 ]]
292
+ // CHECK-NEXT: store x86_fp80 [[B]], ptr [[B_ADDR]], align 16, !tbaa [[TBAA13 ]]
293
+ // CHECK-NEXT: [[TMP0:%.*]] = load x86_fp80, ptr [[A_ADDR]], align 16, !tbaa [[TBAA13 ]]
294
+ // CHECK-NEXT: [[TMP1:%.*]] = load x86_fp80, ptr [[B_ADDR]], align 16, !tbaa [[TBAA13 ]]
233
295
// CHECK-NEXT: [[TMP2:%.*]] = call x86_fp80 @llvm.maxnum.f80(x86_fp80 [[TMP0]], x86_fp80 [[TMP1]])
234
296
// CHECK-NEXT: ret x86_fp80 [[TMP2]]
235
297
//
236
298
long double fmax80 (long double a , long double b ) {
237
299
return __builtin_maxnum (a , b );
238
300
}
239
- // CHECK-LABEL: define dso_local <2 x x86_fp80> @pfmax80 (
301
+ // CHECK-LABEL: define dso_local noundef <2 x x86_fp80> @_Z7pfmax80Dv2_eS_ (
240
302
// CHECK-SAME: ptr noundef byval(<2 x x86_fp80>) align 32 [[TMP0:%.*]], ptr noundef byval(<2 x x86_fp80>) align 32 [[TMP1:%.*]]) #[[ATTR3]] {
241
303
// CHECK-NEXT: [[ENTRY:.*:]]
242
304
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca <2 x x86_fp80>, align 32
@@ -258,12 +320,14 @@ ldouble2 pfmax80(ldouble2 a, ldouble2 b) {
258
320
// CHECK: [[TBAA2]] = !{[[META3:![0-9]+]], [[META3]], i64 0}
259
321
// CHECK: [[META3]] = !{!"_Float16", [[META4:![0-9]+]], i64 0}
260
322
// CHECK: [[META4]] = !{!"omnipotent char", [[META5:![0-9]+]], i64 0}
261
- // CHECK: [[META5]] = !{!"Simple C/C ++ TBAA"}
323
+ // CHECK: [[META5]] = !{!"Simple C++ TBAA"}
262
324
// CHECK: [[TBAA6]] = !{[[META4]], [[META4]], i64 0}
263
325
// CHECK: [[TBAA7]] = !{[[META8:![0-9]+]], [[META8]], i64 0}
264
- // CHECK: [[META8]] = !{!"float ", [[META4]], i64 0}
326
+ // CHECK: [[META8]] = !{!"__bf16 ", [[META4]], i64 0}
265
327
// CHECK: [[TBAA9]] = !{[[META10:![0-9]+]], [[META10]], i64 0}
266
- // CHECK: [[META10]] = !{!"double ", [[META4]], i64 0}
328
+ // CHECK: [[META10]] = !{!"float ", [[META4]], i64 0}
267
329
// CHECK: [[TBAA11]] = !{[[META12:![0-9]+]], [[META12]], i64 0}
268
- // CHECK: [[META12]] = !{!"long double", [[META4]], i64 0}
330
+ // CHECK: [[META12]] = !{!"double", [[META4]], i64 0}
331
+ // CHECK: [[TBAA13]] = !{[[META14:![0-9]+]], [[META14]], i64 0}
332
+ // CHECK: [[META14]] = !{!"long double", [[META4]], i64 0}
269
333
//.
0 commit comments