blob: 65a22f19644c5a4935dbd9706b8d8253db80b23d [file] [edit]
; 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
}