| ; RUN: llc -mtriple=spirv64-unknown-unknown -O0 < %s | FileCheck %s |
| ; RUN: llc -mtriple=spirv32-unknown-unknown -O0 < %s | FileCheck %s |
| ; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown < %s -o - -filetype=obj | spirv-val %} |
| |
| ; SPIR-V does not have a stack or return address concept. |
| ; llvm.returnaddress and llvm.frameaddress are lowered to null (OpConstantNull). |
| |
| declare ptr @llvm.returnaddress(i32) |
| declare ptr @llvm.frameaddress(i32) |
| |
| ; CHECK-DAG: %[[#PTR_TY:]] = OpTypePointer |
| ; CHECK-DAG: %[[#NULL:]] = OpConstantNull %[[#PTR_TY]] |
| |
| ; CHECK: %[[#]] = OpFunction |
| ; CHECK: OpReturnValue %[[#NULL]] |
| define ptr @test_returnaddress() { |
| %ret = call ptr @llvm.returnaddress(i32 0) |
| ret ptr %ret |
| } |
| |
| ; CHECK: %[[#]] = OpFunction |
| ; CHECK: OpReturnValue %[[#NULL]] |
| define ptr @test_frameaddress() { |
| %ret = call ptr @llvm.frameaddress(i32 0) |
| ret ptr %ret |
| } |