79 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=hawaii < %s | FileCheck -check-prefix=GCN %s3; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=fiji < %s | FileCheck -check-prefix=GCN %s4; RUN: llc -global-isel -mtriple=amdgcn-amd-amdhsa -mcpu=hawaii < %s | FileCheck -check-prefix=GCN %s5; RUN: llc -global-isel -mtriple=amdgcn-amd-amdhsa -mcpu=fiji < %s | FileCheck -check-prefix=GCN %s6 7define float @v_sqrt_f32(float %src) {8; GCN-LABEL: v_sqrt_f32:9; GCN: ; %bb.0:10; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11; GCN-NEXT: v_sqrt_f32_e32 v0, v012; GCN-NEXT: s_setpc_b64 s[30:31]13 %sqrt = call float @llvm.amdgcn.sqrt.f32(float %src)14 ret float %sqrt15}16 17define float @v_fabs_sqrt_f32(float %src) {18; GCN-LABEL: v_fabs_sqrt_f32:19; GCN: ; %bb.0:20; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)21; GCN-NEXT: v_sqrt_f32_e64 v0, |v0|22; GCN-NEXT: s_setpc_b64 s[30:31]23 %fabs.src = call float @llvm.fabs.f32(float %src)24 %sqrt = call float @llvm.amdgcn.sqrt.f32(float %fabs.src)25 ret float %sqrt26}27 28define float @v_fneg_fabs_sqrt_f32(float %src) {29; GCN-LABEL: v_fneg_fabs_sqrt_f32:30; GCN: ; %bb.0:31; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)32; GCN-NEXT: v_sqrt_f32_e64 v0, -|v0|33; GCN-NEXT: s_setpc_b64 s[30:31]34 %fabs.src = call float @llvm.fabs.f32(float %src)35 %neg.fabs.src = fneg float %fabs.src36 %sqrt = call float @llvm.amdgcn.sqrt.f32(float %neg.fabs.src)37 ret float %sqrt38}39 40define double @v_sqrt_f64(double %src) {41; GCN-LABEL: v_sqrt_f64:42; GCN: ; %bb.0:43; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)44; GCN-NEXT: v_sqrt_f64_e32 v[0:1], v[0:1]45; GCN-NEXT: s_setpc_b64 s[30:31]46 %sqrt = call double @llvm.amdgcn.sqrt.f64(double %src)47 ret double %sqrt48}49 50define double @v_fabs_sqrt_f64(double %src) {51; GCN-LABEL: v_fabs_sqrt_f64:52; GCN: ; %bb.0:53; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)54; GCN-NEXT: v_sqrt_f64_e64 v[0:1], |v[0:1]|55; GCN-NEXT: s_setpc_b64 s[30:31]56 %fabs.src = call double @llvm.fabs.f64(double %src)57 %sqrt = call double @llvm.amdgcn.sqrt.f64(double %fabs.src)58 ret double %sqrt59}60 61define double @v_fneg_fabs_sqrt_f64(double %src) {62; GCN-LABEL: v_fneg_fabs_sqrt_f64:63; GCN: ; %bb.0:64; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)65; GCN-NEXT: v_sqrt_f64_e64 v[0:1], -|v[0:1]|66; GCN-NEXT: s_setpc_b64 s[30:31]67 %fabs.src = call double @llvm.fabs.f64(double %src)68 %neg.fabs.src = fneg double %fabs.src69 %sqrt = call double @llvm.amdgcn.sqrt.f64(double %neg.fabs.src)70 ret double %sqrt71}72 73declare float @llvm.amdgcn.sqrt.f32(float) #074declare double @llvm.amdgcn.sqrt.f64(double) #075declare float @llvm.fabs.f32(float) #076declare double @llvm.fabs.f64(double) #077 78attributes #0 = { nounwind readnone speculatable willreturn }79