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