118 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=fiji < %s | FileCheck -check-prefix=GCN %s3; RUN: llc -global-isel -mtriple=amdgcn-amd-amdhsa -mcpu=fiji < %s | FileCheck -check-prefix=GCN %s4; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11-SDAG-TRUE16 %s5; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11-SDAG-FAKE16 %s6; RUN: llc -global-isel -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11-GISEL-TRUE16 %s7; RUN: llc -global-isel -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11-GISEL-FAKE16 %s8 9define half @v_sqrt_f16(half %src) {10; GCN-LABEL: v_sqrt_f16:11; GCN: ; %bb.0:12; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13; GCN-NEXT: v_sqrt_f16_e32 v0, v014; GCN-NEXT: s_setpc_b64 s[30:31]15;16; GFX11-SDAG-TRUE16-LABEL: v_sqrt_f16:17; GFX11-SDAG-TRUE16: ; %bb.0:18; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)19; GFX11-SDAG-TRUE16-NEXT: v_sqrt_f16_e32 v0.l, v0.l20; GFX11-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]21;22; GFX11-SDAG-FAKE16-LABEL: v_sqrt_f16:23; GFX11-SDAG-FAKE16: ; %bb.0:24; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)25; GFX11-SDAG-FAKE16-NEXT: v_sqrt_f16_e32 v0, v026; GFX11-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]27;28; GFX11-GISEL-TRUE16-LABEL: v_sqrt_f16:29; GFX11-GISEL-TRUE16: ; %bb.0:30; GFX11-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)31; GFX11-GISEL-TRUE16-NEXT: v_sqrt_f16_e32 v0.l, v0.l32; GFX11-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]33;34; GFX11-GISEL-FAKE16-LABEL: v_sqrt_f16:35; GFX11-GISEL-FAKE16: ; %bb.0:36; GFX11-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)37; GFX11-GISEL-FAKE16-NEXT: v_sqrt_f16_e32 v0, v038; GFX11-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]39 %sqrt = call half @llvm.amdgcn.sqrt.f16(half %src)40 ret half %sqrt41}42 43define half @v_fabs_sqrt_f16(half %src) {44; GCN-LABEL: v_fabs_sqrt_f16:45; GCN: ; %bb.0:46; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)47; GCN-NEXT: v_sqrt_f16_e64 v0, |v0|48; GCN-NEXT: s_setpc_b64 s[30:31]49;50; GFX11-SDAG-TRUE16-LABEL: v_fabs_sqrt_f16:51; GFX11-SDAG-TRUE16: ; %bb.0:52; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)53; GFX11-SDAG-TRUE16-NEXT: v_sqrt_f16_e64 v0.l, |v0.l|54; GFX11-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]55;56; GFX11-SDAG-FAKE16-LABEL: v_fabs_sqrt_f16:57; GFX11-SDAG-FAKE16: ; %bb.0:58; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)59; GFX11-SDAG-FAKE16-NEXT: v_sqrt_f16_e64 v0, |v0|60; GFX11-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]61;62; GFX11-GISEL-TRUE16-LABEL: v_fabs_sqrt_f16:63; GFX11-GISEL-TRUE16: ; %bb.0:64; GFX11-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)65; GFX11-GISEL-TRUE16-NEXT: v_sqrt_f16_e64 v0.l, |v0.l|66; GFX11-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]67;68; GFX11-GISEL-FAKE16-LABEL: v_fabs_sqrt_f16:69; GFX11-GISEL-FAKE16: ; %bb.0:70; GFX11-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)71; GFX11-GISEL-FAKE16-NEXT: v_sqrt_f16_e64 v0, |v0|72; GFX11-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]73 %fabs.src = call half @llvm.fabs.f16(half %src)74 %sqrt = call half @llvm.amdgcn.sqrt.f16(half %fabs.src)75 ret half %sqrt76}77 78define half @v_fneg_fabs_sqrt_f16(half %src) {79; GCN-LABEL: v_fneg_fabs_sqrt_f16:80; GCN: ; %bb.0:81; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)82; GCN-NEXT: v_sqrt_f16_e64 v0, -|v0|83; GCN-NEXT: s_setpc_b64 s[30:31]84;85; GFX11-SDAG-TRUE16-LABEL: v_fneg_fabs_sqrt_f16:86; GFX11-SDAG-TRUE16: ; %bb.0:87; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)88; GFX11-SDAG-TRUE16-NEXT: v_sqrt_f16_e64 v0.l, -|v0.l|89; GFX11-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]90;91; GFX11-SDAG-FAKE16-LABEL: v_fneg_fabs_sqrt_f16:92; GFX11-SDAG-FAKE16: ; %bb.0:93; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)94; GFX11-SDAG-FAKE16-NEXT: v_sqrt_f16_e64 v0, -|v0|95; GFX11-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]96;97; GFX11-GISEL-TRUE16-LABEL: v_fneg_fabs_sqrt_f16:98; GFX11-GISEL-TRUE16: ; %bb.0:99; GFX11-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)100; GFX11-GISEL-TRUE16-NEXT: v_sqrt_f16_e64 v0.l, -|v0.l|101; GFX11-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]102;103; GFX11-GISEL-FAKE16-LABEL: v_fneg_fabs_sqrt_f16:104; GFX11-GISEL-FAKE16: ; %bb.0:105; GFX11-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)106; GFX11-GISEL-FAKE16-NEXT: v_sqrt_f16_e64 v0, -|v0|107; GFX11-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]108 %fabs.src = call half @llvm.fabs.f16(half %src)109 %neg.fabs.src = fneg half %fabs.src110 %sqrt = call half @llvm.amdgcn.sqrt.f16(half %neg.fabs.src)111 ret half %sqrt112}113 114declare half @llvm.amdgcn.sqrt.f16(half) #0115declare half @llvm.fabs.f16(half) #0116 117attributes #0 = { nounwind readnone speculatable willreturn }118