// RUN: cir-opt %s --verify-roundtrip | FileCheck %s // Exercise parser/printer roundtrip for floating-point values that require // exact hex spelling. // CHECK-LABEL: cir.func @f32_special_values cir.func @f32_special_values() { // CHECK: cir.const #cir.fp<0x7F800001> : !cir.float %0 = cir.const #cir.fp<0x7F800001> : !cir.float // CHECK: cir.const #cir.fp<0x7FBFFFFF> : !cir.float %1 = cir.const #cir.fp<0x7FBFFFFF> : !cir.float // CHECK: cir.const #cir.fp<0x7FC00000> : !cir.float %2 = cir.const #cir.fp<0x7FC00000> : !cir.float // CHECK: cir.const #cir.fp<0xFFFFFFFF> : !cir.float %3 = cir.const #cir.fp<0xFFFFFFFF> : !cir.float // CHECK: cir.const #cir.fp<0x7F800000> : !cir.float %4 = cir.const #cir.fp<0x7F800000> : !cir.float // CHECK: cir.const #cir.fp<0xFF800000> : !cir.float %5 = cir.const #cir.fp<0xFF800000> : !cir.float cir.return } // CHECK-LABEL: cir.func @f64_special_values cir.func @f64_special_values() { // CHECK: cir.const #cir.fp<0x7FF0000000000001> : !cir.double %0 = cir.const #cir.fp<0x7FF0000000000001> : !cir.double // CHECK: cir.const #cir.fp<0x7FF8000000000000> : !cir.double %1 = cir.const #cir.fp<0x7FF8000000000000> : !cir.double // CHECK: cir.const #cir.fp<0x7FF0000001000000> : !cir.double %2 = cir.const #cir.fp<0x7FF0000001000000> : !cir.double // CHECK: cir.const #cir.fp<0xFFF0000001000000> : !cir.double %3 = cir.const #cir.fp<0xFFF0000001000000> : !cir.double // CHECK: cir.const #cir.fp<0x7FF0000000000000> : !cir.double %4 = cir.const #cir.fp<0x7FF0000000000000> : !cir.double // CHECK: cir.const #cir.fp<0xFFF0000000000000> : !cir.double %5 = cir.const #cir.fp<0xFFF0000000000000> : !cir.double // CHECK: cir.const #cir.fp<0xC1CDC00000000000> : !cir.double %6 = cir.const #cir.fp<0xC1CDC00000000000> : !cir.double cir.return } // CHECK-LABEL: cir.func @f80_special_values cir.func @f80_special_values() { // CHECK: cir.const #cir.fp<0x7FFFE000000000000001> : !cir.long_double %0 = cir.const #cir.fp<0x7FFFE000000000000001> : !cir.long_double // CHECK: cir.const #cir.fp<0x7FFFB000000000000011> : !cir.long_double %1 = cir.const #cir.fp<0x7FFFB000000000000011> : !cir.long_double // CHECK: cir.const #cir.fp<0x7FFFC000000000100000> : !cir.long_double %2 = cir.const #cir.fp<0x7FFFC000000000100000> : !cir.long_double // CHECK: cir.const #cir.fp<0x7FFFE000000001000000> : !cir.long_double %3 = cir.const #cir.fp<0x7FFFE000000001000000> : !cir.long_double // CHECK: cir.const #cir.fp<0x7FFF8000000000000000> : !cir.long_double %4 = cir.const #cir.fp<0x7FFF8000000000000000> : !cir.long_double // CHECK: cir.const #cir.fp<0xFFFF8000000000000000> : !cir.long_double %5 = cir.const #cir.fp<0xFFFF8000000000000000> : !cir.long_double cir.return } // Check that decimal values are preserved when exponential notation would lose // precision during roundtrip parsing. // CHECK-LABEL: cir.func @f32_potential_precision_loss cir.func @f32_potential_precision_loss() { // CHECK: cir.const #cir.fp<1.23697901> : !cir.float %0 = cir.const #cir.fp<1.23697901> : !cir.float cir.return }