brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.1 KiB · e5fcc26 Raw
299 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=tahiti < %s | FileCheck -enable-var-scope --check-prefix=GFX6 %s3; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=fiji < %s | FileCheck -enable-var-scope --check-prefix=GFX8 %s4; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -enable-var-scope --check-prefix=GFX9 %s5; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1010 < %s | FileCheck -enable-var-scope --check-prefix=GFX10 %s6; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck -enable-var-scope --check-prefixes=GFX11,GFX11-TRUE16 %s7; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck -enable-var-scope --check-prefixes=GFX11,GFX11-FAKE16 %s8; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1200 -mattr=+real-true16 < %s | FileCheck -enable-var-scope --check-prefixes=GFX12,GFX12-TRUE16 %s9; RUN: llc -amdgpu-scalarize-global-loads=false -mtriple=amdgcn -mcpu=gfx1200 -mattr=-real-true16 < %s | FileCheck -enable-var-scope --check-prefixes=GFX12,GFX12-FAKE16 %s10 11define amdgpu_kernel void @cos_f16(ptr addrspace(1) %r, ptr addrspace(1) %a) {12; GFX6-LABEL: cos_f16:13; GFX6:       ; %bb.0:14; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x915; GFX6-NEXT:    s_mov_b32 s7, 0xf00016; GFX6-NEXT:    s_mov_b32 s6, -117; GFX6-NEXT:    s_mov_b32 s10, s618; GFX6-NEXT:    s_mov_b32 s11, s719; GFX6-NEXT:    s_waitcnt lgkmcnt(0)20; GFX6-NEXT:    s_mov_b32 s8, s221; GFX6-NEXT:    s_mov_b32 s9, s322; GFX6-NEXT:    buffer_load_ushort v0, off, s[8:11], 023; GFX6-NEXT:    s_mov_b32 s4, s024; GFX6-NEXT:    s_mov_b32 s5, s125; GFX6-NEXT:    s_waitcnt vmcnt(0)26; GFX6-NEXT:    v_cvt_f32_f16_e32 v0, v027; GFX6-NEXT:    v_mul_f32_e32 v0, 0x3e22f983, v028; GFX6-NEXT:    v_fract_f32_e32 v0, v029; GFX6-NEXT:    v_cos_f32_e32 v0, v030; GFX6-NEXT:    v_cvt_f16_f32_e32 v0, v031; GFX6-NEXT:    buffer_store_short v0, off, s[4:7], 032; GFX6-NEXT:    s_endpgm33;34; GFX8-LABEL: cos_f16:35; GFX8:       ; %bb.0:36; GFX8-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x2437; GFX8-NEXT:    s_waitcnt lgkmcnt(0)38; GFX8-NEXT:    v_mov_b32_e32 v0, s239; GFX8-NEXT:    v_mov_b32_e32 v1, s340; GFX8-NEXT:    flat_load_ushort v0, v[0:1]41; GFX8-NEXT:    v_mov_b32_e32 v1, s142; GFX8-NEXT:    s_waitcnt vmcnt(0)43; GFX8-NEXT:    v_mul_f16_e32 v0, 0.15915494, v044; GFX8-NEXT:    v_fract_f16_e32 v0, v045; GFX8-NEXT:    v_cos_f16_e32 v2, v046; GFX8-NEXT:    v_mov_b32_e32 v0, s047; GFX8-NEXT:    flat_store_short v[0:1], v248; GFX8-NEXT:    s_endpgm49;50; GFX9-LABEL: cos_f16:51; GFX9:       ; %bb.0:52; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x2453; GFX9-NEXT:    v_mov_b32_e32 v0, 054; GFX9-NEXT:    s_waitcnt lgkmcnt(0)55; GFX9-NEXT:    global_load_ushort v1, v0, s[2:3]56; GFX9-NEXT:    s_waitcnt vmcnt(0)57; GFX9-NEXT:    v_mul_f16_e32 v1, 0.15915494, v158; GFX9-NEXT:    v_cos_f16_e32 v1, v159; GFX9-NEXT:    global_store_short v0, v1, s[0:1]60; GFX9-NEXT:    s_endpgm61;62; GFX10-LABEL: cos_f16:63; GFX10:       ; %bb.0:64; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x2465; GFX10-NEXT:    v_mov_b32_e32 v0, 066; GFX10-NEXT:    s_waitcnt lgkmcnt(0)67; GFX10-NEXT:    global_load_ushort v1, v0, s[2:3]68; GFX10-NEXT:    s_waitcnt vmcnt(0)69; GFX10-NEXT:    v_mul_f16_e32 v1, 0.15915494, v170; GFX10-NEXT:    v_cos_f16_e32 v1, v171; GFX10-NEXT:    global_store_short v0, v1, s[0:1]72; GFX10-NEXT:    s_endpgm73;74; GFX11-TRUE16-LABEL: cos_f16:75; GFX11-TRUE16:       ; %bb.0:76; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x2477; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v1, 078; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)79; GFX11-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[2:3]80; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)81; GFX11-TRUE16-NEXT:    v_mul_f16_e32 v0.l, 0.15915494, v0.l82; GFX11-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)83; GFX11-TRUE16-NEXT:    v_cos_f16_e32 v0.l, v0.l84; GFX11-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1]85; GFX11-TRUE16-NEXT:    s_endpgm86;87; GFX11-FAKE16-LABEL: cos_f16:88; GFX11-FAKE16:       ; %bb.0:89; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x2490; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v0, 091; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)92; GFX11-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3]93; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)94; GFX11-FAKE16-NEXT:    v_mul_f16_e32 v1, 0.15915494, v195; GFX11-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)96; GFX11-FAKE16-NEXT:    v_cos_f16_e32 v1, v197; GFX11-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]98; GFX11-FAKE16-NEXT:    s_endpgm99;100; GFX12-TRUE16-LABEL: cos_f16:101; GFX12-TRUE16:       ; %bb.0:102; GFX12-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24103; GFX12-TRUE16-NEXT:    v_mov_b32_e32 v1, 0104; GFX12-TRUE16-NEXT:    s_wait_kmcnt 0x0105; GFX12-TRUE16-NEXT:    global_load_d16_b16 v0, v1, s[2:3]106; GFX12-TRUE16-NEXT:    s_wait_loadcnt 0x0107; GFX12-TRUE16-NEXT:    v_mul_f16_e32 v0.l, 0.15915494, v0.l108; GFX12-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)109; GFX12-TRUE16-NEXT:    v_cos_f16_e32 v0.l, v0.l110; GFX12-TRUE16-NEXT:    global_store_b16 v1, v0, s[0:1]111; GFX12-TRUE16-NEXT:    s_endpgm112;113; GFX12-FAKE16-LABEL: cos_f16:114; GFX12-FAKE16:       ; %bb.0:115; GFX12-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24116; GFX12-FAKE16-NEXT:    v_mov_b32_e32 v0, 0117; GFX12-FAKE16-NEXT:    s_wait_kmcnt 0x0118; GFX12-FAKE16-NEXT:    global_load_u16 v1, v0, s[2:3]119; GFX12-FAKE16-NEXT:    s_wait_loadcnt 0x0120; GFX12-FAKE16-NEXT:    v_mul_f16_e32 v1, 0.15915494, v1121; GFX12-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)122; GFX12-FAKE16-NEXT:    v_cos_f16_e32 v1, v1123; GFX12-FAKE16-NEXT:    global_store_b16 v0, v1, s[0:1]124; GFX12-FAKE16-NEXT:    s_endpgm125  %a.val = load half, ptr addrspace(1) %a126  %r.val = call half @llvm.cos.f16(half %a.val)127  store half %r.val, ptr addrspace(1) %r128  ret void129}130 131define amdgpu_kernel void @cos_v2f16(ptr addrspace(1) %r, ptr addrspace(1) %a) {132; GFX6-LABEL: cos_v2f16:133; GFX6:       ; %bb.0:134; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9135; GFX6-NEXT:    s_mov_b32 s7, 0xf000136; GFX6-NEXT:    s_mov_b32 s6, -1137; GFX6-NEXT:    s_mov_b32 s10, s6138; GFX6-NEXT:    s_mov_b32 s11, s7139; GFX6-NEXT:    s_waitcnt lgkmcnt(0)140; GFX6-NEXT:    s_mov_b32 s8, s2141; GFX6-NEXT:    s_mov_b32 s9, s3142; GFX6-NEXT:    buffer_load_dword v0, off, s[8:11], 0143; GFX6-NEXT:    s_mov_b32 s4, s0144; GFX6-NEXT:    s_mov_b32 s5, s1145; GFX6-NEXT:    s_waitcnt vmcnt(0)146; GFX6-NEXT:    v_cvt_f32_f16_e32 v1, v0147; GFX6-NEXT:    v_lshrrev_b32_e32 v0, 16, v0148; GFX6-NEXT:    v_cvt_f32_f16_e32 v0, v0149; GFX6-NEXT:    v_mul_f32_e32 v1, 0x3e22f983, v1150; GFX6-NEXT:    v_fract_f32_e32 v1, v1151; GFX6-NEXT:    v_mul_f32_e32 v0, 0x3e22f983, v0152; GFX6-NEXT:    v_fract_f32_e32 v0, v0153; GFX6-NEXT:    v_cos_f32_e32 v0, v0154; GFX6-NEXT:    v_cos_f32_e32 v1, v1155; GFX6-NEXT:    v_cvt_f16_f32_e32 v0, v0156; GFX6-NEXT:    v_cvt_f16_f32_e32 v1, v1157; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 16, v0158; GFX6-NEXT:    v_or_b32_e32 v0, v1, v0159; GFX6-NEXT:    buffer_store_dword v0, off, s[4:7], 0160; GFX6-NEXT:    s_endpgm161;162; GFX8-LABEL: cos_v2f16:163; GFX8:       ; %bb.0:164; GFX8-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24165; GFX8-NEXT:    s_waitcnt lgkmcnt(0)166; GFX8-NEXT:    v_mov_b32_e32 v0, s2167; GFX8-NEXT:    v_mov_b32_e32 v1, s3168; GFX8-NEXT:    flat_load_dword v0, v[0:1]169; GFX8-NEXT:    v_mov_b32_e32 v1, 0x3118170; GFX8-NEXT:    s_waitcnt vmcnt(0)171; GFX8-NEXT:    v_mul_f16_sdwa v1, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD172; GFX8-NEXT:    v_mul_f16_e32 v0, 0.15915494, v0173; GFX8-NEXT:    v_fract_f16_e32 v1, v1174; GFX8-NEXT:    v_fract_f16_e32 v0, v0175; GFX8-NEXT:    v_cos_f16_sdwa v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD176; GFX8-NEXT:    v_cos_f16_e32 v3, v0177; GFX8-NEXT:    v_mov_b32_e32 v0, s0178; GFX8-NEXT:    v_mov_b32_e32 v1, s1179; GFX8-NEXT:    v_or_b32_e32 v2, v3, v2180; GFX8-NEXT:    flat_store_dword v[0:1], v2181; GFX8-NEXT:    s_endpgm182;183; GFX9-LABEL: cos_v2f16:184; GFX9:       ; %bb.0:185; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24186; GFX9-NEXT:    v_mov_b32_e32 v0, 0187; GFX9-NEXT:    v_mov_b32_e32 v2, 0x3118188; GFX9-NEXT:    s_waitcnt lgkmcnt(0)189; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]190; GFX9-NEXT:    s_waitcnt vmcnt(0)191; GFX9-NEXT:    v_mul_f16_e32 v3, 0.15915494, v1192; GFX9-NEXT:    v_mul_f16_sdwa v1, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD193; GFX9-NEXT:    v_cos_f16_e32 v2, v3194; GFX9-NEXT:    v_cos_f16_e32 v1, v1195; GFX9-NEXT:    v_pack_b32_f16 v1, v2, v1196; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]197; GFX9-NEXT:    s_endpgm198;199; GFX10-LABEL: cos_v2f16:200; GFX10:       ; %bb.0:201; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24202; GFX10-NEXT:    v_mov_b32_e32 v0, 0203; GFX10-NEXT:    v_mov_b32_e32 v2, 0x3118204; GFX10-NEXT:    s_waitcnt lgkmcnt(0)205; GFX10-NEXT:    global_load_dword v1, v0, s[2:3]206; GFX10-NEXT:    s_waitcnt vmcnt(0)207; GFX10-NEXT:    v_mul_f16_e32 v3, 0.15915494, v1208; GFX10-NEXT:    v_mul_f16_sdwa v1, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD209; GFX10-NEXT:    v_cos_f16_e32 v2, v3210; GFX10-NEXT:    v_cos_f16_e32 v1, v1211; GFX10-NEXT:    v_pack_b32_f16 v1, v2, v1212; GFX10-NEXT:    global_store_dword v0, v1, s[0:1]213; GFX10-NEXT:    s_endpgm214;215; GFX11-TRUE16-LABEL: cos_v2f16:216; GFX11-TRUE16:       ; %bb.0:217; GFX11-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24218; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v1, 0219; GFX11-TRUE16-NEXT:    s_waitcnt lgkmcnt(0)220; GFX11-TRUE16-NEXT:    global_load_b32 v0, v1, s[2:3]221; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)222; GFX11-TRUE16-NEXT:    v_lshrrev_b32_e32 v2, 16, v0223; GFX11-TRUE16-NEXT:    v_mul_f16_e32 v0.l, 0.15915494, v0.l224; GFX11-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)225; GFX11-TRUE16-NEXT:    v_mul_f16_e32 v0.h, 0.15915494, v2.l226; GFX11-TRUE16-NEXT:    v_cos_f16_e32 v0.l, v0.l227; GFX11-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)228; GFX11-TRUE16-NEXT:    v_cos_f16_e32 v0.h, v0.h229; GFX11-TRUE16-NEXT:    s_waitcnt_depctr depctr_va_vdst(0)230; GFX11-TRUE16-NEXT:    v_pack_b32_f16 v0, v0.l, v0.h231; GFX11-TRUE16-NEXT:    global_store_b32 v1, v0, s[0:1]232; GFX11-TRUE16-NEXT:    s_endpgm233;234; GFX11-FAKE16-LABEL: cos_v2f16:235; GFX11-FAKE16:       ; %bb.0:236; GFX11-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24237; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v0, 0238; GFX11-FAKE16-NEXT:    s_waitcnt lgkmcnt(0)239; GFX11-FAKE16-NEXT:    global_load_b32 v1, v0, s[2:3]240; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)241; GFX11-FAKE16-NEXT:    v_lshrrev_b32_e32 v2, 16, v1242; GFX11-FAKE16-NEXT:    v_mul_f16_e32 v1, 0.15915494, v1243; GFX11-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)244; GFX11-FAKE16-NEXT:    v_mul_f16_e32 v2, 0.15915494, v2245; GFX11-FAKE16-NEXT:    v_cos_f16_e32 v1, v1246; GFX11-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)247; GFX11-FAKE16-NEXT:    v_cos_f16_e32 v2, v2248; GFX11-FAKE16-NEXT:    s_waitcnt_depctr depctr_va_vdst(0)249; GFX11-FAKE16-NEXT:    v_pack_b32_f16 v1, v1, v2250; GFX11-FAKE16-NEXT:    global_store_b32 v0, v1, s[0:1]251; GFX11-FAKE16-NEXT:    s_endpgm252;253; GFX12-TRUE16-LABEL: cos_v2f16:254; GFX12-TRUE16:       ; %bb.0:255; GFX12-TRUE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24256; GFX12-TRUE16-NEXT:    v_mov_b32_e32 v1, 0257; GFX12-TRUE16-NEXT:    s_wait_kmcnt 0x0258; GFX12-TRUE16-NEXT:    global_load_b32 v0, v1, s[2:3]259; GFX12-TRUE16-NEXT:    s_wait_loadcnt 0x0260; GFX12-TRUE16-NEXT:    v_lshrrev_b32_e32 v2, 16, v0261; GFX12-TRUE16-NEXT:    v_mul_f16_e32 v0.l, 0.15915494, v0.l262; GFX12-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)263; GFX12-TRUE16-NEXT:    v_mul_f16_e32 v0.h, 0.15915494, v2.l264; GFX12-TRUE16-NEXT:    v_cos_f16_e32 v0.l, v0.l265; GFX12-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(TRANS32_DEP_1)266; GFX12-TRUE16-NEXT:    v_cos_f16_e32 v0.h, v0.h267; GFX12-TRUE16-NEXT:    v_pack_b32_f16 v0, v0.l, v0.h268; GFX12-TRUE16-NEXT:    global_store_b32 v1, v0, s[0:1]269; GFX12-TRUE16-NEXT:    s_endpgm270;271; GFX12-FAKE16-LABEL: cos_v2f16:272; GFX12-FAKE16:       ; %bb.0:273; GFX12-FAKE16-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24274; GFX12-FAKE16-NEXT:    v_mov_b32_e32 v0, 0275; GFX12-FAKE16-NEXT:    s_wait_kmcnt 0x0276; GFX12-FAKE16-NEXT:    global_load_b32 v1, v0, s[2:3]277; GFX12-FAKE16-NEXT:    s_wait_loadcnt 0x0278; GFX12-FAKE16-NEXT:    v_lshrrev_b32_e32 v2, 16, v1279; GFX12-FAKE16-NEXT:    v_mul_f16_e32 v1, 0.15915494, v1280; GFX12-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)281; GFX12-FAKE16-NEXT:    v_mul_f16_e32 v2, 0.15915494, v2282; GFX12-FAKE16-NEXT:    v_cos_f16_e32 v1, v1283; GFX12-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(TRANS32_DEP_1)284; GFX12-FAKE16-NEXT:    v_cos_f16_e32 v2, v2285; GFX12-FAKE16-NEXT:    v_pack_b32_f16 v1, v1, v2286; GFX12-FAKE16-NEXT:    global_store_b32 v0, v1, s[0:1]287; GFX12-FAKE16-NEXT:    s_endpgm288  %a.val = load <2 x half>, ptr addrspace(1) %a289  %r.val = call <2 x half> @llvm.cos.v2f16(<2 x half> %a.val)290  store <2 x half> %r.val, ptr addrspace(1) %r291  ret void292}293 294declare half @llvm.cos.f16(half %a)295declare <2 x half> @llvm.cos.v2f16(<2 x half> %a)296;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:297; GFX11: {{.*}}298; GFX12: {{.*}}299