|
| 1 | +/*========================== begin_copyright_notice ============================ |
| 2 | +
|
| 3 | +Copyright (C) 2025 Intel Corporation |
| 4 | +
|
| 5 | +SPDX-License-Identifier: MIT |
| 6 | +
|
| 7 | +============================= end_copyright_notice ===========================*/ |
| 8 | + |
| 9 | +// REQUIRES: regkeys,pvc-supported,llvm-14-plus |
| 10 | + |
| 11 | +// Verify that implicit kernel arguments are not removed for kernels with subroutines. |
| 12 | +// Arguments can be removed for stackcalls. |
| 13 | + |
| 14 | +// RUN: ocloc compile -file %s -device pvc -options "-cl-std=CL2.0 -igc_opts 'EnableStackCallFuncCall=0, RemoveUnusedIdImplicitArguments=1, ShortImplicitPayloadHeader=1, DumpZEInfoToConsole=1'" 2>&1 | FileCheck %s --check-prefix=CHECK-SUBROUTINE |
| 15 | +// RUN: ocloc compile -file %s -device pvc -options "-cl-std=CL2.0 -igc_opts 'EnableStackCallFuncCall=1, RemoveUnusedIdImplicitArguments=1, ShortImplicitPayloadHeader=1, DumpZEInfoToConsole=1'" 2>&1 | FileCheck %s --check-prefix=CHECK-STACKCALL |
| 16 | + |
| 17 | +// CHECK-SUBROUTINE: name: kernel_that_must_have_args |
| 18 | +// CHECK-SUBROUTINE: payload_arguments: |
| 19 | +// CHECK-SUBROUTINE-NEXT: - arg_type: global_id_offset |
| 20 | +// CHECK-SUBROUTINE-NEXT: offset: 0 |
| 21 | +// CHECK-SUBROUTINE-NEXT: size: 12 |
| 22 | +// CHECK-SUBROUTINE-NEXT: - arg_type: arg_bypointer |
| 23 | +// CHECK-SUBROUTINE-NEXT: offset: 16 |
| 24 | +// CHECK-SUBROUTINE-NEXT: size: 8 |
| 25 | +// CHECK-SUBROUTINE-NEXT: arg_index: 0 |
| 26 | +// CHECK-SUBROUTINE-NEXT: addrmode: stateless |
| 27 | +// CHECK-SUBROUTINE-NEXT: addrspace: global |
| 28 | +// CHECK-SUBROUTINE-NEXT: access_type: readwrite |
| 29 | +// CHECK-SUBROUTINE-NEXT: - arg_type: enqueued_local_size |
| 30 | +// CHECK-SUBROUTINE-NEXT: offset: 24 |
| 31 | +// CHECK-SUBROUTINE-NEXT: size: 12 |
| 32 | +// CHECK-SUBROUTINE-NEXT: per_thread_payload_arguments: |
| 33 | +// CHECK-SUBROUTINE-NEXT: - arg_type: local_id |
| 34 | +// CHECK-SUBROUTINE-NEXT: offset: 0 |
| 35 | +// CHECK-SUBROUTINE-NEXT: size: 192 |
| 36 | +// |
| 37 | +// CHECK-SUBROUTINE: name: kernel_that_can_skip_args |
| 38 | +// CHECK-SUBROUTINE: payload_arguments: |
| 39 | +// CHECK-SUBROUTINE-NEXT: - arg_type: arg_bypointer |
| 40 | +// CHECK-SUBROUTINE-NEXT: offset: 0 |
| 41 | +// CHECK-SUBROUTINE-NEXT: size: 8 |
| 42 | +// CHECK-SUBROUTINE-NEXT: arg_index: 0 |
| 43 | +// CHECK-SUBROUTINE-NEXT: addrmode: stateless |
| 44 | +// CHECK-SUBROUTINE-NEXT: addrspace: global |
| 45 | +// CHECK-SUBROUTINE-NEXT: access_type: readwrite |
| 46 | + |
| 47 | +// CHECK-STACKCALL: name: kernel_that_must_have_args |
| 48 | +// CHECK-STACKCALL: payload_arguments: |
| 49 | +// CHECK-STACKCALL-NEXT: - arg_type: arg_bypointer |
| 50 | +// CHECK-STACKCALL-NEXT: offset: 0 |
| 51 | +// CHECK-STACKCALL-NEXT: size: 8 |
| 52 | +// CHECK-STACKCALL-NEXT: arg_index: 0 |
| 53 | +// CHECK-STACKCALL-NEXT: addrmode: stateless |
| 54 | +// CHECK-STACKCALL-NEXT: addrspace: global |
| 55 | +// CHECK-STACKCALL-NEXT: access_type: readwrite |
| 56 | +// CHECK-STACKCALL-NEXT: - arg_type: private_base_stateless |
| 57 | +// CHECK-STACKCALL-NEXT: offset: 8 |
| 58 | +// CHECK-STACKCALL-NEXT: size: 8 |
| 59 | +// CHECK-STACKCALL-NEXT: per_thread_payload_arguments: |
| 60 | +// CHECK-STACKCALL-NEXT: - arg_type: local_id |
| 61 | +// CHECK-STACKCALL-NEXT: offset: 0 |
| 62 | +// CHECK-STACKCALL-NEXT: size: 192 |
| 63 | +// |
| 64 | +// CHECK-STACKCALL: name: kernel_that_can_skip_args |
| 65 | +// CHECK-STACKCALL: payload_arguments: |
| 66 | +// CHECK-STACKCALL-NEXT: - arg_type: arg_bypointer |
| 67 | +// CHECK-STACKCALL-NEXT: offset: 0 |
| 68 | +// CHECK-STACKCALL-NEXT: size: 8 |
| 69 | +// CHECK-STACKCALL-NEXT: arg_index: 0 |
| 70 | +// CHECK-STACKCALL-NEXT: addrmode: stateless |
| 71 | +// CHECK-STACKCALL-NEXT: addrspace: global |
| 72 | +// CHECK-STACKCALL-NEXT: access_type: readwrite |
| 73 | + |
| 74 | +__attribute__((noinline)) |
| 75 | +void noinline_function(global float* ptr) |
| 76 | +{ |
| 77 | + int i = get_global_id(0); |
| 78 | + ptr[i] = get_enqueued_local_size(0); |
| 79 | +} |
| 80 | + |
| 81 | +kernel void kernel_that_must_have_args(global float *ptr) |
| 82 | +{ |
| 83 | + noinline_function(ptr); |
| 84 | +} |
| 85 | + |
| 86 | +kernel void kernel_that_can_skip_args(global float *ptr) {} |
0 commit comments