|
| 1 | +// RUN: %clang_cc1 -internal-isystem %S/Inputs -fsycl-is-device -ast-dump \ |
| 2 | +// RUN: %s -o - | FileCheck %s |
| 3 | + |
| 4 | +// This test checks parameter rewriting for free functions with parameters |
| 5 | +// of type struct with array and array of pointers. |
| 6 | + |
| 7 | +#include "sycl.hpp" |
| 8 | + |
| 9 | +constexpr int TestArrSize = 3; |
| 10 | + |
| 11 | +template <int ArrSize> |
| 12 | +struct KArgWithPtrArray { |
| 13 | + int *data[ArrSize]; |
| 14 | + int start[ArrSize]; |
| 15 | + int end[ArrSize]; |
| 16 | + constexpr int getArrSize() { return ArrSize; } |
| 17 | +}; |
| 18 | + |
| 19 | +template <int ArrSize> |
| 20 | +[[__sycl_detail__::add_ir_attributes_function("sycl-single-task-kernel", 0)]] |
| 21 | +void ff_6(KArgWithPtrArray<ArrSize> KArg) { |
| 22 | + for (int j = 0; j < ArrSize; j++) |
| 23 | + for (int i = KArg.start[j]; i <= KArg.end[j]; i++) |
| 24 | + KArg.data[j][i] = KArg.start[j] + KArg.end[j]; |
| 25 | +} |
| 26 | + |
| 27 | +template void ff_6(KArgWithPtrArray<TestArrSize> KArg); |
| 28 | + |
| 29 | +// CHECK: FunctionDecl {{.*}}__sycl_kernel_ff_6{{.*}}'void (__generated_KArgWithPtrArray)' |
| 30 | +// CHECK-NEXT: ParmVarDecl {{.*}} used __arg_KArg '__generated_KArgWithPtrArray' |
| 31 | +// CHECK-NEXT: CompoundStmt |
| 32 | +// CHECK-NEXT: CallExpr |
| 33 | +// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(KArgWithPtrArray<3>)' <FunctionToPointerDecay> |
| 34 | +// CHECK-NEXT: DeclRefExpr {{.*}} 'void (KArgWithPtrArray<3>)' lvalue Function {{.*}} 'ff_6' 'void (KArgWithPtrArray<3>)' |
| 35 | +// CHECK-NEXT: CXXConstructExpr {{.*}} 'KArgWithPtrArray<3>' 'void (const KArgWithPtrArray<3> &) noexcept' |
| 36 | +// CHECK-NEXT: ImplicitCastExpr {{.*}} 'const KArgWithPtrArray<3>' lvalue <NoOp> |
| 37 | +// CHECK-NEXT: UnaryOperator {{.*}} 'KArgWithPtrArray<3>' lvalue prefix '*' cannot overflow |
| 38 | +// CHECK-NEXT: CXXReinterpretCastExpr {{.*}} 'KArgWithPtrArray<3> *' reinterpret_cast<KArgWithPtrArray<3> *> <BitCast> |
| 39 | +// CHECK-NEXT: UnaryOperator {{.*}} '__generated_KArgWithPtrArray *' prefix '&' cannot overflow |
| 40 | +// CHECK-NEXT: DeclRefExpr {{.*}} '__generated_KArgWithPtrArray' lvalue ParmVar {{.*}} '__arg_KArg' '__generated_KArgWithPtrArray' |
0 commit comments