Skip to content

Commit 45c5f46

Browse files
committed
[LLVM] Make s_getpc_b64 rematerializable
1 parent a907854 commit 45c5f46

File tree

3 files changed

+8
-22
lines changed

3 files changed

+8
-22
lines changed

llvm/lib/Target/AMDGPU/SOPInstructions.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,7 @@ def S_BITSET0_B64 : SOP1_64_32 <"s_bitset0_b64", [], 1>;
292292
def S_BITSET1_B32 : SOP1_32 <"s_bitset1_b32", [], 1>;
293293
def S_BITSET1_B64 : SOP1_64_32 <"s_bitset1_b64", [], 1>;
294294

295+
let isReMaterializable = 1 in
295296
def S_GETPC_B64 : SOP1_64_0 <"s_getpc_b64",
296297
[(set i64:$sdst, (int_amdgcn_s_getpc))]
297298
>;

llvm/test/CodeGen/AMDGPU/remat-sop.mir

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -582,14 +582,10 @@ body: |
582582
583583
; GCN-LABEL: name: test_remat_s_getpc_b64
584584
; GCN: renamable $sgpr0_sgpr1 = S_GETPC_B64
585-
; GCN-NEXT: SI_SPILL_S64_SAVE killed renamable $sgpr0_sgpr1, %stack.1, implicit $exec, implicit $sp_reg :: (store (s64) into %stack.1, align 4, addrspace 5)
586585
; GCN-NEXT: renamable $sgpr2_sgpr3 = S_GETPC_B64
587-
; GCN-NEXT: renamable $sgpr0_sgpr1 = S_GETPC_B64
588-
; GCN-NEXT: SI_SPILL_S64_SAVE killed renamable $sgpr0_sgpr1, %stack.0, implicit $exec, implicit $sp_reg :: (store (s64) into %stack.0, align 4, addrspace 5)
589-
; GCN-NEXT: renamable $sgpr0_sgpr1 = SI_SPILL_S64_RESTORE %stack.1, implicit $exec, implicit $sp_reg :: (load (s64) from %stack.1, align 4, addrspace 5)
590586
; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0_sgpr1
591587
; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr2_sgpr3
592-
; GCN-NEXT: renamable $sgpr0_sgpr1 = SI_SPILL_S64_RESTORE %stack.0, implicit $exec, implicit $sp_reg :: (load (s64) from %stack.0, align 4, addrspace 5)
588+
; GCN-NEXT: renamable $sgpr0_sgpr1 = S_GETPC_B64
593589
; GCN-NEXT: S_NOP 0, implicit killed renamable $sgpr0_sgpr1
594590
; GCN-NEXT: S_ENDPGM 0
595591
%0:sgpr_64 = S_GETPC_B64
@@ -610,17 +606,13 @@ body: |
610606
; GCN-LABEL: name: test_remat_s_getpc_b64_2
611607
; GCN: renamable $sgpr0_sgpr1 = S_GETPC_B64
612608
; GCN-NEXT: renamable $sgpr2_sgpr3 = S_GETPC_B64
613-
; GCN-NEXT: SI_SPILL_S64_SAVE killed renamable $sgpr2_sgpr3, %stack.7, implicit $exec, implicit $sp_reg :: (store (s64) into %stack.7, align 4, addrspace 5)
614-
; GCN-NEXT: renamable $sgpr2_sgpr3 = S_GETPC_B64
615-
; GCN-NEXT: SI_SPILL_S64_SAVE killed renamable $sgpr2_sgpr3, %stack.6, implicit $exec, implicit $sp_reg :: (store (s64) into %stack.6, align 4, addrspace 5)
616609
; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.3, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.3, addrspace 5)
617610
; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr1, %stack.0, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.0, addrspace 5)
618-
; GCN-NEXT: renamable $sgpr2_sgpr3 = SI_SPILL_S64_RESTORE %stack.7, implicit $exec, implicit $sp_reg :: (load (s64) from %stack.7, align 4, addrspace 5)
619611
; GCN-NEXT: renamable $sgpr1 = COPY renamable $sgpr2
620612
; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr1, %stack.1, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.1, addrspace 5)
621613
; GCN-NEXT: renamable $sgpr1 = COPY killed renamable $sgpr3
622614
; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr1, %stack.2, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.2, addrspace 5)
623-
; GCN-NEXT: renamable $sgpr0_sgpr1 = SI_SPILL_S64_RESTORE %stack.6, implicit $exec, implicit $sp_reg :: (load (s64) from %stack.6, align 4, addrspace 5)
615+
; GCN-NEXT: renamable $sgpr0_sgpr1 = S_GETPC_B64
624616
; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.5, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.5, addrspace 5)
625617
; GCN-NEXT: renamable $sgpr0 = COPY killed renamable $sgpr1
626618
; GCN-NEXT: SI_SPILL_S32_SAVE killed renamable $sgpr0, %stack.4, implicit $exec, implicit $sp_reg :: (store (s32) into %stack.4, addrspace 5)

