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