| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 | |
| ; RUN: llc -global-isel=0 -mtriple=amdgpu12.50-amd-amdhsa -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX12-TRUE16-SDAG %s | |
| ; RUN: llc -global-isel=1 -mtriple=amdgpu12.50-amd-amdhsa -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX12-TRUE16-GISEL %s | |
| ; RUN: llc -global-isel=0 -mtriple=amdgpu12.50-amd-amdhsa -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX12-FAKE16-SDAG %s | |
| ; RUN: llc -global-isel=1 -mtriple=amdgpu12.50-amd-amdhsa -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX12-FAKE16-GISEL %s | |
| declare bfloat @llvm.sqrt.bf16(bfloat %a) | |
| declare <2 x bfloat> @llvm.sqrt.v2bf16(<2 x bfloat> %a) | |
| define bfloat @sqrt_bf16(bfloat %a) { | |
| ; GFX12-TRUE16-SDAG-LABEL: sqrt_bf16: | |
| ; GFX12-TRUE16-SDAG: ; %bb.0: | |
| ; GFX12-TRUE16-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 | |
| ; GFX12-TRUE16-SDAG-NEXT: s_wait_kmcnt 0x0 | |
| ; GFX12-TRUE16-SDAG-NEXT: v_sqrt_bf16_e32 v0.l, v0.l | |
| ; GFX12-TRUE16-SDAG-NEXT: s_set_pc_i64 s[30:31] | |
| ; | |
| ; GFX12-TRUE16-GISEL-LABEL: sqrt_bf16: | |
| ; GFX12-TRUE16-GISEL: ; %bb.0: | |
| ; GFX12-TRUE16-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0 | |
| ; GFX12-TRUE16-GISEL-NEXT: s_wait_kmcnt 0x0 | |
| ; GFX12-TRUE16-GISEL-NEXT: v_sqrt_bf16_e32 v0.l, v0.l | |
| ; GFX12-TRUE16-GISEL-NEXT: s_set_pc_i64 s[30:31] | |
| ; | |
| ; GFX12-FAKE16-SDAG-LABEL: sqrt_bf16: | |
| ; GFX12-FAKE16-SDAG: ; %bb.0: | |
| ; GFX12-FAKE16-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 | |
| ; GFX12-FAKE16-SDAG-NEXT: s_wait_kmcnt 0x0 | |
| ; GFX12-FAKE16-SDAG-NEXT: v_sqrt_bf16_e32 v0, v0 | |
| ; GFX12-FAKE16-SDAG-NEXT: s_set_pc_i64 s[30:31] | |
| ; | |
| ; GFX12-FAKE16-GISEL-LABEL: sqrt_bf16: | |
| ; GFX12-FAKE16-GISEL: ; %bb.0: | |
| ; GFX12-FAKE16-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0 | |
| ; GFX12-FAKE16-GISEL-NEXT: s_wait_kmcnt 0x0 | |
| ; GFX12-FAKE16-GISEL-NEXT: v_sqrt_bf16_e32 v0, v0 | |
| ; GFX12-FAKE16-GISEL-NEXT: s_set_pc_i64 s[30:31] | |
| %r.val = call bfloat @llvm.sqrt.bf16(bfloat %a) | |
| ret bfloat %r.val | |
| } | |
| define <2 x bfloat> @sqrt_v2bf16(<2 x bfloat> %a) { | |
| ; GFX12-TRUE16-SDAG-LABEL: sqrt_v2bf16: | |
| ; GFX12-TRUE16-SDAG: ; %bb.0: | |
| ; GFX12-TRUE16-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 | |
| ; GFX12-TRUE16-SDAG-NEXT: s_wait_kmcnt 0x0 | |
| ; GFX12-TRUE16-SDAG-NEXT: v_sqrt_bf16_e32 v0.l, v0.l | |
| ; GFX12-TRUE16-SDAG-NEXT: v_sqrt_bf16_e32 v0.h, v0.h | |
| ; GFX12-TRUE16-SDAG-NEXT: s_set_pc_i64 s[30:31] | |
| ; | |
| ; GFX12-TRUE16-GISEL-LABEL: sqrt_v2bf16: | |
| ; GFX12-TRUE16-GISEL: ; %bb.0: | |
| ; GFX12-TRUE16-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0 | |
| ; GFX12-TRUE16-GISEL-NEXT: s_wait_kmcnt 0x0 | |
| ; GFX12-TRUE16-GISEL-NEXT: v_sqrt_bf16_e32 v0.l, v0.l | |
| ; GFX12-TRUE16-GISEL-NEXT: v_sqrt_bf16_e32 v0.h, v0.h | |
| ; GFX12-TRUE16-GISEL-NEXT: s_set_pc_i64 s[30:31] | |
| ; | |
| ; GFX12-FAKE16-SDAG-LABEL: sqrt_v2bf16: | |
| ; GFX12-FAKE16-SDAG: ; %bb.0: | |
| ; GFX12-FAKE16-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0 | |
| ; GFX12-FAKE16-SDAG-NEXT: s_wait_kmcnt 0x0 | |
| ; GFX12-FAKE16-SDAG-NEXT: v_sqrt_bf16_e64 v1, v0 op_sel:[1,0] | |
| ; GFX12-FAKE16-SDAG-NEXT: v_sqrt_bf16_e32 v0, v0 | |
| ; GFX12-FAKE16-SDAG-NEXT: v_nop | |
| ; GFX12-FAKE16-SDAG-NEXT: s_delay_alu instid0(TRANS32_DEP_1) | |
| ; GFX12-FAKE16-SDAG-NEXT: v_perm_b32 v0, v1, v0, 0x5040100 | |
| ; GFX12-FAKE16-SDAG-NEXT: s_set_pc_i64 s[30:31] | |
| ; | |
| ; GFX12-FAKE16-GISEL-LABEL: sqrt_v2bf16: | |
| ; GFX12-FAKE16-GISEL: ; %bb.0: | |
| ; GFX12-FAKE16-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0 | |
| ; GFX12-FAKE16-GISEL-NEXT: s_wait_kmcnt 0x0 | |
| ; GFX12-FAKE16-GISEL-NEXT: v_sqrt_bf16_e32 v1, v0 | |
| ; GFX12-FAKE16-GISEL-NEXT: v_sqrt_bf16_e64 v0, v0 op_sel:[1,0] | |
| ; GFX12-FAKE16-GISEL-NEXT: v_nop | |
| ; GFX12-FAKE16-GISEL-NEXT: s_delay_alu instid0(TRANS32_DEP_1) | |
| ; GFX12-FAKE16-GISEL-NEXT: v_pack_b32_f16 v0, v1, v0 | |
| ; GFX12-FAKE16-GISEL-NEXT: s_set_pc_i64 s[30:31] | |
| %r.val = call <2 x bfloat> @llvm.sqrt.v2bf16(<2 x bfloat> %a) | |
| ret <2 x bfloat> %r.val | |
| } |