[MachineScheduler] Fix physreg dependencies of ExitSU (#123541)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / tail-call-uniform-target-in-vgprs-issue110930.ll
blobb5a68720dc19f5b9c6c7d7b6b727384f0af52a94
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck %s
4 target triple = "amdgcn-amd-amdhsa"
6 ; The tail call target is known uniform, but will be in a VGPR, so we
7 ; need readfirstlane to legalize it.
8 define void @tail_call_uniform_vgpr_value() {
9 ; CHECK-LABEL: tail_call_uniform_vgpr_value:
10 ; CHECK:       ; %bb.0:
11 ; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12 ; CHECK-NEXT:    v_mov_b32_e32 v0, 0
13 ; CHECK-NEXT:    ds_read_b64 v[0:1], v0
14 ; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
15 ; CHECK-NEXT:    v_readfirstlane_b32 s17, v1
16 ; CHECK-NEXT:    v_readfirstlane_b32 s16, v0
17 ; CHECK-NEXT:    s_setpc_b64 s[16:17]
18   %fptr = load ptr, ptr addrspace(3) null, align 8
19   tail call void %fptr()
20   ret void
23 @constant = external hidden addrspace(4) constant ptr
25 ; readfirstlanes should fold out.
26 define void @tail_call_uniform_sgpr_value() {
27 ; CHECK-LABEL: tail_call_uniform_sgpr_value:
28 ; CHECK:       ; %bb.0:
29 ; CHECK-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30 ; CHECK-NEXT:    s_getpc_b64 s[16:17]
31 ; CHECK-NEXT:    s_add_u32 s16, s16, constant@rel32@lo+4
32 ; CHECK-NEXT:    s_addc_u32 s17, s17, constant@rel32@hi+12
33 ; CHECK-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
34 ; CHECK-NEXT:    s_waitcnt lgkmcnt(0)
35 ; CHECK-NEXT:    s_setpc_b64 s[16:17]
36   %fptr = load ptr, ptr addrspace(4) @constant, align 8
37   tail call void %fptr()
38   ret void