1*532dc62bSNikita Popov// RUN: %clang_cc1 -no-opaque-pointers -triple spir-unknown-unknown -cl-std=CL2.0 -emit-llvm %s -O0 -o - | FileCheck %s 2a91da4baSYaxun Liu 3a91da4baSYaxun Liutypedef __attribute__(( ext_vector_type(2) )) int int2; 4a91da4baSYaxun Liutypedef __attribute__(( ext_vector_type(4) )) int int4; 5a91da4baSYaxun Liu 6a91da4baSYaxun Liu// CHECK: %struct.StrucTy = type { i32, i32, i32 } 7a91da4baSYaxun Liu 8fd739804SFangrui Song// CHECK: @GA ={{.*}} addrspace(1) global [6 x [6 x float]] {{[[][[]}}6 x float] [float 1.000000e+00, float 2.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00], 9a91da4baSYaxun Liu// CHECK: [6 x float] zeroinitializer, [6 x float] zeroinitializer, [6 x float] zeroinitializer, [6 x float] zeroinitializer, [6 x float] zeroinitializer], align 4 10a91da4baSYaxun Liufloat GA[6][6] = {1.0f, 2.0f}; 11a91da4baSYaxun Liu 12a91da4baSYaxun Liutypedef struct { 13a91da4baSYaxun Liu int x; 14a91da4baSYaxun Liu int y; 15a91da4baSYaxun Liu int z; 16a91da4baSYaxun Liu} StrucTy; 17a91da4baSYaxun Liu 18fd739804SFangrui Song// CHECK: @GS ={{.*}} addrspace(1) global %struct.StrucTy { i32 1, i32 2, i32 0 }, align 4 19a91da4baSYaxun LiuStrucTy GS = {1, 2}; 20a91da4baSYaxun Liu 21fd739804SFangrui Song// CHECK: @GV1 ={{.*}} addrspace(1) global <4 x i32> <i32 1, i32 2, i32 3, i32 4>, align 16 22a91da4baSYaxun Liuint4 GV1 = (int4)((int2)(1,2),3,4); 23a91da4baSYaxun Liu 24fd739804SFangrui Song// CHECK: @GV2 ={{.*}} addrspace(1) global <4 x i32> <i32 1, i32 1, i32 1, i32 1>, align 16 25a91da4baSYaxun Liuint4 GV2 = (int4)(1); 26a91da4baSYaxun Liu 273a881e6bSJF Bastien// CHECK: @__const.f.S = private unnamed_addr addrspace(2) constant %struct.StrucTy { i32 1, i32 2, i32 0 }, align 4 28a91da4baSYaxun Liu 29fd739804SFangrui Song// CHECK-LABEL: define{{.*}} spir_func void @f() 30a91da4baSYaxun Liuvoid f(void) { 31a91da4baSYaxun Liu // CHECK: %[[A:.*]] = alloca [6 x [6 x float]], align 4 32a91da4baSYaxun Liu // CHECK: %[[S:.*]] = alloca %struct.StrucTy, align 4 33a91da4baSYaxun Liu // CHECK: %[[V1:.*]] = alloca <4 x i32>, align 16 34a91da4baSYaxun Liu // CHECK: %[[compoundliteral:.*]] = alloca <4 x i32>, align 16 35a91da4baSYaxun Liu // CHECK: %[[compoundliteral1:.*]] = alloca <2 x i32>, align 8 36a91da4baSYaxun Liu // CHECK: %[[V2:.*]] = alloca <4 x i32>, align 16 37a91da4baSYaxun Liu 38a91da4baSYaxun Liu // CHECK: %[[v0:.*]] = bitcast [6 x [6 x float]]* %A to i8* 396e938effSDaniel Neilson // CHECK: call void @llvm.memset.p0i8.i32(i8* align 4 %[[v0]], i8 0, i32 144, i1 false) 40a91da4baSYaxun Liu // CHECK: %[[v1:.*]] = bitcast i8* %[[v0]] to [6 x [6 x float]]* 419aab85a6SJF Bastien // CHECK: %[[v2:.*]] = getelementptr inbounds [6 x [6 x float]], [6 x [6 x float]]* %[[v1]], i32 0, i32 0 429aab85a6SJF Bastien // CHECK: %[[v3:.*]] = getelementptr inbounds [6 x float], [6 x float]* %[[v2]], i32 0, i32 0 439aab85a6SJF Bastien // CHECK: store float 1.000000e+00, float* %[[v3]], align 4 449aab85a6SJF Bastien // CHECK: %[[v4:.*]] = getelementptr inbounds [6 x float], [6 x float]* %[[v2]], i32 0, i32 1 459aab85a6SJF Bastien // CHECK: store float 2.000000e+00, float* %[[v4]], align 4 46a91da4baSYaxun Liu float A[6][6] = {1.0f, 2.0f}; 47a91da4baSYaxun Liu 48a91da4baSYaxun Liu // CHECK: %[[v5:.*]] = bitcast %struct.StrucTy* %S to i8* 493a881e6bSJF Bastien // CHECK: call void @llvm.memcpy.p0i8.p2i8.i32(i8* align 4 %[[v5]], i8 addrspace(2)* align 4 bitcast (%struct.StrucTy addrspace(2)* @__const.f.S to i8 addrspace(2)*), i32 12, i1 false) 50a91da4baSYaxun Liu StrucTy S = {1, 2}; 51a91da4baSYaxun Liu 52a91da4baSYaxun Liu // CHECK: store <2 x i32> <i32 1, i32 2>, <2 x i32>* %[[compoundliteral1]], align 8 53a91da4baSYaxun Liu // CHECK: %[[v6:.*]] = load <2 x i32>, <2 x i32>* %[[compoundliteral1]], align 8 549b296102SJuneyoung Lee // CHECK: %[[vext:.*]] = shufflevector <2 x i32> %[[v6]], <2 x i32> poison, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef> 55a91da4baSYaxun Liu // CHECK: %[[vecinit:.*]] = shufflevector <4 x i32> %[[vext]], <4 x i32> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef> 56a91da4baSYaxun Liu // CHECK: %[[vecinit2:.*]] = insertelement <4 x i32> %[[vecinit]], i32 3, i32 2 57a91da4baSYaxun Liu // CHECK: %[[vecinit3:.*]] = insertelement <4 x i32> %[[vecinit2]], i32 4, i32 3 58a91da4baSYaxun Liu // CHECK: store <4 x i32> %[[vecinit3]], <4 x i32>* %[[compoundliteral]], align 16 59a91da4baSYaxun Liu // CHECK: %[[v7:.*]] = load <4 x i32>, <4 x i32>* %[[compoundliteral]], align 16 60a91da4baSYaxun Liu // CHECK: store <4 x i32> %[[v7]], <4 x i32>* %[[V1]], align 16 61a91da4baSYaxun Liu int4 V1 = (int4)((int2)(1,2),3,4); 62a91da4baSYaxun Liu 63a91da4baSYaxun Liu // CHECK: store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %[[V2]], align 16 64a91da4baSYaxun Liu int4 V2 = (int4)(1); 65a91da4baSYaxun Liu} 66a91da4baSYaxun Liu 67