File tree Expand file tree Collapse file tree
filetests/filetests/egraph Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -953,5 +953,29 @@ macro_rules! isle_common_prelude_methods {
953953 None
954954 }
955955 }
956+
957+ fn f32_neg( & mut self , n: Ieee32 ) -> Ieee32 {
958+ n. neg( )
959+ }
960+
961+ fn f32_abs( & mut self , n: Ieee32 ) -> Ieee32 {
962+ n. abs( )
963+ }
964+
965+ fn f32_copysign( & mut self , a: Ieee32 , b: Ieee32 ) -> Ieee32 {
966+ a. copysign( b)
967+ }
968+
969+ fn f64_neg( & mut self , n: Ieee64 ) -> Ieee64 {
970+ n. neg( )
971+ }
972+
973+ fn f64_abs( & mut self , n: Ieee64 ) -> Ieee64 {
974+ n. abs( )
975+ }
976+
977+ fn f64_copysign( & mut self , a: Ieee64 , b: Ieee64 ) -> Ieee64 {
978+ a. copysign( b)
979+ }
956980 } ;
957981}
Original file line number Diff line number Diff line change 279279(extern constructor u64_bswap32 u64_bswap32)
280280(decl pure u64_bswap64 (u64) u64)
281281(extern constructor u64_bswap64 u64_bswap64)
282+
283+ ;; Constant fold bitwise float operations (fneg/fabs/fcopysign)
284+ (rule (simplify (fneg $F32 (f32const $F32 n)))
285+ (subsume (f32const $F32 (f32_neg n))))
286+ (rule (simplify (fneg $F64 (f64const $F64 n)))
287+ (subsume (f64const $F64 (f64_neg n))))
288+
289+ (rule (simplify (fabs $F32 (f32const $F32 n)))
290+ (subsume (f32const $F32 (f32_abs n))))
291+ (rule (simplify (fabs $F64 (f64const $F64 n)))
292+ (subsume (f64const $F64 (f64_abs n))))
293+
294+ (rule (simplify (fcopysign $F32 (f32const $F32 n) (f32const $F32 m)))
295+ (subsume (f32const $F32 (f32_copysign n m))))
296+ (rule (simplify (fcopysign $F64 (f64const $F64 n) (f64const $F64 m)))
297+ (subsume (f64const $F64 (f64_copysign n m))))
Original file line number Diff line number Diff line change 234234(decl u16_replicated_u8 (u8) u64)
235235(extern extractor u16_replicated_u8 u16_replicated_u8)
236236
237+ ;; Floating point operations
238+
239+ (decl pure f32_neg (Ieee32) Ieee32)
240+ (extern constructor f32_neg f32_neg)
241+ (decl pure f32_abs (Ieee32) Ieee32)
242+ (extern constructor f32_abs f32_abs)
243+ (decl pure f32_copysign (Ieee32 Ieee32) Ieee32)
244+ (extern constructor f32_copysign f32_copysign)
245+ (decl pure f64_neg (Ieee64) Ieee64)
246+ (extern constructor f64_neg f64_neg)
247+ (decl pure f64_abs (Ieee64) Ieee64)
248+ (extern constructor f64_abs f64_abs)
249+ (decl pure f64_copysign (Ieee64 Ieee64) Ieee64)
250+ (extern constructor f64_copysign f64_copysign)
251+
237252;;;; `cranelift_codegen::ir::Type` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
238253
239254(extern const $I8 Type)
Original file line number Diff line number Diff line change @@ -312,3 +312,65 @@ block0:
312312
313313; check: v2 = iconst.i64 0xf0de_bc9a_7856_3412
314314; nextln: return v2
315+
316+ function %f32_fneg() -> f32 {
317+ block0:
318+ v1 = f32const 0.0
319+ v2 = fneg v1
320+ return v2
321+ }
322+
323+ ; check: v3 = f32const -0.0
324+ ; check: return v3 ; v3 = -0.0
325+
326+ function %f32_fabs() -> f32 {
327+ block0:
328+ v1 = f32const -0.0
329+ v2 = fabs v1
330+ return v2
331+ }
332+
333+ ; check: v3 = f32const 0.0
334+ ; check: return v3 ; v3 = 0.0
335+
336+ function %f32_fabs() -> f32 {
337+ block0:
338+ v1 = f32const -0.0
339+ v2 = f32const NaN
340+ v3 = fcopysign v2, v1
341+ return v3
342+ }
343+
344+ ; check: v4 = f32const -NaN
345+ ; check: return v4 ; v4 = -NaN
346+
347+ function %f64_fneg() -> f64 {
348+ block0:
349+ v1 = f64const 0.0
350+ v2 = fneg v1
351+ return v2
352+ }
353+
354+ ; check: v3 = f64const -0.0
355+ ; check: return v3 ; v3 = -0.0
356+
357+ function %f64_fabs() -> f64 {
358+ block0:
359+ v1 = f64const -0.0
360+ v2 = fabs v1
361+ return v2
362+ }
363+
364+ ; check: v3 = f64const 0.0
365+ ; check: return v3 ; v3 = 0.0
366+
367+ function %f64_fabs() -> f64 {
368+ block0:
369+ v1 = f64const -0.0
370+ v2 = f64const NaN
371+ v3 = fcopysign v2, v1
372+ return v3
373+ }
374+
375+ ; check: v4 = f64const -NaN
376+ ; check: return v4 ; v4 = -NaN
You can’t perform that action at this time.
0 commit comments