blob: 371bf3dc5819b8f11b8f6d6a16e3d3c4d3343201 [file] [log] [blame]
; RUN: clspv-opt %s -o %t.ll -ReplacePointerBitcast
; RUN: FileCheck %s < %t.ll
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
target triple = "spir-unknown-unknown"
@__spirv_WorkgroupSize = local_unnamed_addr addrspace(8) global <3 x i32> zeroinitializer
define spir_kernel void @foo(float addrspace(1)* nocapture readonly %input, <4 x float> addrspace(1)* nocapture %output) {
entry:
%in = alloca [4 x [4 x float]], align 16
; CHECK: [[base:%[a-zA-Z0-9_.]+]] = getelementptr inbounds [4 x [4 x float]], [4 x [4 x float]]* %in, i32 0, i32 0, i32 0
; CHECK: [[gep:%[a-zA-Z0-9_.]+]] = getelementptr float, float* [[base]], i32 0
; CHECK: load float, float* [[gep]]
; CHECK: [[gep:%[a-zA-Z0-9_.]+]] = getelementptr float, float* [[base]], i32 1
; CHECK: load float, float* [[gep]]
; CHECK: [[gep:%[a-zA-Z0-9_.]+]] = getelementptr float, float* [[base]], i32 2
; CHECK: load float, float* [[gep]]
; CHECK: [[gep:%[a-zA-Z0-9_.]+]] = getelementptr float, float* [[base]], i32 3
; CHECK: load float, float* [[gep]]
%bc0 = bitcast [4 x [4 x float]]* %in to <4 x float>*
%ld0 = load <4 x float>, <4 x float>* %bc0
; CHECK: [[base:%[a-zA-Z0-9_.]+]] = getelementptr inbounds [4 x [4 x float]], [4 x [4 x float]]* %gep1, i32 0, i32 0, i32 0
; CHECK: [[gep:%[a-zA-Z0-9_.]+]] = getelementptr float, float* [[base]], i32 0
; CHECK: load float, float* [[gep]]
; CHECK: [[gep:%[a-zA-Z0-9_.]+]] = getelementptr float, float* [[base]], i32 1
; CHECK: load float, float* [[gep]]
; CHECK: [[gep:%[a-zA-Z0-9_.]+]] = getelementptr float, float* [[base]], i32 2
; CHECK: load float, float* [[gep]]
; CHECK: [[gep:%[a-zA-Z0-9_.]+]] = getelementptr float, float* [[base]], i32 3
; CHECK: load float, float* [[gep]]
%gep1 = getelementptr [4 x [4 x float]], [4 x [4 x float]]* %in
%bc1 = bitcast [4 x [4 x float]]* %gep1 to <4 x float>*
%ld1 = load <4 x float>, <4 x float>* %bc1
; CHECK: [[base:%[a-zA-Z0-9_.]+]] = getelementptr inbounds [4 x [4 x float]], [4 x [4 x float]]* %gep2, i32 0, i32 0, i32 0
; CHECK: [[gep:%[a-zA-Z0-9_.]+]] = getelementptr float, float* [[base]], i32 0
; CHECK: load float, float* [[gep]]
; CHECK: [[gep:%[a-zA-Z0-9_.]+]] = getelementptr float, float* [[base]], i32 1
; CHECK: load float, float* [[gep]]
; CHECK: [[gep:%[a-zA-Z0-9_.]+]] = getelementptr float, float* [[base]], i32 2
; CHECK: load float, float* [[gep]]
; CHECK: [[gep:%[a-zA-Z0-9_.]+]] = getelementptr float, float* [[base]], i32 3
; CHECK: load float, float* [[gep]]
%gep2 = getelementptr [4 x [4 x float]], [4 x [4 x float]]* %in, i32 0
%bc2 = bitcast [4 x [4 x float]]* %gep2 to <4 x float>*
%ld2 = load <4 x float>, <4 x float>* %bc2
; CHECK: [[base:%[a-zA-Z0-9_.]+]] = getelementptr inbounds [4 x float], [4 x float]* %gep3, i32 0, i32 0
; CHECK: [[gep:%[a-zA-Z0-9_.]+]] = getelementptr float, float* [[base]], i32 0
; CHECK: load float, float* [[gep]]
; CHECK: [[gep:%[a-zA-Z0-9_.]+]] = getelementptr float, float* [[base]], i32 1
; CHECK: load float, float* [[gep]]
; CHECK: [[gep:%[a-zA-Z0-9_.]+]] = getelementptr float, float* [[base]], i32 2
; CHECK: load float, float* [[gep]]
; CHECK: [[gep:%[a-zA-Z0-9_.]+]] = getelementptr float, float* [[base]], i32 3
; CHECK: load float, float* [[gep]]
%gep3 = getelementptr [4 x [4 x float]], [4 x [4 x float]]* %in, i32 0, i32 0
%bc3 = bitcast [4 x float]* %gep3 to <4 x float>*
%ld3 = load <4 x float>, <4 x float>* %bc3
; CHECK: [[gep:%[a-zA-Z0-9_.]+]] = getelementptr float, float* %gep4, i32 0
; CHECK: load float, float* [[gep]]
; CHECK: [[gep:%[a-zA-Z0-9_.]+]] = getelementptr float, float* %gep4, i32 1
; CHECK: load float, float* [[gep]]
; CHECK: [[gep:%[a-zA-Z0-9_.]+]] = getelementptr float, float* %gep4, i32 2
; CHECK: load float, float* [[gep]]
; CHECK: [[gep:%[a-zA-Z0-9_.]+]] = getelementptr float, float* %gep4, i32 3
; CHECK: load float, float* [[gep]]
%gep4 = getelementptr [4 x [4 x float]], [4 x [4 x float]]* %in, i32 0, i32 0, i32 0
%bc4 = bitcast float* %gep4 to <4 x float>*
%ld4 = load <4 x float>, <4 x float>* %bc4
ret void
}