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:
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()
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:
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()