| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | |
| ; RUN: llc -mtriple=amdgpu9.42-amd-amdhsa %s -o - | FileCheck -check-prefixes=GFX942,GFX942-SDAG %s | |
| ; RUN: llc -global-isel -mtriple=amdgpu9.42-amd-amdhsa %s -o - | FileCheck -check-prefixes=GFX942,GFX942-GISEL %s | |
| define void @memset_p0_varsize_align_4_varsetval(ptr addrspace(0) align 4 %dst, i8 %setval, i64 %size) #0 { | |
| ; GFX942-SDAG-LABEL: memset_p0_varsize_align_4_varsetval: | |
| ; GFX942-SDAG: ; %bb.0: ; %entry | |
| ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v11, v4 | |
| ; GFX942-SDAG-NEXT: v_and_b32_e32 v10, -16, v3 | |
| ; GFX942-SDAG-NEXT: v_and_b32_e32 v8, 15, v3 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v9, 0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[10:11] | |
| ; GFX942-SDAG-NEXT: s_and_saveexec_b64 s[2:3], vcc | |
| ; GFX942-SDAG-NEXT: s_cbranch_execz .LBB0_3 | |
| ; GFX942-SDAG-NEXT: ; %bb.1: ; %dynamic-memset-expansion-main-body.preheader | |
| ; GFX942-SDAG-NEXT: s_mov_b32 s4, 0x4040404 | |
| ; GFX942-SDAG-NEXT: v_perm_b32 v4, v2, v2, s4 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v5, v4 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v6, v4 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v7, v4 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[4:5], 0 | |
| ; GFX942-SDAG-NEXT: .LBB0_2: ; %dynamic-memset-expansion-main-body | |
| ; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[12:13], v[0:1], 0, s[4:5] | |
| ; GFX942-SDAG-NEXT: s_add_u32 s4, s4, 16 | |
| ; GFX942-SDAG-NEXT: s_addc_u32 s5, s5, 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_ge_u64_e32 vcc, s[4:5], v[10:11] | |
| ; GFX942-SDAG-NEXT: s_or_b64 s[0:1], vcc, s[0:1] | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[12:13], v[4:7] | |
| ; GFX942-SDAG-NEXT: s_andn2_b64 exec, exec, s[0:1] | |
| ; GFX942-SDAG-NEXT: s_cbranch_execnz .LBB0_2 | |
| ; GFX942-SDAG-NEXT: .LBB0_3: ; %Flow4 | |
| ; GFX942-SDAG-NEXT: s_or_b64 exec, exec, s[2:3] | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[8:9] | |
| ; GFX942-SDAG-NEXT: s_and_saveexec_b64 s[2:3], vcc | |
| ; GFX942-SDAG-NEXT: s_cbranch_execz .LBB0_6 | |
| ; GFX942-SDAG-NEXT: ; %bb.4: ; %dynamic-memset-expansion-residual-body.preheader | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[10:11] | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[4:5], 0 | |
| ; GFX942-SDAG-NEXT: .LBB0_5: ; %dynamic-memset-expansion-residual-body | |
| ; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[4:5], v[0:1], 0, s[4:5] | |
| ; GFX942-SDAG-NEXT: s_add_u32 s4, s4, 1 | |
| ; GFX942-SDAG-NEXT: s_addc_u32 s5, s5, 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_ge_u64_e32 vcc, s[4:5], v[8:9] | |
| ; GFX942-SDAG-NEXT: s_or_b64 s[0:1], vcc, s[0:1] | |
| ; GFX942-SDAG-NEXT: flat_store_byte v[4:5], v2 | |
| ; GFX942-SDAG-NEXT: s_andn2_b64 exec, exec, s[0:1] | |
| ; GFX942-SDAG-NEXT: s_cbranch_execnz .LBB0_5 | |
| ; GFX942-SDAG-NEXT: .LBB0_6: ; %Flow2 | |
| ; GFX942-SDAG-NEXT: s_or_b64 exec, exec, s[2:3] | |
| ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0) | |
| ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] | |
| ; | |
| ; GFX942-GISEL-LABEL: memset_p0_varsize_align_4_varsetval: | |
| ; GFX942-GISEL: ; %bb.0: ; %entry | |
| ; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[10:11], 15 | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v10, 15, v3 | |
| ; GFX942-GISEL-NEXT: v_sub_co_u32_e32 v12, vcc, v3, v10 | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-GISEL-NEXT: s_nop 0 | |
| ; GFX942-GISEL-NEXT: v_subbrev_co_u32_e32 v13, vcc, 0, v4, vcc | |
| ; GFX942-GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[12:13] | |
| ; GFX942-GISEL-NEXT: s_and_saveexec_b64 s[2:3], vcc | |
| ; GFX942-GISEL-NEXT: s_cbranch_execz .LBB0_3 | |
| ; GFX942-GISEL-NEXT: ; %bb.1: ; %dynamic-memset-expansion-main-body.preheader | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v5, 0xff, v2 | |
| ; GFX942-GISEL-NEXT: v_lshl_or_b32 v6, v5, 8, v5 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v7, 16, v5 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v5, 24, v5 | |
| ; GFX942-GISEL-NEXT: v_or3_b32 v6, v6, v7, v5 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v7, v6 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v8, v6 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v9, v6 | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[4:5], 0 | |
| ; GFX942-GISEL-NEXT: .LBB0_2: ; %dynamic-memset-expansion-main-body | |
| ; GFX942-GISEL-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[14:15], s[0:1] | |
| ; GFX942-GISEL-NEXT: s_add_u32 s0, s0, 16 | |
| ; GFX942-GISEL-NEXT: v_add_co_u32_e32 v14, vcc, v0, v14 | |
| ; GFX942-GISEL-NEXT: s_addc_u32 s1, s1, 0 | |
| ; GFX942-GISEL-NEXT: s_nop 0 | |
| ; GFX942-GISEL-NEXT: v_addc_co_u32_e32 v15, vcc, v1, v15, vcc | |
| ; GFX942-GISEL-NEXT: v_cmp_ge_u64_e32 vcc, s[0:1], v[12:13] | |
| ; GFX942-GISEL-NEXT: s_or_b64 s[4:5], vcc, s[4:5] | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[14:15], v[6:9] | |
| ; GFX942-GISEL-NEXT: s_andn2_b64 exec, exec, s[4:5] | |
| ; GFX942-GISEL-NEXT: s_cbranch_execnz .LBB0_2 | |
| ; GFX942-GISEL-NEXT: .LBB0_3: ; %Flow4 | |
| ; GFX942-GISEL-NEXT: s_or_b64 exec, exec, s[2:3] | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[10:11] | |
| ; GFX942-GISEL-NEXT: s_and_saveexec_b64 s[2:3], vcc | |
| ; GFX942-GISEL-NEXT: s_cbranch_execz .LBB0_6 | |
| ; GFX942-GISEL-NEXT: ; %bb.4: ; %dynamic-memset-expansion-residual-body.preheader | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v3, -16, v3 | |
| ; GFX942-GISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v3 | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[4:5], 0 | |
| ; GFX942-GISEL-NEXT: s_nop 0 | |
| ; GFX942-GISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v4, vcc | |
| ; GFX942-GISEL-NEXT: .LBB0_5: ; %dynamic-memset-expansion-residual-body | |
| ; GFX942-GISEL-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[4:5], s[0:1] | |
| ; GFX942-GISEL-NEXT: s_add_u32 s0, s0, 1 | |
| ; GFX942-GISEL-NEXT: v_add_co_u32_e32 v4, vcc, v0, v4 | |
| ; GFX942-GISEL-NEXT: s_addc_u32 s1, s1, 0 | |
| ; GFX942-GISEL-NEXT: s_nop 0 | |
| ; GFX942-GISEL-NEXT: v_addc_co_u32_e32 v5, vcc, v1, v5, vcc | |
| ; GFX942-GISEL-NEXT: v_cmp_ge_u64_e32 vcc, s[0:1], v[10:11] | |
| ; GFX942-GISEL-NEXT: s_or_b64 s[4:5], vcc, s[4:5] | |
| ; GFX942-GISEL-NEXT: flat_store_byte v[4:5], v2 | |
| ; GFX942-GISEL-NEXT: s_andn2_b64 exec, exec, s[4:5] | |
| ; GFX942-GISEL-NEXT: s_cbranch_execnz .LBB0_5 | |
| ; GFX942-GISEL-NEXT: .LBB0_6: ; %Flow2 | |
| ; GFX942-GISEL-NEXT: s_or_b64 exec, exec, s[2:3] | |
| ; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0) | |
| ; GFX942-GISEL-NEXT: s_setpc_b64 s[30:31] | |
| entry: | |
| tail call void @llvm.memset.p0.i64(ptr addrspace(0) noundef nonnull align 4 %dst, i8 %setval, i64 %size, i1 false) | |
| ret void | |
| } | |
| define void @memset_p1_varsize_align_4_varsetval(ptr addrspace(1) align 4 %dst, i8 %setval, i64 %size) #0 { | |
| ; GFX942-SDAG-LABEL: memset_p1_varsize_align_4_varsetval: | |
| ; GFX942-SDAG: ; %bb.0: ; %entry | |
| ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v11, v4 | |
| ; GFX942-SDAG-NEXT: v_and_b32_e32 v10, -16, v3 | |
| ; GFX942-SDAG-NEXT: v_and_b32_e32 v8, 15, v3 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v9, 0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[10:11] | |
| ; GFX942-SDAG-NEXT: s_and_saveexec_b64 s[2:3], vcc | |
| ; GFX942-SDAG-NEXT: s_cbranch_execz .LBB1_3 | |
| ; GFX942-SDAG-NEXT: ; %bb.1: ; %dynamic-memset-expansion-main-body.preheader | |
| ; GFX942-SDAG-NEXT: s_mov_b32 s4, 0x4040404 | |
| ; GFX942-SDAG-NEXT: v_perm_b32 v4, v2, v2, s4 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v5, v4 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v6, v4 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v7, v4 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[4:5], 0 | |
| ; GFX942-SDAG-NEXT: .LBB1_2: ; %dynamic-memset-expansion-main-body | |
| ; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[12:13], v[0:1], 0, s[4:5] | |
| ; GFX942-SDAG-NEXT: s_add_u32 s4, s4, 16 | |
| ; GFX942-SDAG-NEXT: s_addc_u32 s5, s5, 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_ge_u64_e32 vcc, s[4:5], v[10:11] | |
| ; GFX942-SDAG-NEXT: s_or_b64 s[0:1], vcc, s[0:1] | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[12:13], v[4:7], off | |
| ; GFX942-SDAG-NEXT: s_andn2_b64 exec, exec, s[0:1] | |
| ; GFX942-SDAG-NEXT: s_cbranch_execnz .LBB1_2 | |
| ; GFX942-SDAG-NEXT: .LBB1_3: ; %Flow4 | |
| ; GFX942-SDAG-NEXT: s_or_b64 exec, exec, s[2:3] | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[8:9] | |
| ; GFX942-SDAG-NEXT: s_and_saveexec_b64 s[2:3], vcc | |
| ; GFX942-SDAG-NEXT: s_cbranch_execz .LBB1_6 | |
| ; GFX942-SDAG-NEXT: ; %bb.4: ; %dynamic-memset-expansion-residual-body.preheader | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[10:11] | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[4:5], 0 | |
| ; GFX942-SDAG-NEXT: .LBB1_5: ; %dynamic-memset-expansion-residual-body | |
| ; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[4:5], v[0:1], 0, s[4:5] | |
| ; GFX942-SDAG-NEXT: s_add_u32 s4, s4, 1 | |
| ; GFX942-SDAG-NEXT: s_addc_u32 s5, s5, 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_ge_u64_e32 vcc, s[4:5], v[8:9] | |
| ; GFX942-SDAG-NEXT: s_or_b64 s[0:1], vcc, s[0:1] | |
| ; GFX942-SDAG-NEXT: global_store_byte v[4:5], v2, off | |
| ; GFX942-SDAG-NEXT: s_andn2_b64 exec, exec, s[0:1] | |
| ; GFX942-SDAG-NEXT: s_cbranch_execnz .LBB1_5 | |
| ; GFX942-SDAG-NEXT: .LBB1_6: ; %Flow2 | |
| ; GFX942-SDAG-NEXT: s_or_b64 exec, exec, s[2:3] | |
| ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) | |
| ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] | |
| ; | |
| ; GFX942-GISEL-LABEL: memset_p1_varsize_align_4_varsetval: | |
| ; GFX942-GISEL: ; %bb.0: ; %entry | |
| ; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[10:11], 15 | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v10, 15, v3 | |
| ; GFX942-GISEL-NEXT: v_sub_co_u32_e32 v12, vcc, v3, v10 | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-GISEL-NEXT: s_nop 0 | |
| ; GFX942-GISEL-NEXT: v_subbrev_co_u32_e32 v13, vcc, 0, v4, vcc | |
| ; GFX942-GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[12:13] | |
| ; GFX942-GISEL-NEXT: s_and_saveexec_b64 s[2:3], vcc | |
| ; GFX942-GISEL-NEXT: s_cbranch_execz .LBB1_3 | |
| ; GFX942-GISEL-NEXT: ; %bb.1: ; %dynamic-memset-expansion-main-body.preheader | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v5, 0xff, v2 | |
| ; GFX942-GISEL-NEXT: v_lshl_or_b32 v6, v5, 8, v5 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v7, 16, v5 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v5, 24, v5 | |
| ; GFX942-GISEL-NEXT: v_or3_b32 v6, v6, v7, v5 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v7, v6 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v8, v6 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v9, v6 | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[4:5], 0 | |
| ; GFX942-GISEL-NEXT: .LBB1_2: ; %dynamic-memset-expansion-main-body | |
| ; GFX942-GISEL-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[14:15], s[0:1] | |
| ; GFX942-GISEL-NEXT: s_add_u32 s0, s0, 16 | |
| ; GFX942-GISEL-NEXT: v_add_co_u32_e32 v14, vcc, v0, v14 | |
| ; GFX942-GISEL-NEXT: s_addc_u32 s1, s1, 0 | |
| ; GFX942-GISEL-NEXT: s_nop 0 | |
| ; GFX942-GISEL-NEXT: v_addc_co_u32_e32 v15, vcc, v1, v15, vcc | |
| ; GFX942-GISEL-NEXT: v_cmp_ge_u64_e32 vcc, s[0:1], v[12:13] | |
| ; GFX942-GISEL-NEXT: s_or_b64 s[4:5], vcc, s[4:5] | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[14:15], v[6:9], off | |
| ; GFX942-GISEL-NEXT: s_andn2_b64 exec, exec, s[4:5] | |
| ; GFX942-GISEL-NEXT: s_cbranch_execnz .LBB1_2 | |
| ; GFX942-GISEL-NEXT: .LBB1_3: ; %Flow4 | |
| ; GFX942-GISEL-NEXT: s_or_b64 exec, exec, s[2:3] | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[10:11] | |
| ; GFX942-GISEL-NEXT: s_and_saveexec_b64 s[2:3], vcc | |
| ; GFX942-GISEL-NEXT: s_cbranch_execz .LBB1_6 | |
| ; GFX942-GISEL-NEXT: ; %bb.4: ; %dynamic-memset-expansion-residual-body.preheader | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v3, -16, v3 | |
| ; GFX942-GISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v3 | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[4:5], 0 | |
| ; GFX942-GISEL-NEXT: s_nop 0 | |
| ; GFX942-GISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v4, vcc | |
| ; GFX942-GISEL-NEXT: .LBB1_5: ; %dynamic-memset-expansion-residual-body | |
| ; GFX942-GISEL-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[4:5], s[0:1] | |
| ; GFX942-GISEL-NEXT: s_add_u32 s0, s0, 1 | |
| ; GFX942-GISEL-NEXT: v_add_co_u32_e32 v4, vcc, v0, v4 | |
| ; GFX942-GISEL-NEXT: s_addc_u32 s1, s1, 0 | |
| ; GFX942-GISEL-NEXT: s_nop 0 | |
| ; GFX942-GISEL-NEXT: v_addc_co_u32_e32 v5, vcc, v1, v5, vcc | |
| ; GFX942-GISEL-NEXT: v_cmp_ge_u64_e32 vcc, s[0:1], v[10:11] | |
| ; GFX942-GISEL-NEXT: s_or_b64 s[4:5], vcc, s[4:5] | |
| ; GFX942-GISEL-NEXT: global_store_byte v[4:5], v2, off | |
| ; GFX942-GISEL-NEXT: s_andn2_b64 exec, exec, s[4:5] | |
| ; GFX942-GISEL-NEXT: s_cbranch_execnz .LBB1_5 | |
| ; GFX942-GISEL-NEXT: .LBB1_6: ; %Flow2 | |
| ; GFX942-GISEL-NEXT: s_or_b64 exec, exec, s[2:3] | |
| ; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0) | |
| ; GFX942-GISEL-NEXT: s_setpc_b64 s[30:31] | |
| entry: | |
| tail call void @llvm.memset.p1.i64(ptr addrspace(1) noundef nonnull align 4 %dst, i8 %setval, i64 %size, i1 false) | |
| ret void | |
| } | |
| define void @memset_p3_varsize_align_4_varsetval(ptr addrspace(3) align 4 %dst, i8 %setval, i64 %size) #0 { | |
| ; GFX942-SDAG-LABEL: memset_p3_varsize_align_4_varsetval: | |
| ; GFX942-SDAG: ; %bb.0: ; %entry | |
| ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-SDAG-NEXT: v_and_b32_e32 v4, 15, v2 | |
| ; GFX942-SDAG-NEXT: v_and_b32_e32 v2, -16, v2 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v5, 0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[2:3] | |
| ; GFX942-SDAG-NEXT: s_and_saveexec_b64 s[2:3], vcc | |
| ; GFX942-SDAG-NEXT: s_cbranch_execz .LBB2_3 | |
| ; GFX942-SDAG-NEXT: ; %bb.1: ; %dynamic-memset-expansion-main-body.preheader | |
| ; GFX942-SDAG-NEXT: s_mov_b32 s4, 0x4040404 | |
| ; GFX942-SDAG-NEXT: v_perm_b32 v6, v1, v1, s4 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v7, v0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[4:5], 0 | |
| ; GFX942-SDAG-NEXT: .LBB2_2: ; %dynamic-memset-expansion-main-body | |
| ; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-SDAG-NEXT: s_add_u32 s4, s4, 16 | |
| ; GFX942-SDAG-NEXT: s_addc_u32 s5, s5, 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_ge_u64_e32 vcc, s[4:5], v[2:3] | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v7, v6, v6 offset0:2 offset1:3 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v7, v6, v6 offset1:1 | |
| ; GFX942-SDAG-NEXT: s_or_b64 s[0:1], vcc, s[0:1] | |
| ; GFX942-SDAG-NEXT: v_add_u32_e32 v7, 16, v7 | |
| ; GFX942-SDAG-NEXT: s_andn2_b64 exec, exec, s[0:1] | |
| ; GFX942-SDAG-NEXT: s_cbranch_execnz .LBB2_2 | |
| ; GFX942-SDAG-NEXT: .LBB2_3: ; %Flow7 | |
| ; GFX942-SDAG-NEXT: s_or_b64 exec, exec, s[2:3] | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[4:5] | |
| ; GFX942-SDAG-NEXT: s_and_saveexec_b64 s[2:3], vcc | |
| ; GFX942-SDAG-NEXT: s_cbranch_execz .LBB2_6 | |
| ; GFX942-SDAG-NEXT: ; %bb.4: ; %dynamic-memset-expansion-residual-body.preheader | |
| ; GFX942-SDAG-NEXT: v_add_u32_e32 v0, v0, v2 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[4:5], 0 | |
| ; GFX942-SDAG-NEXT: .LBB2_5: ; %dynamic-memset-expansion-residual-body | |
| ; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-SDAG-NEXT: s_add_u32 s4, s4, 1 | |
| ; GFX942-SDAG-NEXT: s_addc_u32 s5, s5, 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_ge_u64_e32 vcc, s[4:5], v[4:5] | |
| ; GFX942-SDAG-NEXT: ds_write_b8 v0, v1 | |
| ; GFX942-SDAG-NEXT: s_or_b64 s[0:1], vcc, s[0:1] | |
| ; GFX942-SDAG-NEXT: v_add_u32_e32 v0, 1, v0 | |
| ; GFX942-SDAG-NEXT: s_andn2_b64 exec, exec, s[0:1] | |
| ; GFX942-SDAG-NEXT: s_cbranch_execnz .LBB2_5 | |
| ; GFX942-SDAG-NEXT: .LBB2_6: ; %Flow5 | |
| ; GFX942-SDAG-NEXT: s_or_b64 exec, exec, s[2:3] | |
| ; GFX942-SDAG-NEXT: s_waitcnt lgkmcnt(0) | |
| ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] | |
| ; | |
| ; GFX942-GISEL-LABEL: memset_p3_varsize_align_4_varsetval: | |
| ; GFX942-GISEL: ; %bb.0: ; %entry | |
| ; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[4:5], 15 | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v4, 15, v2 | |
| ; GFX942-GISEL-NEXT: v_sub_co_u32_e32 v6, vcc, v2, v4 | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-GISEL-NEXT: s_nop 0 | |
| ; GFX942-GISEL-NEXT: v_subbrev_co_u32_e32 v7, vcc, 0, v3, vcc | |
| ; GFX942-GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[6:7] | |
| ; GFX942-GISEL-NEXT: s_and_saveexec_b64 s[2:3], vcc | |
| ; GFX942-GISEL-NEXT: s_cbranch_execz .LBB2_3 | |
| ; GFX942-GISEL-NEXT: ; %bb.1: ; %dynamic-memset-expansion-main-body.preheader | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v8, 0xff, v1 | |
| ; GFX942-GISEL-NEXT: v_lshl_or_b32 v9, v8, 8, v8 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v10, 16, v8 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v8, 24, v8 | |
| ; GFX942-GISEL-NEXT: v_or3_b32 v8, v9, v10, v8 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v9, v8 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v10, v8 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v11, v8 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v12, v0 | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[4:5], 0 | |
| ; GFX942-GISEL-NEXT: .LBB2_2: ; %dynamic-memset-expansion-main-body | |
| ; GFX942-GISEL-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-GISEL-NEXT: s_add_u32 s4, s4, 16 | |
| ; GFX942-GISEL-NEXT: s_addc_u32 s5, s5, 0 | |
| ; GFX942-GISEL-NEXT: v_cmp_ge_u64_e32 vcc, s[4:5], v[6:7] | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v12, v[8:9], v[10:11] offset1:1 | |
| ; GFX942-GISEL-NEXT: s_or_b64 s[0:1], vcc, s[0:1] | |
| ; GFX942-GISEL-NEXT: v_add_u32_e32 v12, 16, v12 | |
| ; GFX942-GISEL-NEXT: s_andn2_b64 exec, exec, s[0:1] | |
| ; GFX942-GISEL-NEXT: s_cbranch_execnz .LBB2_2 | |
| ; GFX942-GISEL-NEXT: .LBB2_3: ; %Flow7 | |
| ; GFX942-GISEL-NEXT: s_or_b64 exec, exec, s[2:3] | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[4:5] | |
| ; GFX942-GISEL-NEXT: s_and_saveexec_b64 s[2:3], vcc | |
| ; GFX942-GISEL-NEXT: s_cbranch_execz .LBB2_6 | |
| ; GFX942-GISEL-NEXT: ; %bb.4: ; %dynamic-memset-expansion-residual-body.preheader | |
| ; GFX942-GISEL-NEXT: v_lshrrev_b64 v[2:3], 4, v[2:3] | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v2, 4, v2 | |
| ; GFX942-GISEL-NEXT: v_add_u32_e32 v0, v0, v2 | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[4:5], 0 | |
| ; GFX942-GISEL-NEXT: .LBB2_5: ; %dynamic-memset-expansion-residual-body | |
| ; GFX942-GISEL-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-GISEL-NEXT: s_add_u32 s4, s4, 1 | |
| ; GFX942-GISEL-NEXT: s_addc_u32 s5, s5, 0 | |
| ; GFX942-GISEL-NEXT: v_cmp_ge_u64_e32 vcc, s[4:5], v[4:5] | |
| ; GFX942-GISEL-NEXT: ds_write_b8 v0, v1 | |
| ; GFX942-GISEL-NEXT: s_or_b64 s[0:1], vcc, s[0:1] | |
| ; GFX942-GISEL-NEXT: v_add_u32_e32 v0, 1, v0 | |
| ; GFX942-GISEL-NEXT: s_andn2_b64 exec, exec, s[0:1] | |
| ; GFX942-GISEL-NEXT: s_cbranch_execnz .LBB2_5 | |
| ; GFX942-GISEL-NEXT: .LBB2_6: ; %Flow5 | |
| ; GFX942-GISEL-NEXT: s_or_b64 exec, exec, s[2:3] | |
| ; GFX942-GISEL-NEXT: s_waitcnt lgkmcnt(0) | |
| ; GFX942-GISEL-NEXT: s_setpc_b64 s[30:31] | |
| entry: | |
| tail call void @llvm.memset.p3.i64(ptr addrspace(3) noundef nonnull align 4 %dst, i8 %setval, i64 %size, i1 false) | |
| ret void | |
| } | |
| define void @memset_p5_varsize_align_4_varsetval(ptr addrspace(5) align 4 %dst, i8 %setval, i64 %size) #0 { | |
| ; GFX942-SDAG-LABEL: memset_p5_varsize_align_4_varsetval: | |
| ; GFX942-SDAG: ; %bb.0: ; %entry | |
| ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-SDAG-NEXT: v_and_b32_e32 v8, 15, v2 | |
| ; GFX942-SDAG-NEXT: v_and_b32_e32 v2, -16, v2 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v9, 0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[2:3] | |
| ; GFX942-SDAG-NEXT: s_and_saveexec_b64 s[2:3], vcc | |
| ; GFX942-SDAG-NEXT: s_cbranch_execz .LBB3_3 | |
| ; GFX942-SDAG-NEXT: ; %bb.1: ; %dynamic-memset-expansion-main-body.preheader | |
| ; GFX942-SDAG-NEXT: s_mov_b32 s4, 0x4040404 | |
| ; GFX942-SDAG-NEXT: v_perm_b32 v4, v1, v1, s4 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v5, v4 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v6, v4 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v7, v4 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v10, v0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[4:5], 0 | |
| ; GFX942-SDAG-NEXT: .LBB3_2: ; %dynamic-memset-expansion-main-body | |
| ; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-SDAG-NEXT: s_add_u32 s4, s4, 16 | |
| ; GFX942-SDAG-NEXT: s_addc_u32 s5, s5, 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_ge_u64_e32 vcc, s[4:5], v[2:3] | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v10, v[4:7], off | |
| ; GFX942-SDAG-NEXT: s_or_b64 s[0:1], vcc, s[0:1] | |
| ; GFX942-SDAG-NEXT: v_add_u32_e32 v10, 16, v10 | |
| ; GFX942-SDAG-NEXT: s_andn2_b64 exec, exec, s[0:1] | |
| ; GFX942-SDAG-NEXT: s_cbranch_execnz .LBB3_2 | |
| ; GFX942-SDAG-NEXT: .LBB3_3: ; %Flow7 | |
| ; GFX942-SDAG-NEXT: s_or_b64 exec, exec, s[2:3] | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[8:9] | |
| ; GFX942-SDAG-NEXT: s_and_saveexec_b64 s[2:3], vcc | |
| ; GFX942-SDAG-NEXT: s_cbranch_execz .LBB3_6 | |
| ; GFX942-SDAG-NEXT: ; %bb.4: ; %dynamic-memset-expansion-residual-body.preheader | |
| ; GFX942-SDAG-NEXT: v_add_u32_e32 v0, v0, v2 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[4:5], 0 | |
| ; GFX942-SDAG-NEXT: .LBB3_5: ; %dynamic-memset-expansion-residual-body | |
| ; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-SDAG-NEXT: s_add_u32 s4, s4, 1 | |
| ; GFX942-SDAG-NEXT: s_addc_u32 s5, s5, 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_ge_u64_e32 vcc, s[4:5], v[8:9] | |
| ; GFX942-SDAG-NEXT: scratch_store_byte v0, v1, off | |
| ; GFX942-SDAG-NEXT: s_or_b64 s[0:1], vcc, s[0:1] | |
| ; GFX942-SDAG-NEXT: v_add_u32_e32 v0, 1, v0 | |
| ; GFX942-SDAG-NEXT: s_andn2_b64 exec, exec, s[0:1] | |
| ; GFX942-SDAG-NEXT: s_cbranch_execnz .LBB3_5 | |
| ; GFX942-SDAG-NEXT: .LBB3_6: ; %Flow5 | |
| ; GFX942-SDAG-NEXT: s_or_b64 exec, exec, s[2:3] | |
| ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) | |
| ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] | |
| ; | |
| ; GFX942-GISEL-LABEL: memset_p5_varsize_align_4_varsetval: | |
| ; GFX942-GISEL: ; %bb.0: ; %entry | |
| ; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[8:9], 15 | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v8, 15, v2 | |
| ; GFX942-GISEL-NEXT: v_sub_co_u32_e32 v10, vcc, v2, v8 | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-GISEL-NEXT: s_nop 0 | |
| ; GFX942-GISEL-NEXT: v_subbrev_co_u32_e32 v11, vcc, 0, v3, vcc | |
| ; GFX942-GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[10:11] | |
| ; GFX942-GISEL-NEXT: s_and_saveexec_b64 s[2:3], vcc | |
| ; GFX942-GISEL-NEXT: s_cbranch_execz .LBB3_3 | |
| ; GFX942-GISEL-NEXT: ; %bb.1: ; %dynamic-memset-expansion-main-body.preheader | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v4, 0xff, v1 | |
| ; GFX942-GISEL-NEXT: v_lshl_or_b32 v5, v4, 8, v4 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v6, 16, v4 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v4, 24, v4 | |
| ; GFX942-GISEL-NEXT: v_or3_b32 v4, v5, v6, v4 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v5, v4 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v6, v4 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v7, v4 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v12, v0 | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[4:5], 0 | |
| ; GFX942-GISEL-NEXT: .LBB3_2: ; %dynamic-memset-expansion-main-body | |
| ; GFX942-GISEL-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-GISEL-NEXT: s_add_u32 s4, s4, 16 | |
| ; GFX942-GISEL-NEXT: s_addc_u32 s5, s5, 0 | |
| ; GFX942-GISEL-NEXT: v_cmp_ge_u64_e32 vcc, s[4:5], v[10:11] | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v12, v[4:7], off | |
| ; GFX942-GISEL-NEXT: s_or_b64 s[0:1], vcc, s[0:1] | |
| ; GFX942-GISEL-NEXT: v_add_u32_e32 v12, 16, v12 | |
| ; GFX942-GISEL-NEXT: s_andn2_b64 exec, exec, s[0:1] | |
| ; GFX942-GISEL-NEXT: s_cbranch_execnz .LBB3_2 | |
| ; GFX942-GISEL-NEXT: .LBB3_3: ; %Flow7 | |
| ; GFX942-GISEL-NEXT: s_or_b64 exec, exec, s[2:3] | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[8:9] | |
| ; GFX942-GISEL-NEXT: s_and_saveexec_b64 s[2:3], vcc | |
| ; GFX942-GISEL-NEXT: s_cbranch_execz .LBB3_6 | |
| ; GFX942-GISEL-NEXT: ; %bb.4: ; %dynamic-memset-expansion-residual-body.preheader | |
| ; GFX942-GISEL-NEXT: v_lshrrev_b64 v[2:3], 4, v[2:3] | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v2, 4, v2 | |
| ; GFX942-GISEL-NEXT: v_add_u32_e32 v0, v0, v2 | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[4:5], 0 | |
| ; GFX942-GISEL-NEXT: .LBB3_5: ; %dynamic-memset-expansion-residual-body | |
| ; GFX942-GISEL-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-GISEL-NEXT: s_add_u32 s4, s4, 1 | |
| ; GFX942-GISEL-NEXT: s_addc_u32 s5, s5, 0 | |
| ; GFX942-GISEL-NEXT: v_cmp_ge_u64_e32 vcc, s[4:5], v[8:9] | |
| ; GFX942-GISEL-NEXT: scratch_store_byte v0, v1, off | |
| ; GFX942-GISEL-NEXT: s_or_b64 s[0:1], vcc, s[0:1] | |
| ; GFX942-GISEL-NEXT: v_add_u32_e32 v0, 1, v0 | |
| ; GFX942-GISEL-NEXT: s_andn2_b64 exec, exec, s[0:1] | |
| ; GFX942-GISEL-NEXT: s_cbranch_execnz .LBB3_5 | |
| ; GFX942-GISEL-NEXT: .LBB3_6: ; %Flow5 | |
| ; GFX942-GISEL-NEXT: s_or_b64 exec, exec, s[2:3] | |
| ; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0) | |
| ; GFX942-GISEL-NEXT: s_setpc_b64 s[30:31] | |
| entry: | |
| tail call void @llvm.memset.p5.i64(ptr addrspace(5) noundef nonnull align 4 %dst, i8 %setval, i64 %size, i1 false) | |
| ret void | |
| } | |
| define void @memset_p0_sz1055_align_4_varsetval(ptr addrspace(0) align 4 %dst, i8 %setval) #0 { | |
| ; GFX942-SDAG-LABEL: memset_p0_sz1055_align_4_varsetval: | |
| ; GFX942-SDAG: ; %bb.0: ; %entry | |
| ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-SDAG-NEXT: s_mov_b32 s0, 0x4040404 | |
| ; GFX942-SDAG-NEXT: v_perm_b32 v4, v2, v2, s0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v5, v4 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v6, v4 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v7, v4 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[2:3], 0x70 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[4:5], 0x60 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[6:7], 0x50 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[8:9], 0xf0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[10:11], 0xe0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[12:13], 0xd0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[14:15], 0xc0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[16:17], 0xb0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[18:19], 0xa0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[20:21], 0x90 | |
| ; GFX942-SDAG-NEXT: v_mov_b64_e32 v[8:9], 0x400 | |
| ; GFX942-SDAG-NEXT: .LBB4_1: ; %static-memset-expansion-main-body | |
| ; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[10:11], v[0:1], 0, s[0:1] | |
| ; GFX942-SDAG-NEXT: s_add_u32 s0, s0, 0x100 | |
| ; GFX942-SDAG-NEXT: s_addc_u32 s1, s1, 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_lt_u64_e32 vcc, s[0:1], v[8:9] | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[12:13], v[10:11], 0, s[2:3] | |
| ; GFX942-SDAG-NEXT: s_and_b64 vcc, exec, vcc | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[14:15], v[10:11], 0, s[4:5] | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[16:17], v[10:11], 0, s[6:7] | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[10:11], v[4:7] offset:64 | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[18:19], v[10:11], 0, 48 | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[10:11], v[4:7] offset:32 | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[10:11], v[4:7] offset:16 | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[10:11], v[4:7] | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[20:21], v[10:11], 0, s[8:9] | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[22:23], v[10:11], 0, s[10:11] | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[24:25], v[10:11], 0, s[12:13] | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[26:27], v[10:11], 0, s[14:15] | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[28:29], v[10:11], 0, s[16:17] | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[30:31], v[10:11], 0, s[18:19] | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[32:33], v[10:11], 0, s[20:21] | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[10:11], v[4:7] offset:128 | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[12:13], v[4:7] | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[14:15], v[4:7] | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[16:17], v[4:7] | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[18:19], v[4:7] | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[20:21], v[4:7] | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[22:23], v[4:7] | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[24:25], v[4:7] | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[26:27], v[4:7] | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[28:29], v[4:7] | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[30:31], v[4:7] | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[32:33], v[4:7] | |
| ; GFX942-SDAG-NEXT: s_cbranch_vccnz .LBB4_1 | |
| ; GFX942-SDAG-NEXT: ; %bb.2: ; %static-memset-post-expansion | |
| ; GFX942-SDAG-NEXT: s_mov_b32 s0, 0x4040404 | |
| ; GFX942-SDAG-NEXT: v_perm_b32 v4, v2, v2, s0 | |
| ; GFX942-SDAG-NEXT: v_lshlrev_b16_e32 v3, 8, v2 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v5, v4 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v6, v4 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v7, v4 | |
| ; GFX942-SDAG-NEXT: v_or_b32_sdwa v3, v2, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[0:1], v[4:7] offset:1024 | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx3 v[0:1], v[4:6] offset:1040 | |
| ; GFX942-SDAG-NEXT: flat_store_short v[0:1], v3 offset:1052 | |
| ; GFX942-SDAG-NEXT: flat_store_byte v[0:1], v2 offset:1054 | |
| ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0) | |
| ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] | |
| ; | |
| ; GFX942-GISEL-LABEL: memset_p0_sz1055_align_4_varsetval: | |
| ; GFX942-GISEL: ; %bb.0: ; %entry | |
| ; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v3, 0xff, v2 | |
| ; GFX942-GISEL-NEXT: v_lshl_or_b32 v4, v3, 8, v3 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v5, 16, v3 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v3, 24, v3 | |
| ; GFX942-GISEL-NEXT: v_or3_b32 v4, v4, v5, v3 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v5, v4 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v6, v4 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v7, v4 | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[8:9], 0x400 | |
| ; GFX942-GISEL-NEXT: .LBB4_1: ; %static-memset-expansion-main-body | |
| ; GFX942-GISEL-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[10:11], s[0:1] | |
| ; GFX942-GISEL-NEXT: s_add_u32 s0, s0, 0x100 | |
| ; GFX942-GISEL-NEXT: v_add_co_u32_e32 v10, vcc, v0, v10 | |
| ; GFX942-GISEL-NEXT: s_addc_u32 s1, s1, 0 | |
| ; GFX942-GISEL-NEXT: s_nop 0 | |
| ; GFX942-GISEL-NEXT: v_addc_co_u32_e32 v11, vcc, v1, v11, vcc | |
| ; GFX942-GISEL-NEXT: v_cmp_lt_u64_e32 vcc, s[0:1], v[8:9] | |
| ; GFX942-GISEL-NEXT: s_cmp_lg_u64 vcc, 0 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[10:11], v[4:7] | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[10:11], v[4:7] offset:16 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[10:11], v[4:7] offset:32 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[10:11], v[4:7] offset:48 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[10:11], v[4:7] offset:64 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[10:11], v[4:7] offset:80 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[10:11], v[4:7] offset:96 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[10:11], v[4:7] offset:112 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[10:11], v[4:7] offset:128 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[10:11], v[4:7] offset:144 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[10:11], v[4:7] offset:160 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[10:11], v[4:7] offset:176 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[10:11], v[4:7] offset:192 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[10:11], v[4:7] offset:208 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[10:11], v[4:7] offset:224 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[10:11], v[4:7] offset:240 | |
| ; GFX942-GISEL-NEXT: s_cbranch_scc1 .LBB4_1 | |
| ; GFX942-GISEL-NEXT: ; %bb.2: ; %static-memset-post-expansion | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v3, 0xff, v2 | |
| ; GFX942-GISEL-NEXT: v_lshl_or_b32 v4, v3, 8, v3 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v5, 16, v3 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v3, 24, v3 | |
| ; GFX942-GISEL-NEXT: v_or3_b32 v6, v4, v5, v3 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v3, 8 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b16_sdwa v3, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 | |
| ; GFX942-GISEL-NEXT: v_or_b32_sdwa v3, v2, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v4, 0xffff, v3 | |
| ; GFX942-GISEL-NEXT: v_lshl_or_b32 v4, v4, 16, v4 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v7, v6 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v8, v6 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v9, v6 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v5, v4 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[0:1], v[6:9] offset:1024 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx3 v[0:1], v[4:6] offset:1040 | |
| ; GFX942-GISEL-NEXT: flat_store_short v[0:1], v3 offset:1052 | |
| ; GFX942-GISEL-NEXT: flat_store_byte v[0:1], v2 offset:1054 | |
| ; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0) | |
| ; GFX942-GISEL-NEXT: s_setpc_b64 s[30:31] | |
| entry: | |
| tail call void @llvm.memset.p0.i64(ptr addrspace(0) noundef nonnull align 4 %dst, i8 %setval, i64 1055, i1 false) | |
| ret void | |
| } | |
| define void @memset_p0_sz2048_align_4_varsetval(ptr addrspace(0) align 4 %dst, i8 %setval) #0 { | |
| ; GFX942-SDAG-LABEL: memset_p0_sz2048_align_4_varsetval: | |
| ; GFX942-SDAG: ; %bb.0: ; %entry | |
| ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-SDAG-NEXT: s_mov_b32 s0, 0x4040404 | |
| ; GFX942-SDAG-NEXT: v_perm_b32 v2, v2, v2, s0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, v2 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v4, v2 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v5, v2 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[2:3], 0x70 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[4:5], 0x60 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[6:7], 0x50 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[8:9], 0xf0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[10:11], 0xe0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[12:13], 0xd0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[14:15], 0xc0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[16:17], 0xb0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[18:19], 0xa0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[20:21], 0x90 | |
| ; GFX942-SDAG-NEXT: v_mov_b64_e32 v[6:7], 0x800 | |
| ; GFX942-SDAG-NEXT: .LBB5_1: ; %static-memset-expansion-main-body | |
| ; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[8:9], v[0:1], 0, s[0:1] | |
| ; GFX942-SDAG-NEXT: s_add_u32 s0, s0, 0x100 | |
| ; GFX942-SDAG-NEXT: s_addc_u32 s1, s1, 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_lt_u64_e32 vcc, s[0:1], v[6:7] | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[10:11], v[8:9], 0, s[2:3] | |
| ; GFX942-SDAG-NEXT: s_and_b64 vcc, exec, vcc | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[12:13], v[8:9], 0, s[4:5] | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[14:15], v[8:9], 0, s[6:7] | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[8:9], v[2:5] offset:64 | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[16:17], v[8:9], 0, 48 | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[8:9], v[2:5] offset:32 | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[8:9], v[2:5] offset:16 | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[8:9], v[2:5] | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[18:19], v[8:9], 0, s[8:9] | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[20:21], v[8:9], 0, s[10:11] | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[22:23], v[8:9], 0, s[12:13] | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[24:25], v[8:9], 0, s[14:15] | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[26:27], v[8:9], 0, s[16:17] | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[28:29], v[8:9], 0, s[18:19] | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[30:31], v[8:9], 0, s[20:21] | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[8:9], v[2:5] offset:128 | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[10:11], v[2:5] | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[12:13], v[2:5] | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[14:15], v[2:5] | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[16:17], v[2:5] | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[18:19], v[2:5] | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[20:21], v[2:5] | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[22:23], v[2:5] | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[24:25], v[2:5] | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[26:27], v[2:5] | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[28:29], v[2:5] | |
| ; GFX942-SDAG-NEXT: flat_store_dwordx4 v[30:31], v[2:5] | |
| ; GFX942-SDAG-NEXT: s_cbranch_vccnz .LBB5_1 | |
| ; GFX942-SDAG-NEXT: ; %bb.2: ; %static-memset-post-expansion | |
| ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0) | |
| ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] | |
| ; | |
| ; GFX942-GISEL-LABEL: memset_p0_sz2048_align_4_varsetval: | |
| ; GFX942-GISEL: ; %bb.0: ; %entry | |
| ; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v2, 0xff, v2 | |
| ; GFX942-GISEL-NEXT: v_lshl_or_b32 v3, v2, 8, v2 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v4, 16, v2 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v2, 24, v2 | |
| ; GFX942-GISEL-NEXT: v_or3_b32 v2, v3, v4, v2 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v3, v2 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v4, v2 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v5, v2 | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[6:7], 0x800 | |
| ; GFX942-GISEL-NEXT: .LBB5_1: ; %static-memset-expansion-main-body | |
| ; GFX942-GISEL-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[8:9], s[0:1] | |
| ; GFX942-GISEL-NEXT: s_add_u32 s0, s0, 0x100 | |
| ; GFX942-GISEL-NEXT: v_add_co_u32_e32 v8, vcc, v0, v8 | |
| ; GFX942-GISEL-NEXT: s_addc_u32 s1, s1, 0 | |
| ; GFX942-GISEL-NEXT: s_nop 0 | |
| ; GFX942-GISEL-NEXT: v_addc_co_u32_e32 v9, vcc, v1, v9, vcc | |
| ; GFX942-GISEL-NEXT: v_cmp_lt_u64_e32 vcc, s[0:1], v[6:7] | |
| ; GFX942-GISEL-NEXT: s_cmp_lg_u64 vcc, 0 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[8:9], v[2:5] | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[8:9], v[2:5] offset:16 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[8:9], v[2:5] offset:32 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[8:9], v[2:5] offset:48 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[8:9], v[2:5] offset:64 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[8:9], v[2:5] offset:80 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[8:9], v[2:5] offset:96 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[8:9], v[2:5] offset:112 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[8:9], v[2:5] offset:128 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[8:9], v[2:5] offset:144 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[8:9], v[2:5] offset:160 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[8:9], v[2:5] offset:176 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[8:9], v[2:5] offset:192 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[8:9], v[2:5] offset:208 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[8:9], v[2:5] offset:224 | |
| ; GFX942-GISEL-NEXT: flat_store_dwordx4 v[8:9], v[2:5] offset:240 | |
| ; GFX942-GISEL-NEXT: s_cbranch_scc1 .LBB5_1 | |
| ; GFX942-GISEL-NEXT: ; %bb.2: ; %static-memset-post-expansion | |
| ; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0) | |
| ; GFX942-GISEL-NEXT: s_setpc_b64 s[30:31] | |
| entry: | |
| tail call void @llvm.memset.p0.i64(ptr addrspace(0) noundef nonnull align 4 %dst, i8 %setval, i64 2048, i1 false) | |
| ret void | |
| } | |
| define void @memset_p1_sz1055_align_4_varsetval(ptr addrspace(1) align 4 %dst, i8 %setval) #0 { | |
| ; GFX942-SDAG-LABEL: memset_p1_sz1055_align_4_varsetval: | |
| ; GFX942-SDAG: ; %bb.0: ; %entry | |
| ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-SDAG-NEXT: s_mov_b32 s0, 0x4040404 | |
| ; GFX942-SDAG-NEXT: v_perm_b32 v4, v2, v2, s0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v5, v4 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v6, v4 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v7, v4 | |
| ; GFX942-SDAG-NEXT: v_mov_b64_e32 v[8:9], 0x400 | |
| ; GFX942-SDAG-NEXT: .LBB6_1: ; %static-memset-expansion-main-body | |
| ; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[10:11], v[0:1], 0, s[0:1] | |
| ; GFX942-SDAG-NEXT: s_add_u32 s0, s0, 0x100 | |
| ; GFX942-SDAG-NEXT: s_addc_u32 s1, s1, 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_lt_u64_e32 vcc, s[0:1], v[8:9] | |
| ; GFX942-SDAG-NEXT: s_and_b64 vcc, exec, vcc | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:112 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:96 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:80 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:64 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:48 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:32 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:16 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[10:11], v[4:7], off | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:240 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:224 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:208 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:192 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:176 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:160 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:144 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:128 | |
| ; GFX942-SDAG-NEXT: s_cbranch_vccnz .LBB6_1 | |
| ; GFX942-SDAG-NEXT: ; %bb.2: ; %static-memset-post-expansion | |
| ; GFX942-SDAG-NEXT: s_mov_b32 s0, 0x4040404 | |
| ; GFX942-SDAG-NEXT: v_perm_b32 v4, v2, v2, s0 | |
| ; GFX942-SDAG-NEXT: v_lshlrev_b16_e32 v3, 8, v2 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v5, v4 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v6, v4 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v7, v4 | |
| ; GFX942-SDAG-NEXT: v_or_b32_sdwa v3, v2, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[0:1], v[4:7], off offset:1024 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx3 v[0:1], v[4:6], off offset:1040 | |
| ; GFX942-SDAG-NEXT: global_store_short v[0:1], v3, off offset:1052 | |
| ; GFX942-SDAG-NEXT: global_store_byte v[0:1], v2, off offset:1054 | |
| ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) | |
| ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] | |
| ; | |
| ; GFX942-GISEL-LABEL: memset_p1_sz1055_align_4_varsetval: | |
| ; GFX942-GISEL: ; %bb.0: ; %entry | |
| ; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v3, 0xff, v2 | |
| ; GFX942-GISEL-NEXT: v_lshl_or_b32 v4, v3, 8, v3 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v5, 16, v3 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v3, 24, v3 | |
| ; GFX942-GISEL-NEXT: v_or3_b32 v4, v4, v5, v3 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v5, v4 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v6, v4 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v7, v4 | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[8:9], 0x400 | |
| ; GFX942-GISEL-NEXT: .LBB6_1: ; %static-memset-expansion-main-body | |
| ; GFX942-GISEL-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[10:11], s[0:1] | |
| ; GFX942-GISEL-NEXT: s_add_u32 s0, s0, 0x100 | |
| ; GFX942-GISEL-NEXT: v_add_co_u32_e32 v10, vcc, v0, v10 | |
| ; GFX942-GISEL-NEXT: s_addc_u32 s1, s1, 0 | |
| ; GFX942-GISEL-NEXT: s_nop 0 | |
| ; GFX942-GISEL-NEXT: v_addc_co_u32_e32 v11, vcc, v1, v11, vcc | |
| ; GFX942-GISEL-NEXT: v_cmp_lt_u64_e32 vcc, s[0:1], v[8:9] | |
| ; GFX942-GISEL-NEXT: s_cmp_lg_u64 vcc, 0 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[10:11], v[4:7], off | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:16 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:32 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:48 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:64 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:80 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:96 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:112 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:128 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:144 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:160 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:176 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:192 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:208 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:224 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[10:11], v[4:7], off offset:240 | |
| ; GFX942-GISEL-NEXT: s_cbranch_scc1 .LBB6_1 | |
| ; GFX942-GISEL-NEXT: ; %bb.2: ; %static-memset-post-expansion | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v3, 0xff, v2 | |
| ; GFX942-GISEL-NEXT: v_lshl_or_b32 v4, v3, 8, v3 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v5, 16, v3 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v3, 24, v3 | |
| ; GFX942-GISEL-NEXT: v_or3_b32 v6, v4, v5, v3 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v3, 8 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b16_sdwa v3, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 | |
| ; GFX942-GISEL-NEXT: v_or_b32_sdwa v3, v2, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v4, 0xffff, v3 | |
| ; GFX942-GISEL-NEXT: v_lshl_or_b32 v4, v4, 16, v4 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v7, v6 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v8, v6 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v9, v6 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v5, v4 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[0:1], v[6:9], off offset:1024 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx3 v[0:1], v[4:6], off offset:1040 | |
| ; GFX942-GISEL-NEXT: global_store_short v[0:1], v3, off offset:1052 | |
| ; GFX942-GISEL-NEXT: global_store_byte v[0:1], v2, off offset:1054 | |
| ; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0) | |
| ; GFX942-GISEL-NEXT: s_setpc_b64 s[30:31] | |
| entry: | |
| tail call void @llvm.memset.p1.i64(ptr addrspace(1) noundef nonnull align 4 %dst, i8 %setval, i64 1055, i1 false) | |
| ret void | |
| } | |
| define void @memset_p1_sz2048_align_4_varsetval(ptr addrspace(1) align 4 %dst, i8 %setval) #0 { | |
| ; GFX942-SDAG-LABEL: memset_p1_sz2048_align_4_varsetval: | |
| ; GFX942-SDAG: ; %bb.0: ; %entry | |
| ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-SDAG-NEXT: s_mov_b32 s0, 0x4040404 | |
| ; GFX942-SDAG-NEXT: v_perm_b32 v2, v2, v2, s0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, v2 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v4, v2 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v5, v2 | |
| ; GFX942-SDAG-NEXT: v_mov_b64_e32 v[6:7], 0x800 | |
| ; GFX942-SDAG-NEXT: .LBB7_1: ; %static-memset-expansion-main-body | |
| ; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[8:9], v[0:1], 0, s[0:1] | |
| ; GFX942-SDAG-NEXT: s_add_u32 s0, s0, 0x100 | |
| ; GFX942-SDAG-NEXT: s_addc_u32 s1, s1, 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_lt_u64_e32 vcc, s[0:1], v[6:7] | |
| ; GFX942-SDAG-NEXT: s_and_b64 vcc, exec, vcc | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:112 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:96 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:80 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:64 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:48 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:32 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:16 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[8:9], v[2:5], off | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:240 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:224 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:208 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:192 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:176 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:160 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:144 | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:128 | |
| ; GFX942-SDAG-NEXT: s_cbranch_vccnz .LBB7_1 | |
| ; GFX942-SDAG-NEXT: ; %bb.2: ; %static-memset-post-expansion | |
| ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) | |
| ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] | |
| ; | |
| ; GFX942-GISEL-LABEL: memset_p1_sz2048_align_4_varsetval: | |
| ; GFX942-GISEL: ; %bb.0: ; %entry | |
| ; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v2, 0xff, v2 | |
| ; GFX942-GISEL-NEXT: v_lshl_or_b32 v3, v2, 8, v2 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v4, 16, v2 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v2, 24, v2 | |
| ; GFX942-GISEL-NEXT: v_or3_b32 v2, v3, v4, v2 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v3, v2 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v4, v2 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v5, v2 | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[6:7], 0x800 | |
| ; GFX942-GISEL-NEXT: .LBB7_1: ; %static-memset-expansion-main-body | |
| ; GFX942-GISEL-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[8:9], s[0:1] | |
| ; GFX942-GISEL-NEXT: s_add_u32 s0, s0, 0x100 | |
| ; GFX942-GISEL-NEXT: v_add_co_u32_e32 v8, vcc, v0, v8 | |
| ; GFX942-GISEL-NEXT: s_addc_u32 s1, s1, 0 | |
| ; GFX942-GISEL-NEXT: s_nop 0 | |
| ; GFX942-GISEL-NEXT: v_addc_co_u32_e32 v9, vcc, v1, v9, vcc | |
| ; GFX942-GISEL-NEXT: v_cmp_lt_u64_e32 vcc, s[0:1], v[6:7] | |
| ; GFX942-GISEL-NEXT: s_cmp_lg_u64 vcc, 0 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[8:9], v[2:5], off | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:16 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:32 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:48 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:64 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:80 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:96 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:112 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:128 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:144 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:160 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:176 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:192 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:208 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:224 | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[8:9], v[2:5], off offset:240 | |
| ; GFX942-GISEL-NEXT: s_cbranch_scc1 .LBB7_1 | |
| ; GFX942-GISEL-NEXT: ; %bb.2: ; %static-memset-post-expansion | |
| ; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0) | |
| ; GFX942-GISEL-NEXT: s_setpc_b64 s[30:31] | |
| entry: | |
| tail call void @llvm.memset.p1.i64(ptr addrspace(1) noundef nonnull align 4 %dst, i8 %setval, i64 2048, i1 false) | |
| ret void | |
| } | |
| define void @memset_p3_sz1055_align_4_varsetval(ptr addrspace(3) align 4 %dst, i8 %setval) #0 { | |
| ; GFX942-SDAG-LABEL: memset_p3_sz1055_align_4_varsetval: | |
| ; GFX942-SDAG: ; %bb.0: ; %entry | |
| ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-SDAG-NEXT: s_mov_b32 s0, 0x4040404 | |
| ; GFX942-SDAG-NEXT: v_perm_b32 v4, v1, v1, s0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-SDAG-NEXT: v_mov_b64_e32 v[2:3], 0x400 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v5, v0 | |
| ; GFX942-SDAG-NEXT: .LBB8_1: ; %static-memset-expansion-main-body | |
| ; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-SDAG-NEXT: s_add_u32 s0, s0, 0x100 | |
| ; GFX942-SDAG-NEXT: s_addc_u32 s1, s1, 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_lt_u64_e32 vcc, s[0:1], v[2:3] | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:30 offset1:31 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:28 offset1:29 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:26 offset1:27 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:24 offset1:25 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:22 offset1:23 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:20 offset1:21 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:18 offset1:19 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:16 offset1:17 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:14 offset1:15 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:12 offset1:13 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:10 offset1:11 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:8 offset1:9 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:6 offset1:7 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:4 offset1:5 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:2 offset1:3 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset1:1 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:62 offset1:63 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:60 offset1:61 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:58 offset1:59 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:56 offset1:57 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:54 offset1:55 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:52 offset1:53 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:50 offset1:51 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:48 offset1:49 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:46 offset1:47 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:44 offset1:45 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:42 offset1:43 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:40 offset1:41 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:38 offset1:39 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:36 offset1:37 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:34 offset1:35 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v5, v4, v4 offset0:32 offset1:33 | |
| ; GFX942-SDAG-NEXT: v_add_u32_e32 v5, 0x100, v5 | |
| ; GFX942-SDAG-NEXT: s_cbranch_vccnz .LBB8_1 | |
| ; GFX942-SDAG-NEXT: ; %bb.2: ; %static-memset-post-expansion | |
| ; GFX942-SDAG-NEXT: s_mov_b32 s0, 0x4040404 | |
| ; GFX942-SDAG-NEXT: v_add_u32_e32 v2, 0x400, v0 | |
| ; GFX942-SDAG-NEXT: v_add_u32_e32 v3, 0x408, v0 | |
| ; GFX942-SDAG-NEXT: v_perm_b32 v4, v1, v1, s0 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v3, v4, v4 offset1:1 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v2, v4, v4 offset1:1 | |
| ; GFX942-SDAG-NEXT: v_add_u32_e32 v2, 0x410, v0 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v2, v4, v4 offset1:1 | |
| ; GFX942-SDAG-NEXT: ds_write_b32 v0, v4 offset:1048 | |
| ; GFX942-SDAG-NEXT: v_lshlrev_b16_e32 v2, 8, v1 | |
| ; GFX942-SDAG-NEXT: v_or_b32_sdwa v2, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD | |
| ; GFX942-SDAG-NEXT: ds_write_b16 v0, v2 offset:1052 | |
| ; GFX942-SDAG-NEXT: ds_write_b8 v0, v1 offset:1054 | |
| ; GFX942-SDAG-NEXT: s_waitcnt lgkmcnt(0) | |
| ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] | |
| ; | |
| ; GFX942-GISEL-LABEL: memset_p3_sz1055_align_4_varsetval: | |
| ; GFX942-GISEL: ; %bb.0: ; %entry | |
| ; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v2, 0xff, v1 | |
| ; GFX942-GISEL-NEXT: v_lshl_or_b32 v3, v2, 8, v2 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v4, 16, v2 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v2, 24, v2 | |
| ; GFX942-GISEL-NEXT: v_or3_b32 v2, v3, v4, v2 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v3, v2 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v4, v2 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v5, v2 | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[6:7], 0x400 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v8, v0 | |
| ; GFX942-GISEL-NEXT: .LBB8_1: ; %static-memset-expansion-main-body | |
| ; GFX942-GISEL-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-GISEL-NEXT: s_add_u32 s0, s0, 0x100 | |
| ; GFX942-GISEL-NEXT: s_addc_u32 s1, s1, 0 | |
| ; GFX942-GISEL-NEXT: v_cmp_lt_u64_e32 vcc, s[0:1], v[6:7] | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v8, v[2:3], v[4:5] offset1:1 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v8, v[2:3], v[4:5] offset0:2 offset1:3 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v8, v[2:3], v[4:5] offset0:4 offset1:5 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v8, v[2:3], v[4:5] offset0:6 offset1:7 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v8, v[2:3], v[4:5] offset0:8 offset1:9 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v8, v[2:3], v[4:5] offset0:10 offset1:11 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v8, v[2:3], v[4:5] offset0:12 offset1:13 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v8, v[2:3], v[4:5] offset0:14 offset1:15 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v8, v[2:3], v[4:5] offset0:16 offset1:17 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v8, v[2:3], v[4:5] offset0:18 offset1:19 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v8, v[2:3], v[4:5] offset0:20 offset1:21 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v8, v[2:3], v[4:5] offset0:22 offset1:23 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v8, v[2:3], v[4:5] offset0:24 offset1:25 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v8, v[2:3], v[4:5] offset0:26 offset1:27 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v8, v[2:3], v[4:5] offset0:28 offset1:29 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v8, v[2:3], v[4:5] offset0:30 offset1:31 | |
| ; GFX942-GISEL-NEXT: s_cmp_lg_u64 vcc, 0 | |
| ; GFX942-GISEL-NEXT: v_add_u32_e32 v8, 0x100, v8 | |
| ; GFX942-GISEL-NEXT: s_cbranch_scc1 .LBB8_1 | |
| ; GFX942-GISEL-NEXT: ; %bb.2: ; %static-memset-post-expansion | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v2, 0xff, v1 | |
| ; GFX942-GISEL-NEXT: v_lshl_or_b32 v3, v2, 8, v2 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v4, 16, v2 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v2, 24, v2 | |
| ; GFX942-GISEL-NEXT: v_or3_b32 v2, v3, v4, v2 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v3, v2 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v4, v2 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v5, v2 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v0, v[2:3], v[4:5] offset0:128 offset1:129 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v3, 8 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b16_sdwa v3, v3, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 | |
| ; GFX942-GISEL-NEXT: v_or_b32_sdwa v3, v1, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v4, 0xffff, v3 | |
| ; GFX942-GISEL-NEXT: v_lshl_or_b32 v4, v4, 16, v4 | |
| ; GFX942-GISEL-NEXT: v_add_u32_e32 v5, 0x410, v0 | |
| ; GFX942-GISEL-NEXT: ds_write2_b32 v5, v4, v4 offset1:1 | |
| ; GFX942-GISEL-NEXT: ds_write_b32 v0, v2 offset:1048 | |
| ; GFX942-GISEL-NEXT: ds_write_b16 v0, v3 offset:1052 | |
| ; GFX942-GISEL-NEXT: ds_write_b8 v0, v1 offset:1054 | |
| ; GFX942-GISEL-NEXT: s_waitcnt lgkmcnt(0) | |
| ; GFX942-GISEL-NEXT: s_setpc_b64 s[30:31] | |
| entry: | |
| tail call void @llvm.memset.p3.i64(ptr addrspace(3) noundef nonnull align 4 %dst, i8 %setval, i64 1055, i1 false) | |
| ret void | |
| } | |
| define void @memset_p3_sz2048_align_4_varsetval(ptr addrspace(3) align 4 %dst, i8 %setval) #0 { | |
| ; GFX942-SDAG-LABEL: memset_p3_sz2048_align_4_varsetval: | |
| ; GFX942-SDAG: ; %bb.0: ; %entry | |
| ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-SDAG-NEXT: s_mov_b32 s0, 0x4040404 | |
| ; GFX942-SDAG-NEXT: v_perm_b32 v1, v1, v1, s0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-SDAG-NEXT: v_mov_b64_e32 v[2:3], 0x800 | |
| ; GFX942-SDAG-NEXT: .LBB9_1: ; %static-memset-expansion-main-body | |
| ; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-SDAG-NEXT: s_add_u32 s0, s0, 0x100 | |
| ; GFX942-SDAG-NEXT: s_addc_u32 s1, s1, 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_lt_u64_e32 vcc, s[0:1], v[2:3] | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:30 offset1:31 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:28 offset1:29 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:26 offset1:27 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:24 offset1:25 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:22 offset1:23 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:20 offset1:21 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:18 offset1:19 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:16 offset1:17 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:14 offset1:15 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:12 offset1:13 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:10 offset1:11 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:8 offset1:9 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:6 offset1:7 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:4 offset1:5 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:2 offset1:3 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset1:1 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:62 offset1:63 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:60 offset1:61 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:58 offset1:59 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:56 offset1:57 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:54 offset1:55 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:52 offset1:53 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:50 offset1:51 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:48 offset1:49 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:46 offset1:47 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:44 offset1:45 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:42 offset1:43 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:40 offset1:41 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:38 offset1:39 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:36 offset1:37 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:34 offset1:35 | |
| ; GFX942-SDAG-NEXT: ds_write2_b32 v0, v1, v1 offset0:32 offset1:33 | |
| ; GFX942-SDAG-NEXT: v_add_u32_e32 v0, 0x100, v0 | |
| ; GFX942-SDAG-NEXT: s_cbranch_vccnz .LBB9_1 | |
| ; GFX942-SDAG-NEXT: ; %bb.2: ; %static-memset-post-expansion | |
| ; GFX942-SDAG-NEXT: s_waitcnt lgkmcnt(0) | |
| ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] | |
| ; | |
| ; GFX942-GISEL-LABEL: memset_p3_sz2048_align_4_varsetval: | |
| ; GFX942-GISEL: ; %bb.0: ; %entry | |
| ; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v1, 0xff, v1 | |
| ; GFX942-GISEL-NEXT: v_lshl_or_b32 v2, v1, 8, v1 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v3, 16, v1 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v1, 24, v1 | |
| ; GFX942-GISEL-NEXT: v_or3_b32 v2, v2, v3, v1 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v3, v2 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v4, v2 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v5, v2 | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[6:7], 0x800 | |
| ; GFX942-GISEL-NEXT: .LBB9_1: ; %static-memset-expansion-main-body | |
| ; GFX942-GISEL-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-GISEL-NEXT: s_add_u32 s0, s0, 0x100 | |
| ; GFX942-GISEL-NEXT: s_addc_u32 s1, s1, 0 | |
| ; GFX942-GISEL-NEXT: v_cmp_lt_u64_e32 vcc, s[0:1], v[6:7] | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v0, v[2:3], v[4:5] offset1:1 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v0, v[2:3], v[4:5] offset0:2 offset1:3 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v0, v[2:3], v[4:5] offset0:4 offset1:5 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v0, v[2:3], v[4:5] offset0:6 offset1:7 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v0, v[2:3], v[4:5] offset0:8 offset1:9 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v0, v[2:3], v[4:5] offset0:10 offset1:11 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v0, v[2:3], v[4:5] offset0:12 offset1:13 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v0, v[2:3], v[4:5] offset0:14 offset1:15 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v0, v[2:3], v[4:5] offset0:16 offset1:17 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v0, v[2:3], v[4:5] offset0:18 offset1:19 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v0, v[2:3], v[4:5] offset0:20 offset1:21 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v0, v[2:3], v[4:5] offset0:22 offset1:23 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v0, v[2:3], v[4:5] offset0:24 offset1:25 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v0, v[2:3], v[4:5] offset0:26 offset1:27 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v0, v[2:3], v[4:5] offset0:28 offset1:29 | |
| ; GFX942-GISEL-NEXT: ds_write2_b64 v0, v[2:3], v[4:5] offset0:30 offset1:31 | |
| ; GFX942-GISEL-NEXT: s_cmp_lg_u64 vcc, 0 | |
| ; GFX942-GISEL-NEXT: v_add_u32_e32 v0, 0x100, v0 | |
| ; GFX942-GISEL-NEXT: s_cbranch_scc1 .LBB9_1 | |
| ; GFX942-GISEL-NEXT: ; %bb.2: ; %static-memset-post-expansion | |
| ; GFX942-GISEL-NEXT: s_waitcnt lgkmcnt(0) | |
| ; GFX942-GISEL-NEXT: s_setpc_b64 s[30:31] | |
| entry: | |
| tail call void @llvm.memset.p3.i64(ptr addrspace(3) noundef nonnull align 4 %dst, i8 %setval, i64 2048, i1 false) | |
| ret void | |
| } | |
| define void @memset_p5_sz1055_align_4_varsetval(ptr addrspace(5) align 4 %dst, i8 %setval) #0 { | |
| ; GFX942-SDAG-LABEL: memset_p5_sz1055_align_4_varsetval: | |
| ; GFX942-SDAG: ; %bb.0: ; %entry | |
| ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-SDAG-NEXT: s_mov_b32 s0, 0x4040404 | |
| ; GFX942-SDAG-NEXT: v_perm_b32 v2, v1, v1, s0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, v2 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v4, v2 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v5, v2 | |
| ; GFX942-SDAG-NEXT: v_mov_b64_e32 v[6:7], 0x400 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v8, v0 | |
| ; GFX942-SDAG-NEXT: .LBB10_1: ; %static-memset-expansion-main-body | |
| ; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-SDAG-NEXT: s_add_u32 s0, s0, 0x100 | |
| ; GFX942-SDAG-NEXT: s_addc_u32 s1, s1, 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_lt_u64_e32 vcc, s[0:1], v[6:7] | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:112 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:96 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:80 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:64 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:48 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:32 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:16 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v8, v[2:5], off | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:240 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:224 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:208 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:192 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:176 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:160 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:144 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:128 | |
| ; GFX942-SDAG-NEXT: v_add_u32_e32 v8, 0x100, v8 | |
| ; GFX942-SDAG-NEXT: s_cbranch_vccnz .LBB10_1 | |
| ; GFX942-SDAG-NEXT: ; %bb.2: ; %static-memset-post-expansion | |
| ; GFX942-SDAG-NEXT: s_mov_b32 s0, 0x4040404 | |
| ; GFX942-SDAG-NEXT: v_perm_b32 v2, v1, v1, s0 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, v2 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v4, v2 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v5, v2 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:1024 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx2 v0, v[2:3], off offset:1040 | |
| ; GFX942-SDAG-NEXT: scratch_store_dword v0, v2, off offset:1048 | |
| ; GFX942-SDAG-NEXT: v_lshlrev_b16_e32 v2, 8, v1 | |
| ; GFX942-SDAG-NEXT: v_or_b32_sdwa v2, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD | |
| ; GFX942-SDAG-NEXT: scratch_store_short v0, v2, off offset:1052 | |
| ; GFX942-SDAG-NEXT: scratch_store_byte v0, v1, off offset:1054 | |
| ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) | |
| ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] | |
| ; | |
| ; GFX942-GISEL-LABEL: memset_p5_sz1055_align_4_varsetval: | |
| ; GFX942-GISEL: ; %bb.0: ; %entry | |
| ; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v2, 0xff, v1 | |
| ; GFX942-GISEL-NEXT: v_lshl_or_b32 v3, v2, 8, v2 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v4, 16, v2 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v2, 24, v2 | |
| ; GFX942-GISEL-NEXT: v_or3_b32 v2, v3, v4, v2 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v3, v2 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v4, v2 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v5, v2 | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[6:7], 0x400 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v8, v0 | |
| ; GFX942-GISEL-NEXT: .LBB10_1: ; %static-memset-expansion-main-body | |
| ; GFX942-GISEL-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-GISEL-NEXT: s_add_u32 s0, s0, 0x100 | |
| ; GFX942-GISEL-NEXT: s_addc_u32 s1, s1, 0 | |
| ; GFX942-GISEL-NEXT: v_cmp_lt_u64_e32 vcc, s[0:1], v[6:7] | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v8, v[2:5], off | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:16 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:32 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:48 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:64 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:80 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:96 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:112 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:128 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:144 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:160 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:176 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:192 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:208 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:224 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v8, v[2:5], off offset:240 | |
| ; GFX942-GISEL-NEXT: s_cmp_lg_u64 vcc, 0 | |
| ; GFX942-GISEL-NEXT: v_add_u32_e32 v8, 0x100, v8 | |
| ; GFX942-GISEL-NEXT: s_cbranch_scc1 .LBB10_1 | |
| ; GFX942-GISEL-NEXT: ; %bb.2: ; %static-memset-post-expansion | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v2, 0xff, v1 | |
| ; GFX942-GISEL-NEXT: v_lshl_or_b32 v3, v2, 8, v2 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v4, 16, v2 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v2, 24, v2 | |
| ; GFX942-GISEL-NEXT: v_or3_b32 v2, v3, v4, v2 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v3, v2 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v4, v2 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v5, v2 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:1024 | |
| ; GFX942-GISEL-NEXT: s_nop 1 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v3, 8 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b16_sdwa v3, v3, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0 | |
| ; GFX942-GISEL-NEXT: v_or_b32_sdwa v3, v1, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v4, 0xffff, v3 | |
| ; GFX942-GISEL-NEXT: v_lshl_or_b32 v4, v4, 16, v4 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v5, v4 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx2 v0, v[4:5], off offset:1040 | |
| ; GFX942-GISEL-NEXT: scratch_store_dword v0, v2, off offset:1048 | |
| ; GFX942-GISEL-NEXT: scratch_store_short v0, v3, off offset:1052 | |
| ; GFX942-GISEL-NEXT: scratch_store_byte v0, v1, off offset:1054 | |
| ; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0) | |
| ; GFX942-GISEL-NEXT: s_setpc_b64 s[30:31] | |
| entry: | |
| tail call void @llvm.memset.p5.i64(ptr addrspace(5) noundef nonnull align 4 %dst, i8 %setval, i64 1055, i1 false) | |
| ret void | |
| } | |
| define void @memset_p5_sz2048_align_4_varsetval(ptr addrspace(5) align 4 %dst, i8 %setval) #0 { | |
| ; GFX942-SDAG-LABEL: memset_p5_sz2048_align_4_varsetval: | |
| ; GFX942-SDAG: ; %bb.0: ; %entry | |
| ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-SDAG-NEXT: s_mov_b32 s0, 0x4040404 | |
| ; GFX942-SDAG-NEXT: v_perm_b32 v2, v1, v1, s0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v3, v2 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v4, v2 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v5, v2 | |
| ; GFX942-SDAG-NEXT: v_mov_b64_e32 v[6:7], 0x800 | |
| ; GFX942-SDAG-NEXT: .LBB11_1: ; %static-memset-expansion-main-body | |
| ; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-SDAG-NEXT: s_add_u32 s0, s0, 0x100 | |
| ; GFX942-SDAG-NEXT: s_addc_u32 s1, s1, 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_lt_u64_e32 vcc, s[0:1], v[6:7] | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:112 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:96 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:80 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:64 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:48 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:32 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:16 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v0, v[2:5], off | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:240 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:224 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:208 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:192 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:176 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:160 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:144 | |
| ; GFX942-SDAG-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:128 | |
| ; GFX942-SDAG-NEXT: v_add_u32_e32 v0, 0x100, v0 | |
| ; GFX942-SDAG-NEXT: s_cbranch_vccnz .LBB11_1 | |
| ; GFX942-SDAG-NEXT: ; %bb.2: ; %static-memset-post-expansion | |
| ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) | |
| ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] | |
| ; | |
| ; GFX942-GISEL-LABEL: memset_p5_sz2048_align_4_varsetval: | |
| ; GFX942-GISEL: ; %bb.0: ; %entry | |
| ; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v1, 0xff, v1 | |
| ; GFX942-GISEL-NEXT: v_lshl_or_b32 v2, v1, 8, v1 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v3, 16, v1 | |
| ; GFX942-GISEL-NEXT: v_lshlrev_b32_e32 v1, 24, v1 | |
| ; GFX942-GISEL-NEXT: v_or3_b32 v2, v2, v3, v1 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v3, v2 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v4, v2 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v5, v2 | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[6:7], 0x800 | |
| ; GFX942-GISEL-NEXT: .LBB11_1: ; %static-memset-expansion-main-body | |
| ; GFX942-GISEL-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-GISEL-NEXT: s_add_u32 s0, s0, 0x100 | |
| ; GFX942-GISEL-NEXT: s_addc_u32 s1, s1, 0 | |
| ; GFX942-GISEL-NEXT: v_cmp_lt_u64_e32 vcc, s[0:1], v[6:7] | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v0, v[2:5], off | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:16 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:32 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:48 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:64 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:80 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:96 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:112 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:128 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:144 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:160 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:176 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:192 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:208 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:224 | |
| ; GFX942-GISEL-NEXT: scratch_store_dwordx4 v0, v[2:5], off offset:240 | |
| ; GFX942-GISEL-NEXT: s_cmp_lg_u64 vcc, 0 | |
| ; GFX942-GISEL-NEXT: v_add_u32_e32 v0, 0x100, v0 | |
| ; GFX942-GISEL-NEXT: s_cbranch_scc1 .LBB11_1 | |
| ; GFX942-GISEL-NEXT: ; %bb.2: ; %static-memset-post-expansion | |
| ; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0) | |
| ; GFX942-GISEL-NEXT: s_setpc_b64 s[30:31] | |
| entry: | |
| tail call void @llvm.memset.p5.i64(ptr addrspace(5) noundef nonnull align 4 %dst, i8 %setval, i64 2048, i1 false) | |
| ret void | |
| } | |
| define void @memset_p1_varsz_align_4_set40(ptr addrspace(1) align 4 %dst, i64 %size) #0 { | |
| ; GFX942-SDAG-LABEL: memset_p1_varsz_align_4_set40: | |
| ; GFX942-SDAG: ; %bb.0: ; %entry | |
| ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-SDAG-NEXT: v_and_b32_e32 v8, 15, v2 | |
| ; GFX942-SDAG-NEXT: v_and_b32_e32 v2, -16, v2 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v9, 0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[2:3] | |
| ; GFX942-SDAG-NEXT: s_and_saveexec_b64 s[2:3], vcc | |
| ; GFX942-SDAG-NEXT: s_cbranch_execz .LBB12_3 | |
| ; GFX942-SDAG-NEXT: ; %bb.1: ; %dynamic-memset-expansion-main-body.preheader | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v4, 0x28282828 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v5, v4 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v6, v4 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v7, v4 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[4:5], 0 | |
| ; GFX942-SDAG-NEXT: .LBB12_2: ; %dynamic-memset-expansion-main-body | |
| ; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[10:11], v[0:1], 0, s[4:5] | |
| ; GFX942-SDAG-NEXT: s_add_u32 s4, s4, 16 | |
| ; GFX942-SDAG-NEXT: s_addc_u32 s5, s5, 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_ge_u64_e32 vcc, s[4:5], v[2:3] | |
| ; GFX942-SDAG-NEXT: s_or_b64 s[0:1], vcc, s[0:1] | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[10:11], v[4:7], off | |
| ; GFX942-SDAG-NEXT: s_andn2_b64 exec, exec, s[0:1] | |
| ; GFX942-SDAG-NEXT: s_cbranch_execnz .LBB12_2 | |
| ; GFX942-SDAG-NEXT: .LBB12_3: ; %Flow4 | |
| ; GFX942-SDAG-NEXT: s_or_b64 exec, exec, s[2:3] | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[8:9] | |
| ; GFX942-SDAG-NEXT: s_and_saveexec_b64 s[2:3], vcc | |
| ; GFX942-SDAG-NEXT: s_cbranch_execz .LBB12_6 | |
| ; GFX942-SDAG-NEXT: ; %bb.4: ; %dynamic-memset-expansion-residual-body.preheader | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v2, 40 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[4:5], 0 | |
| ; GFX942-SDAG-NEXT: .LBB12_5: ; %dynamic-memset-expansion-residual-body | |
| ; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[4:5], v[0:1], 0, s[4:5] | |
| ; GFX942-SDAG-NEXT: s_add_u32 s4, s4, 1 | |
| ; GFX942-SDAG-NEXT: s_addc_u32 s5, s5, 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_ge_u64_e32 vcc, s[4:5], v[8:9] | |
| ; GFX942-SDAG-NEXT: s_or_b64 s[0:1], vcc, s[0:1] | |
| ; GFX942-SDAG-NEXT: global_store_byte v[4:5], v2, off | |
| ; GFX942-SDAG-NEXT: s_andn2_b64 exec, exec, s[0:1] | |
| ; GFX942-SDAG-NEXT: s_cbranch_execnz .LBB12_5 | |
| ; GFX942-SDAG-NEXT: .LBB12_6: ; %Flow2 | |
| ; GFX942-SDAG-NEXT: s_or_b64 exec, exec, s[2:3] | |
| ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) | |
| ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] | |
| ; | |
| ; GFX942-GISEL-LABEL: memset_p1_varsz_align_4_set40: | |
| ; GFX942-GISEL: ; %bb.0: ; %entry | |
| ; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[8:9], 15 | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v8, 15, v2 | |
| ; GFX942-GISEL-NEXT: v_sub_co_u32_e32 v10, vcc, v2, v8 | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-GISEL-NEXT: s_nop 0 | |
| ; GFX942-GISEL-NEXT: v_subbrev_co_u32_e32 v11, vcc, 0, v3, vcc | |
| ; GFX942-GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[10:11] | |
| ; GFX942-GISEL-NEXT: s_and_saveexec_b64 s[2:3], vcc | |
| ; GFX942-GISEL-NEXT: s_cbranch_execz .LBB12_3 | |
| ; GFX942-GISEL-NEXT: ; %bb.1: ; %dynamic-memset-expansion-main-body.preheader | |
| ; GFX942-GISEL-NEXT: s_mov_b32 s4, 0x28282828 | |
| ; GFX942-GISEL-NEXT: s_mov_b32 s5, s4 | |
| ; GFX942-GISEL-NEXT: s_mov_b32 s6, s4 | |
| ; GFX942-GISEL-NEXT: s_mov_b32 s7, s4 | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[4:5], s[4:5] | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[6:7], s[6:7] | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[4:5], 0 | |
| ; GFX942-GISEL-NEXT: .LBB12_2: ; %dynamic-memset-expansion-main-body | |
| ; GFX942-GISEL-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[12:13], s[0:1] | |
| ; GFX942-GISEL-NEXT: s_add_u32 s0, s0, 16 | |
| ; GFX942-GISEL-NEXT: v_add_co_u32_e32 v12, vcc, v0, v12 | |
| ; GFX942-GISEL-NEXT: s_addc_u32 s1, s1, 0 | |
| ; GFX942-GISEL-NEXT: s_nop 0 | |
| ; GFX942-GISEL-NEXT: v_addc_co_u32_e32 v13, vcc, v1, v13, vcc | |
| ; GFX942-GISEL-NEXT: v_cmp_ge_u64_e32 vcc, s[0:1], v[10:11] | |
| ; GFX942-GISEL-NEXT: s_or_b64 s[4:5], vcc, s[4:5] | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[12:13], v[4:7], off | |
| ; GFX942-GISEL-NEXT: s_andn2_b64 exec, exec, s[4:5] | |
| ; GFX942-GISEL-NEXT: s_cbranch_execnz .LBB12_2 | |
| ; GFX942-GISEL-NEXT: .LBB12_3: ; %Flow4 | |
| ; GFX942-GISEL-NEXT: s_or_b64 exec, exec, s[2:3] | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[8:9] | |
| ; GFX942-GISEL-NEXT: s_and_saveexec_b64 s[2:3], vcc | |
| ; GFX942-GISEL-NEXT: s_cbranch_execz .LBB12_6 | |
| ; GFX942-GISEL-NEXT: ; %bb.4: ; %dynamic-memset-expansion-residual-body.preheader | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v2, -16, v2 | |
| ; GFX942-GISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v2, 40 | |
| ; GFX942-GISEL-NEXT: s_nop 0 | |
| ; GFX942-GISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[4:5], 0 | |
| ; GFX942-GISEL-NEXT: .LBB12_5: ; %dynamic-memset-expansion-residual-body | |
| ; GFX942-GISEL-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[4:5], s[0:1] | |
| ; GFX942-GISEL-NEXT: s_add_u32 s0, s0, 1 | |
| ; GFX942-GISEL-NEXT: v_add_co_u32_e32 v4, vcc, v0, v4 | |
| ; GFX942-GISEL-NEXT: s_addc_u32 s1, s1, 0 | |
| ; GFX942-GISEL-NEXT: s_nop 0 | |
| ; GFX942-GISEL-NEXT: v_addc_co_u32_e32 v5, vcc, v1, v5, vcc | |
| ; GFX942-GISEL-NEXT: v_cmp_ge_u64_e32 vcc, s[0:1], v[8:9] | |
| ; GFX942-GISEL-NEXT: s_or_b64 s[4:5], vcc, s[4:5] | |
| ; GFX942-GISEL-NEXT: global_store_byte v[4:5], v2, off | |
| ; GFX942-GISEL-NEXT: s_andn2_b64 exec, exec, s[4:5] | |
| ; GFX942-GISEL-NEXT: s_cbranch_execnz .LBB12_5 | |
| ; GFX942-GISEL-NEXT: .LBB12_6: ; %Flow2 | |
| ; GFX942-GISEL-NEXT: s_or_b64 exec, exec, s[2:3] | |
| ; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0) | |
| ; GFX942-GISEL-NEXT: s_setpc_b64 s[30:31] | |
| entry: | |
| tail call void @llvm.memset.p1.i64(ptr addrspace(1) noundef nonnull align 4 %dst, i8 40, i64 %size, i1 false) | |
| ret void | |
| } | |
| define void @memset_p1_varsz_align_4_set0(ptr addrspace(1) align 4 %dst, i64 %size) #0 { | |
| ; GFX942-SDAG-LABEL: memset_p1_varsz_align_4_set0: | |
| ; GFX942-SDAG: ; %bb.0: ; %entry | |
| ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-SDAG-NEXT: v_and_b32_e32 v4, 15, v2 | |
| ; GFX942-SDAG-NEXT: v_and_b32_e32 v2, -16, v2 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v5, 0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[2:3] | |
| ; GFX942-SDAG-NEXT: s_and_saveexec_b64 s[2:3], vcc | |
| ; GFX942-SDAG-NEXT: s_cbranch_execz .LBB13_3 | |
| ; GFX942-SDAG-NEXT: ; %bb.1: ; %dynamic-memset-expansion-main-body.preheader | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v6, v5 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v7, v5 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v8, v5 | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v9, v5 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[4:5], 0 | |
| ; GFX942-SDAG-NEXT: .LBB13_2: ; %dynamic-memset-expansion-main-body | |
| ; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[10:11], v[0:1], 0, s[4:5] | |
| ; GFX942-SDAG-NEXT: s_add_u32 s4, s4, 16 | |
| ; GFX942-SDAG-NEXT: s_addc_u32 s5, s5, 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_ge_u64_e32 vcc, s[4:5], v[2:3] | |
| ; GFX942-SDAG-NEXT: s_or_b64 s[0:1], vcc, s[0:1] | |
| ; GFX942-SDAG-NEXT: global_store_dwordx4 v[10:11], v[6:9], off | |
| ; GFX942-SDAG-NEXT: s_andn2_b64 exec, exec, s[0:1] | |
| ; GFX942-SDAG-NEXT: s_cbranch_execnz .LBB13_2 | |
| ; GFX942-SDAG-NEXT: .LBB13_3: ; %Flow4 | |
| ; GFX942-SDAG-NEXT: s_or_b64 exec, exec, s[2:3] | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[4:5] | |
| ; GFX942-SDAG-NEXT: s_and_saveexec_b64 s[2:3], vcc | |
| ; GFX942-SDAG-NEXT: s_cbranch_execz .LBB13_6 | |
| ; GFX942-SDAG-NEXT: ; %bb.4: ; %dynamic-memset-expansion-residual-body.preheader | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[0:1], v[0:1], 0, v[2:3] | |
| ; GFX942-SDAG-NEXT: v_mov_b32_e32 v2, 0 | |
| ; GFX942-SDAG-NEXT: s_mov_b64 s[4:5], 0 | |
| ; GFX942-SDAG-NEXT: .LBB13_5: ; %dynamic-memset-expansion-residual-body | |
| ; GFX942-SDAG-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-SDAG-NEXT: v_lshl_add_u64 v[6:7], v[0:1], 0, s[4:5] | |
| ; GFX942-SDAG-NEXT: s_add_u32 s4, s4, 1 | |
| ; GFX942-SDAG-NEXT: s_addc_u32 s5, s5, 0 | |
| ; GFX942-SDAG-NEXT: v_cmp_ge_u64_e32 vcc, s[4:5], v[4:5] | |
| ; GFX942-SDAG-NEXT: s_or_b64 s[0:1], vcc, s[0:1] | |
| ; GFX942-SDAG-NEXT: global_store_byte v[6:7], v2, off | |
| ; GFX942-SDAG-NEXT: s_andn2_b64 exec, exec, s[0:1] | |
| ; GFX942-SDAG-NEXT: s_cbranch_execnz .LBB13_5 | |
| ; GFX942-SDAG-NEXT: .LBB13_6: ; %Flow2 | |
| ; GFX942-SDAG-NEXT: s_or_b64 exec, exec, s[2:3] | |
| ; GFX942-SDAG-NEXT: s_waitcnt vmcnt(0) | |
| ; GFX942-SDAG-NEXT: s_setpc_b64 s[30:31] | |
| ; | |
| ; GFX942-GISEL-LABEL: memset_p1_varsz_align_4_set0: | |
| ; GFX942-GISEL: ; %bb.0: ; %entry | |
| ; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[8:9], 15 | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v8, 15, v2 | |
| ; GFX942-GISEL-NEXT: v_sub_co_u32_e32 v10, vcc, v2, v8 | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-GISEL-NEXT: s_nop 0 | |
| ; GFX942-GISEL-NEXT: v_subbrev_co_u32_e32 v11, vcc, 0, v3, vcc | |
| ; GFX942-GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[10:11] | |
| ; GFX942-GISEL-NEXT: s_and_saveexec_b64 s[2:3], vcc | |
| ; GFX942-GISEL-NEXT: s_cbranch_execz .LBB13_3 | |
| ; GFX942-GISEL-NEXT: ; %bb.1: ; %dynamic-memset-expansion-main-body.preheader | |
| ; GFX942-GISEL-NEXT: s_mov_b32 s4, 0 | |
| ; GFX942-GISEL-NEXT: s_mov_b32 s5, s4 | |
| ; GFX942-GISEL-NEXT: s_mov_b32 s6, s4 | |
| ; GFX942-GISEL-NEXT: s_mov_b32 s7, s4 | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[4:5], s[4:5] | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[6:7], s[6:7] | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[4:5], 0 | |
| ; GFX942-GISEL-NEXT: .LBB13_2: ; %dynamic-memset-expansion-main-body | |
| ; GFX942-GISEL-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[12:13], s[0:1] | |
| ; GFX942-GISEL-NEXT: s_add_u32 s0, s0, 16 | |
| ; GFX942-GISEL-NEXT: v_add_co_u32_e32 v12, vcc, v0, v12 | |
| ; GFX942-GISEL-NEXT: s_addc_u32 s1, s1, 0 | |
| ; GFX942-GISEL-NEXT: s_nop 0 | |
| ; GFX942-GISEL-NEXT: v_addc_co_u32_e32 v13, vcc, v1, v13, vcc | |
| ; GFX942-GISEL-NEXT: v_cmp_ge_u64_e32 vcc, s[0:1], v[10:11] | |
| ; GFX942-GISEL-NEXT: s_or_b64 s[4:5], vcc, s[4:5] | |
| ; GFX942-GISEL-NEXT: global_store_dwordx4 v[12:13], v[4:7], off | |
| ; GFX942-GISEL-NEXT: s_andn2_b64 exec, exec, s[4:5] | |
| ; GFX942-GISEL-NEXT: s_cbranch_execnz .LBB13_2 | |
| ; GFX942-GISEL-NEXT: .LBB13_3: ; %Flow4 | |
| ; GFX942-GISEL-NEXT: s_or_b64 exec, exec, s[2:3] | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[0:1], 0 | |
| ; GFX942-GISEL-NEXT: v_cmp_ne_u64_e32 vcc, 0, v[8:9] | |
| ; GFX942-GISEL-NEXT: s_and_saveexec_b64 s[2:3], vcc | |
| ; GFX942-GISEL-NEXT: s_cbranch_execz .LBB13_6 | |
| ; GFX942-GISEL-NEXT: ; %bb.4: ; %dynamic-memset-expansion-residual-body.preheader | |
| ; GFX942-GISEL-NEXT: v_and_b32_e32 v2, -16, v2 | |
| ; GFX942-GISEL-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2 | |
| ; GFX942-GISEL-NEXT: v_mov_b32_e32 v2, 0 | |
| ; GFX942-GISEL-NEXT: s_nop 0 | |
| ; GFX942-GISEL-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc | |
| ; GFX942-GISEL-NEXT: s_mov_b64 s[4:5], 0 | |
| ; GFX942-GISEL-NEXT: .LBB13_5: ; %dynamic-memset-expansion-residual-body | |
| ; GFX942-GISEL-NEXT: ; =>This Inner Loop Header: Depth=1 | |
| ; GFX942-GISEL-NEXT: v_mov_b64_e32 v[4:5], s[0:1] | |
| ; GFX942-GISEL-NEXT: s_add_u32 s0, s0, 1 | |
| ; GFX942-GISEL-NEXT: v_add_co_u32_e32 v4, vcc, v0, v4 | |
| ; GFX942-GISEL-NEXT: s_addc_u32 s1, s1, 0 | |
| ; GFX942-GISEL-NEXT: s_nop 0 | |
| ; GFX942-GISEL-NEXT: v_addc_co_u32_e32 v5, vcc, v1, v5, vcc | |
| ; GFX942-GISEL-NEXT: v_cmp_ge_u64_e32 vcc, s[0:1], v[8:9] | |
| ; GFX942-GISEL-NEXT: s_or_b64 s[4:5], vcc, s[4:5] | |
| ; GFX942-GISEL-NEXT: global_store_byte v[4:5], v2, off | |
| ; GFX942-GISEL-NEXT: s_andn2_b64 exec, exec, s[4:5] | |
| ; GFX942-GISEL-NEXT: s_cbranch_execnz .LBB13_5 | |
| ; GFX942-GISEL-NEXT: .LBB13_6: ; %Flow2 | |
| ; GFX942-GISEL-NEXT: s_or_b64 exec, exec, s[2:3] | |
| ; GFX942-GISEL-NEXT: s_waitcnt vmcnt(0) | |
| ; GFX942-GISEL-NEXT: s_setpc_b64 s[30:31] | |
| entry: | |
| tail call void @llvm.memset.p1.i64(ptr addrspace(1) noundef nonnull align 4 %dst, i8 0, i64 %size, i1 false) | |
| ret void | |
| } | |
| declare void @llvm.memset.p0.i64(ptr addrspace(0) noalias nocapture writeonly, i8, i64, i1 immarg) | |
| declare void @llvm.memset.p1.i64(ptr addrspace(1) noalias nocapture writeonly, i8, i64, i1 immarg) | |
| declare void @llvm.memset.p3.i64(ptr addrspace(3) noalias nocapture writeonly, i8, i64, i1 immarg) | |
| declare void @llvm.memset.p5.i64(ptr addrspace(5) noalias nocapture writeonly, i8, i64, i1 immarg) | |
| attributes #0 = { nounwind } | |
| ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: | |
| ; GFX942: {{.*}} |