@@ -30,10 +30,8 @@ define <2 x i32> @fabs_as_int_v2f32_noimplicitfloat(<2 x float> %x) noimplicitfl
30
30
define float @fabs_as_int_f32_castback (float %val ) {
31
31
; CHECK-LABEL: define float @fabs_as_int_f32_castback
32
32
; CHECK-SAME: (float [[VAL:%.*]]) {
33
- ; CHECK-NEXT: [[BITCAST:%.*]] = bitcast float [[VAL]] to i32
34
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[BITCAST]], 2147483647
35
- ; CHECK-NEXT: [[FABS:%.*]] = bitcast i32 [[AND]] to float
36
- ; CHECK-NEXT: ret float [[FABS]]
33
+ ; CHECK-NEXT: [[TMP1:%.*]] = call float @llvm.fabs.f32(float [[VAL]])
34
+ ; CHECK-NEXT: ret float [[TMP1]]
37
35
;
38
36
%bitcast = bitcast float %val to i32
39
37
%and = and i32 %bitcast , 2147483647
@@ -44,10 +42,8 @@ define float @fabs_as_int_f32_castback(float %val) {
44
42
define float @not_fabs_as_int_f32_castback_wrongconst (float %val ) {
45
43
; CHECK-LABEL: define float @not_fabs_as_int_f32_castback_wrongconst
46
44
; CHECK-SAME: (float [[VAL:%.*]]) {
47
- ; CHECK-NEXT: [[BITCAST:%.*]] = bitcast float [[VAL]] to i32
48
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[BITCAST]], 2147483647
49
- ; CHECK-NEXT: [[FABS:%.*]] = bitcast i32 [[AND]] to float
50
- ; CHECK-NEXT: ret float [[FABS]]
45
+ ; CHECK-NEXT: [[TMP1:%.*]] = call float @llvm.fabs.f32(float [[VAL]])
46
+ ; CHECK-NEXT: ret float [[TMP1]]
51
47
;
52
48
%bitcast = bitcast float %val to i32
53
49
%and = and i32 %bitcast , 2147483647
@@ -58,11 +54,9 @@ define float @not_fabs_as_int_f32_castback_wrongconst(float %val) {
58
54
define float @fabs_as_int_f32_castback_multi_use (float %val , ptr %ptr ) {
59
55
; CHECK-LABEL: define float @fabs_as_int_f32_castback_multi_use
60
56
; CHECK-SAME: (float [[VAL:%.*]], ptr [[PTR:%.*]]) {
61
- ; CHECK-NEXT: [[BITCAST:%.*]] = bitcast float [[VAL]] to i32
62
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[BITCAST]], 2147483647
63
- ; CHECK-NEXT: store i32 [[AND]], ptr [[PTR]], align 4
64
- ; CHECK-NEXT: [[FABS:%.*]] = bitcast i32 [[AND]] to float
65
- ; CHECK-NEXT: ret float [[FABS]]
57
+ ; CHECK-NEXT: [[TMP1:%.*]] = call float @llvm.fabs.f32(float [[VAL]])
58
+ ; CHECK-NEXT: store float [[TMP1]], ptr [[PTR]], align 4
59
+ ; CHECK-NEXT: ret float [[TMP1]]
66
60
;
67
61
%bitcast = bitcast float %val to i32
68
62
%and = and i32 %bitcast , 2147483647
@@ -74,8 +68,8 @@ define float @fabs_as_int_f32_castback_multi_use(float %val, ptr %ptr) {
74
68
define i64 @fabs_as_int_f64 (double %x ) {
75
69
; CHECK-LABEL: define i64 @fabs_as_int_f64
76
70
; CHECK-SAME: (double [[X:%.*]]) {
77
- ; CHECK-NEXT: [[BC :%.*]] = bitcast double [[X]] to i64
78
- ; CHECK-NEXT: [[AND:%.*]] = and i64 [[BC]], 9223372036854775807
71
+ ; CHECK-NEXT: [[TMP1 :%.*]] = call double @llvm.fabs.f64(double [[X]])
72
+ ; CHECK-NEXT: [[AND:%.*]] = bitcast double [[TMP1]] to i64
79
73
; CHECK-NEXT: ret i64 [[AND]]
80
74
;
81
75
%bc = bitcast double %x to i64
@@ -86,8 +80,8 @@ define i64 @fabs_as_int_f64(double %x) {
86
80
define <2 x i64 > @fabs_as_int_v2f64 (<2 x double > %x ) {
87
81
; CHECK-LABEL: define <2 x i64> @fabs_as_int_v2f64
88
82
; CHECK-SAME: (<2 x double> [[X:%.*]]) {
89
- ; CHECK-NEXT: [[BC :%.*]] = bitcast <2 x double> [[X]] to <2 x i64>
90
- ; CHECK-NEXT: [[AND:%.*]] = and <2 x i64 > [[BC]], <i64 9223372036854775807, i64 9223372036854775807 >
83
+ ; CHECK-NEXT: [[TMP1 :%.*]] = call <2 x double> @llvm.fabs.v2f64( <2 x double> [[X]])
84
+ ; CHECK-NEXT: [[AND:%.*]] = bitcast <2 x double > [[TMP1]] to <2 x i64>
91
85
; CHECK-NEXT: ret <2 x i64> [[AND]]
92
86
;
93
87
%bc = bitcast <2 x double > %x to <2 x i64 >
@@ -98,8 +92,8 @@ define <2 x i64> @fabs_as_int_v2f64(<2 x double> %x) {
98
92
define i64 @fabs_as_int_f64_swap (double %x ) {
99
93
; CHECK-LABEL: define i64 @fabs_as_int_f64_swap
100
94
; CHECK-SAME: (double [[X:%.*]]) {
101
- ; CHECK-NEXT: [[BC :%.*]] = bitcast double [[X]] to i64
102
- ; CHECK-NEXT: [[AND:%.*]] = and i64 [[BC]], 9223372036854775807
95
+ ; CHECK-NEXT: [[TMP1 :%.*]] = call double @llvm.fabs.f64(double [[X]])
96
+ ; CHECK-NEXT: [[AND:%.*]] = bitcast double [[TMP1]] to i64
103
97
; CHECK-NEXT: ret i64 [[AND]]
104
98
;
105
99
%bc = bitcast double %x to i64
@@ -110,8 +104,8 @@ define i64 @fabs_as_int_f64_swap(double %x) {
110
104
define i32 @fabs_as_int_f32 (float %x ) {
111
105
; CHECK-LABEL: define i32 @fabs_as_int_f32
112
106
; CHECK-SAME: (float [[X:%.*]]) {
113
- ; CHECK-NEXT: [[BC :%.*]] = bitcast float [[X]] to i32
114
- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[BC]], 2147483647
107
+ ; CHECK-NEXT: [[TMP1 :%.*]] = call float @llvm.fabs.f32(float [[X]])
108
+ ; CHECK-NEXT: [[AND:%.*]] = bitcast float [[TMP1]] to i32
115
109
; CHECK-NEXT: ret i32 [[AND]]
116
110
;
117
111
%bc = bitcast float %x to i32
@@ -122,8 +116,8 @@ define i32 @fabs_as_int_f32(float %x) {
122
116
define <2 x i32 > @fabs_as_int_v2f32 (<2 x float > %x ) {
123
117
; CHECK-LABEL: define <2 x i32> @fabs_as_int_v2f32
124
118
; CHECK-SAME: (<2 x float> [[X:%.*]]) {
125
- ; CHECK-NEXT: [[BC :%.*]] = bitcast <2 x float> [[X]] to <2 x i32>
126
- ; CHECK-NEXT: [[AND:%.*]] = and <2 x i32 > [[BC]], <i32 2147483647, i32 2147483647 >
119
+ ; CHECK-NEXT: [[TMP1 :%.*]] = call <2 x float> @llvm.fabs.v2f32( <2 x float> [[X]])
120
+ ; CHECK-NEXT: [[AND:%.*]] = bitcast <2 x float > [[TMP1]] to <2 x i32>
127
121
; CHECK-NEXT: ret <2 x i32> [[AND]]
128
122
;
129
123
%bc = bitcast <2 x float > %x to <2 x i32 >
@@ -146,8 +140,8 @@ define <2 x i32> @not_fabs_as_int_v2f32_nonsplat(<2 x float> %x) {
146
140
define <3 x i32 > @fabs_as_int_v3f32_undef (<3 x float > %x ) {
147
141
; CHECK-LABEL: define <3 x i32> @fabs_as_int_v3f32_undef
148
142
; CHECK-SAME: (<3 x float> [[X:%.*]]) {
149
- ; CHECK-NEXT: [[BC :%.*]] = bitcast <3 x float> [[X]] to <3 x i32>
150
- ; CHECK-NEXT: [[AND:%.*]] = and <3 x i32 > [[BC]], <i32 2147483647, i32 undef, i32 2147483647 >
143
+ ; CHECK-NEXT: [[TMP1 :%.*]] = call <3 x float> @llvm.fabs.v3f32( <3 x float> [[X]])
144
+ ; CHECK-NEXT: [[AND:%.*]] = bitcast <3 x float > [[TMP1]] to <3 x i32>
151
145
; CHECK-NEXT: ret <3 x i32> [[AND]]
152
146
;
153
147
%bc = bitcast <3 x float > %x to <3 x i32 >
@@ -199,8 +193,8 @@ define float @not_fabs_as_int_f32_bitcast_from_v2i16(<2 x i16> %val) {
199
193
define i128 @fabs_as_int_fp128_f64_mask (fp128 %x ) {
200
194
; CHECK-LABEL: define i128 @fabs_as_int_fp128_f64_mask
201
195
; CHECK-SAME: (fp128 [[X:%.*]]) {
202
- ; CHECK-NEXT: [[BC :%.*]] = bitcast fp128 [[X]] to i128
203
- ; CHECK-NEXT: [[AND:%.*]] = and i128 [[BC]], 170141183460469231731687303715884105727
196
+ ; CHECK-NEXT: [[TMP1 :%.*]] = call fp128 @llvm.fabs.f128(fp128 [[X]])
197
+ ; CHECK-NEXT: [[AND:%.*]] = bitcast fp128 [[TMP1]] to i128
204
198
; CHECK-NEXT: ret i128 [[AND]]
205
199
;
206
200
%bc = bitcast fp128 %x to i128
@@ -211,8 +205,8 @@ define i128 @fabs_as_int_fp128_f64_mask(fp128 %x) {
211
205
define i128 @fabs_as_int_fp128_f128_mask (fp128 %x ) {
212
206
; CHECK-LABEL: define i128 @fabs_as_int_fp128_f128_mask
213
207
; CHECK-SAME: (fp128 [[X:%.*]]) {
214
- ; CHECK-NEXT: [[BC :%.*]] = bitcast fp128 [[X]] to i128
215
- ; CHECK-NEXT: [[AND:%.*]] = and i128 [[BC]], 170141183460469231731687303715884105727
208
+ ; CHECK-NEXT: [[TMP1 :%.*]] = call fp128 @llvm.fabs.f128(fp128 [[X]])
209
+ ; CHECK-NEXT: [[AND:%.*]] = bitcast fp128 [[TMP1]] to i128
216
210
; CHECK-NEXT: ret i128 [[AND]]
217
211
;
218
212
%bc = bitcast fp128 %x to i128
@@ -223,8 +217,8 @@ define i128 @fabs_as_int_fp128_f128_mask(fp128 %x) {
223
217
define i16 @fabs_as_int_f16 (half %x ) {
224
218
; CHECK-LABEL: define i16 @fabs_as_int_f16
225
219
; CHECK-SAME: (half [[X:%.*]]) {
226
- ; CHECK-NEXT: [[BC :%.*]] = bitcast half [[X]] to i16
227
- ; CHECK-NEXT: [[AND:%.*]] = and i16 [[BC]], 32767
220
+ ; CHECK-NEXT: [[TMP1 :%.*]] = call half @llvm.fabs.f16(half [[X]])
221
+ ; CHECK-NEXT: [[AND:%.*]] = bitcast half [[TMP1]] to i16
228
222
; CHECK-NEXT: ret i16 [[AND]]
229
223
;
230
224
%bc = bitcast half %x to i16
@@ -235,8 +229,8 @@ define i16 @fabs_as_int_f16(half %x) {
235
229
define <2 x i16 > @fabs_as_int_v2f16 (<2 x half > %x ) {
236
230
; CHECK-LABEL: define <2 x i16> @fabs_as_int_v2f16
237
231
; CHECK-SAME: (<2 x half> [[X:%.*]]) {
238
- ; CHECK-NEXT: [[BC :%.*]] = bitcast <2 x half> [[X]] to <2 x i16>
239
- ; CHECK-NEXT: [[AND:%.*]] = and <2 x i16 > [[BC]], <i16 32767, i16 32767 >
232
+ ; CHECK-NEXT: [[TMP1 :%.*]] = call <2 x half> @llvm.fabs.v2f16( <2 x half> [[X]])
233
+ ; CHECK-NEXT: [[AND:%.*]] = bitcast <2 x half > [[TMP1]] to <2 x i16>
240
234
; CHECK-NEXT: ret <2 x i16> [[AND]]
241
235
;
242
236
%bc = bitcast <2 x half > %x to <2 x i16 >
@@ -247,8 +241,8 @@ define <2 x i16> @fabs_as_int_v2f16(<2 x half> %x) {
247
241
define i16 @fabs_as_int_bf16 (bfloat %x ) {
248
242
; CHECK-LABEL: define i16 @fabs_as_int_bf16
249
243
; CHECK-SAME: (bfloat [[X:%.*]]) {
250
- ; CHECK-NEXT: [[BC :%.*]] = bitcast bfloat [[X]] to i16
251
- ; CHECK-NEXT: [[AND:%.*]] = and i16 [[BC]], 32767
244
+ ; CHECK-NEXT: [[TMP1 :%.*]] = call bfloat @llvm.fabs.bf16(bfloat [[X]])
245
+ ; CHECK-NEXT: [[AND:%.*]] = bitcast bfloat [[TMP1]] to i16
252
246
; CHECK-NEXT: ret i16 [[AND]]
253
247
;
254
248
%bc = bitcast bfloat %x to i16
@@ -259,8 +253,8 @@ define i16 @fabs_as_int_bf16(bfloat %x) {
259
253
define <2 x i16 > @fabs_as_int_v2bf16 (<2 x bfloat> %x ) {
260
254
; CHECK-LABEL: define <2 x i16> @fabs_as_int_v2bf16
261
255
; CHECK-SAME: (<2 x bfloat> [[X:%.*]]) {
262
- ; CHECK-NEXT: [[BC :%.*]] = bitcast <2 x bfloat> [[X]] to <2 x i16>
263
- ; CHECK-NEXT: [[AND:%.*]] = and <2 x i16 > [[BC]], <i16 32767, i16 32767 >
256
+ ; CHECK-NEXT: [[TMP1 :%.*]] = call <2 x bfloat> @llvm.fabs.v2bf16( <2 x bfloat> [[X]])
257
+ ; CHECK-NEXT: [[AND:%.*]] = bitcast <2 x bfloat > [[TMP1]] to <2 x i16>
264
258
; CHECK-NEXT: ret <2 x i16> [[AND]]
265
259
;
266
260
%bc = bitcast <2 x bfloat> %x to <2 x i16 >
0 commit comments