[MachineScheduler] Fix physreg dependencies of ExitSU (#123541)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / s-getpc-b64-remat.ll
blobdc91a55e8f3c9463cc1ae76a4efc1d07f84c1e47
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -stress-regalloc=2 -verify-machineinstrs < %s | FileCheck %s -check-prefix=GFX9
3 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -stress-regalloc=2 -verify-machineinstrs < %s | FileCheck %s -check-prefix=GFX11
4 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1200 -stress-regalloc=2 -verify-machineinstrs < %s | FileCheck %s -check-prefix=GFX12
6 define void @test_remat_s_getpc_b64() {
7 ; GFX9-LABEL: test_remat_s_getpc_b64:
8 ; GFX9:       ; %bb.0: ; %entry
9 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10 ; GFX9-NEXT:    s_xor_saveexec_b64 s[4:5], -1
11 ; GFX9-NEXT:    buffer_store_dword v2, off, s[0:3], s32 ; 4-byte Folded Spill
12 ; GFX9-NEXT:    s_mov_b64 exec, s[4:5]
13 ; GFX9-NEXT:    v_writelane_b32 v2, s30, 0
14 ; GFX9-NEXT:    s_getpc_b64 s[4:5]
15 ; GFX9-NEXT:    v_writelane_b32 v2, s31, 1
16 ; GFX9-NEXT:    ;;#ASMSTART
17 ; GFX9-NEXT:    ;;#ASMEND
18 ; GFX9-NEXT:    ;;#ASMSTART
19 ; GFX9-NEXT:    ;;#ASMEND
20 ; GFX9-NEXT:    s_getpc_b64 s[4:5]
21 ; GFX9-NEXT:    v_mov_b32_e32 v0, s4
22 ; GFX9-NEXT:    v_mov_b32_e32 v1, s5
23 ; GFX9-NEXT:    global_store_dwordx2 v[0:1], v[0:1], off
24 ; GFX9-NEXT:    v_readlane_b32 s31, v2, 1
25 ; GFX9-NEXT:    v_readlane_b32 s30, v2, 0
26 ; GFX9-NEXT:    s_xor_saveexec_b64 s[4:5], -1
27 ; GFX9-NEXT:    buffer_load_dword v2, off, s[0:3], s32 ; 4-byte Folded Reload
28 ; GFX9-NEXT:    s_mov_b64 exec, s[4:5]
29 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
30 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
32 ; GFX11-LABEL: test_remat_s_getpc_b64:
33 ; GFX11:       ; %bb.0: ; %entry
34 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
35 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
36 ; GFX11-NEXT:    scratch_store_b32 off, v2, s32 ; 4-byte Folded Spill
37 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
38 ; GFX11-NEXT:    v_writelane_b32 v2, s30, 0
39 ; GFX11-NEXT:    s_getpc_b64 s[0:1]
40 ; GFX11-NEXT:    ;;#ASMSTART
41 ; GFX11-NEXT:    ;;#ASMEND
42 ; GFX11-NEXT:    v_writelane_b32 v2, s31, 1
43 ; GFX11-NEXT:    ;;#ASMSTART
44 ; GFX11-NEXT:    ;;#ASMEND
45 ; GFX11-NEXT:    s_getpc_b64 s[0:1]
46 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_2)
47 ; GFX11-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
48 ; GFX11-NEXT:    v_readlane_b32 s31, v2, 1
49 ; GFX11-NEXT:    v_readlane_b32 s30, v2, 0
50 ; GFX11-NEXT:    global_store_b64 v[0:1], v[0:1], off
51 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
52 ; GFX11-NEXT:    scratch_load_b32 v2, off, s32 ; 4-byte Folded Reload
53 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
54 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
55 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
57 ; GFX12-LABEL: test_remat_s_getpc_b64:
58 ; GFX12:       ; %bb.0: ; %entry
59 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
60 ; GFX12-NEXT:    s_wait_expcnt 0x0
61 ; GFX12-NEXT:    s_wait_samplecnt 0x0
62 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
63 ; GFX12-NEXT:    s_wait_kmcnt 0x0
64 ; GFX12-NEXT:    s_xor_saveexec_b32 s0, -1
65 ; GFX12-NEXT:    scratch_store_b32 off, v2, s32 ; 4-byte Folded Spill
66 ; GFX12-NEXT:    s_wait_alu 0xfffe
67 ; GFX12-NEXT:    s_mov_b32 exec_lo, s0
68 ; GFX12-NEXT:    v_writelane_b32 v2, s30, 0
69 ; GFX12-NEXT:    s_getpc_b64 s[0:1]
70 ; GFX12-NEXT:    s_wait_alu 0xfffe
71 ; GFX12-NEXT:    s_sext_i32_i16 s1, s1
72 ; GFX12-NEXT:    ;;#ASMSTART
73 ; GFX12-NEXT:    ;;#ASMEND
74 ; GFX12-NEXT:    v_writelane_b32 v2, s31, 1
75 ; GFX12-NEXT:    ;;#ASMSTART
76 ; GFX12-NEXT:    ;;#ASMEND
77 ; GFX12-NEXT:    s_getpc_b64 s[0:1]
78 ; GFX12-NEXT:    s_wait_alu 0xfffe
79 ; GFX12-NEXT:    s_sext_i32_i16 s1, s1
80 ; GFX12-NEXT:    s_wait_alu 0xfffe
81 ; GFX12-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
82 ; GFX12-NEXT:    v_readlane_b32 s31, v2, 1
83 ; GFX12-NEXT:    v_readlane_b32 s30, v2, 0
84 ; GFX12-NEXT:    global_store_b64 v[0:1], v[0:1], off
85 ; GFX12-NEXT:    s_xor_saveexec_b32 s0, -1
86 ; GFX12-NEXT:    scratch_load_b32 v2, off, s32 ; 4-byte Folded Reload
87 ; GFX12-NEXT:    s_wait_alu 0xfffe
88 ; GFX12-NEXT:    s_mov_b32 exec_lo, s0
89 ; GFX12-NEXT:    s_wait_loadcnt 0x0
90 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
91 entry:
92   %0 = tail call i64 @llvm.amdgcn.s.getpc()
93   tail call void asm sideeffect "", "s"(i64 %0)
94   tail call void asm sideeffect "", "~{s0},~{s1},~{s2},~{s3},~{s4},~{s5},~{s6},~{s7},~{s8},~{s9},~{s10},~{s11},~{s12},~{s13},~{s14},~{s15},~{s16},~{s17},~{s18},~{s19},~{s20},~{s21},~{s22},~{s23},~{s24},~{s25},~{s26},~{s27},~{s28},~{s29},~{s30},~{s31}"()
95   store i64 %0, ptr addrspace(1) undef
96   ret void
99 declare i64 @llvm.amdgcn.s.getpc()