brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.8 KiB · 84a27bb Raw
282 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=SI %s3; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=fiji -mattr=-flat-for-global < %s | FileCheck -check-prefixes=VI %s4; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 -mattr=-flat-for-global < %s | FileCheck -check-prefixes=GFX11-TRUE16 %s5; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -mattr=-flat-for-global < %s | FileCheck -check-prefixes=GFX11-FAKE16 %s6; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1200 -mattr=+real-true16 -mattr=-flat-for-global < %s | FileCheck -check-prefixes=GFX12-TRUE16 %s7; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1200 -mattr=-real-true16 -mattr=-flat-for-global < %s | FileCheck -check-prefixes=GFX12-FAKE16 %s8 9declare half @llvm.sqrt.f16(half %a)10declare <2 x half> @llvm.sqrt.v2f16(<2 x half> %a)11 12define amdgpu_kernel void @sqrt_f16(13; SI-LABEL: sqrt_f16:14; SI:       ; %bb.0: ; %entry15; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x916; SI-NEXT:    s_mov_b32 s7, 0xf00017; SI-NEXT:    s_mov_b32 s6, -118; SI-NEXT:    s_mov_b32 s10, s619; SI-NEXT:    s_mov_b32 s11, s720; SI-NEXT:    s_waitcnt lgkmcnt(0)21; SI-NEXT:    s_mov_b32 s8, s222; SI-NEXT:    s_mov_b32 s9, s323; SI-NEXT:    buffer_load_ushort v0, off, s[8:11], 024; SI-NEXT:    s_mov_b32 s4, s025; SI-NEXT:    s_mov_b32 s5, s126; SI-NEXT:    s_waitcnt vmcnt(0)27; SI-NEXT:    v_cvt_f32_f16_e32 v0, v028; SI-NEXT:    v_sqrt_f32_e32 v0, v029; SI-NEXT:    v_cvt_f16_f32_e32 v0, v030; SI-NEXT:    buffer_store_short v0, off, s[4:7], 031; SI-NEXT:    s_endpgm32;33; VI-LABEL: sqrt_f16:34; VI:       ; %bb.0: ; %entry35; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x2436; VI-NEXT:    s_mov_b32 s7, 0xf00037; VI-NEXT:    s_mov_b32 s6, -138; VI-NEXT:    s_mov_b32 s10, s639; VI-NEXT:    s_mov_b32 s11, s740; VI-NEXT:    s_waitcnt lgkmcnt(0)41; VI-NEXT:    s_mov_b32 s8, s242; VI-NEXT:    s_mov_b32 s9, s343; VI-NEXT:    buffer_load_ushort v0, off, s[8:11], 044; VI-NEXT:    s_mov_b32 s4, s045; VI-NEXT:    s_mov_b32 s5, s146; VI-NEXT:    s_waitcnt vmcnt(0)47; VI-NEXT:    v_sqrt_f16_e32 v0, v048; VI-NEXT:    buffer_store_short v0, off, s[4:7], 049; VI-NEXT:    s_endpgm50;51; GFX11-TRUE16-LABEL: sqrt_f16:52; GFX11-TRUE16:       ; %bb.0: ; %entry53; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x2454; GFX11-TRUE16-NEXT:    s_mov_b32 s6, -155; GFX11-TRUE16-NEXT:    s_mov_b32 s7, 0x3101600056; GFX11-TRUE16-NEXT:    s_mov_b32 s10, s657; GFX11-TRUE16-NEXT:    s_mov_b32 s11, s758; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)59; GFX11-TRUE16-NEXT:    s_mov_b32 s8, s260; GFX11-TRUE16-NEXT:    s_mov_b32 s9, s361; GFX11-TRUE16-NEXT:    s_mov_b32 s4, s062; GFX11-TRUE16-NEXT:    buffer_load_u16 v0, off, s[8:11], 063; GFX11-TRUE16-NEXT:    s_mov_b32 s5, s164; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)65; GFX11-TRUE16-NEXT:    v_sqrt_f16_e32 v0.l, v0.l66; GFX11-TRUE16-NEXT:    buffer_store_b16 v0, off, s[4:7], 067; GFX11-TRUE16-NEXT:    s_endpgm68;69; GFX11-FAKE16-LABEL: sqrt_f16:70; GFX11-FAKE16:       ; %bb.0: ; %entry71; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x2472; GFX11-FAKE16-NEXT:    s_mov_b32 s6, -173; GFX11-FAKE16-NEXT:    s_mov_b32 s7, 0x3101600074; GFX11-FAKE16-NEXT:    s_mov_b32 s10, s675; GFX11-FAKE16-NEXT:    s_mov_b32 s11, s776; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)77; GFX11-FAKE16-NEXT:    s_mov_b32 s8, s278; GFX11-FAKE16-NEXT:    s_mov_b32 s9, s379; GFX11-FAKE16-NEXT:    s_mov_b32 s4, s080; GFX11-FAKE16-NEXT:    buffer_load_u16 v0, off, s[8:11], 081; GFX11-FAKE16-NEXT:    s_mov_b32 s5, s182; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)83; GFX11-FAKE16-NEXT:    v_sqrt_f16_e32 v0, v084; GFX11-FAKE16-NEXT:    buffer_store_b16 v0, off, s[4:7], 085; GFX11-FAKE16-NEXT:    s_endpgm86;87; GFX12-TRUE16-LABEL: sqrt_f16:88; GFX12-TRUE16:       ; %bb.0: ; %entry89; GFX12-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x2490; GFX12-TRUE16-NEXT:    s_mov_b32 s6, -191; GFX12-TRUE16-NEXT:    s_mov_b32 s7, 0x3101600092; GFX12-TRUE16-NEXT:    s_mov_b32 s10, s693; GFX12-TRUE16-NEXT:    s_mov_b32 s11, s794; GFX12-TRUE16-NEXT:    s_wait_kmcnt 0x095; GFX12-TRUE16-NEXT:    s_mov_b32 s8, s296; GFX12-TRUE16-NEXT:    s_mov_b32 s9, s397; GFX12-TRUE16-NEXT:    s_mov_b32 s4, s098; GFX12-TRUE16-NEXT:    buffer_load_u16 v0, off, s[8:11], null99; GFX12-TRUE16-NEXT:    s_mov_b32 s5, s1100; GFX12-TRUE16-NEXT:    s_wait_loadcnt 0x0101; GFX12-TRUE16-NEXT:    v_sqrt_f16_e32 v0.l, v0.l102; GFX12-TRUE16-NEXT:    buffer_store_b16 v0, off, s[4:7], null103; GFX12-TRUE16-NEXT:    s_endpgm104;105; GFX12-FAKE16-LABEL: sqrt_f16:106; GFX12-FAKE16:       ; %bb.0: ; %entry107; GFX12-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24108; GFX12-FAKE16-NEXT:    s_mov_b32 s6, -1109; GFX12-FAKE16-NEXT:    s_mov_b32 s7, 0x31016000110; GFX12-FAKE16-NEXT:    s_mov_b32 s10, s6111; GFX12-FAKE16-NEXT:    s_mov_b32 s11, s7112; GFX12-FAKE16-NEXT:    s_wait_kmcnt 0x0113; GFX12-FAKE16-NEXT:    s_mov_b32 s8, s2114; GFX12-FAKE16-NEXT:    s_mov_b32 s9, s3115; GFX12-FAKE16-NEXT:    s_mov_b32 s4, s0116; GFX12-FAKE16-NEXT:    buffer_load_u16 v0, off, s[8:11], null117; GFX12-FAKE16-NEXT:    s_mov_b32 s5, s1118; GFX12-FAKE16-NEXT:    s_wait_loadcnt 0x0119; GFX12-FAKE16-NEXT:    v_sqrt_f16_e32 v0, v0120; GFX12-FAKE16-NEXT:    buffer_store_b16 v0, off, s[4:7], null121; GFX12-FAKE16-NEXT:    s_endpgm122    ptr addrspace(1) %r,123    ptr addrspace(1) %a) {124entry:125  %a.val = load half, ptr addrspace(1) %a126  %r.val = call half @llvm.sqrt.f16(half %a.val)127  store half %r.val, ptr addrspace(1) %r128  ret void129}130 131; The original test with manual checks also had these NOT directives:132; COM: SI-DAG: v_lshlrev_b32_e32 v[[R_F16_HI:[0-9]+]], 16, v[[R_F16_1]]133; COM: SI-NOT: v_and_b32134; COM: SI: v_or_b32_e32 v[[R_V2_F16:[0-9]+]], v[[R_F16_0]], v[[R_F16_HI]]135; COM: VI-DAG: v_sqrt_f16_sdwa v[[R_F16_1:[0-9]+]], v[[A_V2_F16]] dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1136; COM: VI-NOT: v_and_b32137; COM: VI: v_or_b32_e32 v[[R_V2_F16:[0-9]+]], v[[R_F16_0]], v[[R_F16_1]]138define amdgpu_kernel void @sqrt_v2f16(139; SI-LABEL: sqrt_v2f16:140; SI:       ; %bb.0: ; %entry141; SI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9142; SI-NEXT:    s_mov_b32 s7, 0xf000143; SI-NEXT:    s_mov_b32 s6, -1144; SI-NEXT:    s_mov_b32 s10, s6145; SI-NEXT:    s_mov_b32 s11, s7146; SI-NEXT:    s_waitcnt lgkmcnt(0)147; SI-NEXT:    s_mov_b32 s8, s2148; SI-NEXT:    s_mov_b32 s9, s3149; SI-NEXT:    buffer_load_dword v0, off, s[8:11], 0150; SI-NEXT:    s_mov_b32 s4, s0151; SI-NEXT:    s_mov_b32 s5, s1152; SI-NEXT:    s_waitcnt vmcnt(0)153; SI-NEXT:    v_lshrrev_b32_e32 v1, 16, v0154; SI-NEXT:    v_cvt_f32_f16_e32 v1, v1155; SI-NEXT:    v_cvt_f32_f16_e32 v0, v0156; SI-NEXT:    v_sqrt_f32_e32 v1, v1157; SI-NEXT:    v_sqrt_f32_e32 v0, v0158; SI-NEXT:    v_cvt_f16_f32_e32 v1, v1159; SI-NEXT:    v_cvt_f16_f32_e32 v0, v0160; SI-NEXT:    v_lshlrev_b32_e32 v1, 16, v1161; SI-NEXT:    v_or_b32_e32 v0, v0, v1162; SI-NEXT:    buffer_store_dword v0, off, s[4:7], 0163; SI-NEXT:    s_endpgm164;165; VI-LABEL: sqrt_v2f16:166; VI:       ; %bb.0: ; %entry167; VI-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24168; VI-NEXT:    s_mov_b32 s7, 0xf000169; VI-NEXT:    s_mov_b32 s6, -1170; VI-NEXT:    s_mov_b32 s10, s6171; VI-NEXT:    s_mov_b32 s11, s7172; VI-NEXT:    s_waitcnt lgkmcnt(0)173; VI-NEXT:    s_mov_b32 s8, s2174; VI-NEXT:    s_mov_b32 s9, s3175; VI-NEXT:    buffer_load_dword v0, off, s[8:11], 0176; VI-NEXT:    s_mov_b32 s4, s0177; VI-NEXT:    s_mov_b32 s5, s1178; VI-NEXT:    s_waitcnt vmcnt(0)179; VI-NEXT:    v_sqrt_f16_sdwa v1, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1180; VI-NEXT:    v_sqrt_f16_e32 v0, v0181; VI-NEXT:    v_or_b32_e32 v0, v0, v1182; VI-NEXT:    buffer_store_dword v0, off, s[4:7], 0183; VI-NEXT:    s_endpgm184;185; GFX11-TRUE16-LABEL: sqrt_v2f16:186; GFX11-TRUE16:       ; %bb.0: ; %entry187; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24188; GFX11-TRUE16-NEXT:    s_mov_b32 s6, -1189; GFX11-TRUE16-NEXT:    s_mov_b32 s7, 0x31016000190; GFX11-TRUE16-NEXT:    s_mov_b32 s10, s6191; GFX11-TRUE16-NEXT:    s_mov_b32 s11, s7192; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)193; GFX11-TRUE16-NEXT:    s_mov_b32 s8, s2194; GFX11-TRUE16-NEXT:    s_mov_b32 s9, s3195; GFX11-TRUE16-NEXT:    s_mov_b32 s4, s0196; GFX11-TRUE16-NEXT:    buffer_load_b32 v0, off, s[8:11], 0197; GFX11-TRUE16-NEXT:    s_mov_b32 s5, s1198; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)199; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v0200; GFX11-TRUE16-NEXT:    v_sqrt_f16_e32 v0.l, v0.l201; GFX11-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)202; GFX11-TRUE16-NEXT:    v_sqrt_f16_e32 v0.h, v1.l203; GFX11-TRUE16-NEXT:    s_waitcnt_depctr depctr_va_vdst(0)204; GFX11-TRUE16-NEXT:    v_pack_b32_f16 v0, v0.l, v0.h205; GFX11-TRUE16-NEXT:    buffer_store_b32 v0, off, s[4:7], 0206; GFX11-TRUE16-NEXT:    s_endpgm207;208; GFX11-FAKE16-LABEL: sqrt_v2f16:209; GFX11-FAKE16:       ; %bb.0: ; %entry210; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24211; GFX11-FAKE16-NEXT:    s_mov_b32 s6, -1212; GFX11-FAKE16-NEXT:    s_mov_b32 s7, 0x31016000213; GFX11-FAKE16-NEXT:    s_mov_b32 s10, s6214; GFX11-FAKE16-NEXT:    s_mov_b32 s11, s7215; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)216; GFX11-FAKE16-NEXT:    s_mov_b32 s8, s2217; GFX11-FAKE16-NEXT:    s_mov_b32 s9, s3218; GFX11-FAKE16-NEXT:    s_mov_b32 s4, s0219; GFX11-FAKE16-NEXT:    buffer_load_b32 v0, off, s[8:11], 0220; GFX11-FAKE16-NEXT:    s_mov_b32 s5, s1221; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)222; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v0223; GFX11-FAKE16-NEXT:    v_sqrt_f16_e32 v0, v0224; GFX11-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)225; GFX11-FAKE16-NEXT:    v_sqrt_f16_e32 v1, v1226; GFX11-FAKE16-NEXT:    s_waitcnt_depctr depctr_va_vdst(0)227; GFX11-FAKE16-NEXT:    v_pack_b32_f16 v0, v0, v1228; GFX11-FAKE16-NEXT:    buffer_store_b32 v0, off, s[4:7], 0229; GFX11-FAKE16-NEXT:    s_endpgm230;231; GFX12-TRUE16-LABEL: sqrt_v2f16:232; GFX12-TRUE16:       ; %bb.0: ; %entry233; GFX12-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24234; GFX12-TRUE16-NEXT:    s_mov_b32 s6, -1235; GFX12-TRUE16-NEXT:    s_mov_b32 s7, 0x31016000236; GFX12-TRUE16-NEXT:    s_mov_b32 s10, s6237; GFX12-TRUE16-NEXT:    s_mov_b32 s11, s7238; GFX12-TRUE16-NEXT:    s_wait_kmcnt 0x0239; GFX12-TRUE16-NEXT:    s_mov_b32 s8, s2240; GFX12-TRUE16-NEXT:    s_mov_b32 s9, s3241; GFX12-TRUE16-NEXT:    s_mov_b32 s4, s0242; GFX12-TRUE16-NEXT:    buffer_load_b32 v0, off, s[8:11], null243; GFX12-TRUE16-NEXT:    s_mov_b32 s5, s1244; GFX12-TRUE16-NEXT:    s_wait_loadcnt 0x0245; GFX12-TRUE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v0246; GFX12-TRUE16-NEXT:    v_sqrt_f16_e32 v0.l, v0.l247; GFX12-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(TRANS32_DEP_1)248; GFX12-TRUE16-NEXT:    v_sqrt_f16_e32 v0.h, v1.l249; GFX12-TRUE16-NEXT:    v_pack_b32_f16 v0, v0.l, v0.h250; GFX12-TRUE16-NEXT:    buffer_store_b32 v0, off, s[4:7], null251; GFX12-TRUE16-NEXT:    s_endpgm252;253; GFX12-FAKE16-LABEL: sqrt_v2f16:254; GFX12-FAKE16:       ; %bb.0: ; %entry255; GFX12-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24256; GFX12-FAKE16-NEXT:    s_mov_b32 s6, -1257; GFX12-FAKE16-NEXT:    s_mov_b32 s7, 0x31016000258; GFX12-FAKE16-NEXT:    s_mov_b32 s10, s6259; GFX12-FAKE16-NEXT:    s_mov_b32 s11, s7260; GFX12-FAKE16-NEXT:    s_wait_kmcnt 0x0261; GFX12-FAKE16-NEXT:    s_mov_b32 s8, s2262; GFX12-FAKE16-NEXT:    s_mov_b32 s9, s3263; GFX12-FAKE16-NEXT:    s_mov_b32 s4, s0264; GFX12-FAKE16-NEXT:    buffer_load_b32 v0, off, s[8:11], null265; GFX12-FAKE16-NEXT:    s_mov_b32 s5, s1266; GFX12-FAKE16-NEXT:    s_wait_loadcnt 0x0267; GFX12-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v0268; GFX12-FAKE16-NEXT:    v_sqrt_f16_e32 v0, v0269; GFX12-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(TRANS32_DEP_1)270; GFX12-FAKE16-NEXT:    v_sqrt_f16_e32 v1, v1271; GFX12-FAKE16-NEXT:    v_pack_b32_f16 v0, v0, v1272; GFX12-FAKE16-NEXT:    buffer_store_b32 v0, off, s[4:7], null273; GFX12-FAKE16-NEXT:    s_endpgm274    ptr addrspace(1) %r,275    ptr addrspace(1) %a) {276entry:277  %a.val = load <2 x half>, ptr addrspace(1) %a278  %r.val = call <2 x half> @llvm.sqrt.v2f16(<2 x half> %a.val)279  store <2 x half> %r.val, ptr addrspace(1) %r280  ret void281}282