|
| 1 | +; RUN: opt -load-pass-plugin %shlibdir/SYCLKernelFusion%shlibext\ |
| 2 | +; RUN: -passes=sycl-internalization --sycl-info-path %S/abort-kernel-info.yaml -S %s -debug 2>&1 | FileCheck %s |
| 3 | + |
| 4 | +target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v16:16:16-v24:32:32-v32:32:32-v48:64:64-v64:64:64-v96:128:128-v128:128:128-v192:256:256-v256:256:256-v512:512:512-v1024:1024:1024" |
| 5 | +target triple = "spir64-unknown-unknown" |
| 6 | + |
| 7 | +; CHECK: Unable to perform all promotions for function fused_0. Detailed information: |
| 8 | +; CHECK: Failed to promote argument 0 of function fused_0: It is not safe to promote values being stored to another pointer |
| 9 | + |
| 10 | +; CHECK-LABEL: define {{[^@]+}}@fused_0 |
| 11 | +; CHECK-SAME: (float addrspace(1)* align 4 %[[ACC:.*]]) |
| 12 | +define spir_kernel void @fused_0(float addrspace(1)* align 4 %acc) !kernel_arg_addr_space !12 !kernel_arg_access_qual !13 !kernel_arg_type !14 !kernel_arg_type_qual !15 !kernel_arg_base_type !14 !kernel_arg_name !16 !sycl.kernel.promote !17 !sycl.kernel.promote.localsize !18 { |
| 13 | +; Scenario: Test private internalization is not performed when the |
| 14 | +; input pointer is stored in another pointer. |
| 15 | + |
| 16 | +; CHECK-NEXT: %[[ALLOCA:.*]] = alloca float addrspace(1)*, align 8 |
| 17 | +; CHECK-NEXT: store float addrspace(1)* %[[ACC]], float addrspace(1)** %[[ALLOCA]], align 8 |
| 18 | +; CHECK-NEXT: %[[ACC_PTR:.*]] = load float addrspace(1)*, float addrspace(1)** %[[ALLOCA]], align 8 |
| 19 | +; CHECK-NEXT: store float 7.000000e+00, float addrspace(1)* %[[ACC]], align 4 |
| 20 | +; CHECK-NEXT: %[[RES:.*]] = load float, float addrspace(1)* %[[ACC]], align 4 |
| 21 | +; CHECK-NEXT: ret void |
| 22 | + |
| 23 | + %alloca = alloca float addrspace(1)* |
| 24 | + store float addrspace(1)* %acc, float addrspace(1)** %alloca |
| 25 | + %acc_ptr = load float addrspace(1)*, float addrspace(1)** %alloca |
| 26 | + store float 7.0, float addrspace(1)* %acc |
| 27 | + %res = load float, float addrspace(1)* %acc |
| 28 | + ret void |
| 29 | +} |
| 30 | + |
| 31 | +!12 = !{i32 1} |
| 32 | +!13 = !{!"none"} |
| 33 | +!14 = !{!"float*"} |
| 34 | +!15 = !{!""} |
| 35 | +!16 = !{!"acc"} |
| 36 | +!17 = !{!"private"} |
| 37 | +!18 = !{i64 1} |
0 commit comments