llvm/test/CodeGen/AMDGPU/s-getpc-b64-remat.ll

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,29 +8,22 @@ define void @test_remat_s_getpc_b64() {
88
; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
99
; CHECK-NEXT: s_xor_saveexec_b64 s[4:5], -1
1010
; CHECK-NEXT: buffer_store_dword v0, off, s[0:3], s32 ; 4-byte Folded Spill
11-
; CHECK-NEXT: buffer_store_dword v1, off, s[0:3], s32 offset:4 ; 4-byte Folded Spill
1211
; CHECK-NEXT: s_mov_b64 exec, s[4:5]
13-
; CHECK-NEXT: ; implicit-def: $vgpr1 : SGPR spill to VGPR lane
14-
; CHECK-NEXT: s_getpc_b64 s[4:5]
1512
; CHECK-NEXT: v_writelane_b32 v0, s30, 0
16-
; CHECK-NEXT: v_writelane_b32 v1, s4, 0
13+
; CHECK-NEXT: s_getpc_b64 s[4:5]
1714
; CHECK-NEXT: v_writelane_b32 v0, s31, 1
18-
; CHECK-NEXT: v_writelane_b32 v1, s5, 1
1915
; CHECK-NEXT: ;;#ASMSTART
2016
; CHECK-NEXT: ;;#ASMEND
2117
; CHECK-NEXT: ;;#ASMSTART
2218
; CHECK-NEXT: ;;#ASMEND
23-
; CHECK-NEXT: v_readlane_b32 s4, v1, 0
24-
; CHECK-NEXT: v_readlane_b32 s5, v1, 1
25-
; CHECK-NEXT: v_mov_b32_e32 v2, s4
26-
; CHECK-NEXT: v_mov_b32_e32 v3, s5
27-
; CHECK-NEXT: global_store_dwordx2 v[1:2], v[2:3], off
19+
; CHECK-NEXT: s_getpc_b64 s[4:5]
20+
; CHECK-NEXT: v_mov_b32_e32 v1, s4
21+
; CHECK-NEXT: v_mov_b32_e32 v2, s5
22+
; CHECK-NEXT: global_store_dwordx2 v[1:2], v[1:2], off
2823
; CHECK-NEXT: v_readlane_b32 s31, v0, 1
2924
; CHECK-NEXT: v_readlane_b32 s30, v0, 0
30-
; CHECK-NEXT: ; kill: killed $vgpr1
3125
; CHECK-NEXT: s_xor_saveexec_b64 s[4:5], -1
3226
; CHECK-NEXT: buffer_load_dword v0, off, s[0:3], s32 ; 4-byte Folded Reload
33-
; CHECK-NEXT: buffer_load_dword v1, off, s[0:3], s32 offset:4 ; 4-byte Folded Reload
3427
; CHECK-NEXT: s_mov_b64 exec, s[4:5]
3528
; CHECK-NEXT: s_waitcnt vmcnt(0)
3629
; CHECK-NEXT: s_setpc_b64 s[30:31]

0 commit comments

Comments
 (0)