18e609929SSven van Haastregt// RUN: %clang_cc1 -emit-llvm -o - -O0 -triple spir-unknown-unknown -cl-std=CL1.2 -finclude-default-header %s \ 28e609929SSven van Haastregt// RUN: | FileCheck %s --check-prefixes CHECK,CHECK-NOGAS 38e609929SSven van Haastregt// RUN: %clang_cc1 -emit-llvm -o - -O0 -triple spir-unknown-unknown -cl-std=CL1.2 -fdeclare-opencl-builtins -finclude-default-header %s \ 48e609929SSven van Haastregt// RUN: | FileCheck %s --check-prefixes CHECK,CHECK-NOGAS 58e609929SSven van Haastregt// RUN: %clang_cc1 -emit-llvm -o - -O0 -triple spir-unknown-unknown -cl-std=CL3.0 -fdeclare-opencl-builtins -finclude-default-header %s \ 68e609929SSven van Haastregt// RUN: | FileCheck %s --check-prefixes CHECK,CHECK-GAS 78e609929SSven van Haastregt// RUN: %clang_cc1 -emit-llvm -o - -O0 -triple spir-unknown-unknown -cl-std=CL3.0 -fdeclare-opencl-builtins -finclude-default-header \ 88e609929SSven van Haastregt// RUN: -cl-ext=-__opencl_c_generic_address_space,-__opencl_c_pipes,-__opencl_c_device_enqueue %s \ 98e609929SSven van Haastregt// RUN: | FileCheck %s --check-prefixes CHECK,CHECK-NOGAS 109a8d477aSSven van Haastregt 11f0686569SSven van Haastregt// Test that mix is correctly defined. 12f0686569SSven van Haastregt// CHECK-LABEL: @test_float 136f912a2cSSven van Haastregt// CHECK: call spir_func <4 x float> @_Z3mixDv4_fS_f 14f0686569SSven van Haastregt// CHECK: ret 15f0686569SSven van Haastregtvoid test_float(float4 x, float a) { 16f0686569SSven van Haastregt float4 ret = mix(x, x, a); 17f0686569SSven van Haastregt} 18f0686569SSven van Haastregt 199a8d477aSSven van Haastregt// Test that Attr.Const from OpenCLBuiltins.td is lowered to a readnone attribute. 209a8d477aSSven van Haastregt// CHECK-LABEL: @test_const_attr 216f912a2cSSven van Haastregt// CHECK: call spir_func i32 @_Z3maxii({{.*}}) [[ATTR_CONST:#[0-9]]] 229a8d477aSSven van Haastregt// CHECK: ret 239a8d477aSSven van Haastregtint test_const_attr(int a) { 249a8d477aSSven van Haastregt return max(a, 2); 259a8d477aSSven van Haastregt} 269a8d477aSSven van Haastregt 279a8d477aSSven van Haastregt// Test that Attr.Pure from OpenCLBuiltins.td is lowered to a readonly attribute. 289a8d477aSSven van Haastregt// CHECK-LABEL: @test_pure_attr 296f912a2cSSven van Haastregt// CHECK: call spir_func <4 x float> @_Z11read_imagef{{.*}} [[ATTR_PURE:#[0-9]]] 309a8d477aSSven van Haastregt// CHECK: ret 319a8d477aSSven van Haastregtkernel void test_pure_attr(read_only image1d_t img) { 329a8d477aSSven van Haastregt float4 resf = read_imagef(img, 42); 339a8d477aSSven van Haastregt} 349a8d477aSSven van Haastregt 356713670bSSven van Haastregt// Test that builtins with only one prototype are mangled. 366713670bSSven van Haastregt// CHECK-LABEL: @test_mangling 376f912a2cSSven van Haastregt// CHECK: call spir_func i32 @_Z12get_local_idj 386713670bSSven van Haastregtkernel void test_mangling() { 396713670bSSven van Haastregt size_t lid = get_local_id(0); 406713670bSSven van Haastregt} 416713670bSSven van Haastregt 428e609929SSven van Haastregt// Test that the correct builtin is called depending on the generic address 438e609929SSven van Haastregt// space feature availability. 448e609929SSven van Haastregt// CHECK-LABEL: @test_generic_optionality 458e609929SSven van Haastregt// CHECK-GAS: call spir_func float @_Z5fractfPU3AS4f 468e609929SSven van Haastregt// CHECK-NOGAS: call spir_func float @_Z5fractfPf 478e609929SSven van Haastregtvoid test_generic_optionality(float a, float *b) { 488e609929SSven van Haastregt float res = fract(a, b); 498e609929SSven van Haastregt} 508e609929SSven van Haastregt 519a8d477aSSven van Haastregt// CHECK: attributes [[ATTR_CONST]] = 52*304f1d59SNikita Popov// CHECK-SAME: memory(none) 539a8d477aSSven van Haastregt// CHECK: attributes [[ATTR_PURE]] = 54*304f1d59SNikita Popov// CHECK-SAME: memory(read) 55