|
| 1 | +; RUN: not llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown %s -o %t.spvt 2>&1 | FileCheck -check-prefix=CHECK-ERROR %s |
| 2 | +; RUN: not llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown --spv-allow-unknown-intrinsics %s -o %t.spvt 2>&1 | FileCheck -check-prefix=CHECK-ERROR %s |
| 3 | +; RUN: not llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown --spv-allow-unknown-intrinsics=notllvm %s -o %t.spvt 2>&1 | FileCheck --check-prefix=CHECK-ERROR %s |
| 4 | +; RUN: not llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown --spv-allow-unknown-intrinsics=llvm.some.custom %s -o %t.spvt 2>&1 | FileCheck --check-prefix=CHECK-ERROR %s |
| 5 | +; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown --spv-allow-unknown-intrinsics=llvm. %s -o - | FileCheck %s |
| 6 | +; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown --spv-allow-unknown-intrinsics=llvm.,random.prefix %s -o - | FileCheck %s |
| 7 | +; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv64-amd-amdhsa %s -o - | FileCheck %s |
| 8 | +; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown --spv-allow-unknown-intrinsics=llvm. %s -o - -filetype=obj | spirv-val %} |
| 9 | +; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-amd-amdhsa %s -o - -filetype=obj | spirv-val %} |
| 10 | + |
| 11 | +; The test checks command-line option which allows to represent unknown |
| 12 | +; intrinsics as external function calls in SPIR-V. |
| 13 | + |
| 14 | +; CHECK-ERROR: LLVM ERROR: unable to legalize instruction: %3:iid(s64) = G_READCYCLECOUNTER (in function: foo) |
| 15 | + |
| 16 | +; CHECK: Name %[[READCYCLECOUNTER:[0-9]+]] "spirv.llvm_readcyclecounter" |
| 17 | +; CHECK: Name %[[SOME_CUSTOM_INTRINSIC:[0-9]+]] "spirv.llvm_some_custom_intrinsic" |
| 18 | +; CHECK-DAG: Decorate %[[READCYCLECOUNTER]] LinkageAttributes {{.*}} Import |
| 19 | +; CHECK: Decorate %[[SOME_CUSTOM_INTRINSIC]] LinkageAttributes {{.*}} Import |
| 20 | +; CHECK-DAG: %[[I64:[0-9]+]] = OpTypeInt 64 |
| 21 | +; CHECK: %[[FnTy:[0-9]+]] = OpTypeFunction %[[I64]] |
| 22 | +; CHECK: %[[READCYCLECOUNTER]] = OpFunction %[[I64]] {{.*}} %[[FnTy]] |
| 23 | +; CHECK-DAG: %[[SOME_CUSTOM_INTRINSIC]] = OpFunction %[[I64]] {{.*}} %[[FnTy]] |
| 24 | +; CHECK-DAG: OpFunctionCall %[[I64]] %[[READCYCLECOUNTER]] |
| 25 | +; CHECK: OpFunctionCall %[[I64]] %[[SOME_CUSTOM_INTRINSIC]] |
| 26 | + |
| 27 | +define spir_func void @foo() { |
| 28 | +entry: |
| 29 | +; TODO: if and when the SPIR-V learns how to lower readcyclecounter, we will have to pick another unhandled intrinsic |
| 30 | + %0 = call i64 @llvm.readcyclecounter() |
| 31 | + %1 = call i64 @llvm.some.custom.intrinsic() |
| 32 | + ret void |
| 33 | +} |
| 34 | + |
| 35 | +declare i64 @llvm.readcyclecounter() |
| 36 | +declare i64 @llvm.some.custom.intrinsic() |
0 commit comments