|
| 1 | +// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --functions "as" --include-generated-funcs --version 4 |
| 2 | +// NOTE: "%if preview-breaking-changes-supported" guard has to be temporarily |
| 3 | +// NOTE: removed/disabled to re-generate the checks. |
| 4 | + |
| 5 | +// RUN: %clangxx -O3 -fsycl -fsycl-device-only -fno-discard-value-names -S -emit-llvm -fno-sycl-instrument-device-code -o - %s | FileCheck %s |
| 6 | +// RUN: %if preview-breaking-changes-supported %{ \ |
| 7 | +// RUN: %clangxx -O3 -fsycl -fsycl-device-only -fno-discard-value-names -S -emit-llvm -fno-sycl-instrument-device-code -o - %s -fpreview-breaking-changes | FileCheck %s --check-prefix=CHECK-PREVIEW \ |
| 8 | +// RUN: %} |
| 9 | + |
| 10 | +// Windows/linux have some slight differences in IR generation (function |
| 11 | +// arguments passing and long/long long differences/mangling) that could |
| 12 | +// complicate test updates while not improving test coverage. Limiting to linux |
| 13 | +// should be fine. |
| 14 | +// REQUIRES: linux |
| 15 | + |
| 16 | +#include <sycl/sycl.hpp> |
| 17 | + |
| 18 | +template SYCL_EXTERNAL sycl::vec<int, 4> sycl::vec<float, 4>::as<sycl::vec<int, 4>>() const; |
| 19 | +// CHECK-LABEL: define weak_odr dso_local spir_func void @_ZNK4sycl3_V13vecIfLi4EE2asINS1_IiLi4EEEEET_v( |
| 20 | +// CHECK-SAME: ptr addrspace(4) dead_on_unwind noalias writable sret(%"class.sycl::_V1::vec") align 16 [[AGG_RESULT:%.*]], ptr addrspace(4) noundef align 16 dereferenceable_or_null(16) [[THIS:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] comdat align 2 !srcloc [[META5:![0-9]+]] !sycl_fixed_targets [[META6:![0-9]+]] { |
| 21 | +// CHECK-NEXT: entry: |
| 22 | +// CHECK-NEXT: br label [[FOR_COND_I:%.*]] |
| 23 | +// CHECK: for.cond.i: |
| 24 | +// CHECK-NEXT: [[I_0_I:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INC_I:%.*]], [[FOR_BODY_I:%.*]] ] |
| 25 | +// CHECK-NEXT: [[CMP_I:%.*]] = icmp ult i64 [[I_0_I]], 16 |
| 26 | +// CHECK-NEXT: br i1 [[CMP_I]], label [[FOR_BODY_I]], label [[_ZN4SYCL3_V16DETAIL6MEMCPYEPVPKVM_EXIT:%.*]] |
| 27 | +// CHECK: for.body.i: |
| 28 | +// CHECK-NEXT: [[ARRAYIDX_I:%.*]] = getelementptr inbounds i8, ptr addrspace(4) [[THIS]], i64 [[I_0_I]] |
| 29 | +// CHECK-NEXT: [[TMP0:%.*]] = load i8, ptr addrspace(4) [[ARRAYIDX_I]], align 1, !tbaa [[TBAA7:![0-9]+]] |
| 30 | +// CHECK-NEXT: [[ARRAYIDX1_I:%.*]] = getelementptr inbounds i8, ptr addrspace(4) [[AGG_RESULT]], i64 [[I_0_I]] |
| 31 | +// CHECK-NEXT: store i8 [[TMP0]], ptr addrspace(4) [[ARRAYIDX1_I]], align 1, !tbaa [[TBAA7]] |
| 32 | +// CHECK-NEXT: [[INC_I]] = add nuw nsw i64 [[I_0_I]], 1 |
| 33 | +// CHECK-NEXT: br label [[FOR_COND_I]], !llvm.loop [[LOOP10:![0-9]+]] |
| 34 | +// CHECK: _ZN4sycl3_V16detail6memcpyEPvPKvm.exit: |
| 35 | +// CHECK-NEXT: ret void |
| 36 | +// |
| 37 | +// |
| 38 | +// CHECK-PREVIEW-LABEL: define weak_odr dso_local spir_func void @_ZNK4sycl3_V13vecIfLi4EE2asINS1_IiLi4EEEEET_v( |
| 39 | +// CHECK-PREVIEW-SAME: ptr addrspace(4) dead_on_unwind noalias writable sret(%"class.sycl::_V1::vec") align 16 [[AGG_RESULT:%.*]], ptr addrspace(4) noundef align 16 dereferenceable_or_null(16) [[THIS:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] comdat align 2 !srcloc [[META5:![0-9]+]] !sycl_fixed_targets [[META6:![0-9]+]] { |
| 40 | +// CHECK-PREVIEW-NEXT: entry: |
| 41 | +// CHECK-PREVIEW-NEXT: br label [[FOR_COND_I:%.*]] |
| 42 | +// CHECK-PREVIEW: for.cond.i: |
| 43 | +// CHECK-PREVIEW-NEXT: [[I_0_I:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INC_I:%.*]], [[FOR_BODY_I:%.*]] ] |
| 44 | +// CHECK-PREVIEW-NEXT: [[CMP_I:%.*]] = icmp ult i64 [[I_0_I]], 16 |
| 45 | +// CHECK-PREVIEW-NEXT: br i1 [[CMP_I]], label [[FOR_BODY_I]], label [[_ZN4SYCL3_V16DETAIL6MEMCPYEPVPKVM_EXIT:%.*]] |
| 46 | +// CHECK-PREVIEW: for.body.i: |
| 47 | +// CHECK-PREVIEW-NEXT: [[ARRAYIDX_I:%.*]] = getelementptr inbounds i8, ptr addrspace(4) [[THIS]], i64 [[I_0_I]] |
| 48 | +// CHECK-PREVIEW-NEXT: [[TMP0:%.*]] = load i8, ptr addrspace(4) [[ARRAYIDX_I]], align 1, !tbaa [[TBAA7:![0-9]+]] |
| 49 | +// CHECK-PREVIEW-NEXT: [[ARRAYIDX1_I:%.*]] = getelementptr inbounds i8, ptr addrspace(4) [[AGG_RESULT]], i64 [[I_0_I]] |
| 50 | +// CHECK-PREVIEW-NEXT: store i8 [[TMP0]], ptr addrspace(4) [[ARRAYIDX1_I]], align 1, !tbaa [[TBAA7]] |
| 51 | +// CHECK-PREVIEW-NEXT: [[INC_I]] = add nuw nsw i64 [[I_0_I]], 1 |
| 52 | +// CHECK-PREVIEW-NEXT: br label [[FOR_COND_I]], !llvm.loop [[LOOP10:![0-9]+]] |
| 53 | +// CHECK-PREVIEW: _ZN4sycl3_V16detail6memcpyEPvPKvm.exit: |
| 54 | +// CHECK-PREVIEW-NEXT: ret void |
0 commit comments