brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · e8bbaf9 Raw
73 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+neon,+fullfp16 < %s -o -| FileCheck %s3 4declare half   @llvm.fabs.f16(half)5declare float  @llvm.fabs.f32(float)6declare double @llvm.fabs.f64(double)7declare fp128  @llvm.fabs.f128(fp128)8 9; Check if INFINITY for _Float16 is materialized10define i32 @replace_isinf_call_f16(half %x) {11; CHECK-LABEL: replace_isinf_call_f16:12; CHECK:       // %bb.0:13; CHECK-NEXT:    mov w8, #31744 // =0x7c0014; CHECK-NEXT:    fabs h0, h015; CHECK-NEXT:    fmov h1, w816; CHECK-NEXT:    fcmp h0, h117; CHECK-NEXT:    cset w0, eq18; CHECK-NEXT:    ret19  %abs = tail call half @llvm.fabs.f16(half %x)20  %cmpinf = fcmp oeq half %abs, 0xH7C0021  %ret = zext i1 %cmpinf to i3222  ret i32 %ret23}24 25; Check if INFINITY for float is materialized26define i32 @replace_isinf_call_f32(float %x) {27; CHECK-LABEL: replace_isinf_call_f32:28; CHECK:       // %bb.0:29; CHECK-NEXT:    fmov w9, s030; CHECK-NEXT:    mov w8, #-16777216 // =0xff00000031; CHECK-NEXT:    cmp w8, w9, lsl #132; CHECK-NEXT:    cset w0, eq33; CHECK-NEXT:    ret34  %abs = tail call float @llvm.fabs.f32(float %x)35  %cmpinf = fcmp oeq float %abs, 0x7FF000000000000036  %ret = zext i1 %cmpinf to i3237  ret i32 %ret38}39 40; Check if INFINITY for double is materialized41define i32 @replace_isinf_call_f64(double %x) {42; CHECK-LABEL: replace_isinf_call_f64:43; CHECK:       // %bb.0:44; CHECK-NEXT:    fmov x9, d045; CHECK-NEXT:    mov x8, #-9007199254740992 // =0xffe000000000000046; CHECK-NEXT:    cmp x8, x9, lsl #147; CHECK-NEXT:    cset w0, eq48; CHECK-NEXT:    ret49  %abs = tail call double @llvm.fabs.f64(double %x)50  %cmpinf = fcmp oeq double %abs, 0x7FF000000000000051  %ret = zext i1 %cmpinf to i3252  ret i32 %ret53}54 55; For long double it still requires loading the constant.56define i32 @replace_isinf_call_f128(fp128 %x) {57; CHECK-LABEL: replace_isinf_call_f128:58; CHECK:       // %bb.0:59; CHECK-NEXT:    str q0, [sp, #-16]!60; CHECK-NEXT:    .cfi_def_cfa_offset 1661; CHECK-NEXT:    ldp x9, x8, [sp], #1662; CHECK-NEXT:    and x8, x8, #0x7fffffffffffffff63; CHECK-NEXT:    eor x8, x8, #0x7fff00000000000064; CHECK-NEXT:    orr x8, x9, x865; CHECK-NEXT:    cmp x8, #066; CHECK-NEXT:    cset w0, eq67; CHECK-NEXT:    ret68  %abs = tail call fp128 @llvm.fabs.f128(fp128 %x)69  %cmpinf = fcmp oeq fp128 %abs, 0xL00000000000000007FFF00000000000070  %ret = zext i1 %cmpinf to i3271  ret i32 %ret72}73