1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc --mtriple=loongarch32 --mattr=+f,-d < %s | FileCheck %s --check-prefix=LA32F 3; RUN: llc --mtriple=loongarch32 --mattr=+d < %s | FileCheck %s --check-prefix=LA32D 4; RUN: llc --mtriple=loongarch64 --mattr=+f,-d < %s | FileCheck %s --check-prefix=LA64F 5; RUN: llc --mtriple=loongarch64 --mattr=+d < %s | FileCheck %s --check-prefix=LA64D 6 7declare float @llvm.fabs.f32(float) 8declare double @llvm.fabs.f64(double) 9 10define float @fabs_f32(float %a) nounwind { 11; LA32F-LABEL: fabs_f32: 12; LA32F: # %bb.0: 13; LA32F-NEXT: fabs.s $fa0, $fa0 14; LA32F-NEXT: ret 15; 16; LA32D-LABEL: fabs_f32: 17; LA32D: # %bb.0: 18; LA32D-NEXT: fabs.s $fa0, $fa0 19; LA32D-NEXT: ret 20; 21; LA64F-LABEL: fabs_f32: 22; LA64F: # %bb.0: 23; LA64F-NEXT: fabs.s $fa0, $fa0 24; LA64F-NEXT: ret 25; 26; LA64D-LABEL: fabs_f32: 27; LA64D: # %bb.0: 28; LA64D-NEXT: fabs.s $fa0, $fa0 29; LA64D-NEXT: ret 30 %1 = call float @llvm.fabs.f32(float %a) 31 ret float %1 32} 33 34define double @fabs_f64(double %a) nounwind { 35; LA32F-LABEL: fabs_f64: 36; LA32F: # %bb.0: 37; LA32F-NEXT: bstrpick.w $a1, $a1, 30, 0 38; LA32F-NEXT: ret 39; 40; LA32D-LABEL: fabs_f64: 41; LA32D: # %bb.0: 42; LA32D-NEXT: fabs.d $fa0, $fa0 43; LA32D-NEXT: ret 44; 45; LA64F-LABEL: fabs_f64: 46; LA64F: # %bb.0: 47; LA64F-NEXT: bstrpick.d $a0, $a0, 62, 0 48; LA64F-NEXT: ret 49; 50; LA64D-LABEL: fabs_f64: 51; LA64D: # %bb.0: 52; LA64D-NEXT: fabs.d $fa0, $fa0 53; LA64D-NEXT: ret 54 %1 = call double @llvm.fabs.f64(double %a) 55 ret double %1 56} 57