@@ -30,10 +30,8 @@ define <2 x i32> @fneg_as_int_v2f32_noimplicitfloat(<2 x float> %x) noimplicitfl
30
30
define float @fneg_as_int_f32_castback (float %val ) {
31
31
; CHECK-LABEL: define float @fneg_as_int_f32_castback
32
32
; CHECK-SAME: (float [[VAL:%.*]]) {
33
- ; CHECK-NEXT: [[BITCAST:%.*]] = bitcast float [[VAL]] to i32
34
- ; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[BITCAST]], -2147483648
35
- ; CHECK-NEXT: [[FNEG:%.*]] = bitcast i32 [[XOR]] to float
36
- ; CHECK-NEXT: ret float [[FNEG]]
33
+ ; CHECK-NEXT: [[TMP1:%.*]] = fneg float [[VAL]]
34
+ ; CHECK-NEXT: ret float [[TMP1]]
37
35
;
38
36
%bitcast = bitcast float %val to i32
39
37
%xor = xor i32 %bitcast , -2147483648
@@ -58,11 +56,9 @@ define float @not_fneg_as_int_f32_castback_wrongconst(float %val) {
58
56
define float @fneg_as_int_f32_castback_multi_use (float %val , ptr %ptr ) {
59
57
; CHECK-LABEL: define float @fneg_as_int_f32_castback_multi_use
60
58
; CHECK-SAME: (float [[VAL:%.*]], ptr [[PTR:%.*]]) {
61
- ; CHECK-NEXT: [[BITCAST:%.*]] = bitcast float [[VAL]] to i32
62
- ; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[BITCAST]], -2147483648
63
- ; CHECK-NEXT: store i32 [[XOR]], ptr [[PTR]], align 4
64
- ; CHECK-NEXT: [[FNEG:%.*]] = bitcast i32 [[XOR]] to float
65
- ; CHECK-NEXT: ret float [[FNEG]]
59
+ ; CHECK-NEXT: [[TMP1:%.*]] = fneg float [[VAL]]
60
+ ; CHECK-NEXT: store float [[TMP1]], ptr [[PTR]], align 4
61
+ ; CHECK-NEXT: ret float [[TMP1]]
66
62
;
67
63
%bitcast = bitcast float %val to i32
68
64
%xor = xor i32 %bitcast , -2147483648
@@ -74,8 +70,8 @@ define float @fneg_as_int_f32_castback_multi_use(float %val, ptr %ptr) {
74
70
define i64 @fneg_as_int_f64 (double %x ) {
75
71
; CHECK-LABEL: define i64 @fneg_as_int_f64
76
72
; CHECK-SAME: (double [[X:%.*]]) {
77
- ; CHECK-NEXT: [[BC :%.*]] = bitcast double [[X]] to i64
78
- ; CHECK-NEXT: [[XOR:%.*]] = xor i64 [[BC]], -9223372036854775808
73
+ ; CHECK-NEXT: [[TMP1 :%.*]] = fneg double [[X]]
74
+ ; CHECK-NEXT: [[XOR:%.*]] = bitcast double [[TMP1]] to i64
79
75
; CHECK-NEXT: ret i64 [[XOR]]
80
76
;
81
77
%bc = bitcast double %x to i64
@@ -86,8 +82,8 @@ define i64 @fneg_as_int_f64(double %x) {
86
82
define <2 x i64 > @fneg_as_int_v2f64 (<2 x double > %x ) {
87
83
; CHECK-LABEL: define <2 x i64> @fneg_as_int_v2f64
88
84
; CHECK-SAME: (<2 x double> [[X:%.*]]) {
89
- ; CHECK-NEXT: [[BC :%.*]] = bitcast <2 x double> [[X]] to <2 x i64>
90
- ; CHECK-NEXT: [[XOR:%.*]] = xor <2 x i64 > [[BC]], <i64 -9223372036854775808, i64 -9223372036854775808 >
85
+ ; CHECK-NEXT: [[TMP1 :%.*]] = fneg <2 x double> [[X]]
86
+ ; CHECK-NEXT: [[XOR:%.*]] = bitcast <2 x double > [[TMP1]] to <2 x i64>
91
87
; CHECK-NEXT: ret <2 x i64> [[XOR]]
92
88
;
93
89
%bc = bitcast <2 x double > %x to <2 x i64 >
@@ -98,8 +94,8 @@ define <2 x i64> @fneg_as_int_v2f64(<2 x double> %x) {
98
94
define i64 @fneg_as_int_f64_swap (double %x ) {
99
95
; CHECK-LABEL: define i64 @fneg_as_int_f64_swap
100
96
; CHECK-SAME: (double [[X:%.*]]) {
101
- ; CHECK-NEXT: [[BC :%.*]] = bitcast double [[X]] to i64
102
- ; CHECK-NEXT: [[XOR:%.*]] = xor i64 [[BC]], -9223372036854775808
97
+ ; CHECK-NEXT: [[TMP1 :%.*]] = fneg double [[X]]
98
+ ; CHECK-NEXT: [[XOR:%.*]] = bitcast double [[TMP1]] to i64
103
99
; CHECK-NEXT: ret i64 [[XOR]]
104
100
;
105
101
%bc = bitcast double %x to i64
@@ -110,8 +106,8 @@ define i64 @fneg_as_int_f64_swap(double %x) {
110
106
define i32 @fneg_as_int_f32 (float %x ) {
111
107
; CHECK-LABEL: define i32 @fneg_as_int_f32
112
108
; CHECK-SAME: (float [[X:%.*]]) {
113
- ; CHECK-NEXT: [[BC :%.*]] = bitcast float [[X]] to i32
114
- ; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[BC]], -2147483648
109
+ ; CHECK-NEXT: [[TMP1 :%.*]] = fneg float [[X]]
110
+ ; CHECK-NEXT: [[XOR:%.*]] = bitcast float [[TMP1]] to i32
115
111
; CHECK-NEXT: ret i32 [[XOR]]
116
112
;
117
113
%bc = bitcast float %x to i32
@@ -122,8 +118,8 @@ define i32 @fneg_as_int_f32(float %x) {
122
118
define <2 x i32 > @fneg_as_int_v2f32 (<2 x float > %x ) {
123
119
; CHECK-LABEL: define <2 x i32> @fneg_as_int_v2f32
124
120
; CHECK-SAME: (<2 x float> [[X:%.*]]) {
125
- ; CHECK-NEXT: [[BC :%.*]] = bitcast <2 x float> [[X]] to <2 x i32>
126
- ; CHECK-NEXT: [[XOR:%.*]] = xor <2 x i32 > [[BC]], <i32 -2147483648, i32 -2147483648 >
121
+ ; CHECK-NEXT: [[TMP1 :%.*]] = fneg <2 x float> [[X]]
122
+ ; CHECK-NEXT: [[XOR:%.*]] = bitcast <2 x float > [[TMP1]] to <2 x i32>
127
123
; CHECK-NEXT: ret <2 x i32> [[XOR]]
128
124
;
129
125
%bc = bitcast <2 x float > %x to <2 x i32 >
@@ -146,8 +142,8 @@ define <2 x i32> @not_fneg_as_int_v2f32_nonsplat(<2 x float> %x) {
146
142
define <3 x i32 > @fneg_as_int_v3f32_undef (<3 x float > %x ) {
147
143
; CHECK-LABEL: define <3 x i32> @fneg_as_int_v3f32_undef
148
144
; CHECK-SAME: (<3 x float> [[X:%.*]]) {
149
- ; CHECK-NEXT: [[BC :%.*]] = bitcast <3 x float> [[X]] to <3 x i32>
150
- ; CHECK-NEXT: [[XOR:%.*]] = xor <3 x i32 > [[BC]], <i32 -2147483648, i32 undef, i32 -2147483648 >
145
+ ; CHECK-NEXT: [[TMP1 :%.*]] = fneg <3 x float> [[X]]
146
+ ; CHECK-NEXT: [[XOR:%.*]] = bitcast <3 x float > [[TMP1]] to <3 x i32>
151
147
; CHECK-NEXT: ret <3 x i32> [[XOR]]
152
148
;
153
149
%bc = bitcast <3 x float > %x to <3 x i32 >
@@ -211,8 +207,8 @@ define i128 @fneg_as_int_fp128_f64_mask(fp128 %x) {
211
207
define i128 @fneg_as_int_fp128_f128_mask (fp128 %x ) {
212
208
; CHECK-LABEL: define i128 @fneg_as_int_fp128_f128_mask
213
209
; CHECK-SAME: (fp128 [[X:%.*]]) {
214
- ; CHECK-NEXT: [[BC :%.*]] = bitcast fp128 [[X]] to i128
215
- ; CHECK-NEXT: [[XOR:%.*]] = xor i128 [[BC]], -170141183460469231731687303715884105728
210
+ ; CHECK-NEXT: [[TMP1 :%.*]] = fneg fp128 [[X]]
211
+ ; CHECK-NEXT: [[XOR:%.*]] = bitcast fp128 [[TMP1]] to i128
216
212
; CHECK-NEXT: ret i128 [[XOR]]
217
213
;
218
214
%bc = bitcast fp128 %x to i128
@@ -223,8 +219,8 @@ define i128 @fneg_as_int_fp128_f128_mask(fp128 %x) {
223
219
define i16 @fneg_as_int_f16 (half %x ) {
224
220
; CHECK-LABEL: define i16 @fneg_as_int_f16
225
221
; CHECK-SAME: (half [[X:%.*]]) {
226
- ; CHECK-NEXT: [[BC :%.*]] = bitcast half [[X]] to i16
227
- ; CHECK-NEXT: [[XOR:%.*]] = xor i16 [[BC]], -32768
222
+ ; CHECK-NEXT: [[TMP1 :%.*]] = fneg half [[X]]
223
+ ; CHECK-NEXT: [[XOR:%.*]] = bitcast half [[TMP1]] to i16
228
224
; CHECK-NEXT: ret i16 [[XOR]]
229
225
;
230
226
%bc = bitcast half %x to i16
@@ -235,8 +231,8 @@ define i16 @fneg_as_int_f16(half %x) {
235
231
define <2 x i16 > @fneg_as_int_v2f16 (<2 x half > %x ) {
236
232
; CHECK-LABEL: define <2 x i16> @fneg_as_int_v2f16
237
233
; CHECK-SAME: (<2 x half> [[X:%.*]]) {
238
- ; CHECK-NEXT: [[BC :%.*]] = bitcast <2 x half> [[X]] to <2 x i16>
239
- ; CHECK-NEXT: [[XOR:%.*]] = xor <2 x i16 > [[BC]], <i16 -32768, i16 -32768 >
234
+ ; CHECK-NEXT: [[TMP1 :%.*]] = fneg <2 x half> [[X]]
235
+ ; CHECK-NEXT: [[XOR:%.*]] = bitcast <2 x half > [[TMP1]] to <2 x i16>
240
236
; CHECK-NEXT: ret <2 x i16> [[XOR]]
241
237
;
242
238
%bc = bitcast <2 x half > %x to <2 x i16 >
@@ -247,8 +243,8 @@ define <2 x i16> @fneg_as_int_v2f16(<2 x half> %x) {
247
243
define i16 @fneg_as_int_bf16 (bfloat %x ) {
248
244
; CHECK-LABEL: define i16 @fneg_as_int_bf16
249
245
; CHECK-SAME: (bfloat [[X:%.*]]) {
250
- ; CHECK-NEXT: [[BC :%.*]] = bitcast bfloat [[X]] to i16
251
- ; CHECK-NEXT: [[XOR:%.*]] = xor i16 [[BC]], -32768
246
+ ; CHECK-NEXT: [[TMP1 :%.*]] = fneg bfloat [[X]]
247
+ ; CHECK-NEXT: [[XOR:%.*]] = bitcast bfloat [[TMP1]] to i16
252
248
; CHECK-NEXT: ret i16 [[XOR]]
253
249
;
254
250
%bc = bitcast bfloat %x to i16
@@ -259,8 +255,8 @@ define i16 @fneg_as_int_bf16(bfloat %x) {
259
255
define <2 x i16 > @fneg_as_int_v2bf16 (<2 x bfloat> %x ) {
260
256
; CHECK-LABEL: define <2 x i16> @fneg_as_int_v2bf16
261
257
; CHECK-SAME: (<2 x bfloat> [[X:%.*]]) {
262
- ; CHECK-NEXT: [[BC :%.*]] = bitcast <2 x bfloat> [[X]] to <2 x i16>
263
- ; CHECK-NEXT: [[XOR:%.*]] = xor <2 x i16 > [[BC]], <i16 -32768, i16 -32768 >
258
+ ; CHECK-NEXT: [[TMP1 :%.*]] = fneg <2 x bfloat> [[X]]
259
+ ; CHECK-NEXT: [[XOR:%.*]] = bitcast <2 x bfloat > [[TMP1]] to <2 x i16>
264
260
; CHECK-NEXT: ret <2 x i16> [[XOR]]
265
261
;
266
262
%bc = bitcast <2 x bfloat> %x to <2 x i16 >
@@ -271,8 +267,8 @@ define <2 x i16> @fneg_as_int_v2bf16(<2 x bfloat> %x) {
271
267
define i80 @fneg_as_int_x86_fp80_f64_mask (x86_fp80 %x ) {
272
268
; CHECK-LABEL: define i80 @fneg_as_int_x86_fp80_f64_mask
273
269
; CHECK-SAME: (x86_fp80 [[X:%.*]]) {
274
- ; CHECK-NEXT: [[BC :%.*]] = bitcast x86_fp80 [[X]] to i80
275
- ; CHECK-NEXT: [[XOR:%.*]] = xor i80 [[BC]], -604462909807314587353088
270
+ ; CHECK-NEXT: [[TMP1 :%.*]] = fneg x86_fp80 [[X]]
271
+ ; CHECK-NEXT: [[XOR:%.*]] = bitcast x86_fp80 [[TMP1]] to i80
276
272
; CHECK-NEXT: ret i80 [[XOR]]
277
273
;
278
274
%bc = bitcast x86_fp80 %x to i80
0 commit comments