1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
2
; RUN: llc --mtriple=aarch64 --mattr=+fullfp16 < %s | FileCheck %s --check-prefix=AARCH64
3
3
4
- define <2 x double > @max_v2f64 (<2 x double > %a , <2 x double > %b ) {
5
- ; AARCH64-LABEL: max_v2f64 :
4
+ define <2 x double > @max_nnan_v2f64 (<2 x double > %a , <2 x double > %b ) {
5
+ ; AARCH64-LABEL: max_nnan_v2f64 :
6
6
; AARCH64: // %bb.0: // %entry
7
7
; AARCH64-NEXT: fmaxnm v0.2d, v0.2d, v1.2d
8
8
; AARCH64-NEXT: ret
@@ -11,29 +11,62 @@ entry:
11
11
ret <2 x double > %c
12
12
}
13
13
14
- define <4 x float > @max_v4f32 (<4 x float > %a , <4 x float > %b ) {
15
- ; AARCH64-LABEL: max_v4f32 :
14
+ define <4 x float > @max_nnan_v4f32 (<4 x float > %a , <4 x float > %b ) {
15
+ ; AARCH64-LABEL: max_nnan_v4f32 :
16
16
; AARCH64: // %bb.0: // %entry
17
17
; AARCH64-NEXT: fmaxnm v0.4s, v0.4s, v1.4s
18
18
; AARCH64-NEXT: ret
19
19
entry:
20
- %c = call nnan <4 x float > @llvm.maximumnum.v2f64 (<4 x float > %a , <4 x float > %b )
20
+ %c = call nnan <4 x float > @llvm.maximumnum.v4f32 (<4 x float > %a , <4 x float > %b )
21
21
ret <4 x float > %c
22
22
}
23
23
24
-
25
- define <8 x half > @max_v8f16 (<8 x half > %a , <8 x half > %b ) {
26
- ; AARCH64-LABEL: max_v8f16:
24
+ define <8 x half > @max_nnan_v8f16 (<8 x half > %a , <8 x half > %b ) {
25
+ ; AARCH64-LABEL: max_nnan_v8f16:
27
26
; AARCH64: // %bb.0: // %entry
28
27
; AARCH64-NEXT: fmaxnm v0.8h, v0.8h, v1.8h
29
28
; AARCH64-NEXT: ret
30
29
entry:
31
- %c = call nnan <8 x half > @llvm.maximumnum.v4f16 (<8 x half > %a , <8 x half > %b )
30
+ %c = call nnan <8 x half > @llvm.maximumnum.v8f16 (<8 x half > %a , <8 x half > %b )
32
31
ret <8 x half > %c
33
32
}
34
33
35
- define double @max_f64 (double %a , double %b ) {
36
- ; AARCH64-LABEL: max_f64:
34
+ define <4 x double > @max_nnan_v4f64 (<4 x double > %a , <4 x double > %b ) {
35
+ ; AARCH64-LABEL: max_nnan_v4f64:
36
+ ; AARCH64: // %bb.0: // %entry
37
+ ; AARCH64-NEXT: fmaxnm v1.2d, v1.2d, v3.2d
38
+ ; AARCH64-NEXT: fmaxnm v0.2d, v0.2d, v2.2d
39
+ ; AARCH64-NEXT: ret
40
+ entry:
41
+ %c = call nnan <4 x double > @llvm.maximumnum.v4f64 (<4 x double > %a , <4 x double > %b )
42
+ ret <4 x double > %c
43
+ }
44
+
45
+ define <8 x float > @max_nnan_v8f32 (<8 x float > %a , <8 x float > %b ) {
46
+ ; AARCH64-LABEL: max_nnan_v8f32:
47
+ ; AARCH64: // %bb.0: // %entry
48
+ ; AARCH64-NEXT: fmaxnm v1.4s, v1.4s, v3.4s
49
+ ; AARCH64-NEXT: fmaxnm v0.4s, v0.4s, v2.4s
50
+ ; AARCH64-NEXT: ret
51
+ entry:
52
+ %c = call nnan <8 x float > @llvm.maximumnum.v8f32 (<8 x float > %a , <8 x float > %b )
53
+ ret <8 x float > %c
54
+ }
55
+
56
+ define <16 x half > @max_nnan_v16f16 (<16 x half > %a , <16 x half > %b ) {
57
+ ; AARCH64-LABEL: max_nnan_v16f16:
58
+ ; AARCH64: // %bb.0: // %entry
59
+ ; AARCH64-NEXT: fmaxnm v1.8h, v1.8h, v3.8h
60
+ ; AARCH64-NEXT: fmaxnm v0.8h, v0.8h, v2.8h
61
+ ; AARCH64-NEXT: ret
62
+ entry:
63
+ %c = call nnan <16 x half > @llvm.maximumnum.v16f16 (<16 x half > %a , <16 x half > %b )
64
+ ret <16 x half > %c
65
+ }
66
+
67
+
68
+ define double @max_nnan_f64 (double %a , double %b ) {
69
+ ; AARCH64-LABEL: max_nnan_f64:
37
70
; AARCH64: // %bb.0: // %entry
38
71
; AARCH64-NEXT: fmaxnm d0, d0, d1
39
72
; AARCH64-NEXT: ret
42
75
ret double %c
43
76
}
44
77
45
- define float @max_f32 (float %a , float %b ) {
46
- ; AARCH64-LABEL: max_f32 :
78
+ define float @max_nnan_f32 (float %a , float %b ) {
79
+ ; AARCH64-LABEL: max_nnan_f32 :
47
80
; AARCH64: // %bb.0: // %entry
48
81
; AARCH64-NEXT: fmaxnm s0, s0, s1
49
82
; AARCH64-NEXT: ret
52
85
ret float %c
53
86
}
54
87
55
- define half @max_f16 (half %a , half %b ) {
56
- ; AARCH64-LABEL: max_f16 :
88
+ define half @max_nnan_f16 (half %a , half %b ) {
89
+ ; AARCH64-LABEL: max_nnan_f16 :
57
90
; AARCH64: // %bb.0: // %entry
58
91
; AARCH64-NEXT: fmaxnm h0, h0, h1
59
92
; AARCH64-NEXT: ret
62
95
ret half %c
63
96
}
64
97
65
- define <2 x double > @min_v2f64 (<2 x double > %a , <2 x double > %b ) {
66
- ; AARCH64-LABEL: min_v2f64 :
98
+ define <2 x double > @min_nnan_v2f64 (<2 x double > %a , <2 x double > %b ) {
99
+ ; AARCH64-LABEL: min_nnan_v2f64 :
67
100
; AARCH64: // %bb.0: // %entry
68
101
; AARCH64-NEXT: fminnm v0.2d, v0.2d, v1.2d
69
102
; AARCH64-NEXT: ret
@@ -72,29 +105,61 @@ entry:
72
105
ret <2 x double > %c
73
106
}
74
107
75
- define <4 x float > @min_v4f32 (<4 x float > %a , <4 x float > %b ) {
76
- ; AARCH64-LABEL: min_v4f32 :
108
+ define <4 x float > @min_nnan_v4f32 (<4 x float > %a , <4 x float > %b ) {
109
+ ; AARCH64-LABEL: min_nnan_v4f32 :
77
110
; AARCH64: // %bb.0: // %entry
78
111
; AARCH64-NEXT: fminnm v0.4s, v0.4s, v1.4s
79
112
; AARCH64-NEXT: ret
80
113
entry:
81
- %c = call nnan <4 x float > @llvm.minimumnum.v2f64 (<4 x float > %a , <4 x float > %b )
114
+ %c = call nnan <4 x float > @llvm.minimumnum.v4f32 (<4 x float > %a , <4 x float > %b )
82
115
ret <4 x float > %c
83
116
}
84
117
85
-
86
- define <8 x half > @min_v8f16 (<8 x half > %a , <8 x half > %b ) {
87
- ; AARCH64-LABEL: min_v8f16:
118
+ define <8 x half > @min_nnan_v8f16 (<8 x half > %a , <8 x half > %b ) {
119
+ ; AARCH64-LABEL: min_nnan_v8f16:
88
120
; AARCH64: // %bb.0: // %entry
89
121
; AARCH64-NEXT: fminnm v0.8h, v0.8h, v1.8h
90
122
; AARCH64-NEXT: ret
91
123
entry:
92
- %c = call nnan <8 x half > @llvm.minimumnum.v4f16 (<8 x half > %a , <8 x half > %b )
124
+ %c = call nnan <8 x half > @llvm.minimumnum.v8f16 (<8 x half > %a , <8 x half > %b )
93
125
ret <8 x half > %c
94
126
}
95
127
96
- define double @min_f64 (double %a , double %b ) {
97
- ; AARCH64-LABEL: min_f64:
128
+ define <4 x double > @min_nnan_v4f64 (<4 x double > %a , <4 x double > %b ) {
129
+ ; AARCH64-LABEL: min_nnan_v4f64:
130
+ ; AARCH64: // %bb.0: // %entry
131
+ ; AARCH64-NEXT: fminnm v1.2d, v1.2d, v3.2d
132
+ ; AARCH64-NEXT: fminnm v0.2d, v0.2d, v2.2d
133
+ ; AARCH64-NEXT: ret
134
+ entry:
135
+ %c = call nnan <4 x double > @llvm.minimumnum.v4f64 (<4 x double > %a , <4 x double > %b )
136
+ ret <4 x double > %c
137
+ }
138
+
139
+ define <8 x float > @min_nnan_v8f32 (<8 x float > %a , <8 x float > %b ) {
140
+ ; AARCH64-LABEL: min_nnan_v8f32:
141
+ ; AARCH64: // %bb.0: // %entry
142
+ ; AARCH64-NEXT: fminnm v1.4s, v1.4s, v3.4s
143
+ ; AARCH64-NEXT: fminnm v0.4s, v0.4s, v2.4s
144
+ ; AARCH64-NEXT: ret
145
+ entry:
146
+ %c = call nnan <8 x float > @llvm.minimumnum.v8f32 (<8 x float > %a , <8 x float > %b )
147
+ ret <8 x float > %c
148
+ }
149
+
150
+ define <16 x half > @min_nnan_v16f16 (<16 x half > %a , <16 x half > %b ) {
151
+ ; AARCH64-LABEL: min_nnan_v16f16:
152
+ ; AARCH64: // %bb.0: // %entry
153
+ ; AARCH64-NEXT: fminnm v1.8h, v1.8h, v3.8h
154
+ ; AARCH64-NEXT: fminnm v0.8h, v0.8h, v2.8h
155
+ ; AARCH64-NEXT: ret
156
+ entry:
157
+ %c = call nnan <16 x half > @llvm.minimumnum.v16f16 (<16 x half > %a , <16 x half > %b )
158
+ ret <16 x half > %c
159
+ }
160
+
161
+ define double @min_nnan_f64 (double %a , double %b ) {
162
+ ; AARCH64-LABEL: min_nnan_f64:
98
163
; AARCH64: // %bb.0: // %entry
99
164
; AARCH64-NEXT: fminnm d0, d0, d1
100
165
; AARCH64-NEXT: ret
@@ -103,8 +168,8 @@ entry:
103
168
ret double %c
104
169
}
105
170
106
- define float @min_f32 (float %a , float %b ) {
107
- ; AARCH64-LABEL: min_f32 :
171
+ define float @min_nnan_f32 (float %a , float %b ) {
172
+ ; AARCH64-LABEL: min_nnan_f32 :
108
173
; AARCH64: // %bb.0: // %entry
109
174
; AARCH64-NEXT: fminnm s0, s0, s1
110
175
; AARCH64-NEXT: ret
@@ -113,8 +178,8 @@ entry:
113
178
ret float %c
114
179
}
115
180
116
- define half @min_f16 (half %a , half %b ) {
117
- ; AARCH64-LABEL: min_f16 :
181
+ define half @min_nnan_f16 (half %a , half %b ) {
182
+ ; AARCH64-LABEL: min_nnan_f16 :
118
183
; AARCH64: // %bb.0: // %entry
119
184
; AARCH64-NEXT: fminnm h0, h0, h1
120
185
; AARCH64-NEXT: ret
0 commit comments