Skip to content

Commit a74ef8f

Browse files
committed
Add bfloat cases
1 parent 2e4a8c4 commit a74ef8f

File tree

1 file changed

+109
-45
lines changed

1 file changed

+109
-45
lines changed

clang/test/CodeGen/builtin-maxnum-minnum.c

Lines changed: 109 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
// 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
33

44
typedef _Float16 half8 __attribute__((ext_vector_type(8)));
5+
typedef __bf16 bf16x8 __attribute__((ext_vector_type(8)));
56
typedef float float4 __attribute__((ext_vector_type(4)));
67
typedef double double2 __attribute__((ext_vector_type(2)));
78
typedef long double ldouble2 __attribute__((ext_vector_type(2)));
89

9-
// CHECK-LABEL: define dso_local half @fmin16(
10+
// CHECK-LABEL: define dso_local noundef half @_Z6fmin16DF16_DF16_(
1011
// CHECK-SAME: half noundef [[A:%.*]], half noundef [[B:%.*]]) #[[ATTR0:[0-9]+]] {
1112
// CHECK-NEXT: [[ENTRY:.*:]]
1213
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca half, align 2
@@ -21,7 +22,7 @@ typedef long double ldouble2 __attribute__((ext_vector_type(2)));
2122
_Float16 fmin16(_Float16 a, _Float16 b) {
2223
return __builtin_minnum(a, b);
2324
}
24-
// CHECK-LABEL: define dso_local <8 x half> @pfmin16(
25+
// CHECK-LABEL: define dso_local noundef <8 x half> @_Z7pfmin16Dv8_DF16_S_(
2526
// CHECK-SAME: <8 x half> noundef [[A:%.*]], <8 x half> noundef [[B:%.*]]) #[[ATTR2:[0-9]+]] {
2627
// CHECK-NEXT: [[ENTRY:.*:]]
2728
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca <8 x half>, align 16
@@ -36,22 +37,53 @@ _Float16 fmin16(_Float16 a, _Float16 b) {
3637
half8 pfmin16(half8 a, half8 b) {
3738
return __builtin_elementwise_minnum(a, b);
3839
}
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(
4072
// CHECK-SAME: float noundef [[A:%.*]], float noundef [[B:%.*]]) #[[ATTR0]] {
4173
// CHECK-NEXT: [[ENTRY:.*:]]
4274
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca float, align 4
4375
// 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]]
4880
// CHECK-NEXT: [[TMP2:%.*]] = call float @llvm.minnum.f32(float [[TMP0]], float [[TMP1]])
4981
// CHECK-NEXT: ret float [[TMP2]]
5082
//
5183
float fmin32(float a, float b) {
5284
return __builtin_minnum(a, b);
5385
}
54-
// CHECK-LABEL: define dso_local <4 x float> @pfmin32(
86+
// CHECK-LABEL: define dso_local noundef <4 x float> @_Z7pfmin32Dv4_fS_(
5587
// CHECK-SAME: <4 x float> noundef [[A:%.*]], <4 x float> noundef [[B:%.*]]) #[[ATTR2]] {
5688
// CHECK-NEXT: [[ENTRY:.*:]]
5789
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca <4 x float>, align 16
@@ -66,22 +98,22 @@ float fmin32(float a, float b) {
6698
float4 pfmin32(float4 a, float4 b) {
6799
return __builtin_elementwise_minnum(a, b);
68100
}
69-
// CHECK-LABEL: define dso_local double @fmin64(
101+
// CHECK-LABEL: define dso_local noundef double @_Z6fmin64dd(
70102
// CHECK-SAME: double noundef [[A:%.*]], double noundef [[B:%.*]]) #[[ATTR0]] {
71103
// CHECK-NEXT: [[ENTRY:.*:]]
72104
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca double, align 8
73105
// 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]]
78110
// CHECK-NEXT: [[TMP2:%.*]] = call double @llvm.minnum.f64(double [[TMP0]], double [[TMP1]])
79111
// CHECK-NEXT: ret double [[TMP2]]
80112
//
81113
double fmin64(double a, double b) {
82114
return __builtin_minnum(a, b);
83115
}
84-
// CHECK-LABEL: define dso_local <2 x double> @pfmin64(
116+
// CHECK-LABEL: define dso_local noundef <2 x double> @_Z7pfmin64Dv2_dS_(
85117
// CHECK-SAME: <2 x double> noundef [[A:%.*]], <2 x double> noundef [[B:%.*]]) #[[ATTR2]] {
86118
// CHECK-NEXT: [[ENTRY:.*:]]
87119
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca <2 x double>, align 16
@@ -97,22 +129,22 @@ double2 pfmin64(double2 a, double2 b) {
97129
return __builtin_elementwise_minnum(a, b);
98130
}
99131

100-
// CHECK-LABEL: define dso_local x86_fp80 @fmin80(
132+
// CHECK-LABEL: define dso_local noundef x86_fp80 @_Z6fmin80ee(
101133
// CHECK-SAME: x86_fp80 noundef [[A:%.*]], x86_fp80 noundef [[B:%.*]]) #[[ATTR0]] {
102134
// CHECK-NEXT: [[ENTRY:.*:]]
103135
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca x86_fp80, align 16
104136
// 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]]
109141
// CHECK-NEXT: [[TMP2:%.*]] = call x86_fp80 @llvm.minnum.f80(x86_fp80 [[TMP0]], x86_fp80 [[TMP1]])
110142
// CHECK-NEXT: ret x86_fp80 [[TMP2]]
111143
//
112144
long double fmin80(long double a, long double b) {
113145
return __builtin_minnum(a, b);
114146
}
115-
// CHECK-LABEL: define dso_local <2 x x86_fp80> @pfmin80(
147+
// CHECK-LABEL: define dso_local noundef <2 x x86_fp80> @_Z7pfmin80Dv2_eS_(
116148
// 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]+]] {
117149
// CHECK-NEXT: [[ENTRY:.*:]]
118150
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca <2 x x86_fp80>, align 32
@@ -130,7 +162,7 @@ ldouble2 pfmin80(ldouble2 a, ldouble2 b) {
130162
return __builtin_elementwise_minnum(a, b);
131163
}
132164

133-
// CHECK-LABEL: define dso_local half @fmax16(
165+
// CHECK-LABEL: define dso_local noundef half @_Z6fmax16DF16_DF16_(
134166
// CHECK-SAME: half noundef [[A:%.*]], half noundef [[B:%.*]]) #[[ATTR0]] {
135167
// CHECK-NEXT: [[ENTRY:.*:]]
136168
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca half, align 2
@@ -145,7 +177,7 @@ ldouble2 pfmin80(ldouble2 a, ldouble2 b) {
145177
_Float16 fmax16(_Float16 a, _Float16 b) {
146178
return __builtin_maxnum(a, b);
147179
}
148-
// CHECK-LABEL: define dso_local <8 x half> @pfmax16(
180+
// CHECK-LABEL: define dso_local noundef <8 x half> @_Z7pfmax16Dv8_DF16_S_(
149181
// CHECK-SAME: <8 x half> noundef [[A:%.*]], <8 x half> noundef [[B:%.*]]) #[[ATTR2]] {
150182
// CHECK-NEXT: [[ENTRY:.*:]]
151183
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca <8 x half>, align 16
@@ -160,22 +192,52 @@ _Float16 fmax16(_Float16 a, _Float16 b) {
160192
half8 pfmax16(half8 a, half8 b) {
161193
return __builtin_elementwise_maxnum(a, b);
162194
}
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(
164226
// CHECK-SAME: float noundef [[A:%.*]], float noundef [[B:%.*]]) #[[ATTR0]] {
165227
// CHECK-NEXT: [[ENTRY:.*:]]
166228
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca float, align 4
167229
// 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]]
172234
// CHECK-NEXT: [[TMP2:%.*]] = call float @llvm.maxnum.f32(float [[TMP0]], float [[TMP1]])
173235
// CHECK-NEXT: ret float [[TMP2]]
174236
//
175237
float fmax32(float a, float b) {
176238
return __builtin_maxnum(a, b);
177239
}
178-
// CHECK-LABEL: define dso_local <4 x float> @pfmax32(
240+
// CHECK-LABEL: define dso_local noundef <4 x float> @_Z7pfmax32Dv4_fS_(
179241
// CHECK-SAME: <4 x float> noundef [[A:%.*]], <4 x float> noundef [[B:%.*]]) #[[ATTR2]] {
180242
// CHECK-NEXT: [[ENTRY:.*:]]
181243
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca <4 x float>, align 16
@@ -190,22 +252,22 @@ float fmax32(float a, float b) {
190252
float4 pfmax32(float4 a, float4 b) {
191253
return __builtin_elementwise_maxnum(a, b);
192254
}
193-
// CHECK-LABEL: define dso_local double @fmax64(
255+
// CHECK-LABEL: define dso_local noundef double @_Z6fmax64dd(
194256
// CHECK-SAME: double noundef [[A:%.*]], double noundef [[B:%.*]]) #[[ATTR0]] {
195257
// CHECK-NEXT: [[ENTRY:.*:]]
196258
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca double, align 8
197259
// 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]]
202264
// CHECK-NEXT: [[TMP2:%.*]] = call double @llvm.maxnum.f64(double [[TMP0]], double [[TMP1]])
203265
// CHECK-NEXT: ret double [[TMP2]]
204266
//
205267
double fmax64(double a, double b) {
206268
return __builtin_maxnum(a, b);
207269
}
208-
// CHECK-LABEL: define dso_local <2 x double> @pfmax64(
270+
// CHECK-LABEL: define dso_local noundef <2 x double> @_Z7pfmax64Dv2_dS_(
209271
// CHECK-SAME: <2 x double> noundef [[A:%.*]], <2 x double> noundef [[B:%.*]]) #[[ATTR2]] {
210272
// CHECK-NEXT: [[ENTRY:.*:]]
211273
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca <2 x double>, align 16
@@ -221,22 +283,22 @@ double2 pfmax64(double2 a, double2 b) {
221283
return __builtin_elementwise_maxnum(a, b);
222284
}
223285

224-
// CHECK-LABEL: define dso_local x86_fp80 @fmax80(
286+
// CHECK-LABEL: define dso_local noundef x86_fp80 @_Z6fmax80ee(
225287
// CHECK-SAME: x86_fp80 noundef [[A:%.*]], x86_fp80 noundef [[B:%.*]]) #[[ATTR0]] {
226288
// CHECK-NEXT: [[ENTRY:.*:]]
227289
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca x86_fp80, align 16
228290
// 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]]
233295
// CHECK-NEXT: [[TMP2:%.*]] = call x86_fp80 @llvm.maxnum.f80(x86_fp80 [[TMP0]], x86_fp80 [[TMP1]])
234296
// CHECK-NEXT: ret x86_fp80 [[TMP2]]
235297
//
236298
long double fmax80(long double a, long double b) {
237299
return __builtin_maxnum(a, b);
238300
}
239-
// CHECK-LABEL: define dso_local <2 x x86_fp80> @pfmax80(
301+
// CHECK-LABEL: define dso_local noundef <2 x x86_fp80> @_Z7pfmax80Dv2_eS_(
240302
// CHECK-SAME: ptr noundef byval(<2 x x86_fp80>) align 32 [[TMP0:%.*]], ptr noundef byval(<2 x x86_fp80>) align 32 [[TMP1:%.*]]) #[[ATTR3]] {
241303
// CHECK-NEXT: [[ENTRY:.*:]]
242304
// CHECK-NEXT: [[A_ADDR:%.*]] = alloca <2 x x86_fp80>, align 32
@@ -258,12 +320,14 @@ ldouble2 pfmax80(ldouble2 a, ldouble2 b) {
258320
// CHECK: [[TBAA2]] = !{[[META3:![0-9]+]], [[META3]], i64 0}
259321
// CHECK: [[META3]] = !{!"_Float16", [[META4:![0-9]+]], i64 0}
260322
// CHECK: [[META4]] = !{!"omnipotent char", [[META5:![0-9]+]], i64 0}
261-
// CHECK: [[META5]] = !{!"Simple C/C++ TBAA"}
323+
// CHECK: [[META5]] = !{!"Simple C++ TBAA"}
262324
// CHECK: [[TBAA6]] = !{[[META4]], [[META4]], i64 0}
263325
// CHECK: [[TBAA7]] = !{[[META8:![0-9]+]], [[META8]], i64 0}
264-
// CHECK: [[META8]] = !{!"float", [[META4]], i64 0}
326+
// CHECK: [[META8]] = !{!"__bf16", [[META4]], i64 0}
265327
// CHECK: [[TBAA9]] = !{[[META10:![0-9]+]], [[META10]], i64 0}
266-
// CHECK: [[META10]] = !{!"double", [[META4]], i64 0}
328+
// CHECK: [[META10]] = !{!"float", [[META4]], i64 0}
267329
// 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}
269333
//.

0 commit comments

Comments
 (0)