1*67e74705SXin Li// RUN: %clang_cc1 %s -emit-llvm -o - -cl-std=CL1.2 -O1 -triple x86_64-unknown-linux-gnu | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Li#pragma OPENCL EXTENSION cl_khr_fp64 : enable 4*67e74705SXin Li 5*67e74705SXin Litypedef int int4 __attribute((ext_vector_type(4))); 6*67e74705SXin Litypedef long long4 __attribute((ext_vector_type(4))); 7*67e74705SXin Litypedef float float4 __attribute((ext_vector_type(4))); 8*67e74705SXin Litypedef double double4 __attribute((ext_vector_type(4))); 9*67e74705SXin Li 10*67e74705SXin Li// CHECK: floatops 11*67e74705SXin Likernel void floatops(global int4 *out, global float4 *fout) { 12*67e74705SXin Li // CHECK: store <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1> 13*67e74705SXin Li out[0] = (float4)(1, 1, 1, 1) && 1.0f; 14*67e74705SXin Li // CHECK: store <4 x i32> zeroinitializer 15*67e74705SXin Li out[1] = (float4)(0, 0, 0, 0) && (float4)(0, 0, 0, 0); 16*67e74705SXin Li 17*67e74705SXin Li // CHECK: store <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1> 18*67e74705SXin Li out[2] = (float4)(0, 0, 0, 0) || (float4)(1, 1, 1, 1); 19*67e74705SXin Li // CHECK: store <4 x i32> zeroinitializer 20*67e74705SXin Li out[3] = (float4)(0, 0, 0, 0) || 0.0f; 21*67e74705SXin Li 22*67e74705SXin Li // CHECK: store <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1> 23*67e74705SXin Li out[4] = !(float4)(0, 0, 0, 0); 24*67e74705SXin Li // CHECK: store <4 x i32> zeroinitializer 25*67e74705SXin Li out[5] = !(float4)(1, 2, 3, 4); 26*67e74705SXin Li // CHECK: store <4 x i32> <i32 -1, i32 0, i32 -1, i32 0> 27*67e74705SXin Li out[6] = !(float4)(0, 1, 0, 1); 28*67e74705SXin Li // CHECK: store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00> 29*67e74705SXin Li fout[0] = (float4)(!0.0f); 30*67e74705SXin Li // CHECK: store <4 x float> zeroinitializer 31*67e74705SXin Li fout[1] = (float4)(!1.0f); 32*67e74705SXin Li} 33*67e74705SXin Li 34*67e74705SXin Li// CHECK: doubleops 35*67e74705SXin Likernel void doubleops(global long4 *out, global double4 *dout) { 36*67e74705SXin Li // CHECK: store <4 x i64> <i64 -1, i64 -1, i64 -1, i64 -1> 37*67e74705SXin Li out[0] = (double4)(1, 1, 1, 1) && 1.0; 38*67e74705SXin Li // CHECK: store <4 x i64> zeroinitializer 39*67e74705SXin Li out[1] = (double4)(0, 0, 0, 0) && (double4)(0, 0, 0, 0); 40*67e74705SXin Li 41*67e74705SXin Li // CHECK: store <4 x i64> <i64 -1, i64 -1, i64 -1, i64 -1> 42*67e74705SXin Li out[2] = (double4)(0, 0, 0, 0) || (double4)(1, 1, 1, 1); 43*67e74705SXin Li // CHECK: store <4 x i64> zeroinitializer 44*67e74705SXin Li out[3] = (double4)(0, 0, 0, 0) || 0.0f; 45*67e74705SXin Li 46*67e74705SXin Li // CHECK: store <4 x i64> <i64 -1, i64 -1, i64 -1, i64 -1> 47*67e74705SXin Li out[4] = !(double4)(0, 0, 0, 0); 48*67e74705SXin Li // CHECK: store <4 x i64> zeroinitializer 49*67e74705SXin Li out[5] = !(double4)(1, 2, 3, 4); 50*67e74705SXin Li // CHECK: store <4 x i64> <i64 -1, i64 0, i64 -1, i64 0> 51*67e74705SXin Li out[6] = !(double4)(0, 1, 0, 1); 52*67e74705SXin Li // CHECK: store <4 x double> <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00> 53*67e74705SXin Li dout[0] = (double4)(!0.0f); 54*67e74705SXin Li // CHECK: store <4 x double> zeroinitializer 55*67e74705SXin Li dout[1] = (double4)(!1.0f); 56*67e74705SXin Li} 57