1*9880d681SAndroid Build Coastguard Worker; RUN: not llc -march=amdgcn -verify-machineinstrs < %s 2>&1 | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: not llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s 2>&1 | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker; RUN: not llc -march=r600 -mcpu=cypress < %s 2>&1 | FileCheck %s 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; CHECK: in function test_call_external{{.*}}: unsupported call to function external_function 6*9880d681SAndroid Build Coastguard Worker; CHECK: in function test_call{{.*}}: unsupported call to function defined_function 7*9880d681SAndroid Build Coastguard Worker; CHECK: in function test_tail_call{{.*}}: unsupported call to function defined_function 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Workerdeclare i32 @external_function(i32) nounwind 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerdefine void @test_call_external(i32 addrspace(1)* %out, i32 addrspace(1)* %in) { 13*9880d681SAndroid Build Coastguard Worker %b_ptr = getelementptr i32, i32 addrspace(1)* %in, i32 1 14*9880d681SAndroid Build Coastguard Worker %a = load i32, i32 addrspace(1)* %in 15*9880d681SAndroid Build Coastguard Worker %b = load i32, i32 addrspace(1)* %b_ptr 16*9880d681SAndroid Build Coastguard Worker %c = call i32 @external_function(i32 %b) nounwind 17*9880d681SAndroid Build Coastguard Worker %result = add i32 %a, %c 18*9880d681SAndroid Build Coastguard Worker store i32 %result, i32 addrspace(1)* %out 19*9880d681SAndroid Build Coastguard Worker ret void 20*9880d681SAndroid Build Coastguard Worker} 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Workerdefine i32 @defined_function(i32 %x) nounwind noinline { 23*9880d681SAndroid Build Coastguard Worker %y = add i32 %x, 8 24*9880d681SAndroid Build Coastguard Worker ret i32 %y 25*9880d681SAndroid Build Coastguard Worker} 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Workerdefine void @test_call(i32 addrspace(1)* %out, i32 addrspace(1)* %in) { 28*9880d681SAndroid Build Coastguard Worker %b_ptr = getelementptr i32, i32 addrspace(1)* %in, i32 1 29*9880d681SAndroid Build Coastguard Worker %a = load i32, i32 addrspace(1)* %in 30*9880d681SAndroid Build Coastguard Worker %b = load i32, i32 addrspace(1)* %b_ptr 31*9880d681SAndroid Build Coastguard Worker %c = call i32 @defined_function(i32 %b) nounwind 32*9880d681SAndroid Build Coastguard Worker %result = add i32 %a, %c 33*9880d681SAndroid Build Coastguard Worker store i32 %result, i32 addrspace(1)* %out 34*9880d681SAndroid Build Coastguard Worker ret void 35*9880d681SAndroid Build Coastguard Worker} 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Workerdefine void @test_tail_call(i32 addrspace(1)* %out, i32 addrspace(1)* %in) { 38*9880d681SAndroid Build Coastguard Worker %b_ptr = getelementptr i32, i32 addrspace(1)* %in, i32 1 39*9880d681SAndroid Build Coastguard Worker %a = load i32, i32 addrspace(1)* %in 40*9880d681SAndroid Build Coastguard Worker %b = load i32, i32 addrspace(1)* %b_ptr 41*9880d681SAndroid Build Coastguard Worker %c = tail call i32 @defined_function(i32 %b) nounwind 42*9880d681SAndroid Build Coastguard Worker %result = add i32 %a, %c 43*9880d681SAndroid Build Coastguard Worker store i32 %result, i32 addrspace(1)* %out 44*9880d681SAndroid Build Coastguard Worker ret void 45*9880d681SAndroid Build Coastguard Worker} 46