diff --git a/CMakeLists.txt b/CMakeLists.txt index 3a3cd9c5..9e8d7d7a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ set(CLConform_VERSION "${CLConform_VERSION_MAJOR}.${CLConform_VERSION_MINOR}") set(CLConform_VERSION_FULL "${CLConform_VERSION}.${CLConform_VERSION_MICRO}${CLConform_VERSION_EXTRA}") -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.1) add_definitions(-DCL_USE_DEPRECATED_OPENCL_2_0_APIS=1) add_definitions(-DCL_USE_DEPRECATED_OPENCL_1_1_APIS=1) @@ -77,6 +77,11 @@ else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D__SSE__") endif() +# Clang gives C++11 narrowing warnings so surpress these for now +if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-c++11-narrowing") +endif() + list(APPEND CLConform_LIBRARIES ${OPENCL_LIBRARIES}) if(ANDROID) list(APPEND CLConform_LIBRARIES m) diff --git a/build_android.py b/build_android.py old mode 100644 new mode 100755 index 2bd7f5c8..e1b8c1e9 --- a/build_android.py +++ b/build_android.py @@ -108,7 +108,9 @@ def install_android_cmake(): print "input: " if get_input(): print("installing android-cmake") - subprocess.call(['git', 'clone', 'https://github.com/taka-no-me/android-cmake']) + #subprocess.call(['git', 'clone', 'https://github.com/taka-no-me/android-cmake']) + # Use a newer fork of android-cmake which has been updated to support Clang. GCC is deprecated in newer NDKs and C11 atomics conformance doesn't build with NDK > 10. + subprocess.call(['git', 'clone', 'https://github.com/daewoong-jang/android-cmake']) args.android_cmake = os.path.join(args.src_dir,"android-cmake") else: exit() diff --git a/build_lnx.sh b/build_lnx.sh old mode 100644 new mode 100755 diff --git a/clean_tests.py b/clean_tests.py old mode 100644 new mode 100755 diff --git a/test_common/harness/compat.h b/test_common/harness/compat.h index b0d3cf75..23445c8e 100644 --- a/test_common/harness/compat.h +++ b/test_common/harness/compat.h @@ -207,7 +207,10 @@ long double roundl(long double x); int cf_signbit(double x); int cf_signbitf(float x); +// Added in _MSC_VER == 1800 (Visual Studio 2013) +#if _MSC_VER < 1800 static int signbit(double x) { return cf_signbit(x); } +#endif static int signbitf(float x) { return cf_signbitf(x); } long int lrint (double flt); @@ -241,8 +244,11 @@ int32_t float2int (float fx); // stdio.h // -#if defined( _MSC_VER ) - #define snprintf sprintf_s +#if defined(_MSC_VER) + // snprintf added in _MSC_VER == 1900 (Visual Studio 2015) + #if _MSC_VER < 1900 + #define snprintf sprintf_s + #endif #endif diff --git a/test_common/harness/imageHelpers.cpp b/test_common/harness/imageHelpers.cpp index 19004e41..be1d68d0 100644 --- a/test_common/harness/imageHelpers.cpp +++ b/test_common/harness/imageHelpers.cpp @@ -479,16 +479,6 @@ struct AddressingTable static AddressingTable sAddressingTable; -bool alpha_is_x(cl_image_format *format){ - switch (format->image_channel_order) { - case CL_RGBx: - case CL_sRGBx: - return true; - default: - return false; - } -} - bool is_sRGBA_order(cl_channel_order image_channel_order){ switch (image_channel_order) { case CL_sRGB: @@ -508,19 +498,21 @@ int has_alpha(cl_image_format *format) { case CL_R: return 0; case CL_A: - case CL_Rx: return 1; + case CL_Rx: + return 0; case CL_RG: return 0; case CL_RA: - case CL_RGx: return 1; + case CL_RGx: + return 0; case CL_RGB: case CL_sRGB: return 0; case CL_RGBx: case CL_sRGBx: - return 1; + return 0; case CL_RGBA: return 1; case CL_BGRA: @@ -719,13 +711,6 @@ void get_max_sizes(size_t *numberOfSizes, const int maxNumberOfSizes, } } -int issubnormal(float a) -{ - union { cl_int i; cl_float f; } u; - u.f = a; - return (u.i & 0x7f800000U) == 0; -} - float get_max_absolute_error( cl_image_format *format, image_sampler_data *sampler) { if (sampler->filter_mode == CL_FILTER_NEAREST) return 0.0f; @@ -1412,16 +1397,9 @@ void read_image_pixel_float( void *imageData, image_descriptor *imageInfo, || ( depth_lod != 0 && z >= (int)depth_lod ) || ( imageInfo->arraySize != 0 && z >= (int)imageInfo->arraySize ) ) { - // Border color - if (imageInfo->format->image_channel_order == CL_DEPTH) - { - outData[ 0 ] = 0; - } - else { outData[ 0 ] = outData[ 1 ] = outData[ 2 ] = outData[ 3 ] = 0; if (!has_alpha(imageInfo->format)) - outData[3] = alpha_is_x(imageInfo->format) ? 0 : 1; - } + outData[3] = 1; return; } diff --git a/test_common/harness/imageHelpers.h b/test_common/harness/imageHelpers.h index 83ff1377..ba80ea77 100644 --- a/test_common/harness/imageHelpers.h +++ b/test_common/harness/imageHelpers.h @@ -136,8 +136,6 @@ extern void copy_image_data( image_descriptor *srcImageInfo, image_descriptor *d int has_alpha(cl_image_format *format); -extern bool alpha_is_x(cl_image_format *format); - extern bool is_sRGBA_order(cl_channel_order image_channel_order); inline float calculate_array_index( float coord, float extent ); @@ -594,7 +592,6 @@ extern char *create_random_image_data( ExplicitType dataType, image_descriptor * extern void get_sampler_kernel_code( image_sampler_data *imageSampler, char *outLine ); extern float get_max_absolute_error( cl_image_format *format, image_sampler_data *sampler); extern float get_max_relative_error( cl_image_format *format, image_sampler_data *sampler, int is3D, int isLinearFilter ); -extern int issubnormal(float); #define errMax( _x , _y ) ( (_x) != (_x) ? (_x) : (_x) > (_y) ? (_x) : (_y) ) diff --git a/test_common/harness/kernelHelpers.c b/test_common/harness/kernelHelpers.c index 20a9d52c..0bd49fc8 100644 --- a/test_common/harness/kernelHelpers.c +++ b/test_common/harness/kernelHelpers.c @@ -968,14 +968,14 @@ size_t get_pixel_bytes( const cl_image_format *fmt ) return 0; } -int verifyImageSupport( cl_device_id device ) +test_status verifyImageSupport( cl_device_id device ) { if( checkForImageSupport( device ) ) { log_error( "ERROR: Device does not supported images as required by this test!\n" ); - return CL_IMAGE_FORMAT_NOT_SUPPORTED; + return TEST_FAIL; } - return 0; + return TEST_PASS; } int checkForImageSupport( cl_device_id device ) diff --git a/test_common/harness/kernelHelpers.h b/test_common/harness/kernelHelpers.h index 63c6f8b5..4952a1f1 100644 --- a/test_common/harness/kernelHelpers.h +++ b/test_common/harness/kernelHelpers.h @@ -17,6 +17,7 @@ #define _kernelHelpers_h #include "compat.h" +#include "testHarness.h" #include #include @@ -89,8 +90,8 @@ extern int is_image_format_supported( cl_context context, cl_mem_flags flags, cl /* Helper to get pixel size for a pixel format */ size_t get_pixel_bytes( const cl_image_format *fmt ); -/* Verify the given device supports images. 0 means you're good to go, otherwise an error */ -extern int verifyImageSupport( cl_device_id device ); +/* Verify the given device supports images. */ +extern test_status verifyImageSupport( cl_device_id device ); /* Checks that the given device supports images. Same as verify, but doesn't print an error */ extern int checkForImageSupport( cl_device_id device ); @@ -123,6 +124,13 @@ cl_device_fp_config get_default_rounding_mode( cl_device_id device ); return 0; \ } +#define PASSIVE_REQUIRE_FP16_SUPPORT(device) \ + if (!is_extension_available(device, "cl_khr_fp16")) \ + { \ + log_info("\n\tNote: device does not support fp16. Skipping test...\n"); \ + return 0; \ + } + /* Prints out the standard device header for all tests given the device to print for */ extern int printDeviceHeader( cl_device_id device ); diff --git a/test_common/harness/msvc9.c b/test_common/harness/msvc9.c index 093bb978..3b168453 100644 --- a/test_common/harness/msvc9.c +++ b/test_common/harness/msvc9.c @@ -566,6 +566,7 @@ long int lrintf (float x) // /////////////////////////////////////////////////////////////////// +#if _MSC_VER < 1900 int fetestexcept(int excepts) { unsigned int status = _statusfp(); @@ -583,6 +584,7 @@ int feclearexcept(int excepts) _clearfp(); return 0; } +#endif #endif // __INTEL_COMPILER diff --git a/test_common/harness/parseParameters.cpp b/test_common/harness/parseParameters.cpp index 31e4872d..adcc3c24 100644 --- a/test_common/harness/parseParameters.cpp +++ b/test_common/harness/parseParameters.cpp @@ -35,12 +35,13 @@ OfflineCompilerOutputType gOfflineCompilerOutputType; void helpInfo () { + log_info(" '-ILPath path_to_spirv_bin.\n"); log_info(" '-offlineCompiler ': use offline compiler\n"); log_info(" ' output_type binary - \"../build_script_binary.py\" is invoked\n"); log_info(" ' output_type source - \"../build_script_source.py\" is invoked\n"); - log_info(" ' output_type spir_v - \"../cl_build_script_spir_v.py\" is invoked\n, optional modes: generate, cache"); - log_info(" ' mode generate - force binary generation"); - log_info(" ' mode cache - force reading binary files from cache"); + log_info(" ' output_type spir_v - \"../cl_build_script_spir_v.py\" is invoked. optional modes: generate, cache\n"); + log_info(" ' mode generate - force binary generation\n"); + log_info(" ' mode cache - force reading binary files from cache\n"); log_info("\n"); } @@ -61,10 +62,17 @@ int parseCustomParam (int argc, const char *argv[], const char *ignore) continue; } if (i < 0) i = 0; - delArg = 0; - if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) - helpInfo (); + delArg = 0; + if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) + { + helpInfo (); + } + else if (!strcmp(argv[i], "-ILPath")) + { + gSpirVPath = argv[i + 1]; + delArg = 2; + } else if (!strcmp(argv[i], "-offlineCompiler")) { log_info(" Offline Compiler enabled\n"); @@ -128,3 +136,26 @@ int parseCustomParam (int argc, const char *argv[], const char *ignore) return argc; } +bool is_power_of_two(int number) +{ + return number && !(number & (number - 1)); +} + +extern void parseWimpyReductionFactor(const char *&arg, int &wimpyReductionFactor) +{ + const char *arg_temp = strchr(&arg[1], ']'); + if (arg_temp != 0) + { + int new_factor = atoi(&arg[1]); + arg = arg_temp; // Advance until ']' + if (is_power_of_two(new_factor)) + { + log_info("\n Wimpy reduction factor changed from %d to %d \n", wimpyReductionFactor, new_factor); + wimpyReductionFactor = new_factor; + } + else + { + log_info("\n WARNING: Incorrect wimpy reduction factor %d, must be power of 2. The default value will be used.\n", new_factor); + } + } +} diff --git a/test_common/harness/parseParameters.h b/test_common/harness/parseParameters.h index 13171332..4fb69a4c 100644 --- a/test_common/harness/parseParameters.h +++ b/test_common/harness/parseParameters.h @@ -16,6 +16,7 @@ #ifndef _parseParameters_h #define _parseParameters_h +#include "compat.h" #include extern bool gOfflineCompiler; @@ -34,4 +35,6 @@ extern OfflineCompilerOutputType gOfflineCompilerOutputType; extern int parseCustomParam (int argc, const char *argv[], const char *ignore = 0 ); +extern void parseWimpyReductionFactor(const char *&arg, int &wimpyReductionFactor); + #endif // _parseParameters_h diff --git a/test_common/harness/testHarness.c b/test_common/harness/testHarness.c index 62a6b192..039e39f6 100644 --- a/test_common/harness/testHarness.c +++ b/test_common/harness/testHarness.c @@ -143,7 +143,7 @@ int runTestHarnessWithCheck( int argc, const char *argv[], unsigned int num_fns, log_info( "\tid\t\tIndicates device at index should be used (default 0).\n" ); log_info( "\t\tcpu|gpu|accelerator| (default CL_DEVICE_TYPE_DEFAULT)\n" ); - for( i = 0; i < num_fns - 1; i++ ) + for( i = 0; i < num_fns; i++ ) { log_info( "\t\t%s\n", fnNames[ i ] ); } @@ -439,10 +439,18 @@ int runTestHarnessWithCheck( int argc, const char *argv[], unsigned int num_fns, /* If we have a device checking function, run it */ - if( ( deviceCheckFn != NULL ) && deviceCheckFn( device ) != CL_SUCCESS ) + if( ( deviceCheckFn != NULL ) ) { - test_finish(); - return -1; + test_status status = deviceCheckFn( device ); + switch (status) + { + case TEST_PASS: + break; + case TEST_FAIL: + return 1; + case TEST_SKIP: + return 0; + } } if (num_elements <= 0) diff --git a/test_common/harness/testHarness.h b/test_common/harness/testHarness.h index 2816b2a0..fc019aa3 100644 --- a/test_common/harness/testHarness.h +++ b/test_common/harness/testHarness.h @@ -25,6 +25,13 @@ extern "C" { #endif +typedef enum test_status +{ + TEST_PASS = 0, + TEST_FAIL = 1, + TEST_SKIP = 2, +} test_status; + extern cl_uint gReSeed; extern cl_uint gRandomSeed; @@ -34,8 +41,8 @@ extern int runTestHarness( int argc, const char *argv[], unsigned int num_fns, basefn fnList[], const char *fnNames[], int imageSupportRequired, int forceNoContextCreation, cl_command_queue_properties queueProps ); -// Device checking function. See runTestHarnessWithCheck. If this function returns anything other than CL_SUCCESS (0), the harness exits. -typedef int (*DeviceCheckFn)( cl_device_id device ); +// Device checking function. See runTestHarnessWithCheck. If this function returns anything other than TEST_PASS, the harness exits. +typedef test_status (*DeviceCheckFn)( cl_device_id device ); // Same as runTestHarness, but also supplies a function that checks the created device for required functionality. extern int runTestHarnessWithCheck( int argc, const char *argv[], unsigned int num_fns, diff --git a/test_conformance/CMakeLists.txt b/test_conformance/CMakeLists.txt index 7fd5ef4b..6922254d 100644 --- a/test_conformance/CMakeLists.txt +++ b/test_conformance/CMakeLists.txt @@ -48,8 +48,9 @@ add_subdirectory( SVM ) add_subdirectory( generic_address_space ) add_subdirectory( subgroups ) add_subdirectory( workgroups ) -add_subdirectory( pipes ) +add_subdirectory( pipes ) add_subdirectory( device_timer ) +add_subdirectory( spirv_new ) install_files( opencl_conformance_tests_conversions.csv diff --git a/test_conformance/SVM/CMakeLists.txt b/test_conformance/SVM/CMakeLists.txt index c7d0219e..ad74a829 100644 --- a/test_conformance/SVM/CMakeLists.txt +++ b/test_conformance/SVM/CMakeLists.txt @@ -1,3 +1,4 @@ +set(CMAKE_CXX_STANDARD 11) set(MODULE_NAME SVM) set(${MODULE_NAME}_SOURCES diff --git a/test_conformance/SVM/main.cpp b/test_conformance/SVM/main.cpp index 87c786da..e61d25b2 100644 --- a/test_conformance/SVM/main.cpp +++ b/test_conformance/SVM/main.cpp @@ -227,7 +227,7 @@ cl_int create_cl_objects(cl_device_id device_from_harness, const char** ppCodeSt } error = clGetDeviceInfo(devices[i], CL_DEVICE_SVM_CAPABILITIES, sizeof(cl_device_svm_capabilities), &caps, NULL); - test_error(error,"clGetDeviceInfo failed for CL_DEVICE_MEM_SHARING"); + test_error(error,"clGetDeviceInfo failed for CL_DEVICE_SVM_CAPABILITIES"); if(caps & (~(CL_DEVICE_SVM_COARSE_GRAIN_BUFFER | CL_DEVICE_SVM_FINE_GRAIN_BUFFER | CL_DEVICE_SVM_FINE_GRAIN_SYSTEM | CL_DEVICE_SVM_ATOMICS))) { log_error("clGetDeviceInfo returned an invalid cl_device_svm_capabilities value"); diff --git a/test_conformance/SVM/test_allocate_shared_buffer.cpp b/test_conformance/SVM/test_allocate_shared_buffer.cpp index 7d555c8d..14262cb7 100644 --- a/test_conformance/SVM/test_allocate_shared_buffer.cpp +++ b/test_conformance/SVM/test_allocate_shared_buffer.cpp @@ -97,6 +97,10 @@ int test_allocate_shared_buffer(cl_device_id deviceID, cl_context context2, cl_c log_error("SVM pointer returned by clEnqueueMapBuffer doesn't match pointer returned by clSVMalloc"); return -1; } + err = clEnqueueUnmapMemObject(queues[0], buf, pBufData2, 0, NULL, NULL); + test_error(err, "clEnqueueUnmapMemObject failed"); + err = clFinish(queues[0]); + test_error(err, "clFinish failed"); } } diff --git a/test_conformance/SVM/test_enqueue_api.cpp b/test_conformance/SVM/test_enqueue_api.cpp index 6a04e955..f92872d6 100644 --- a/test_conformance/SVM/test_enqueue_api.cpp +++ b/test_conformance/SVM/test_enqueue_api.cpp @@ -17,10 +17,15 @@ #include "../../test_common/harness/mt19937.h" #include +#include + +#if !defined(_WIN32) +#include +#endif typedef struct { - cl_uint status; + std::atomic status; cl_uint num_svm_pointers; std::vector svm_pointers; } CallbackData; @@ -62,7 +67,7 @@ void CL_CALLBACK callback_svm_free(cl_command_queue queue, cl_uint num_svm_point clSVMFree(context, svm_pointers[i]); } - data->status = 1; + data->status.store(1, std::memory_order_release); } int test_enqueue_api(cl_device_id deviceID, cl_context c, cl_command_queue queue, int num_elements) @@ -231,7 +236,9 @@ int test_enqueue_api(cl_device_id deviceID, cl_context c, cl_command_queue queue test_error(error, "clFinish failed"); //wait for the callback - while(data.status == 0) { } + while(data.status.load(std::memory_order_acquire) == 0) { + usleep(1); + } //check if number of SVM pointers returned in the callback matches with expected if (data.num_svm_pointers != buffers.size()) diff --git a/test_conformance/api/test_api_min_max.c b/test_conformance/api/test_api_min_max.c index 57b0ab64..fa3bdb18 100644 --- a/test_conformance/api/test_api_min_max.c +++ b/test_conformance/api/test_api_min_max.c @@ -1307,7 +1307,6 @@ int test_min_max_constant_buffer_size(cl_device_id deviceID, cl_context context, int error; clProgramWrapper program; clKernelWrapper kernel; - clMemWrapper streams[3]; size_t threads[1], localThreads[1]; cl_int *constantData, *resultData; cl_ulong maxSize, stepSize, currentSize; @@ -1349,6 +1348,7 @@ int test_min_max_constant_buffer_size(cl_device_id deviceID, cl_context context, for(i=0; i<(int)(numberOfInts); i++) constantData[i] = (int)genrand_int32(d); + clMemWrapper streams[3]; streams[0] = clCreateBuffer(context, (cl_mem_flags)(CL_MEM_COPY_HOST_PTR), sizeToAllocate, constantData, &error); test_error( error, "Creating test array failed" ); streams[1] = clCreateBuffer(context, (cl_mem_flags)(CL_MEM_READ_WRITE), sizeToAllocate, NULL, &error); diff --git a/test_conformance/api/test_clone_kernel.cpp b/test_conformance/api/test_clone_kernel.cpp index 79221e96..5826d7dc 100644 --- a/test_conformance/api/test_clone_kernel.cpp +++ b/test_conformance/api/test_clone_kernel.cpp @@ -18,6 +18,7 @@ #include "../../test_common/harness/conversions.h" #include #include +#include using namespace std; diff --git a/test_conformance/api/test_zero_sized_enqueue.cpp b/test_conformance/api/test_zero_sized_enqueue.cpp index 87aa0d21..dbe2af2e 100644 --- a/test_conformance/api/test_zero_sized_enqueue.cpp +++ b/test_conformance/api/test_zero_sized_enqueue.cpp @@ -190,7 +190,7 @@ int test_zero_sized_enqueue(cl_device_id deviceID, cl_context context, cl_comman cl_int error = clGetDeviceInfo(deviceID, CL_DEVICE_QUEUE_PROPERTIES, sizeof(cl_command_queue_properties), &props, NULL); test_error( error, "clGetDeviceInfo failed."); - if (props | CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE) + if (props & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE) { // test out of order queue cl_queue_properties queue_prop_def[] = diff --git a/test_conformance/basic/run_array b/test_conformance/basic/run_array old mode 100644 new mode 100755 diff --git a/test_conformance/basic/run_array_image_copy b/test_conformance/basic/run_array_image_copy old mode 100644 new mode 100755 diff --git a/test_conformance/basic/run_image b/test_conformance/basic/run_image old mode 100644 new mode 100755 diff --git a/test_conformance/basic/run_multi_read_image b/test_conformance/basic/run_multi_read_image old mode 100644 new mode 100755 diff --git a/test_conformance/basic/test_async_strided_copy.cpp b/test_conformance/basic/test_async_strided_copy.cpp index ec65101d..ca657787 100644 --- a/test_conformance/basic/test_async_strided_copy.cpp +++ b/test_conformance/basic/test_async_strided_copy.cpp @@ -209,14 +209,13 @@ int test_strided_copy(cl_device_id deviceID, cl_context context, cl_command_queu log_error( "ERROR: Results of copy did not validate!\n" ); sprintf(values + strlen( values), "%d -> [", i); for (int j=0; j<(int)elementSize; j++) - sprintf(values + strlen( values), "%2x ", inchar[i*elementSize+j]); + sprintf(values + strlen( values), "%2x ", inchar[j]); sprintf(values + strlen(values), "] != ["); for (int j=0; j<(int)elementSize; j++) - sprintf(values + strlen( values), "%2x ", outchar[i*elementSize+j]); + sprintf(values + strlen( values), "%2x ", outchar[j]); sprintf(values + strlen(values), "]"); log_error("%s\n", values); - - return -1; + return -1; } } diff --git a/test_conformance/basic/test_progvar.cpp b/test_conformance/basic/test_progvar.cpp index 7445444e..9eb211c2 100644 --- a/test_conformance/basic/test_progvar.cpp +++ b/test_conformance/basic/test_progvar.cpp @@ -864,12 +864,14 @@ static int l_write_read_for_type( cl_device_id device, cl_context context, cl_co // We need to create 5 random values of the given type, // and read 4 of them back. - cl_uchar CL_ALIGNED(ALIGNMENT) write_data[NUM_TESTED_VALUES * sizeof(cl_ulong16)]; - cl_uchar CL_ALIGNED(ALIGNMENT) read_data[ (NUM_TESTED_VALUES-1) * sizeof(cl_ulong16)]; + const size_t write_data_size = NUM_TESTED_VALUES * sizeof(cl_ulong16); + const size_t read_data_size = (NUM_TESTED_VALUES - 1) * sizeof(cl_ulong16); + cl_uchar* write_data = (cl_uchar*)align_malloc(write_data_size, ALIGNMENT); + cl_uchar* read_data = (cl_uchar*)align_malloc(read_data_size, ALIGNMENT); - clMemWrapper write_mem( clCreateBuffer( context, CL_MEM_USE_HOST_PTR, sizeof(write_data), write_data, &status ) ); + clMemWrapper write_mem( clCreateBuffer( context, CL_MEM_USE_HOST_PTR, write_data_size, write_data, &status ) ); test_error_ret(status,"Failed to allocate write buffer",status); - clMemWrapper read_mem( clCreateBuffer( context, CL_MEM_USE_HOST_PTR, sizeof(read_data), read_data, &status ) ); + clMemWrapper read_mem( clCreateBuffer( context, CL_MEM_USE_HOST_PTR, read_data_size, read_data, &status ) ); test_error_ret(status,"Failed to allocate read buffer",status); status = clSetKernelArg(writer,0,sizeof(cl_mem),&write_mem); test_error_ret(status,"set arg",status); @@ -884,7 +886,7 @@ static int l_write_read_for_type( cl_device_id device, cl_context context, cl_co // Generate new random data to push through. // Generate 5 * 128 bytes all the time, even though the test for many types use less than all that. - cl_uchar *write_ptr = (cl_uchar *)clEnqueueMapBuffer(queue, write_mem, CL_TRUE, CL_MAP_WRITE, 0, sizeof(write_data), 0, 0, 0, 0); + cl_uchar *write_ptr = (cl_uchar *)clEnqueueMapBuffer(queue, write_mem, CL_TRUE, CL_MAP_WRITE, 0, write_data_size, 0, 0, 0, 0); if ( ti.is_bool() ) { // For boolean, random data cast to bool isn't very random. @@ -896,7 +898,7 @@ static int l_write_read_for_type( cl_device_id device, cl_context context, cl_co } bool_iter++; } else { - l_set_randomly( write_data, sizeof(write_data), rand_state ); + l_set_randomly( write_data, write_data_size, rand_state ); } status = clSetKernelArg(writer,1,sizeof(cl_uint),&iptr_idx); test_error_ret(status,"set arg",status); @@ -905,7 +907,7 @@ static int l_write_read_for_type( cl_device_id device, cl_context context, cl_co status = clSetKernelArg(reader,1,ti.get_size(),write_data + (NUM_TESTED_VALUES-1)*ti.get_size()); test_error_ret(status,"set arg",status); // Determine the expected values. - cl_uchar expected[ (NUM_TESTED_VALUES-1) * sizeof(cl_ulong16)]; + cl_uchar expected[read_data_size]; memset( expected, -1, sizeof(expected) ); l_copy( expected, 0, write_data, 0, ti ); l_copy( expected, 1, write_data, 1, ti ); @@ -922,8 +924,8 @@ static int l_write_read_for_type( cl_device_id device, cl_context context, cl_co for ( unsigned i = 0; i < NUM_TESTED_VALUES-1 ; i++ ) expected[i] = (bool)expected[i]; } - cl_uchar *read_ptr = (cl_uchar *)clEnqueueMapBuffer(queue, read_mem, CL_TRUE, CL_MAP_READ, 0, sizeof(read_data), 0, 0, 0, 0); - memset( read_data, -1, sizeof(read_data) ); + cl_uchar *read_ptr = (cl_uchar *)clEnqueueMapBuffer(queue, read_mem, CL_TRUE, CL_MAP_READ, 0, read_data_size, 0, 0, 0, 0); + memset(read_data, -1, read_data_size); clEnqueueUnmapMemObject(queue, read_mem, read_ptr, 0, 0, 0); // Now run the kernel @@ -932,7 +934,7 @@ static int l_write_read_for_type( cl_device_id device, cl_context context, cl_co status = clEnqueueNDRangeKernel(queue,reader,1,0,&one,0,0,0,0); test_error_ret(status,"enqueue reader",status); status = clFinish(queue); test_error_ret(status,"finish",status); - read_ptr = (cl_uchar *)clEnqueueMapBuffer(queue, read_mem, CL_TRUE, CL_MAP_READ, 0, sizeof(read_data), 0, 0, 0, 0); + read_ptr = (cl_uchar *)clEnqueueMapBuffer(queue, read_mem, CL_TRUE, CL_MAP_READ, 0, read_data_size, 0, 0, 0, 0); if ( ti.is_bool() ) { // Collapse down to one bit. @@ -951,7 +953,8 @@ static int l_write_read_for_type( cl_device_id device, cl_context context, cl_co } if ( CL_SUCCESS == err ) { log_info("OK\n"); FLUSH; } - + align_free(write_data); + align_free(read_data); return err; } @@ -1008,12 +1011,14 @@ static int l_init_write_read_for_type( cl_device_id device, cl_context context, // We need to create 5 random values of the given type, // and read 4 of them back. - cl_uchar CL_ALIGNED(ALIGNMENT) write_data[NUM_TESTED_VALUES * sizeof(cl_ulong16)]; - cl_uchar CL_ALIGNED(ALIGNMENT) read_data[ (NUM_TESTED_VALUES-1) * sizeof(cl_ulong16)]; + const size_t write_data_size = NUM_TESTED_VALUES * sizeof(cl_ulong16); + const size_t read_data_size = (NUM_TESTED_VALUES-1) * sizeof(cl_ulong16); - clMemWrapper write_mem( clCreateBuffer( context, CL_MEM_USE_HOST_PTR, sizeof(write_data), write_data, &status ) ); + cl_uchar* write_data = (cl_uchar*)align_malloc(write_data_size, ALIGNMENT); + cl_uchar* read_data = (cl_uchar*)align_malloc(read_data_size, ALIGNMENT); + clMemWrapper write_mem( clCreateBuffer( context, CL_MEM_USE_HOST_PTR, write_data_size, write_data, &status ) ); test_error_ret(status,"Failed to allocate write buffer",status); - clMemWrapper read_mem( clCreateBuffer( context, CL_MEM_USE_HOST_PTR, sizeof(read_data), read_data, &status ) ); + clMemWrapper read_mem( clCreateBuffer( context, CL_MEM_USE_HOST_PTR, read_data_size, read_data, &status ) ); test_error_ret(status,"Failed to allocate read buffer",status); status = clSetKernelArg(writer,0,sizeof(cl_mem),&write_mem); test_error_ret(status,"set arg",status); @@ -1033,7 +1038,7 @@ static int l_init_write_read_for_type( cl_device_id device, cl_context context, // Generate new random data to push through. // Generate 5 * 128 bytes all the time, even though the test for many types use less than all that. - cl_uchar *write_ptr = (cl_uchar *)clEnqueueMapBuffer(queue, write_mem, CL_TRUE, CL_MAP_WRITE, 0, sizeof(write_data), 0, 0, 0, 0); + cl_uchar *write_ptr = (cl_uchar *)clEnqueueMapBuffer(queue, write_mem, CL_TRUE, CL_MAP_WRITE, 0, write_data_size, 0, 0, 0, 0); if ( ti.is_bool() ) { // For boolean, random data cast to bool isn't very random. @@ -1045,7 +1050,7 @@ static int l_init_write_read_for_type( cl_device_id device, cl_context context, } bool_iter++; } else { - l_set_randomly( write_data, sizeof(write_data), rand_state ); + l_set_randomly( write_data, write_data_size, rand_state ); } status = clSetKernelArg(writer,1,sizeof(cl_uint),&iptr_idx); test_error_ret(status,"set arg",status); @@ -1061,7 +1066,7 @@ static int l_init_write_read_for_type( cl_device_id device, cl_context context, status = clSetKernelArg(reader,1,ti.get_size(),write_data + (NUM_TESTED_VALUES-1)*ti.get_size()); test_error_ret(status,"set arg",status); // Determine the expected values. - cl_uchar expected[ (NUM_TESTED_VALUES-1) * sizeof(cl_ulong16)]; + cl_uchar expected[read_data_size]; memset( expected, -1, sizeof(expected) ); if ( iteration ) { l_copy( expected, 0, write_data, 0, ti ); @@ -1092,8 +1097,8 @@ static int l_init_write_read_for_type( cl_device_id device, cl_context context, clEnqueueUnmapMemObject(queue, write_mem, write_ptr, 0, 0, 0); - cl_uchar *read_ptr = (cl_uchar *)clEnqueueMapBuffer(queue, read_mem, CL_TRUE, CL_MAP_READ, 0, sizeof(read_data), 0, 0, 0, 0); - memset( read_data, -1, sizeof(read_data) ); + cl_uchar *read_ptr = (cl_uchar *)clEnqueueMapBuffer(queue, read_mem, CL_TRUE, CL_MAP_READ, 0, read_data_size, 0, 0, 0, 0); + memset( read_data, -1, read_data_size ); clEnqueueUnmapMemObject(queue, read_mem, read_ptr, 0, 0, 0); // Now run the kernel @@ -1107,7 +1112,7 @@ static int l_init_write_read_for_type( cl_device_id device, cl_context context, status = clEnqueueNDRangeKernel(queue,reader,1,0,&one,0,0,0,0); test_error_ret(status,"enqueue reader",status); status = clFinish(queue); test_error_ret(status,"finish",status); - read_ptr = (cl_uchar *)clEnqueueMapBuffer(queue, read_mem, CL_TRUE, CL_MAP_READ, 0, sizeof(read_data), 0, 0, 0, 0); + read_ptr = (cl_uchar *)clEnqueueMapBuffer(queue, read_mem, CL_TRUE, CL_MAP_READ, 0, read_data_size, 0, 0, 0, 0); if ( ti.is_bool() ) { // Collapse down to one bit. @@ -1129,6 +1134,8 @@ static int l_init_write_read_for_type( cl_device_id device, cl_context context, } if ( CL_SUCCESS == err ) { log_info("OK\n"); FLUSH; } + align_free(write_data); + align_free(read_data); return err; } @@ -1340,6 +1347,13 @@ static int l_user_type( cl_device_id device, cl_context context, cl_command_queu print_build_log(program, 1, &device, ksrc.num_str(), ksrc.strs(), ksrc.lengths(), OPTIONS); return status; } + + status = clBuildProgram(program, 1, &device, OPTIONS, 0, 0); + if(check_error(status, "Failed to compile program for user type test (%s)", IGetErrorString(status))) + { + print_build_log(program, 1, &device, ksrc.num_str(), ksrc.strs(), ksrc.lengths(), OPTIONS); + return status; + } } @@ -1360,12 +1374,12 @@ static int l_user_type( cl_device_id device, cl_context context, cl_command_queu test_error_ret(status,"Failed to create reader kernel for user type test",status); // Set up data. - cl_uchar CL_ALIGNED(ALIGNMENT) uchar_data; - cl_uint CL_ALIGNED(ALIGNMENT) uint_data; + cl_uchar* uchar_data = (cl_uchar*)align_malloc(sizeof(cl_uchar), ALIGNMENT); + cl_uint* uint_data = (cl_uint*)align_malloc(sizeof(cl_uint), ALIGNMENT); - clMemWrapper uchar_mem( clCreateBuffer( context, CL_MEM_USE_HOST_PTR, sizeof(uchar_data), &uchar_data, &status ) ); + clMemWrapper uchar_mem( clCreateBuffer( context, CL_MEM_USE_HOST_PTR, sizeof(cl_uchar), uchar_data, &status ) ); test_error_ret(status,"Failed to allocate uchar buffer",status); - clMemWrapper uint_mem( clCreateBuffer( context, CL_MEM_USE_HOST_PTR, sizeof(uint_data), &uint_data, &status ) ); + clMemWrapper uint_mem( clCreateBuffer( context, CL_MEM_USE_HOST_PTR, sizeof(cl_uint), uint_data, &status ) ); test_error_ret(status,"Failed to allocate uint buffer",status); status = clSetKernelArg(reader,0,sizeof(cl_mem),&uchar_mem); test_error_ret(status,"set arg",status); @@ -1375,18 +1389,18 @@ static int l_user_type( cl_device_id device, cl_context context, cl_command_queu cl_uint expected_uint = 42; for ( unsigned iter = 0; iter < 5 ; iter++ ) { // Must go around at least twice // Read back data - uchar_data = -1; - uint_data = -1; + *uchar_data = -1; + *uint_data = -1; const size_t one = 1; status = clEnqueueNDRangeKernel(queue,reader,1,0,&one,0,0,0,0); test_error_ret(status,"enqueue reader",status); status = clFinish(queue); test_error_ret(status,"finish",status); - cl_uchar *uint_data_ptr = (cl_uchar *)clEnqueueMapBuffer(queue, uint_mem, CL_TRUE, CL_MAP_READ, 0, sizeof(uint_data), 0, 0, 0, 0); - cl_uchar *uchar_data_ptr = (cl_uchar *)clEnqueueMapBuffer(queue, uchar_mem, CL_TRUE, CL_MAP_READ, 0, sizeof(uchar_data), 0, 0, 0, 0); + cl_uchar *uint_data_ptr = (cl_uchar *)clEnqueueMapBuffer(queue, uint_mem, CL_TRUE, CL_MAP_READ, 0, sizeof(cl_uint), 0, 0, 0, 0); + cl_uchar *uchar_data_ptr = (cl_uchar *)clEnqueueMapBuffer(queue, uchar_mem, CL_TRUE, CL_MAP_READ, 0, sizeof(cl_uchar), 0, 0, 0, 0); - if ( expected_uchar != uchar_data || expected_uint != uint_data ) { + if ( expected_uchar != *uchar_data || expected_uint != *uint_data ) { log_error("FAILED: Iteration %d Got (0x%2x,%d) but expected (0x%2x,%d)\n", - iter, (int)uchar_data, uint_data, (int)expected_uchar, expected_uint ); + iter, (int)*uchar_data, *uint_data, (int)expected_uchar, expected_uint ); err |= 1; } @@ -1398,16 +1412,17 @@ static int l_user_type( cl_device_id device, cl_context context, cl_command_queu expected_uint++; // Write the new values into persistent store. - uchar_data = expected_uchar; - uint_data = expected_uint; - status = clSetKernelArg(writer,0,sizeof(uchar_data),&uchar_data); test_error_ret(status,"set arg",status); - status = clSetKernelArg(writer,1,sizeof(uint_data),&uint_data); test_error_ret(status,"set arg",status); + *uchar_data = expected_uchar; + *uint_data = expected_uint; + status = clSetKernelArg(writer,0,sizeof(cl_uchar),uchar_data); test_error_ret(status,"set arg",status); + status = clSetKernelArg(writer,1,sizeof(cl_uint),uint_data); test_error_ret(status,"set arg",status); status = clEnqueueNDRangeKernel(queue,writer,1,0,&one,0,0,0,0); test_error_ret(status,"enqueue writer",status); status = clFinish(queue); test_error_ret(status,"finish",status); } if ( CL_SUCCESS == err ) { log_info("OK\n"); FLUSH; } - + align_free(uchar_data); + align_free(uint_data); return err; } diff --git a/test_conformance/basic/test_sizeof.c b/test_conformance/basic/test_sizeof.c index 166cf206..bdbc40fe 100644 --- a/test_conformance/basic/test_sizeof.c +++ b/test_conformance/basic/test_sizeof.c @@ -50,7 +50,7 @@ cl_int get_type_size( cl_context context, cl_command_queue queue, const char *ty sizeof_kernel_code[0] = "#pragma OPENCL EXTENSION cl_khr_fp16 : enable\n"; } - cl_int err = create_single_kernel_helper( context, &p, &k, 4, sizeof_kernel_code, "test_sizeof" ); + cl_int err = create_single_kernel_helper_with_build_options(context, &p, &k, 4, sizeof_kernel_code, "test_sizeof", "-cl-std=CL2.0"); if( err ) return err; diff --git a/test_conformance/build_script_binary.py b/test_conformance/build_script_binary.py index 33a610ec..276cfb92 100644 --- a/test_conformance/build_script_binary.py +++ b/test_conformance/build_script_binary.py @@ -1,7 +1,7 @@ -# Script parameters: -# 1 - input file -# 2 - output file -# 3 - architecture: 32 or 64 -# 4 - one of the strings: binary, source, spir_v -# 5 - OpenCL version: 12, 20 -# 6 - build options +# Script parameters: +# 1 - input file +# 2 - output file +# 3 - architecture: 32 or 64 +# 4 - one of the strings: binary, source, spir_v +# 5 - OpenCL version: 12, 20 +# 6 - build options diff --git a/test_conformance/build_script_source.py b/test_conformance/build_script_source.py index 33a610ec..276cfb92 100644 --- a/test_conformance/build_script_source.py +++ b/test_conformance/build_script_source.py @@ -1,7 +1,7 @@ -# Script parameters: -# 1 - input file -# 2 - output file -# 3 - architecture: 32 or 64 -# 4 - one of the strings: binary, source, spir_v -# 5 - OpenCL version: 12, 20 -# 6 - build options +# Script parameters: +# 1 - input file +# 2 - output file +# 3 - architecture: 32 or 64 +# 4 - one of the strings: binary, source, spir_v +# 5 - OpenCL version: 12, 20 +# 6 - build options diff --git a/test_conformance/build_script_spirv.py b/test_conformance/build_script_spirv.py index d40c6a0a..86193b33 100644 --- a/test_conformance/build_script_spirv.py +++ b/test_conformance/build_script_spirv.py @@ -1,43 +1,43 @@ -# Script parameters: -# 1 - input file -# 2 - output file -# 3 - architecture: 32 or 64 -# 4 - one of the strings: binary, source, spir_v -# 5 - OpenCL version: 12, 20 -# 6 - build options - -import os -import sys - -if len(sys.argv)<5: - print 'Usage: "build_script_spirv.py [build_options]"' - exit(1) - -input_file = sys.argv[1] -output_file = sys.argv[2] -arch = sys.argv[3] -output_type = sys.argv[4] -ocl_version = sys.argv[5] -build_options = '' - -if len(sys.argv) == 5: - build_options = sys.argv[6] - -if arch == '32': - arch_string = '' - spir_arch = '__i386__' -else: - arch_string = '64' - spir_arch = '__x86_64__' - -if ocl_version == '20': - oclc_version = '200' - spir_version = '2.0' -else: - oclc_version = '120' - spir_version = '1.2' - -command = '%LLVMPATH%\\bin\\clang.exe -cc1 -include headers\\opencl_SPIR-' + spir_version + '.h -cl-std=CL' + spir_version +' -D__OPENCL_C_VERSION__=' + oclc_version + ' -fno-validate-pch -D__OPENCL_VERSION__=' + oclc_version + ' -x cl -cl-kernel-arg-info -O0 -emit-llvm-bc -triple spir' + arch_string + '-unknown-unknown -D' + spir_arch + ' -Dcl_khr_3d_image_writes -Dcl_khr_byte_addressable_store -Dcl_khr_d3d10_sharing -Dcl_khr_d3d11_sharing -Dcl_khr_depth_images -Dcl_khr_dx9_media_sharing -Dcl_khr_fp64 -Dcl_khr_global_int32_base_atomics -Dcl_khr_global_int32_extended_atomics -Dcl_khr_gl_depth_images -Dcl_khr_gl_event -Dcl_khr_gl_msaa_sharing -Dcl_khr_gl_sharing -Dcl_khr_icd -Dcl_khr_image2d_from_buffer -Dcl_khr_local_int32_base_atomics -Dcl_khr_local_int32_extended_atomics -Dcl_khr_mipmap_image -Dcl_khr_mipmap_image_writes -Dcl_khr_fp16 ' + build_options + ' -Dcl_khr_spir ' + input_file + ' -o intermediate.spir' -os.system(command) -command = '%LLVMPATH%\\bin\\llvm-spirv.exe intermediate.spir -o ' + output_file +# Script parameters: +# 1 - input file +# 2 - output file +# 3 - architecture: 32 or 64 +# 4 - one of the strings: binary, source, spir_v +# 5 - OpenCL version: 12, 20 +# 6 - build options + +import os +import sys + +if len(sys.argv)<5: + print 'Usage: "build_script_spirv.py [build_options]"' + exit(1) + +input_file = sys.argv[1] +output_file = sys.argv[2] +arch = sys.argv[3] +output_type = sys.argv[4] +ocl_version = sys.argv[5] +build_options = '' + +if len(sys.argv) == 5: + build_options = sys.argv[6] + +if arch == '32': + arch_string = '' + spir_arch = '__i386__' +else: + arch_string = '64' + spir_arch = '__x86_64__' + +if ocl_version == '20': + oclc_version = '200' + spir_version = '2.0' +else: + oclc_version = '120' + spir_version = '1.2' + +command = '%LLVMPATH%\\bin\\clang.exe -cc1 -include headers\\opencl_SPIR-' + spir_version + '.h -cl-std=CL' + spir_version +' -D__OPENCL_C_VERSION__=' + oclc_version + ' -fno-validate-pch -D__OPENCL_VERSION__=' + oclc_version + ' -x cl -cl-kernel-arg-info -O0 -emit-llvm-bc -triple spir' + arch_string + '-unknown-unknown -D' + spir_arch + ' -Dcl_khr_3d_image_writes -Dcl_khr_byte_addressable_store -Dcl_khr_d3d10_sharing -Dcl_khr_d3d11_sharing -Dcl_khr_depth_images -Dcl_khr_dx9_media_sharing -Dcl_khr_fp64 -Dcl_khr_global_int32_base_atomics -Dcl_khr_global_int32_extended_atomics -Dcl_khr_gl_depth_images -Dcl_khr_gl_event -Dcl_khr_gl_msaa_sharing -Dcl_khr_gl_sharing -Dcl_khr_icd -Dcl_khr_image2d_from_buffer -Dcl_khr_local_int32_base_atomics -Dcl_khr_local_int32_extended_atomics -Dcl_khr_mipmap_image -Dcl_khr_mipmap_image_writes -Dcl_khr_fp16 ' + build_options + ' -Dcl_khr_spir ' + input_file + ' -o intermediate.spir' +os.system(command) +command = '%LLVMPATH%\\bin\\llvm-spirv.exe intermediate.spir -o ' + output_file os.system(command) \ No newline at end of file diff --git a/test_conformance/c11_atomics/test_atomics.cpp b/test_conformance/c11_atomics/test_atomics.cpp index 542e893f..bafb3a02 100644 --- a/test_conformance/c11_atomics/test_atomics.cpp +++ b/test_conformance/c11_atomics/test_atomics.cpp @@ -1566,6 +1566,7 @@ public: using CBasicTestMemOrderScope::MemoryOrder; using CBasicTestMemOrderScope::MemoryScopeStr; using CBasicTestMemOrderScope::MemoryOrderScopeStr; + using CBasicTestMemOrderScope::UseSVM; using CBasicTestMemOrderScope::LocalMemory; CBasicTestFlag(TExplicitAtomicType dataType, bool useSVM) : CBasicTestMemOrderScope(dataType, useSVM) { @@ -1606,7 +1607,7 @@ public: program += " atomic_work_item_fence(" + std::string(LocalMemory() ? "CLK_LOCAL_MEM_FENCE, " : "CLK_GLOBAL_MEM_FENCE, ") + "memory_order_acquire," + - std::string(LocalMemory() ? "memory_scope_work_group" : "memory_scope_device") + + std::string(LocalMemory() ? "memory_scope_work_group" : (UseSVM() ? "memory_scope_all_svm_devices" : "memory_scope_device") ) + ");\n"; program += @@ -1632,7 +1633,7 @@ public: program += " atomic_work_item_fence(" + std::string(LocalMemory() ? "CLK_LOCAL_MEM_FENCE, " : "CLK_GLOBAL_MEM_FENCE, ") + "memory_order_release," + - std::string(LocalMemory() ? "memory_scope_work_group" : "memory_scope_device") + + std::string(LocalMemory() ? "memory_scope_work_group" : (UseSVM() ? "memory_scope_all_svm_devices" : "memory_scope_device") ) + ");\n"; program += diff --git a/test_conformance/compatibility/test_common/harness/compat.h b/test_conformance/compatibility/test_common/harness/compat.h index f69c8886..d177f87a 100644 --- a/test_conformance/compatibility/test_common/harness/compat.h +++ b/test_conformance/compatibility/test_common/harness/compat.h @@ -13,32 +13,63 @@ // See the License for the specific language governing permissions and // limitations under the License. // +/* + Header compat.h should be used instead of stdlib.h, stdbool.h, stdint.h, float.h, fenv.h, + math.h. It provides workarounds if these headers are not available or not complete. + + Important: It should be included before math.h, directly or indirectly, because Intel mathimf.h + is not compatible with Microsoft math.h. Including math.h before mathimf.h causes compile-time + error. +*/ #ifndef _COMPAT_H_ #define _COMPAT_H_ #if defined(_WIN32) && defined (_MSC_VER) - #include -#include -#include -#include -#include -#include - -#define MAKE_HEX_FLOAT(x,y,z) ((float)ldexp( (float)(y), z)) -#define MAKE_HEX_DOUBLE(x,y,z) ldexp( (double)(y), z) -#define MAKE_HEX_LONG(x,y,z) ((long double) ldexp( (long double)(y), z)) - -#define isfinite(x) _finite(x) - -#if !defined(__cplusplus) -typedef char bool; -#define inline - -#else -extern "C" { #endif +#ifdef __cplusplus + #define EXTERN_C extern "C" +#else + #define EXTERN_C +#endif + + +// +// stdlib.h +// + +#include // On Windows, _MAX_PATH defined there. + +// llabs appeared in MS C v16 (VS 10/2010). +#if defined( _MSC_VER ) && _MSC_VER <= 1500 + EXTERN_C inline long long llabs(long long __x) { return __x >= 0 ? __x : -__x; } +#endif + + +// +// stdbool.h +// + +// stdbool.h appeared in MS C v18 (VS 12/2013). +#if defined( _MSC_VER ) && MSC_VER <= 1700 +#if !defined(__cplusplus) +typedef char bool; + #define true 1 + #define false 0 + #endif +#else + #include +#endif + + + +// +// stdint.h +// + +// stdint.h appeared in MS C v16 (VS 10/2010) and Intel C v12. +#if defined( _MSC_VER ) && ( ! defined( __INTEL_COMPILER ) && _MSC_VER <= 1500 || defined( __INTEL_COMPILER ) && __INTEL_COMPILER < 1200 ) typedef unsigned char uint8_t; typedef char int8_t; typedef unsigned short uint16_t; @@ -47,25 +78,83 @@ typedef unsigned int uint32_t; typedef int int32_t; typedef unsigned long long uint64_t; typedef long long int64_t; - -#define MAXPATHLEN MAX_PATH - -typedef unsigned short ushort; -typedef unsigned int uint; -typedef unsigned long ulong; +#else +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS +#endif + #include +#endif -#define INFINITY (FLT_MAX + FLT_MAX) -//#define NAN (INFINITY | 1) -//const static int PINFBITPATT_SP32 = INFINITY; + +// +// float.h +// + +#include + + + +// +// fenv.h +// + +// fenv.h appeared in MS C v18 (VS 12/2013). +#if defined( _MSC_VER ) && _MSC_VER <= 1700 && ! defined( __INTEL_COMPILER ) + // reimplement fenv.h because windows doesn't have it + #define FE_INEXACT 0x0020 + #define FE_UNDERFLOW 0x0010 + #define FE_OVERFLOW 0x0008 + #define FE_DIVBYZERO 0x0004 + #define FE_INVALID 0x0001 + #define FE_ALL_EXCEPT 0x003D + int fetestexcept(int excepts); + int feclearexcept(int excepts); +#else + #include +#endif + + +// +// math.h +// + +#if defined( __INTEL_COMPILER ) + #include +#else + #include +#endif + +#if defined( _MSC_VER ) + + #ifdef __cplusplus + extern "C" { + #endif #ifndef M_PI #define M_PI 3.14159265358979323846264338327950288 #endif + #if ! defined( __INTEL_COMPILER ) + #ifndef NAN + #define NAN (INFINITY - INFINITY) + #endif + #ifndef HUGE_VALF + #define HUGE_VALF (float)HUGE_VAL + #endif + #ifndef INFINITY + #define INFINITY (FLT_MAX + FLT_MAX) + #endif + #ifndef isfinite + #define isfinite(x) _finite(x) + #endif + #ifndef isnan #define isnan( x ) ((x) != (x)) + #endif + #ifndef isinf #define isinf( _x) ((_x) == INFINITY || (_x) == -INFINITY) + #endif double rint( double x); float rintf( float x); @@ -99,27 +188,6 @@ long double remquol( long double x, long double y, int *quo); long double scalblnl(long double x, long n); -inline long long -llabs(long long __x) { return __x >= 0 ? __x : -__x; } - - -// end of math functions - -uint64_t ReadTime( void ); -double SubtractTime( uint64_t endTime, uint64_t startTime ); - -#define sleep(X) Sleep(1000*X) -#define snprintf sprintf_s -//#define hypotl _hypot - -float make_nan(); -float nanf( const char* str); -double nan( const char* str); -long double nanl( const char* str); - -//#if defined USE_BOOST -//#include -//double hypot(double x, double y); float hypotf(float x, float y); long double hypotl(long double x, long double y) ; double lgamma(double x); @@ -144,67 +212,179 @@ double round(double x); float roundf(float x); long double roundl(long double x); -int signbit(double x); -int signbitf(float x); + int cf_signbit(double x); + int cf_signbitf(float x); -//bool signbitl(long double x) { return boost::math::tr1::signbit(x); } -//#endif // USE_BOOST + static int signbit(double x) { return cf_signbit(x); } + static int signbitf(float x) { return cf_signbitf(x); } long int lrint (double flt); long int lrintf (float flt); - float int2float (int32_t ix); int32_t float2int (float fx); + #endif + + #if ! defined( __INTEL_COMPILER ) || __INTEL_COMPILER < 1300 + // These functions appeared in Intel C v13. + float nanf( const char* str); + double nan( const char* str); + long double nanl( const char* str); + #endif + + #ifdef __cplusplus + } + #endif + +#endif + +#if defined( __ANDROID__ ) + #define log2(X) (log(X)/log(2)) +#endif + + + +// +// stdio.h +// + +#if defined( _MSC_VER ) + #define snprintf sprintf_s +#endif + + + +// +// unistd.h +// + +#if defined( _MSC_VER ) + EXTERN_C unsigned int sleep( unsigned int sec ); + EXTERN_C int usleep( int usec ); +#endif + + + +// +// syscall.h +// + +#if defined( __ANDROID__ ) + // Android bionic's isn't providing SYS_sysctl wrappers. + #define SYS__sysctl __NR__sysctl +#endif + + + +// Some tests use _malloca which defined in malloc.h. +#if !defined (__APPLE__) +#include +#endif + + +// +// ??? +// + +#if defined( _MSC_VER ) + + #define MAXPATHLEN _MAX_PATH + + EXTERN_C uint64_t ReadTime( void ); + EXTERN_C double SubtractTime( uint64_t endTime, uint64_t startTime ); + /** Returns the number of leading 0-bits in x, starting at the most significant bit position. If x is 0, the result is undefined. */ -int __builtin_clz(unsigned int pattern); - - -static const double zero= 0.00000000000000000000e+00; -#define NAN (INFINITY - INFINITY) -#define HUGE_VALF (float)HUGE_VAL - -int usleep(int usec); - -// reimplement fenv.h because windows doesn't have it -#define FE_INEXACT 0x0020 -#define FE_UNDERFLOW 0x0010 -#define FE_OVERFLOW 0x0008 -#define FE_DIVBYZERO 0x0004 -#define FE_INVALID 0x0001 -#define FE_ALL_EXCEPT 0x003D - -int fetestexcept(int excepts); -int feclearexcept(int excepts); - -#ifdef __cplusplus -} -#endif - -#else // !((defined(_WIN32) && defined(_MSC_VER) -#if defined(__MINGW32__) -#include -#define sleep(X) Sleep(1000*X) + EXTERN_C int __builtin_clz(unsigned int pattern); #endif -#if defined(__linux__) || defined(__MINGW32__) || defined(__APPLE__) -#ifndef __STDC_LIMIT_MACROS -#define __STDC_LIMIT_MACROS + +#ifndef MIN + #define MIN(x,y) (((x)<(y))?(x):(y)) #endif -#include -#include -#include -#include +#ifndef MAX + #define MAX(x,y) (((x)>(y))?(x):(y)) #endif + + +/* + ------------------------------------------------------------------------------------------------ + WARNING: DO NOT USE THESE MACROS: MAKE_HEX_FLOAT, MAKE_HEX_DOUBLE, MAKE_HEX_LONG. + + This is a typical usage of the macros: + + double yhi = MAKE_HEX_DOUBLE(0x1.5555555555555p-2,0x15555555555555LL,-2); + + (taken from math_brute_force/reference_math.c). There are two problems: + + 1. There is an error here. On Windows in will produce incorrect result + `0x1.5555555555555p+50'. To have a correct result it should be written as + `MAKE_HEX_DOUBLE(0x1.5555555555555p-2,0x15555555555555LL,-54)'. A proper value of the + third argument is not obvious -- sometimes it should be the same as exponent of the + first argument, but sometimes not. + + 2. Information is duplicated. It is easy to make a mistake. + + Use HEX_FLT, HEX_DBL, HEX_LDBL macros instead (see them in the bottom of the file). + ------------------------------------------------------------------------------------------------ +*/ +#if defined ( _MSC_VER ) && ! defined( __INTEL_COMPILER ) + + #define MAKE_HEX_FLOAT(x,y,z) ((float)ldexp( (float)(y), z)) + #define MAKE_HEX_DOUBLE(x,y,z) ldexp( (double)(y), z) + #define MAKE_HEX_LONG(x,y,z) ((long double) ldexp( (long double)(y), z)) + +#else + +// Do not use these macros in new code, use HEX_FLT, HEX_DBL, HEX_LDBL instead. #define MAKE_HEX_FLOAT(x,y,z) x #define MAKE_HEX_DOUBLE(x,y,z) x #define MAKE_HEX_LONG(x,y,z) x -#endif // !((defined(_WIN32) && defined(_MSC_VER) +#endif +/* + ------------------------------------------------------------------------------------------------ + HEX_FLT, HEXT_DBL, HEX_LDBL -- Create hex floating point literal of type float, double, long + double respectively. Arguments: + + sm -- sign of number, + int -- integer part of mantissa (without `0x' prefix), + fract -- fractional part of mantissa (without decimal point and `L' or `LL' suffixes), + se -- sign of exponent, + exp -- absolute value of (binary) exponent. + + Example: + + double yhi = HEX_DBL( +, 1, 5555555555555, -, 2 ); // == 0x1.5555555555555p-2 + + Note: + + We have to pass signs as separate arguments because gcc pass negative integer values + (e. g. `-2') into a macro as two separate tokens, so `HEX_FLT( 1, 0, -2 )' produces result + `0x1.0p- 2' (note a space between minus and two) which is not a correct floating point + literal. + ------------------------------------------------------------------------------------------------ +*/ +#if defined ( _MSC_VER ) && ! defined( __INTEL_COMPILER ) + // If compiler does not support hex floating point literals: + #define HEX_FLT( sm, int, fract, se, exp ) sm ldexpf( (float)( 0x ## int ## fract ## UL ), se exp + ilogbf( (float) 0x ## int ) - ilogbf( ( float )( 0x ## int ## fract ## UL ) ) ) + #define HEX_DBL( sm, int, fract, se, exp ) sm ldexp( (double)( 0x ## int ## fract ## ULL ), se exp + ilogb( (double) 0x ## int ) - ilogb( ( double )( 0x ## int ## fract ## ULL ) ) ) + #define HEX_LDBL( sm, int, fract, se, exp ) sm ldexpl( (long double)( 0x ## int ## fract ## ULL ), se exp + ilogbl( (long double) 0x ## int ) - ilogbl( ( long double )( 0x ## int ## fract ## ULL ) ) ) +#else + // If compiler supports hex floating point literals: just concatenate all the parts into a literal. + #define HEX_FLT( sm, int, fract, se, exp ) sm 0x ## int ## . ## fract ## p ## se ## exp ## F + #define HEX_DBL( sm, int, fract, se, exp ) sm 0x ## int ## . ## fract ## p ## se ## exp + #define HEX_LDBL( sm, int, fract, se, exp ) sm 0x ## int ## . ## fract ## p ## se ## exp ## L +#endif + +#if defined(__MINGW32__) + #include + #define sleep(sec) Sleep((sec) * 1000) +#endif + #endif // _COMPAT_H_ diff --git a/test_conformance/compatibility/test_common/harness/kernelHelpers.c b/test_conformance/compatibility/test_common/harness/kernelHelpers.c index 3680c06e..42f41aa4 100644 --- a/test_conformance/compatibility/test_common/harness/kernelHelpers.c +++ b/test_conformance/compatibility/test_common/harness/kernelHelpers.c @@ -475,14 +475,14 @@ size_t get_pixel_bytes( const cl_image_format *fmt ) return 0; } -int verifyImageSupport( cl_device_id device ) +test_status verifyImageSupport( cl_device_id device ) { if( checkForImageSupport( device ) ) { log_error( "ERROR: Device does not supported images as required by this test!\n" ); - return CL_IMAGE_FORMAT_NOT_SUPPORTED; + return TEST_FAIL; } - return 0; + return TEST_PASS; } int checkForImageSupport( cl_device_id device ) diff --git a/test_conformance/compatibility/test_common/harness/kernelHelpers.h b/test_conformance/compatibility/test_common/harness/kernelHelpers.h index 59c01b5f..09515e28 100644 --- a/test_conformance/compatibility/test_common/harness/kernelHelpers.h +++ b/test_conformance/compatibility/test_common/harness/kernelHelpers.h @@ -17,6 +17,7 @@ #define _kernelHelpers_h #include "compat.h" +#include "testHarness.h" #include #include @@ -84,8 +85,8 @@ extern int is_image_format_supported( cl_context context, cl_mem_flags flags, cl /* Helper to get pixel size for a pixel format */ size_t get_pixel_bytes( const cl_image_format *fmt ); -/* Verify the given device supports images. 0 means you're good to go, otherwise an error */ -extern int verifyImageSupport( cl_device_id device ); +/* Verify the given device supports images. */ +extern test_status verifyImageSupport( cl_device_id device ); /* Checks that the given device supports images. Same as verify, but doesn't print an error */ extern int checkForImageSupport( cl_device_id device ); diff --git a/test_conformance/compatibility/test_common/harness/msvc9.c b/test_conformance/compatibility/test_common/harness/msvc9.c index 7d559bce..093bb978 100644 --- a/test_conformance/compatibility/test_common/harness/msvc9.c +++ b/test_conformance/compatibility/test_common/harness/msvc9.c @@ -13,15 +13,18 @@ // See the License for the specific language governing permissions and // limitations under the License. // -#if defined(_WIN32) && defined (_MSC_VER) - #include "compat.h" -#include -#include -#include -#include +#if defined ( _MSC_VER ) +#include +#include + +#include + +#include + +#if ! defined( __INTEL_COMPILER ) /////////////////////////////////////////////////////////////////// // @@ -387,86 +390,6 @@ long double log2l(long double x) return 1.44269504088896340735992468100189214L * log(x); } -/////////////////////////////////////////////////////////////////// -// -// misc functions -// -/////////////////////////////////////////////////////////////////// - -/* -// This function is commented out because the Windows implementation should never call munmap. -// If it is calling it, we have a bug. Please file a bugzilla. -int munmap(void *addr, size_t len) -{ -// FIXME: this is not correct. munmap is like free() http://www.opengroup.org/onlinepubs/7990989775/xsh/munmap.html - - return (int)VirtualAlloc( (LPVOID)addr, len, - MEM_COMMIT|MEM_RESERVE, PAGE_NOACCESS ); -} -*/ - -uint64_t ReadTime( void ) -{ - LARGE_INTEGER current; - QueryPerformanceCounter(¤t); - return (uint64_t)current.QuadPart; -} - -double SubtractTime( uint64_t endTime, uint64_t startTime ) -{ - static double PerformanceFrequency = 0.0; - - if (PerformanceFrequency == 0.0) { - LARGE_INTEGER frequency; - QueryPerformanceFrequency(&frequency); - PerformanceFrequency = (double) frequency.QuadPart; - } - - return (double)(endTime - startTime) / PerformanceFrequency * 1e9; -} - -float make_nan() -{ -/* This is the IEEE 754 single-precision format: - unsigned int mantissa: 22; - unsigned int quiet_nan: 1; - unsigned int exponent: 8; - unsigned int negative: 1; -*/ - //const static unsigned - static const int32_t _nan = 0x7fc00000; - return *(const float*)(&_nan); -} - -float nanf( const char* str) -{ - cl_uint u = atoi( str ); - u |= 0x7fc00000U; - return *( float*)(&u); -} - - -double nan( const char* str) -{ - cl_ulong u = atoi( str ); - u |= 0x7ff8000000000000ULL; - return *( double*)(&u); -} - -// double check this implementatation -long double nanl( const char* str) -{ - union - { - long double f; - struct { cl_ulong m; cl_ushort sexp; }u; - }u; - u.u.sexp = 0x7fff; - u.u.m = 0x8000000000000000ULL | atoi( str ); - - return u.f; -} - double trunc(double x) { double absx = fabs(x); @@ -589,7 +512,165 @@ long double roundl(long double x) return x; } -int signbit(double x) +float cbrtf( float x ) +{ + float z = pow( fabs((double) x), 1.0 / 3.0 ); + return copysignf( z, x ); +} + +double cbrt( double x ) +{ + return copysign( pow( fabs( x ), 1.0 / 3.0 ), x ); +} + +long int lrint (double x) +{ + double absx = fabs(x); + + if( x >= (double) LONG_MAX ) + return LONG_MAX; + + if( absx < 4503599627370496.0 /* 0x1.0p52 */ ) + { + double magic = copysign( 4503599627370496.0 /* 0x1.0p52 */, x ); + double rounded = x + magic; + rounded -= magic; + return (long int) rounded; + } + + return (long int) x; +} + +long int lrintf (float x) +{ + float absx = fabsf(x); + + if( x >= (float) LONG_MAX ) + return LONG_MAX; + + if( absx < 8388608.0f /* 0x1.0p23f */ ) + { + float magic = copysignf( 8388608.0f /* 0x1.0p23f */, x ); + float rounded = x + magic; + rounded -= magic; + return (long int) rounded; + } + + return (long int) x; +} + + +/////////////////////////////////////////////////////////////////// +// +// fenv functions +// +/////////////////////////////////////////////////////////////////// + +int fetestexcept(int excepts) +{ + unsigned int status = _statusfp(); + return excepts & ( + ((status & _SW_INEXACT) ? FE_INEXACT : 0) | + ((status & _SW_UNDERFLOW) ? FE_UNDERFLOW : 0) | + ((status & _SW_OVERFLOW) ? FE_OVERFLOW : 0) | + ((status & _SW_ZERODIVIDE) ? FE_DIVBYZERO : 0) | + ((status & _SW_INVALID) ? FE_INVALID : 0) + ); +} + +int feclearexcept(int excepts) +{ + _clearfp(); + return 0; +} + +#endif // __INTEL_COMPILER + +#if ! defined( __INTEL_COMPILER ) || __INTEL_COMPILER < 1300 + +float make_nan() +{ +/* This is the IEEE 754 single-precision format: + unsigned int mantissa: 22; + unsigned int quiet_nan: 1; + unsigned int exponent: 8; + unsigned int negative: 1; +*/ + //const static unsigned + static const int32_t _nan = 0x7fc00000; + return *(const float*)(&_nan); +} + +float nanf( const char* str) +{ + cl_uint u = atoi( str ); + u |= 0x7fc00000U; + return *( float*)(&u); +} + + +double nan( const char* str) +{ + cl_ulong u = atoi( str ); + u |= 0x7ff8000000000000ULL; + return *( double*)(&u); +} + +// double check this implementatation +long double nanl( const char* str) +{ + union + { + long double f; + struct { cl_ulong m; cl_ushort sexp; }u; + }u; + u.u.sexp = 0x7fff; + u.u.m = 0x8000000000000000ULL | atoi( str ); + + return u.f; +} + +#endif + +/////////////////////////////////////////////////////////////////// +// +// misc functions +// +/////////////////////////////////////////////////////////////////// + +/* +// This function is commented out because the Windows implementation should never call munmap. +// If it is calling it, we have a bug. Please file a bugzilla. +int munmap(void *addr, size_t len) +{ +// FIXME: this is not correct. munmap is like free() http://www.opengroup.org/onlinepubs/7990989775/xsh/munmap.html + + return (int)VirtualAlloc( (LPVOID)addr, len, + MEM_COMMIT|MEM_RESERVE, PAGE_NOACCESS ); +} +*/ + +uint64_t ReadTime( void ) +{ + LARGE_INTEGER current; + QueryPerformanceCounter(¤t); + return (uint64_t)current.QuadPart; +} + +double SubtractTime( uint64_t endTime, uint64_t startTime ) +{ + static double PerformanceFrequency = 0.0; + + if (PerformanceFrequency == 0.0) { + LARGE_INTEGER frequency; + QueryPerformanceFrequency(&frequency); + PerformanceFrequency = (double) frequency.QuadPart; + } + + return (double)(endTime - startTime) / PerformanceFrequency * 1e9; +} + +int cf_signbit(double x) { union { @@ -600,7 +681,7 @@ int signbit(double x) return u.u >> 63; } -int signbitf(float x) +int cf_signbitf(float x) { union { @@ -611,17 +692,6 @@ int signbitf(float x) return u.u >> 31; } -float cbrtf( float x ) -{ - float z = pow( fabs((double) x), 1.0 / 3.0 ); - return copysignf( z, x ); -} - -double cbrt( double x ) -{ - return copysign( pow( fabs( x ), 1.0 / 3.0 ), x ); -} - float int2float (int32_t ix) { union { @@ -642,7 +712,7 @@ int32_t float2int (float fx) return u.i; } -#if defined(_MSC_VER) && !defined(_WIN64) +#if !defined(_WIN64) /** Returns the number of leading 0-bits in x, starting at the most significant bit position. If x is 0, the result is undefined. @@ -682,45 +752,10 @@ int __builtin_clz(unsigned int pattern) return count; } -#endif //defined(_MSC_VER) && !defined(_WIN64) +#endif // !defined(_WIN64) #include #include -long int lrint (double x) -{ - double absx = fabs(x); - - if( x >= (double) LONG_MAX ) - return LONG_MAX; - - if( absx < 4503599627370496.0 /* 0x1.0p52 */ ) - { - double magic = copysign( 4503599627370496.0 /* 0x1.0p52 */, x ); - double rounded = x + magic; - rounded -= magic; - return (long int) rounded; - } - - return (long int) x; -} - -long int lrintf (float x) -{ - float absx = fabsf(x); - - if( x >= (float) LONG_MAX ) - return LONG_MAX; - - if( absx < 8388608.0f /* 0x1.0p23f */ ) - { - float magic = copysignf( 8388608.0f /* 0x1.0p23f */, x ); - float rounded = x + magic; - rounded -= magic; - return (long int) rounded; - } - - return (long int) x; -} int usleep(int usec) { @@ -728,22 +763,10 @@ int usleep(int usec) return 0; } -int fetestexcept(int excepts) +unsigned int sleep( unsigned int sec ) { - unsigned int status = _statusfp(); - return excepts & ( - ((status & _SW_INEXACT) ? FE_INEXACT : 0) | - ((status & _SW_UNDERFLOW) ? FE_UNDERFLOW : 0) | - ((status & _SW_OVERFLOW) ? FE_OVERFLOW : 0) | - ((status & _SW_ZERODIVIDE) ? FE_DIVBYZERO : 0) | - ((status & _SW_INVALID) ? FE_INVALID : 0) - ); -} - -int feclearexcept(int excepts) -{ - _clearfp(); + Sleep( sec * 1000 ); return 0; } -#endif //defined(_WIN32) +#endif // defined( _MSC_VER ) diff --git a/test_conformance/compatibility/test_common/harness/testHarness.c b/test_conformance/compatibility/test_common/harness/testHarness.c index 1994399d..af05c8d5 100644 --- a/test_conformance/compatibility/test_common/harness/testHarness.c +++ b/test_conformance/compatibility/test_common/harness/testHarness.c @@ -439,10 +439,18 @@ int runTestHarnessWithCheck( int argc, const char *argv[], unsigned int num_fns, /* If we have a device checking function, run it */ - if( ( deviceCheckFn != NULL ) && deviceCheckFn( device ) != CL_SUCCESS ) + if( ( deviceCheckFn != NULL ) ) { - test_finish(); - return -1; + test_status status = deviceCheckFn( device ); + switch (status) + { + case TEST_PASS: + break; + case TEST_FAIL: + return 1; + case TEST_SKIP: + return 0; + } } if (num_elements <= 0) diff --git a/test_conformance/compatibility/test_common/harness/testHarness.h b/test_conformance/compatibility/test_common/harness/testHarness.h index c2620647..7c1d9cb2 100644 --- a/test_conformance/compatibility/test_common/harness/testHarness.h +++ b/test_conformance/compatibility/test_common/harness/testHarness.h @@ -23,6 +23,13 @@ extern "C" { #endif +typedef enum test_status +{ + TEST_PASS = 0, + TEST_FAIL = 1, + TEST_SKIP = 2, +} test_status; + extern cl_uint gReSeed; extern cl_uint gRandomSeed; @@ -32,8 +39,8 @@ extern int runTestHarness( int argc, const char *argv[], unsigned int num_fns, basefn fnList[], const char *fnNames[], int imageSupportRequired, int forceNoContextCreation, cl_command_queue_properties queueProps ); -// Device checking function. See runTestHarnessWithCheck. If this function returns anything other than CL_SUCCESS (0), the harness exits. -typedef int (*DeviceCheckFn)( cl_device_id device ); +// Device checking function. See runTestHarnessWithCheck. If this function returns anything other than TEST_PASS, the harness exits. +typedef test_status (*DeviceCheckFn)( cl_device_id device ); // Same as runTestHarness, but also supplies a function that checks the created device for required functionality. extern int runTestHarnessWithCheck( int argc, const char *argv[], unsigned int num_fns, diff --git a/test_conformance/compatibility/test_conformance/api/CMakeLists.txt b/test_conformance/compatibility/test_conformance/api/CMakeLists.txt index 50dd64ef..4af76989 100644 --- a/test_conformance/compatibility/test_conformance/api/CMakeLists.txt +++ b/test_conformance/compatibility/test_conformance/api/CMakeLists.txt @@ -20,6 +20,7 @@ set(${MODULE_NAME}_SOURCES test_mem_object_info.cpp test_null_buffer_arg.c test_kernel_arg_info.c + test_queue_properties.cpp ../../test_common/harness/errorHelpers.c ../../test_common/harness/threadTesting.c ../../test_common/harness/testHarness.c diff --git a/test_conformance/compatibility/test_conformance/api/main.c b/test_conformance/compatibility/test_conformance/api/main.c index 1870bf8f..a8e9e993 100644 --- a/test_conformance/compatibility/test_conformance/api/main.c +++ b/test_conformance/compatibility/test_conformance/api/main.c @@ -113,6 +113,7 @@ basefn basefn_list[] = { test_get_image1d_info, test_get_image1d_array_info, test_get_image2d_array_info, + test_queue_properties, }; @@ -200,6 +201,7 @@ const char *basefn_names[] = { "get_image1d_info", "get_image1d_array_info", "get_image2d_array_info", + "queue_properties", }; ct_assert((sizeof(basefn_names) / sizeof(basefn_names[0])) == (sizeof(basefn_list) / sizeof(basefn_list[0]))); diff --git a/test_conformance/compatibility/test_conformance/api/procs.h b/test_conformance/compatibility/test_conformance/api/procs.h index ff796a38..e0a85356 100644 --- a/test_conformance/compatibility/test_conformance/api/procs.h +++ b/test_conformance/compatibility/test_conformance/api/procs.h @@ -105,4 +105,5 @@ extern int test_get_image1d_info( cl_device_id deviceID, cl_context context extern int test_get_image1d_array_info( cl_device_id deviceID, cl_context context, cl_command_queue ignoreQueue, int num_elements ); extern int test_get_image2d_array_info( cl_device_id deviceID, cl_context context, cl_command_queue ignoreQueue, int num_elements ); extern int test_get_kernel_arg_info( cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements ); +extern int test_queue_properties( cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements ); diff --git a/test_conformance/compatibility/test_conformance/api/test_queue_properties.cpp b/test_conformance/compatibility/test_conformance/api/test_queue_properties.cpp new file mode 100644 index 00000000..3b368077 --- /dev/null +++ b/test_conformance/compatibility/test_conformance/api/test_queue_properties.cpp @@ -0,0 +1,174 @@ +// +// Copyright (c) 2018 The Khronos Group Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + + +#include "testBase.h" +#include "../../test_common/harness/typeWrappers.h" +#include "../../test_common/harness/conversions.h" +#include +#include +#include + +using namespace std; +/* +The test against cl_khr_create_command_queue extension. It validates if devices with Opencl 1.X can use clCreateCommandQueueWithPropertiesKHR function. +Based on device capabilities test will create queue with NULL properties, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE property and +CL_QUEUE_PROFILING_ENABLE property. Finally simple kernel will be executed on such queue. +*/ + +const char *queue_test_kernel[] = { +"__kernel void vec_cpy(__global int *src, __global int *dst)\n" +"{\n" +" int tid = get_global_id(0);\n" +"\n" +" dst[tid] = src[tid];\n" +"\n" +"}\n" }; + +int enqueue_kernel(cl_context context, const cl_queue_properties_khr *queue_prop_def, cl_device_id deviceID, clKernelWrapper& kernel, size_t num_elements) +{ + clMemWrapper streams[2]; + int error; + std::vector buf(num_elements); + clCreateCommandQueueWithPropertiesKHR_fn clCreateCommandQueueWithPropertiesKHR = NULL; + cl_platform_id platform; + clEventWrapper event; + + error = clGetDeviceInfo(deviceID, CL_DEVICE_PLATFORM, sizeof(cl_platform_id), &platform, NULL); + test_error(error, "clGetDeviceInfo for CL_DEVICE_PLATFORM failed"); + + clCreateCommandQueueWithPropertiesKHR = (clCreateCommandQueueWithPropertiesKHR_fn) clGetExtensionFunctionAddressForPlatform(platform, "clCreateCommandQueueWithPropertiesKHR"); + if (clCreateCommandQueueWithPropertiesKHR == NULL) + { + log_error("ERROR: clGetExtensionFunctionAddressForPlatform failed\n"); + return -1; + } + + clCommandQueueWrapper queue = clCreateCommandQueueWithPropertiesKHR(context, deviceID, queue_prop_def, &error); + test_error(error, "clCreateCommandQueueWithPropertiesKHR failed"); + + for (int i = 0; i < num_elements; ++i) + { + buf[i] = i; + } + + streams[0] = clCreateBuffer(context, CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR, num_elements * sizeof(int), buf.data(), &error); + test_error( error, "clCreateBuffer failed." ); + streams[1] = clCreateBuffer(context, CL_MEM_READ_WRITE | CL_MEM_ALLOC_HOST_PTR, num_elements * sizeof(int), NULL, &error); + test_error( error, "clCreateBuffer failed." ); + + error = clSetKernelArg(kernel, 0, sizeof(streams[0]), &streams[0]); + test_error( error, "clSetKernelArg failed." ); + + error = clSetKernelArg(kernel, 1, sizeof(streams[1]), &streams[1]); + test_error( error, "clSetKernelArg failed." ); + + error = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &num_elements, NULL, 0, NULL, &event); + test_error( error, "clEnqueueNDRangeKernel failed." ); + + error = clWaitForEvents(1, &event); + test_error(error, "clWaitForEvents failed."); + + error = clEnqueueReadBuffer(queue, streams[1], CL_TRUE, 0, num_elements, buf.data(), 0, NULL, NULL); + test_error( error, "clEnqueueReadBuffer failed." ); + + for (int i = 0; i < num_elements; ++i) + { + if (buf[i] != i) + { + log_error("ERROR: Incorrect vector copy result."); + return -1; + } + } + + return 0; +} + +int test_queue_properties(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + if (num_elements <= 0) + { + num_elements = 128; + } + int error = 0; + + clProgramWrapper program; + clKernelWrapper kernel; + size_t strSize; + std::string strExt(0, '\0'); + cl_queue_properties_khr device_props = NULL; + cl_queue_properties_khr queue_prop_def[] = { CL_QUEUE_PROPERTIES, 0, 0 }; + + // Query extension + error = clGetDeviceInfo(deviceID, CL_DEVICE_EXTENSIONS, 0, NULL, &strSize); + test_error(error, "clGetDeviceInfo for CL_DEVICE_EXTENSIONS failed"); + strExt.resize(strSize); + error = clGetDeviceInfo(deviceID, CL_DEVICE_EXTENSIONS, strExt.size(), &strExt[0], NULL); + test_error(error, "clGetDeviceInfo for CL_DEVICE_EXTENSIONS failed"); + log_info("CL_DEVICE_EXTENSIONS:\n%s\n\n", strExt.c_str()); + + if (strExt.find("cl_khr_create_command_queue") == string::npos) + { + log_info("extension cl_khr_create_command_queue is not supported.\n"); + return 0; + } + + error = create_single_kernel_helper(context, &program, &kernel, 1, queue_test_kernel, "vec_cpy"); + test_error(error, "create_single_kernel_helper failed"); + + log_info("Queue property NULL. Testing ... \n"); + error = enqueue_kernel(context, NULL,deviceID, kernel, (size_t)num_elements); + test_error(error, "enqueue_kernel failed"); + + error = clGetDeviceInfo(deviceID, CL_DEVICE_QUEUE_PROPERTIES, sizeof(device_props), &device_props, NULL); + test_error(error, "clGetDeviceInfo for CL_DEVICE_QUEUE_PROPERTIES failed"); + + if (device_props & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE) + { + log_info("Queue property CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE supported. Testing ... \n"); + queue_prop_def[1] = CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE; + error = enqueue_kernel(context, queue_prop_def, deviceID, kernel, (size_t)num_elements); + test_error(error, "enqueue_kernel failed"); + } else + { + log_info("Queue property CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE not supported \n"); + } + + if (device_props & CL_QUEUE_PROFILING_ENABLE) + { + log_info("Queue property CL_QUEUE_PROFILING_ENABLE supported. Testing ... \n"); + queue_prop_def[1] = CL_QUEUE_PROFILING_ENABLE; + error = enqueue_kernel(context, queue_prop_def, deviceID, kernel, (size_t)num_elements); + test_error(error, "enqueue_kernel failed"); + } else + { + log_info("Queue property CL_QUEUE_PROFILING_ENABLE not supported \n"); + } + + if (device_props & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE && device_props & CL_QUEUE_PROFILING_ENABLE) + { + log_info("Queue property CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE & CL_QUEUE_PROFILING_ENABLE supported. Testing ... \n"); + queue_prop_def[1] = CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE|CL_QUEUE_PROFILING_ENABLE; + error = enqueue_kernel(context, queue_prop_def, deviceID, kernel, (size_t)num_elements); + test_error(error, "enqueue_kernel failed"); + } + else + { + log_info("Queue property CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE or CL_QUEUE_PROFILING_ENABLE not supported \n"); + } + + return 0; +} \ No newline at end of file diff --git a/test_conformance/compatibility/test_conformance/basic/run_array b/test_conformance/compatibility/test_conformance/basic/run_array old mode 100644 new mode 100755 diff --git a/test_conformance/compatibility/test_conformance/basic/run_array_image_copy b/test_conformance/compatibility/test_conformance/basic/run_array_image_copy old mode 100644 new mode 100755 diff --git a/test_conformance/compatibility/test_conformance/basic/run_image b/test_conformance/compatibility/test_conformance/basic/run_image old mode 100644 new mode 100755 diff --git a/test_conformance/compatibility/test_conformance/basic/run_multi_read_image b/test_conformance/compatibility/test_conformance/basic/run_multi_read_image old mode 100644 new mode 100755 diff --git a/test_conformance/compatibility/test_conformance/basic/test_async_strided_copy.cpp b/test_conformance/compatibility/test_conformance/basic/test_async_strided_copy.cpp index 6db06398..dca52b5e 100644 --- a/test_conformance/compatibility/test_conformance/basic/test_async_strided_copy.cpp +++ b/test_conformance/compatibility/test_conformance/basic/test_async_strided_copy.cpp @@ -202,10 +202,10 @@ int test_strided_copy(cl_device_id deviceID, cl_context context, cl_command_queu log_error( "ERROR: Results of copy did not validate!\n" ); sprintf(values + strlen( values), "%d -> [", i); for (int j=0; j<(int)elementSize; j++) - sprintf(values + strlen( values), "%2x ", inchar[i*elementSize+j]); + sprintf(values + strlen( values), "%2x ", inchar[j]); sprintf(values + strlen(values), "] != ["); for (int j=0; j<(int)elementSize; j++) - sprintf(values + strlen( values), "%2x ", outchar[i*elementSize+j]); + sprintf(values + strlen( values), "%2x ", outchar[j]); sprintf(values + strlen(values), "]"); log_error("%s\n", values); diff --git a/test_conformance/compatibility/test_conformance/basic/test_sizeof.c b/test_conformance/compatibility/test_conformance/basic/test_sizeof.c index bece1b94..9c56bb58 100644 --- a/test_conformance/compatibility/test_conformance/basic/test_sizeof.c +++ b/test_conformance/compatibility/test_conformance/basic/test_sizeof.c @@ -133,7 +133,7 @@ const size_table vector_table[] = const char *ptr_table[] = { - "void*", + "global void*", "size_t", "sizeof(int)", // check return type of sizeof "ptrdiff_t" diff --git a/test_conformance/compatibility/test_conformance/images/image_helpers.h b/test_conformance/compatibility/test_conformance/images/image_helpers.h index d2132c7e..cd0eff6c 100644 --- a/test_conformance/compatibility/test_conformance/images/image_helpers.h +++ b/test_conformance/compatibility/test_conformance/images/image_helpers.h @@ -481,7 +481,6 @@ extern char *create_random_image_data( ExplicitType dataType, image_descriptor * extern void get_sampler_kernel_code( image_sampler_data *imageSampler, char *outLine ); extern float get_max_absolute_error( cl_image_format *format, image_sampler_data *sampler); extern float get_max_relative_error( cl_image_format *format, image_sampler_data *sampler, int is3D, int isLinearFilter ); -extern int issubnormal(float); #define errMax( _x , _y ) ( (_x) != (_x) ? (_x) : (_x) > (_y) ? (_x) : (_y) ) diff --git a/test_conformance/compiler/test_async_build.c b/test_conformance/compiler/test_async_build.c index e32c64ab..b4c08b5e 100644 --- a/test_conformance/compiler/test_async_build.c +++ b/test_conformance/compiler/test_async_build.c @@ -86,9 +86,8 @@ int test_async_build_pieces(cl_device_id deviceID, cl_context context, cl_comman return -1; } - clReleaseProgram( program ); + error = clReleaseProgram( program ); + test_error( error, "Unable to release program object" ); return 0; } - - diff --git a/test_conformance/compiler/test_build_helpers.c b/test_conformance/compiler/test_build_helpers.c index 0fcb7103..35875e04 100644 --- a/test_conformance/compiler/test_build_helpers.c +++ b/test_conformance/compiler/test_build_helpers.c @@ -172,7 +172,8 @@ int test_load_two_kernel_source(cl_device_id deviceID, cl_context context, cl_co /* Should probably check binary here to verify the same results... */ /* All done! */ - clReleaseProgram( program ); + error = clReleaseProgram( program ); + test_error( error, "Unable to release program object" ); return 0; } @@ -198,7 +199,8 @@ int test_load_null_terminated_source(cl_device_id deviceID, cl_context context, /* Should probably check binary here to verify the same results... */ /* All done! */ - clReleaseProgram( program ); + error = clReleaseProgram( program ); + test_error( error, "Unable to release program object" ); return 0; } @@ -224,7 +226,8 @@ int test_load_null_terminated_multi_line_source(cl_device_id deviceID, cl_contex /* Should probably check binary here to verify the same results... */ /* All done! */ - clReleaseProgram( program ); + error = clReleaseProgram( program ); + test_error( error, "Unable to release program object" ); return 0; } @@ -262,7 +265,8 @@ int test_load_discreet_length_source(cl_device_id deviceID, cl_context context, /* Should probably check binary here to verify the same results... */ /* All done! */ - clReleaseProgram( program ); + error = clReleaseProgram( program ); + test_error( error, "Unable to release program object" ); return 0; } @@ -297,7 +301,8 @@ int test_load_null_terminated_partial_multi_line_source(cl_device_id deviceID, c /* Should probably check binary here to verify the same results... */ /* All done! */ - clReleaseProgram( program ); + error = clReleaseProgram( program ); + test_error( error, "Unable to release program object" ); return 0; } @@ -393,7 +398,9 @@ int test_get_program_info(cl_device_id deviceID, cl_context context, cl_command_ return -1; } - clReleaseProgram( program ); + /* All done! */ + error = clReleaseProgram( program ); + test_error( error, "Unable to release program object" ); return 0; } @@ -445,8 +452,10 @@ int test_get_program_source(cl_device_id deviceID, cl_context context, cl_comman return -1; } - /* if we got here, everything passed */ - clReleaseProgram( program ); + /* All done! */ + error = clReleaseProgram( program ); + test_error( error, "Unable to release program object" ); + return 0; } @@ -493,26 +502,25 @@ int test_get_program_build_info(cl_device_id deviceID, cl_context context, cl_co error = clGetProgramBuildInfo( program, deviceID, CL_PROGRAM_BUILD_LOG, 0, NULL, &length ); test_error( error, "Unable to get program build log length" ); - log_info("Build log is %ld long.\n", length); + log_info("Build log is %ld long.\n", length); - buffer = (char*)malloc(length); + buffer = (char*)malloc(length); /* Try normal source */ error = clGetProgramBuildInfo( program, deviceID, CL_PROGRAM_BUILD_LOG, length, buffer, NULL ); test_error( error, "Unable to get program build log" ); - if( buffer[length-1] != '\0' ) - { + if( buffer[length-1] != '\0' ) + { log_error( "clGetProgramBuildInfo overwrote allocated space for build log! '%c'\n", buffer[length-1] ); return -1; - } + } /* Try both at once */ error = clGetProgramBuildInfo( program, deviceID, CL_PROGRAM_BUILD_LOG, length, buffer, &newLength ); test_error( error, "Unable to get program build log" ); - free(buffer); - + free(buffer); /***** Build options *****/ error = clGetProgramBuildInfo( program, deviceID, CL_PROGRAM_BUILD_OPTIONS, 0, NULL, &length ); @@ -530,8 +538,10 @@ int test_get_program_build_info(cl_device_id deviceID, cl_context context, cl_co free(buffer); - /* Try with a valid option */ - clReleaseProgram( program ); + /* Try with a valid option */ + error = clReleaseProgram( program ); + test_error( error, "Unable to release program object" ); + program = clCreateProgramWithSource( context, 1, sample_kernel_code_single_line, NULL, &error ); if( program == NULL ) { @@ -546,10 +556,10 @@ int test_get_program_build_info(cl_device_id deviceID, cl_context context, cl_co return -1; } - error = clGetProgramBuildInfo( program, deviceID, CL_PROGRAM_BUILD_OPTIONS, NULL, NULL, &length ); + error = clGetProgramBuildInfo( program, deviceID, CL_PROGRAM_BUILD_OPTIONS, NULL, NULL, &length ); test_error( error, "Unable to get program build options" ); - buffer = (char*)malloc(length); + buffer = (char*)malloc(length); error = clGetProgramBuildInfo( program, deviceID, CL_PROGRAM_BUILD_OPTIONS, length, buffer, NULL ); test_error( error, "Unable to get program build options" ); @@ -559,13 +569,11 @@ int test_get_program_build_info(cl_device_id deviceID, cl_context context, cl_co return -1; } - free(buffer); + /* All done */ + free( buffer ); + + error = clReleaseProgram( program ); + test_error( error, "Unable to release program object" ); - /* if we got here, everything passed */ - clReleaseProgram( program ); return 0; } - - - - diff --git a/test_conformance/compiler/test_compile.c b/test_conformance/compiler/test_compile.c index 926d69bd..dc0d0972 100644 --- a/test_conformance/compiler/test_compile.c +++ b/test_conformance/compiler/test_compile.c @@ -558,6 +558,9 @@ int test_large_multiple_embedded_headers(cl_context context, cl_device_id device free( simple_kernels ); free( headers ); + error = clReleaseKernel( kernel ); + test_error( error, "Unable to release kernel object" ); + error = clReleaseProgram( my_newly_minted_library ); test_error( error, "Unable to release program object" ); @@ -728,6 +731,9 @@ int test_large_multiple_libraries(cl_context context, cl_device_id deviceID, cl_ } free( simple_kernels ); + error = clReleaseKernel( kernel ); + test_error( error, "Unable to release kernel object" ); + error = clReleaseProgram( my_newly_linked_program ); test_error( error, "Unable to release program object" ); @@ -895,6 +901,9 @@ int test_large_multiple_files_multiple_libraries(cl_context context, cl_device_i } free( simple_kernels ); + error = clReleaseKernel( kernel ); + test_error( error, "Unable to release kernel object" ); + error = clReleaseProgram( my_newly_linked_program ); test_error( error, "Unable to release program object" ); @@ -1032,6 +1041,9 @@ int test_large_multiple_files(cl_context context, cl_device_id deviceID, cl_comm } free( lines ); + error = clReleaseKernel( kernel ); + test_error( error, "Unable to release kernel object" ); + error = clReleaseProgram( my_newly_linked_program ); test_error( error, "Unable to release program object" ); @@ -1311,6 +1323,9 @@ int test_simple_embedded_header_compile(cl_device_id deviceID, cl_context contex error = clReleaseProgram( program ); test_error( error, "Unable to release program object" ); + error = clReleaseProgram( header ); + test_error( error, "Unable to release program object" ); + return 0; } @@ -1517,6 +1532,9 @@ int test_simple_embedded_header_link(cl_device_id deviceID, cl_context context, error = clReleaseProgram( program ); test_error( error, "Unable to release program object" ); + error = clReleaseProgram( header ); + test_error( error, "Unable to release program object" ); + error = clReleaseProgram( simple_program ); test_error( error, "Unable to release program object" ); @@ -1571,7 +1589,7 @@ int test_simple_link_with_callback(cl_device_id deviceID, cl_context context, cl simple_user_data simple_link_user_data = {when_i_pondered_weak_and_weary, link_program_completion_event}; - clLinkProgram(context, 1, &deviceID, NULL, 1, &program, simple_link_callback, (void*)&simple_link_user_data, &error); + cl_program my_linked_library = clLinkProgram(context, 1, &deviceID, NULL, 1, &program, simple_link_callback, (void*)&simple_link_user_data, &error); test_error( error, "Unable to link a simple program" ); error = clWaitForEvents(1, &link_program_completion_event); @@ -1584,6 +1602,9 @@ int test_simple_link_with_callback(cl_device_id deviceID, cl_context context, cl error = clReleaseProgram( program ); test_error( error, "Unable to release program object" ); + error = clReleaseProgram( my_linked_library ); + test_error( error, "Unable to release program object" ); + return 0; } @@ -1738,6 +1759,9 @@ int test_execute_after_simple_compile_and_link(cl_device_id deviceID, cl_context return error; /* All done! */ + error = clReleaseKernel( kernel ); + test_error( error, "Unable to release kernel object" ); + error = clReleaseProgram( program ); test_error( error, "Unable to release program object" ); @@ -1774,6 +1798,9 @@ int test_execute_after_simple_compile_and_link_no_device_info(cl_device_id devic return error; /* All done! */ + error = clReleaseKernel( kernel ); + test_error( error, "Unable to release kernel object" ); + error = clReleaseProgram( program ); test_error( error, "Unable to release program object" ); @@ -1810,6 +1837,9 @@ int test_execute_after_simple_compile_and_link_with_defines(cl_device_id deviceI return error; /* All done! */ + error = clReleaseKernel( kernel ); + test_error( error, "Unable to release kernel object" ); + error = clReleaseProgram( program ); test_error( error, "Unable to release program object" ); @@ -1887,6 +1917,9 @@ int test_execute_after_serialize_reload_object(cl_device_id deviceID, cl_context return error; /* All done! */ + error = clReleaseKernel( kernel ); + test_error( error, "Unable to release kernel object" ); + error = clReleaseProgram( program ); test_error( error, "Unable to release program object" ); @@ -1991,6 +2024,12 @@ int test_execute_after_serialize_reload_library(cl_device_id deviceID, cl_contex return error; /* All done! */ + error = clReleaseKernel( kernel ); + test_error( error, "Unable to release kernel object" ); + + error = clReleaseKernel( another_kernel ); + test_error( error, "Unable to release another kernel object" ); + error = clReleaseProgram( program ); test_error( error, "Unable to release program object" ); @@ -2065,7 +2104,8 @@ int test_execute_after_simple_compile_and_link_with_callbacks(cl_device_id devic error = clWaitForEvents(1, &compile_program_completion_event); test_error( error, "clWaitForEvents failed when waiting on compile_program_completion_event"); - clReleaseEvent(compile_program_completion_event); + error = clReleaseEvent(compile_program_completion_event); + test_error( error, "Unable to release event object" ); link_program_completion_event = clCreateUserEvent(context, &error); test_error( error, "Unable to create a user event"); @@ -2077,7 +2117,8 @@ int test_execute_after_simple_compile_and_link_with_callbacks(cl_device_id devic error = clWaitForEvents(1, &link_program_completion_event); test_error( error, "clWaitForEvents failed when waiting on link_program_completion_event"); - clReleaseEvent(link_program_completion_event); + error = clReleaseEvent(link_program_completion_event); + test_error( error, "Unable to release event object" ); cl_kernel kernel = clCreateKernel(my_newly_linked_program, "CopyBuffer", &error); test_error( error, "Unable to create a simple kernel" ); @@ -2087,6 +2128,9 @@ int test_execute_after_simple_compile_and_link_with_callbacks(cl_device_id devic return error; /* All done! */ + error = clReleaseKernel( kernel ); + test_error( error, "Unable to release kernel object" ); + error = clReleaseProgram( program ); test_error( error, "Unable to release program object" ); @@ -2264,6 +2308,12 @@ int test_execute_after_simple_library_with_link(cl_device_id deviceID, cl_contex return error; /* All done! */ + error = clReleaseKernel( kernel ); + test_error( error, "Unable to release kernel object" ); + + error = clReleaseKernel( another_kernel ); + test_error( error, "Unable to release another kernel object" ); + error = clReleaseProgram( program ); test_error( error, "Unable to release program object" ); @@ -2368,6 +2418,12 @@ int test_execute_after_two_file_link(cl_device_id deviceID, cl_context context, return error; /* All done! */ + error = clReleaseKernel( kernel ); + test_error( error, "Unable to release kernel object" ); + + error = clReleaseKernel( another_kernel ); + test_error( error, "Unable to release another kernel object" ); + error = clReleaseProgram( program ); test_error( error, "Unable to release program object" ); @@ -2433,9 +2489,18 @@ int test_execute_after_embedded_header_link(cl_device_id deviceID, cl_context co return error; /* All done! */ + error = clReleaseKernel( kernel ); + test_error( error, "Unable to release kernel object" ); + + error = clReleaseKernel( another_kernel ); + test_error( error, "Unable to release another kernel object" ); + error = clReleaseProgram( program ); test_error( error, "Unable to release program object" ); + error = clReleaseProgram( header ); + test_error( error, "Unable to release program object" ); + error = clReleaseProgram( simple_program ); test_error( error, "Unable to release program object" ); @@ -2563,6 +2628,12 @@ int test_execute_after_included_header_link(cl_device_id deviceID, cl_context co return error; /* All done! */ + error = clReleaseKernel( kernel ); + test_error( error, "Unable to release kernel object" ); + + error = clReleaseKernel( another_kernel ); + test_error( error, "Unable to release another kernel object" ); + error = clReleaseProgram( program ); test_error( error, "Unable to release program object" ); @@ -2803,6 +2874,12 @@ int test_program_binary_type(cl_device_id deviceID, cl_context context, cl_comma return error; /* All done! */ + error = clReleaseKernel( kernel ); + test_error( error, "Unable to release kernel object" ); + + error = clReleaseKernel( another_kernel ); + test_error( error, "Unable to release another kernel object" ); + error = clReleaseProgram( program ); test_error( error, "Unable to release program object" ); @@ -3107,6 +3184,9 @@ int test_large_compile_and_link_status_options_log(cl_context context, cl_device return error; /* All done! */ + error = clReleaseKernel( kernel ); + test_error( error, "Unable to release kernel object" ); + error = clReleaseProgram( program ); test_error( error, "Unable to release program object" ); diff --git a/test_conformance/compiler/test_compiler_defines_for_extensions.cpp b/test_conformance/compiler/test_compiler_defines_for_extensions.cpp index a262d019..81e05232 100644 --- a/test_conformance/compiler/test_compiler_defines_for_extensions.cpp +++ b/test_conformance/compiler/test_compiler_defines_for_extensions.cpp @@ -55,6 +55,8 @@ const char *known_extensions[] = { "cl_khr_egl_event", "cl_khr_throttle_hints", "cl_khr_priority_hints", + "cl_khr_create_command_queue", + "cl_khr_il_program", }; size_t num_known_extensions = sizeof(known_extensions)/sizeof(char*); @@ -413,6 +415,10 @@ int test_compiler_defines_for_extensions(cl_device_id device, cl_context context free(extensions_supported[i]); } free(extensions); + if( defines ) { + error = clReleaseMemObject( defines ); + test_error( error, "Unable to release memory object" ); + } if (total_errors) return -1; diff --git a/test_conformance/compiler/test_image_macro.c b/test_conformance/compiler/test_image_macro.c index 329a017c..f85f092f 100644 --- a/test_conformance/compiler/test_image_macro.c +++ b/test_conformance/compiler/test_image_macro.c @@ -89,7 +89,13 @@ int test_image_macro(cl_device_id deviceID, cl_context context, cl_command_queue log_info("CL_DEVICE_IMAGE_SUPPORT not set, __IMAGE_SUPPORT__ macro not set \n"); } - clReleaseProgram( program ); + status = clReleaseProgram( program ); + if( status ) + { + log_error ("Unable to release program object, [%d] \n", status ); + return status; + } + return status; } diff --git a/test_conformance/computeinfo/main.c b/test_conformance/computeinfo/main.c index 8126c95a..71bb1978 100644 --- a/test_conformance/computeinfo/main.c +++ b/test_conformance/computeinfo/main.c @@ -227,6 +227,10 @@ config_info config_infos[] = CONFIG_INFO( 2, 0, CL_DEVICE_PREFERRED_LOCAL_ATOMIC_ALIGNMENT , cl_uint), CONFIG_INFO( 2, 0, CL_DEVICE_SVM_CAPABILITIES, cl_device_svm_capabilities), + + CONFIG_INFO( 2, 1, CL_DEVICE_IL_VERSION, string), + CONFIG_INFO( 2, 1, CL_DEVICE_MAX_NUM_SUB_GROUPS, cl_uint), + CONFIG_INFO( 2, 1, CL_DEVICE_SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS, cl_uint), }; #define ENTRY(T) { T, #T } diff --git a/test_conformance/contractions/Makefile b/test_conformance/contractions/Makefile index 14e283dc..d6f52461 100644 --- a/test_conformance/contractions/Makefile +++ b/test_conformance/contractions/Makefile @@ -9,11 +9,11 @@ LIBRARIES = -framework OpenCL -framework ApplicationServices -framework IOKit -I release: echo "Build Release" - $(CC) *.c ../../test_common/harness/rounding_mode.c ../../test_common/harness/kernelHelpers.c ../../test_common/harness/errorHelpers.c ../../test_common/harness/mt19937.c -Os $(CFLAGS) -o contractions $(LIBRARIES) + $(CC) *.c ../../test_common/harness/testHarness.c ../../test_common/harness/rounding_mode.c ../../test_common/harness/kernelHelpers.c ../../test_common/harness/errorHelpers.c ../../test_common/harness/mt19937.c -Os $(CFLAGS) -o contractions $(LIBRARIES) debug: echo "Build Debug" - $(CC) *.c ../../test_common/harness/rounding_mode.c ../../test_common/harness/kernelHelpers.c ../../test_common/harness/errorHelpers.c ../../test_common/harness/mt19937.c -O0 $(CFLAGS) -D_DEBUG=1 -o contractions_debug $(LIBRARIES) + $(CC) *.c ../../test_common/harness/testHarness.c ../../test_common/harness/rounding_mode.c ../../test_common/harness/kernelHelpers.c ../../test_common/harness/errorHelpers.c ../../test_common/harness/mt19937.c -O0 $(CFLAGS) -D_DEBUG=1 -o contractions_debug $(LIBRARIES) test: release arch -i386 ./contractions -c > cpu.log; diff --git a/test_conformance/contractions/contractions.c b/test_conformance/contractions/contractions.c index 164fde6c..5cbd094d 100644 --- a/test_conformance/contractions/contractions.c +++ b/test_conformance/contractions/contractions.c @@ -35,6 +35,7 @@ #include "../../test_common/harness/kernelHelpers.h" #include "../../test_common/harness/rounding_mode.h" #include "../../test_common/harness/fpcontrol.h" +#include "../../test_common/harness/testHarness.h" #include "../../test_common/harness/parseParameters.h" #if defined( __APPLE__ ) #include @@ -93,6 +94,9 @@ int *skipTest[8]; double *buf3_double, *buf4_double, *buf5_double, *buf6_double; double *correct_double[8]; +static const char **gArgList; +static size_t gArgCount; + #define BUFFER_SIZE (1024*1024) @@ -217,11 +221,130 @@ float ppc_mul(float a, float b) } #endif +int test_contractions_float_0(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return RunTest(0); +} + +int test_contractions_float_1(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return RunTest(1); +} + +int test_contractions_float_2(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return RunTest(2); +} + +int test_contractions_float_3(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return RunTest(3); +} + +int test_contractions_float_4(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return RunTest(4); +} + +int test_contractions_float_5(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return RunTest(5); +} + +int test_contractions_float_6(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return RunTest(6); +} + +int test_contractions_float_7(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return RunTest(7); +} + +int test_contractions_double_0(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return RunTest_Double(0); +} + +int test_contractions_double_1(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return RunTest_Double(1); +} + +int test_contractions_double_2(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return RunTest_Double(2); +} + +int test_contractions_double_3(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return RunTest_Double(3); +} + +int test_contractions_double_4(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return RunTest_Double(4); +} + +int test_contractions_double_5(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return RunTest_Double(5); +} + +int test_contractions_double_6(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return RunTest_Double(6); +} + +int test_contractions_double_7(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return RunTest_Double(7); +} + +basefn basefn_list[] = { + test_contractions_float_0, + test_contractions_float_1, + test_contractions_float_2, + test_contractions_float_3, + test_contractions_float_4, + test_contractions_float_5, + test_contractions_float_6, + test_contractions_float_7, + test_contractions_double_0, + test_contractions_double_1, + test_contractions_double_2, + test_contractions_double_3, + test_contractions_double_4, + test_contractions_double_5, + test_contractions_double_6, + test_contractions_double_7, +}; + +const char *basefn_names[] = { + "contractions_float_0", + "contractions_float_1", + "contractions_float_2", + "contractions_float_3", + "contractions_float_4", + "contractions_float_5", + "contractions_float_6", + "contractions_float_7", + "contractions_double_0", + "contractions_double_1", + "contractions_double_2", + "contractions_double_3", + "contractions_double_4", + "contractions_double_5", + "contractions_double_6", + "contractions_double_7", +}; + +ct_assert((sizeof(basefn_names) / sizeof(basefn_names[0])) == (sizeof(basefn_list) / sizeof(basefn_list[0]))); + +int num_fns = sizeof(basefn_names) / sizeof(char *); + int main( int argc, const char **argv ) { - int error = 0; - int i; - test_start(); argc = parseCustomParam(argc, argv); if (argc == -1) @@ -230,40 +353,30 @@ int main( int argc, const char **argv ) return -1; } - error = ParseArgs( argc, argv ); + int error = ParseArgs( argc, argv ); if( error ) - return error; + goto exit; // Init OpenCL error = InitCL(); if( error ) - return error; + goto exit; - // run the tests - log_info( "Testing floats...\n" ); - for( i = 0; i < 8; i++ ) - error |= RunTest( i ); + error = parseAndCallCommandLineTests( gArgCount, gArgList, NULL, num_fns, basefn_list, basefn_names, true, 0, 0 ); - if( gHasDouble ) +exit: + if( gQueue ) { - log_info( "Testing doubles...\n" ); - for( i = 0; i < 8; i++ ) - error |= RunTest_Double( i ); + int flush_error = clFinish( gQueue ); + if( flush_error ) + log_error( "clFinish failed: %d\n", flush_error ); } - - int flush_error = clFinish(gQueue); - if (flush_error) - log_error("clFinish failed: %d\n", flush_error); - - if( error ) - vlog_error( "Contractions test FAILED.\n" ); - else - vlog( "Contractions test PASSED.\n" ); - ReleaseCL(); test_finish(); + free( gArgList ); + return error; } @@ -271,6 +384,17 @@ int main( int argc, const char **argv ) static int ParseArgs( int argc, const char **argv ) { + gArgList = (const char **)calloc( argc, sizeof( char*) ); + + if( NULL == gArgList ) + { + vlog_error( "Failed to allocate memory for argList\n" ); + return 1; + } + + gArgList[0] = argv[0]; + gArgCount = 1; + int i; int length_of_seed = 0; @@ -354,9 +478,6 @@ static int ParseArgs( int argc, const char **argv ) gForceFTZ ^= 1; break; - case ' ': - break; - default: vlog( " <-- unknown flag: %c (0x%2.2x)\n)", *arg, *arg ); PrintUsage(); @@ -374,8 +495,8 @@ static int ParseArgs( int argc, const char **argv ) gDeviceType = CL_DEVICE_TYPE_DEFAULT; else { - vlog( "ERROR -- unknown argument: %s\n", arg ); - abort(); + gArgList[gArgCount] = arg; + gArgCount++; } } vlog( "\n\nTest binary built %s %s\n", __DATE__, __TIME__ ); @@ -401,6 +522,8 @@ static void PrintArch( void ) vlog( "\tARCH:\tx86_64\n" ); #elif defined( __arm__ ) vlog( "\tARCH:\tarm\n" ); +#elif defined( __aarch64__ ) + vlog( "\tARCH:\taarch64\n" ); #else vlog( "\tARCH:\tunknown\n" ); #endif @@ -443,20 +566,20 @@ static void PrintArch( void ) static void PrintUsage( void ) { vlog( "%s [-z]: \n", appName ); - vlog( "\toptions:\n" ); + vlog( "\tOptions:\n" ); vlog( "\t\t-z\tToggle FTZ mode (Section 6.5.3) for all functions. (Set by device capabilities by default.)\n" ); vlog( "\t\t-sNUMBER set random seed.\n"); vlog( "\n" ); + vlog( "\tTest names:\n" ); + for( int i = 0; i < num_fns; i++ ) + { + vlog( "\t\t%s\n", basefn_names[i] ); + } } const char *sizeNames[] = { "float", "float2", "float4", "float8", "float16" }; const char *sizeNames_double[] = { "double", "double2", "double4", "double8", "double16" }; -static void CL_CALLBACK notify_callback(const char *errinfo, const void *private_info, size_t cb, void *user_data) -{ - vlog( "%s\n", errinfo ); -} - static int InitCL( void ) { cl_platform_id platform = NULL; @@ -619,7 +742,7 @@ static int InitCL( void ) for( j = 2; j < strCount; j += 2 ) kernels[j] = sizeNames[i]; - error = create_single_kernel_helper_create_program(gContext, &gProgram[i], strCount, kernels); + gProgram[i] = clCreateProgramWithSource(gContext, strCount, kernels, NULL, &error); if( NULL == gProgram[i] ) { vlog_error( "clCreateProgramWithSource failed\n" ); @@ -647,7 +770,7 @@ static int InitCL( void ) for( j = 2; j < strCount; j += 2 ) kernels[j] = sizeNames_double[i]; - error = create_single_kernel_helper_create_program(gContext, &gProgram_double[i], strCount, kernels); + gProgram_double[i] = clCreateProgramWithSource(gContext, strCount, kernels, NULL, &error); if( NULL == gProgram_double[i] ) { vlog_error( "clCreateProgramWithSource failed\n" ); @@ -1108,6 +1231,12 @@ static int RunTest( int testNumber ) static int RunTest_Double( int testNumber ) { + if( !gHasDouble ) + { + vlog("Double is not supported, test not run.\n"); + return 0; + } + size_t i; int error = 0; cl_mem args[4]; diff --git a/test_conformance/conversions/basic_test_conversions.c b/test_conformance/conversions/basic_test_conversions.c index 73f38633..bfd31b27 100644 --- a/test_conformance/conversions/basic_test_conversions.c +++ b/test_conformance/conversions/basic_test_conversions.c @@ -751,16 +751,11 @@ static void ulong2uint( void *out, void *in){ ((cl_uint*) out)[0] = (cl_uint) (( static void ulong2int( void *out, void *in){ ((cl_int*) out)[0] = (cl_int) ((cl_ulong*) in)[0]; } static void ulong2float( void *out, void *in) { -#if defined(_MSC_VER) +#if defined(_MSC_VER) && defined(_M_X64) cl_ulong l = ((cl_ulong*) in)[0]; float result; - cl_long sl = ((cl_long)l < 0) ? (cl_long)((l >> 1) | (l & 1)) : (cl_long)l; -#if defined(_M_X64) _mm_store_ss(&result, _mm_cvtsi64_ss(_mm_setzero_ps(), sl)); -#else - result = sl; -#endif ((float*) out)[0] = (l == 0 ? 0.0f : (((cl_long)l < 0) ? result * 2.0f : result)); #else cl_ulong l = ((cl_ulong*) in)[0]; diff --git a/test_conformance/conversions/test_conversions.c b/test_conformance/conversions/test_conversions.c index fc6f6315..7e95af90 100644 --- a/test_conformance/conversions/test_conversions.c +++ b/test_conformance/conversions/test_conversions.c @@ -98,6 +98,7 @@ cl_mem gOutBuffers[ kCallStyleCount ]; size_t gComputeDevices = 0; uint32_t gDeviceFrequency = 0; int gWimpyMode = 0; +int gWimpyReductionFactor = 128; int gSkipTesting = 0; int gForceFTZ = 0; int gMultithread = 1; @@ -418,6 +419,9 @@ static int ParseArgs( int argc, const char **argv ) case 'w': gWimpyMode ^= 1; break; + case '[': + parseWimpyReductionFactor(arg, gWimpyReductionFactor); + break; case 'z': gForceFTZ ^= 1; break; @@ -520,6 +524,7 @@ static int ParseArgs( int argc, const char **argv ) vlog( "*** WARNING: Testing in Wimpy mode! ***\n" ); vlog( "*** Wimpy mode is not sufficient to verify correctness. ***\n" ); vlog( "*** It gives warm fuzzy feelings and then nevers calls. ***\n\n" ); + vlog("*** Wimpy Reduction Factor: %-27u ***\n\n", gWimpyReductionFactor); } return 0; @@ -546,6 +551,7 @@ static void PrintUsage( void ) vlog( "\t\t-l\tToggle link check mode. When on, testing is skipped, and we just check to see that the kernels build. (Off by default.)\n" ); vlog( "\t\t-m\tToggle Multithreading. (On by default.)\n" ); vlog( "\t\t-w\tToggle wimpy mode. When wimpy mode is on, we run a very small subset of the tests for each fn. NOT A VALID TEST! (Off by default.)\n" ); + vlog(" \t\t-[2^n]\tSet wimpy reduction factor, recommended range of n is 1-12, default factor(%u)\n", gWimpyReductionFactor); vlog( "\t\t-z\tToggle flush to zero mode (Default: per device)\n" ); vlog( "\t\t-#\tTest just vector size given by #, where # is an element of the set {1,2,3,4,8,16}\n" ); vlog( "\n" ); @@ -1245,15 +1251,12 @@ static int DoTest( Type outType, Type inType, SaturationMode sat, RoundingMode r if ( !gWimpyMode && gIsEmbedded ) step = blockCount * EMBEDDED_REDUCTION_FACTOR; + if ( gWimpyMode ) + step = (size_t)blockCount * (size_t)gWimpyReductionFactor; vlog( "Testing... " ); fflush(stdout); for( i = 0; i < (uint64_t)lastCase; i += step ) { - if (gWimpyMode) { - uint64_t blockIndex = (i / blockCount) & 0xFF; - if (blockIndex != 0 && blockIndex != 0xFF) - continue; - } if( 0 == ( i & ((lastCase >> 3) -1))) { vlog("."); diff --git a/test_conformance/d3d10/harness.cpp b/test_conformance/d3d10/harness.cpp index e93cee94..016d9e72 100644 --- a/test_conformance/d3d10/harness.cpp +++ b/test_conformance/d3d10/harness.cpp @@ -200,7 +200,7 @@ cl_int HarnessD3D10_CreateDevice(IDXGIAdapter* pAdapter, ID3D10Device **ppDevice pAdapter, D3D10_DRIVER_TYPE_HARDWARE, NULL, - D3D10_CREATE_DEVICE_DEBUG, + 0, D3D10_SDK_VERSION, &sd, &HarnessD3D10_pSwapChain, diff --git a/test_conformance/device_execution/execute_block.cpp b/test_conformance/device_execution/execute_block.cpp index e10b7c6e..99589605 100644 --- a/test_conformance/device_execution/execute_block.cpp +++ b/test_conformance/device_execution/execute_block.cpp @@ -928,15 +928,16 @@ static const char* block_barrier[] = NL, " size_t gid = get_group_id(0);" NL, " size_t idx = gid*lsz;" NL, "" + NL, " res[tid]=lsz;" + NL, " barrier(CLK_GLOBAL_MEM_FENCE);" NL, " int (^kernelBlock)(int) = ^(int a)" NL, " {" - NL, " atomic_inc(res+idx);" + NL, " atomic_dec(res+idx);" NL, " barrier(CLK_GLOBAL_MEM_FENCE);" - NL, " return (int)abs(a - b) - (res[idx] != lsz ? 0 : 1);" + NL, " return (int)abs(a - b) - (res[idx] != 0 ? 0 : 1);" NL, " };" NL, "" NL, " int d = kernelBlock(2);" - NL, " barrier(CLK_GLOBAL_MEM_FENCE);" NL, " res[tid] = d;" NL, "}" NL diff --git a/test_conformance/device_partition/Jamfile b/test_conformance/device_partition/Jamfile index 0e1d4d6a..3bf4b29f 100644 --- a/test_conformance/device_partition/Jamfile +++ b/test_conformance/device_partition/Jamfile @@ -1,32 +1,32 @@ -project - : requirements - gcc:-xc++ - msvc:"/TP" - ; - -exe test_device_partition - : main.c - test_device_partition.cpp - ../../test_common/harness/errorHelpers.c - ../../test_common/harness/threadTesting.c - ../../test_common/harness/testHarness.c - ../../test_common/harness/kernelHelpers.c - ../../test_common/harness/genericThread.cpp - ../../test_common/harness/mt19937.c - ../../test_common/harness/conversions.c - ../../test_common/harness/typeWrappers.cpp - : windows:../../test_common/harness/msvc9.c - ; - -install dist - : test_device_partition - : debug:$(DIST)/debug/tests/conformance/1.2/x86/device_partition - release:$(DIST)/release/tests/conformance/1.2/x86/device_partition - ; - -install dist - : test_device_partition - : debug:$(DIST)/debug/tests/conformance/1.2/x86_64/device_partition - release:$(DIST)/release/tests/conformance/1.2/x86_64/device_partition - 64 - ; +project + : requirements + gcc:-xc++ + msvc:"/TP" + ; + +exe test_device_partition + : main.c + test_device_partition.cpp + ../../test_common/harness/errorHelpers.c + ../../test_common/harness/threadTesting.c + ../../test_common/harness/testHarness.c + ../../test_common/harness/kernelHelpers.c + ../../test_common/harness/genericThread.cpp + ../../test_common/harness/mt19937.c + ../../test_common/harness/conversions.c + ../../test_common/harness/typeWrappers.cpp + : windows:../../test_common/harness/msvc9.c + ; + +install dist + : test_device_partition + : debug:$(DIST)/debug/tests/conformance/1.2/x86/device_partition + release:$(DIST)/release/tests/conformance/1.2/x86/device_partition + ; + +install dist + : test_device_partition + : debug:$(DIST)/debug/tests/conformance/1.2/x86_64/device_partition + release:$(DIST)/release/tests/conformance/1.2/x86_64/device_partition + 64 + ; diff --git a/test_conformance/device_timer/main.c b/test_conformance/device_timer/main.c index c3cb2611..7ddeadad 100644 --- a/test_conformance/device_timer/main.c +++ b/test_conformance/device_timer/main.c @@ -32,8 +32,7 @@ basefn basefn_list[] = { const char *basefn_names[] = { "test_timer_resolution_queries", - "test_device_and_host_timers", - "all" + "test_device_and_host_timers" }; size_t num_fns = sizeof(basefn_names)/sizeof(basefn_names[0]); diff --git a/test_conformance/generate_spirv_offline.py b/test_conformance/generate_spirv_offline.py index ccc11f81..ea80c768 100644 --- a/test_conformance/generate_spirv_offline.py +++ b/test_conformance/generate_spirv_offline.py @@ -1,53 +1,53 @@ -import sys -import os -import platform -import re -import string -import shutil -import traceback - -if len(sys.argv)<2: - print 'Usage: "generate_spirv_offline.py <32|64>"' - exit(1) - -input_dir = sys.argv[1] -arch = sys.argv[2] - -def generate_spirv(): - print "generating spirv" - ocl_version = '12'; - build_options = '' - - if os.path.exists(input_dir): - for root, dirs, files in os.walk(input_dir): - for file in files: - if file.endswith('.cl'): - options_file_name = file[:-2] + "options" - ocl_version = '12' - if os.path.exists(os.path.join(root, options_file_name)): - optFile = open (os.path.join(root, options_file_name), 'rU') - for line in optFile: - if re.search("-cl-std=CL2.0", line): - ocl_version = '20' - build_options = re.sub("-cl-std=CL2.0", "", line) - print build_options - input_string = os.path.join(root, file) - output_string = os.path.join(root, file[:-2]) - - command_line = ".\\build_script_spirv.py " + input_string + " " + output_string + "spv" + arch + " " + arch + " spir_v " + ocl_version + " \"" + build_options + " \"" - print command_line - os.system(command_line) - return 0 - -def main(): - try: - generate_spirv() - except Exception: - traceback.print_exc(file=sys.stdout) - sys.exit(0) - -if __name__ == "__main__": - main() - - - +import sys +import os +import platform +import re +import string +import shutil +import traceback + +if len(sys.argv)<2: + print 'Usage: "generate_spirv_offline.py <32|64>"' + exit(1) + +input_dir = sys.argv[1] +arch = sys.argv[2] + +def generate_spirv(): + print "generating spirv" + ocl_version = '12'; + build_options = '' + + if os.path.exists(input_dir): + for root, dirs, files in os.walk(input_dir): + for file in files: + if file.endswith('.cl'): + options_file_name = file[:-2] + "options" + ocl_version = '12' + if os.path.exists(os.path.join(root, options_file_name)): + optFile = open (os.path.join(root, options_file_name), 'rU') + for line in optFile: + if re.search("-cl-std=CL2.0", line): + ocl_version = '20' + build_options = re.sub("-cl-std=CL2.0", "", line) + print build_options + input_string = os.path.join(root, file) + output_string = os.path.join(root, file[:-2]) + + command_line = ".\\build_script_spirv.py " + input_string + " " + output_string + "spv" + arch + " " + arch + " spir_v " + ocl_version + " \"" + build_options + " \"" + print command_line + os.system(command_line) + return 0 + +def main(): + try: + generate_spirv() + except Exception: + traceback.print_exc(file=sys.stdout) + sys.exit(0) + +if __name__ == "__main__": + main() + + + diff --git a/test_conformance/geometrics/test_geometrics_double.cpp b/test_conformance/geometrics/test_geometrics_double.cpp index 2d258d5d..34bd1933 100644 --- a/test_conformance/geometrics/test_geometrics_double.cpp +++ b/test_conformance/geometrics/test_geometrics_double.cpp @@ -203,7 +203,7 @@ int test_geom_cross_double(cl_device_id deviceID, cl_context context, cl_command return -1; /* Generate some streams. Note: deliberately do some random data in w to verify that it gets ignored */ - for( i = 0; i < TEST_SIZE * vecsize; i++ ) + for( i = 0; i < size * vecsize; i++ ) { inDataA[ i ] = get_random_double( -512.f, 512.f, d ); inDataB[ i ] = get_random_double( -512.f, 512.f, d ); @@ -237,7 +237,7 @@ int test_geom_cross_double(cl_device_id deviceID, cl_context context, cl_command } /* Run the kernel */ - threads[0] = TEST_SIZE; + threads[0] = size; error = get_max_common_work_group_size( context, kernel, threads[0], &localThreads[0] ); test_error( error, "Unable to get work group size to use" ); diff --git a/test_conformance/gl/test_image_methods.cpp b/test_conformance/gl/test_image_methods.cpp index fa0c00a6..0d0e5c7e 100644 --- a/test_conformance/gl/test_image_methods.cpp +++ b/test_conformance/gl/test_image_methods.cpp @@ -34,7 +34,8 @@ typedef struct image_kernel_data cl_int numSamples; }; -static const char *methodTestKernelPattern = +static const char *methodTestKernelPattern = +"%s" "typedef struct {\n" " int width;\n" " int height;\n" @@ -75,6 +76,8 @@ static const char *channelOrderConstLine = " outData->expectedChannelOrder = CLK_%s;\n"; static const char *numSamplesKernelLine = " outData->numSamples = get_image_num_samples( input );\n"; +static const char *enableMSAAKernelLine = +"#pragma OPENCL EXTENSION cl_khr_gl_msaa_sharing : enable\n"; static int verify(cl_int input, cl_int kernelOutput, const char * description) { @@ -185,6 +188,7 @@ int test_image_format_methods( cl_device_id device, cl_context context, cl_comma bool doImageChannelOrder = false; bool doImageDim = false; bool doNumSamples = false; + bool doMSAA = false; switch(target) { case GL_TEXTURE_2D: imageType = "image2d_depth_t"; @@ -206,6 +210,7 @@ int test_image_format_methods( cl_device_id device, cl_context context, cl_comma break; case GL_TEXTURE_2D_MULTISAMPLE: doNumSamples = true; + doMSAA = true; if(format.formattype == GL_DEPTH_COMPONENT) { doImageWidth = true; imageType = "image2d_msaa_depth_t"; @@ -214,6 +219,7 @@ int test_image_format_methods( cl_device_id device, cl_context context, cl_comma } break; case GL_TEXTURE_2D_MULTISAMPLE_ARRAY: + doMSAA = true; if(format.formattype == GL_DEPTH_COMPONENT) { doImageWidth = true; imageType = "image2d_msaa_array_depth_t"; @@ -244,9 +250,11 @@ int test_image_format_methods( cl_device_id device, cl_context context, cl_comma } } - // Create a program to run against - sprintf( programSrc, methodTestKernelPattern, - imageType, + // Create a program to run against + sprintf(programSrc, + methodTestKernelPattern, + ( doMSAA ) ? enableMSAAKernelLine : "", + imageType, ( doArraySize ) ? arraySizeKernelLine : "", ( doImageWidth ) ? imageWidthKernelLine : "", ( doImageHeight ) ? imageHeightKernelLine : "", diff --git a/test_conformance/gl/test_images_read_common.cpp b/test_conformance/gl/test_images_read_common.cpp index 068b9a29..1d0529d5 100644 --- a/test_conformance/gl/test_images_read_common.cpp +++ b/test_conformance/gl/test_images_read_common.cpp @@ -107,6 +107,7 @@ static const char *kernelpattern_image_read_2darray_depth = "}\n"; static const char *kernelpattern_image_multisample_read_2d = +"#pragma OPENCL EXTENSION cl_khr_gl_msaa_sharing : enable\n" "__kernel void sample_test( read_only image2d_msaa_t source, sampler_t sampler, __global %s4 *results )\n" "{\n" " int tidX = get_global_id(0);\n" @@ -121,6 +122,7 @@ static const char *kernelpattern_image_multisample_read_2d = "}\n"; static const char *kernelpattern_image_multisample_read_2d_depth = + "#pragma OPENCL EXTENSION cl_khr_gl_msaa_sharing : enable\n" "__kernel void sample_test( read_only image2d_msaa_depth_t source, sampler_t sampler, __global %s *results )\n" "{\n" " int tidX = get_global_id(0);\n" @@ -135,6 +137,7 @@ static const char *kernelpattern_image_multisample_read_2d_depth = "}\n"; static const char *kernelpattern_image_multisample_read_2darray = +"#pragma OPENCL EXTENSION cl_khr_gl_msaa_sharing : enable\n" "__kernel void sample_test( read_only image2d_array_msaa_t source, sampler_t sampler, __global %s4 *results )\n" "{\n" " int tidX = get_global_id(0);\n" @@ -151,6 +154,7 @@ static const char *kernelpattern_image_multisample_read_2darray = "}\n"; static const char *kernelpattern_image_multisample_read_2darray_depth = + "#pragma OPENCL EXTENSION cl_khr_gl_msaa_sharing : enable\n" "__kernel void sample_test( read_only image2d_array_msaa_depth_t source, sampler_t sampler, __global %s *results )\n" "{\n" " int tidX = get_global_id(0);\n" diff --git a/test_conformance/gl/test_images_write_common.cpp b/test_conformance/gl/test_images_write_common.cpp index 7b91f585..1345f46f 100644 --- a/test_conformance/gl/test_images_write_common.cpp +++ b/test_conformance/gl/test_images_write_common.cpp @@ -333,8 +333,8 @@ int test_cl_image_write( cl_context context, cl_command_queue queue, get_explicit_type_name( *outType ), suffix, convert); programPtr = kernelSource; - if( create_single_kernel_helper( context, &program, &kernel, 1, - (const char **)&programPtr, "sample_test" ) ) + if( create_single_kernel_helper_with_build_options( context, &program, &kernel, 1, + (const char **)&programPtr, "sample_test", "-cl-std=CL2.0" ) ) { return -1; } diff --git a/test_conformance/gles/main.cpp b/test_conformance/gles/main.cpp index e7aeb938..0b61702a 100644 --- a/test_conformance/gles/main.cpp +++ b/test_conformance/gles/main.cpp @@ -101,16 +101,14 @@ const char *basefn_names[] = { "images_write_cube", "renderbuffer_read", "renderbuffer_write", - "renderbuffer_getinfo", - "all" + "renderbuffer_getinfo" }; const char *basefn_names32[] = { - "fence_sync", - "all" + "fence_sync" }; -ct_assert((sizeof(basefn_names) / sizeof(basefn_names[0]) - 1) == (sizeof(basefn_list) / sizeof(basefn_list[0]))); +ct_assert((sizeof(basefn_names) / sizeof(basefn_names[0])) == (sizeof(basefn_list) / sizeof(basefn_list[0]))); int num_fns = sizeof(basefn_names) / sizeof(char *); int num_fns32 = sizeof(basefn_names32) / sizeof(char *); @@ -386,17 +384,17 @@ int main(int argc, const char *argv[]) // Intentional falling through cleanup: - // Cleanup EGL - glEnv->terminate_egl_display(); - // Always make sure that OpenCL context is released properly when the test exit if(sCurrentContext) { clReleaseContext( sCurrentContext ); sCurrentContext = NULL; } + + // Cleanup EGL + glEnv->terminate_egl_display(); + delete glEnv; - return error; -} \ No newline at end of file +} diff --git a/test_conformance/half/Test_roundTrip.c b/test_conformance/half/Test_roundTrip.c index 18eb5f9f..0d257b60 100644 --- a/test_conformance/half/Test_roundTrip.c +++ b/test_conformance/half/Test_roundTrip.c @@ -162,7 +162,7 @@ int Test_roundTrip( void ) // Figure out how many elements are in a work block size_t elementSize = MAX( sizeof(cl_half), sizeof(cl_float)); - size_t blockCount = (size_t)getBufferSize(gDevice) / elementSize; //elementSize is a power of two + size_t blockCount = (size_t)gBufferSize / elementSize; //elementSize is a power of two uint64_t lastCase = 1ULL << (8*sizeof(cl_half)); // number of cl_half size_t stride = blockCount; diff --git a/test_conformance/half/Test_vLoadHalf.c b/test_conformance/half/Test_vLoadHalf.c index 3ca8a203..d067fcdc 100644 --- a/test_conformance/half/Test_vLoadHalf.c +++ b/test_conformance/half/Test_vLoadHalf.c @@ -453,7 +453,7 @@ int Test_vLoadHalf_private( bool aligned ) // Figure out how many elements are in a work block size_t elementSize = MAX( sizeof(cl_half), sizeof(cl_float)); - size_t blockCount = getBufferSize(gDevice) / elementSize; // elementSize is power of 2 + size_t blockCount = gBufferSize / elementSize; // elementSize is power of 2 uint64_t lastCase = 1ULL << (8*sizeof(cl_half)); // number of things of size cl_half // we handle 64-bit types a bit differently. @@ -503,7 +503,7 @@ int Test_vLoadHalf_private( bool aligned ) continue; } */ - memset_pattern4( gOut_single, &pattern, getBufferSize(gDevice)); + memset_pattern4( gOut_single, &pattern, gBufferSize); if( (error = clEnqueueWriteBuffer(gQueue, gOutBuffer_single, CL_TRUE, 0, count * sizeof( float ), gOut_single, 0, NULL, NULL)) ) { vlog_error( "Failure in clWriteArray\n" ); diff --git a/test_conformance/half/Test_vStoreHalf.c b/test_conformance/half/Test_vStoreHalf.c index a3117bcb..4b9193d4 100644 --- a/test_conformance/half/Test_vStoreHalf.c +++ b/test_conformance/half/Test_vStoreHalf.c @@ -1044,7 +1044,7 @@ int Test_vStoreHalf_private( f2h referenceFunc, d2h doubleReferenceFunc, const c size_t stride = blockCount; if (gWimpyMode) - stride = 0x10000000U; + stride = (uint64_t)blockCount * (uint64_t)gWimpyReductionFactor; // we handle 64-bit types a bit differently. if( lastCase == 0 ) @@ -1654,7 +1654,7 @@ int Test_vStoreaHalf_private( f2h referenceFunc, d2h doubleReferenceFunc, const size_t stride = blockCount; if (gWimpyMode) - stride = 0x10000000U; + stride = (uint64_t)blockCount * (uint64_t)gWimpyReductionFactor; // we handle 64-bit types a bit differently. if( lastCase == 0 ) diff --git a/test_conformance/half/cl_utils.c b/test_conformance/half/cl_utils.c index 939cddf3..74408678 100644 --- a/test_conformance/half/cl_utils.c +++ b/test_conformance/half/cl_utils.c @@ -61,9 +61,11 @@ size_t gWorkGroupSize = 0; int gTestCount = 0; int gFailCount = 0; bool gWimpyMode = false; +int gWimpyReductionFactor = 512; int gTestDouble = 0; uint32_t gDeviceIndex = 0; int gIsEmbedded = 0; +size_t gBufferSize = 0; #if defined( __APPLE__ ) int gReportTimes = 1; @@ -184,17 +186,19 @@ int InitCL( void ) #if defined( __APPLE__ ) // FIXME: use clProtectedArray #endif + gBufferSize = getBufferSize(gDevice); + //Allocate buffers - gIn_half = malloc( getBufferSize(gDevice)/2 ); + gIn_half = malloc( gBufferSize/2 ); gOut_half = malloc( BUFFER_SIZE/2 ); gOut_half_reference = malloc( BUFFER_SIZE/2 ); gOut_half_reference_double = malloc( BUFFER_SIZE/2 ); gIn_single = malloc( BUFFER_SIZE ); - gOut_single = malloc( getBufferSize(gDevice) ); - gOut_single_reference = malloc( getBufferSize(gDevice) ); + gOut_single = malloc( gBufferSize ); + gOut_single_reference = malloc( gBufferSize ); gIn_double = malloc( 2*BUFFER_SIZE ); - // gOut_double = malloc( (2*getBufferSize(gDevice)) ); - // gOut_double_reference = malloc( (2*getBufferSize(gDevice)) ); + // gOut_double = malloc( (2*gBufferSize) ); + // gOut_double_reference = malloc( (2*gBufferSize) ); if ( NULL == gIn_half || NULL == gOut_half || @@ -207,7 +211,7 @@ int InitCL( void ) ) return -3; - gInBuffer_half = clCreateBuffer(gContext, CL_MEM_READ_ONLY, getBufferSize(gDevice) / 2, NULL, &error); + gInBuffer_half = clCreateBuffer(gContext, CL_MEM_READ_ONLY, gBufferSize / 2, NULL, &error); if( gInBuffer_half == NULL ) { vlog_error( "clCreateArray failed for input (%d)\n", error ); @@ -235,7 +239,7 @@ int InitCL( void ) return -5; } - gOutBuffer_single = clCreateBuffer(gContext, CL_MEM_WRITE_ONLY, getBufferSize(gDevice), NULL, &error ); + gOutBuffer_single = clCreateBuffer(gContext, CL_MEM_WRITE_ONLY, gBufferSize, NULL, &error ); if( gOutBuffer_single == NULL ) { vlog_error( "clCreateArray failed for output (%d)\n", error ); @@ -243,7 +247,7 @@ int InitCL( void ) } #if 0 - gOutBuffer_double = clCreateBuffer(gContext, CL_MEM_WRITE_ONLY, (size_t)(2*getBufferSize(gDevice)), NULL, &error ); + gOutBuffer_double = clCreateBuffer(gContext, CL_MEM_WRITE_ONLY, (size_t)(2*gBufferSize), NULL, &error ); if( gOutBuffer_double == NULL ) { vlog_error( "clCreateArray failed for output (%d)\n", error ); @@ -317,6 +321,15 @@ void ReleaseCL(void) // clReleaseMemObject(gOutBuffer_double); clReleaseCommandQueue(gQueue); clReleaseContext(gContext); + + free(gIn_half); + free(gOut_half); + free(gOut_half_reference); + free(gOut_half_reference_double); + free(gIn_single); + free(gOut_single); + free(gOut_single_reference); + free(gIn_double); } cl_uint numVecs(cl_uint count, int vectorSizeIdx, bool aligned) { @@ -453,19 +466,30 @@ size_t getBufferSize(cl_device_id device_id) if(s_initialized == 0 || s_device_id != device_id) { - cl_ulong result; + cl_ulong result, maxGlobalSize; cl_int err = clGetDeviceInfo (device_id, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE, sizeof(result), (void *)&result, NULL); if(err) { - vlog_error("clGetDeviceInfo() failed\n"); + vlog_error("clGetDeviceInfo(CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE) failed\n"); s_result = 64*1024; goto exit; } - result = result / 2; log_info("Const buffer size is %llx (%llu)\n", result, result); + err = clGetDeviceInfo (device_id, + CL_DEVICE_GLOBAL_MEM_SIZE, + sizeof(maxGlobalSize), (void *)&maxGlobalSize, + NULL); + if(err) + { + vlog_error("clGetDeviceInfo(CL_DEVICE_GLOBAL_MEM_SIZE) failed\n"); + goto exit; + } + result = result / 2; + if(maxGlobalSize < result * 10) + result = result / 10; s_initialized = 1; s_device_id = device_id; s_result = result; diff --git a/test_conformance/half/cl_utils.h b/test_conformance/half/cl_utils.h index 9a720efd..cba58072 100644 --- a/test_conformance/half/cl_utils.h +++ b/test_conformance/half/cl_utils.h @@ -73,11 +73,13 @@ extern int gFailCount; extern int gTestDouble; extern int gReportTimes; extern int gIsEmbedded; +extern size_t gBufferSize; // gWimpyMode indicates if we run the test in wimpy mode where we limit the // size of 32 bit ranges to a much smaller set. This is meant to be used // as a smoke test extern bool gWimpyMode; +extern int gWimpyReductionFactor; uint64_t ReadTime( void ); double SubtractTime( uint64_t endTime, uint64_t startTime ); diff --git a/test_conformance/half/main.c b/test_conformance/half/main.c index fe3b6f17..af40eb26 100644 --- a/test_conformance/half/main.c +++ b/test_conformance/half/main.c @@ -236,7 +236,9 @@ static int ParseArgs( int argc, const char **argv ) case 'w': // Wimpy mode gWimpyMode = true; break; - + case '[': + parseWimpyReductionFactor( arg, gWimpyReductionFactor); + break; default: vlog_error( " <-- unknown flag: %c (0x%2.2x)\n)", *arg, *arg ); PrintUsage(); @@ -278,6 +280,7 @@ static int ParseArgs( int argc, const char **argv ) vlog( "*** WARNING: Testing in Wimpy mode! ***\n" ); vlog( "*** Wimpy mode is not sufficient to verify correctness. ***\n" ); vlog( "*** It gives warm fuzzy feelings and then nevers calls. ***\n\n" ); + vlog( "*** Wimpy Reduction Factor: %-27u ***\n\n", gWimpyReductionFactor); } return 0; } @@ -288,6 +291,7 @@ static void PrintUsage( void ) vlog( "\t\t-d\tToggle double precision testing (default: on if double supported)\n" ); vlog( "\t\t-t\tToggle reporting performance data.\n" ); vlog( "\t\t-w\tRun in wimpy mode\n" ); + vlog( "\t\t-[2^n]\tSet wimpy reduction factor, recommended range of n is 1-12, default factor(%u)\n", gWimpyReductionFactor); vlog( "\t\t-h\tHelp\n" ); vlog( "\n" ); } @@ -307,6 +311,8 @@ static void PrintArch( void ) vlog( "ARCH:\tx86_64\n" ); #elif defined( __arm__ ) vlog( "ARCH:\tarm\n" ); +#elif defined( __aarch64__ ) + vlog( "\tARCH:\taarch64\n" ); #else #error unknown arch #endif diff --git a/test_conformance/headers/CMakeLists.txt b/test_conformance/headers/CMakeLists.txt index eff8e286..4e7a1d86 100644 --- a/test_conformance/headers/CMakeLists.txt +++ b/test_conformance/headers/CMakeLists.txt @@ -19,6 +19,8 @@ set(CL_H_SOURCES test_cl.h.c ) +set_source_files_properties(${CL_H_SOURCES} PROPERTIES LANGUAGE CXX) + set(CL_H_OUT ${CONFORMANCE_PREFIX}cl_h${CONFORMANCE_SUFFIX}) add_executable( @@ -36,6 +38,8 @@ set(CL_PLATFORM_H_SOURCES test_cl_platform.h.c ) +set_source_files_properties(${CL_PLATFORM_H_SOURCES} PROPERTIES LANGUAGE CXX) + set(CL_PLATFORM_H_OUT ${CONFORMANCE_PREFIX}cl_platform_h${CONFORMANCE_SUFFIX}) add_executable( @@ -53,6 +57,8 @@ set(CL_GL_H_SOURCES test_cl_gl.h.c ) +set_source_files_properties(${CL_GL_H_SOURCES} PROPERTIES LANGUAGE CXX) + set(CL_GL_H_OUT ${CONFORMANCE_PREFIX}cl_gl_h${CONFORMANCE_SUFFIX}) add_executable( @@ -70,6 +76,8 @@ set(OPENCL_H_SOURCES test_opencl.h.c ) +set_source_files_properties(${OPENCL_H_SOURCES} PROPERTIES LANGUAGE CXX) + set(OPENCL_H_OUT ${CONFORMANCE_PREFIX}opencl_h${CONFORMANCE_SUFFIX}) add_executable( @@ -83,5 +91,4 @@ TARGET_LINK_LIBRARIES(${OPENCL_H_OUT} ${CLConform_LIBRARIES}) ######################################################################################## - # end of file # diff --git a/test_conformance/images/clGetInfo/main.cpp b/test_conformance/images/clGetInfo/main.cpp index d61766f1..3deeed49 100644 --- a/test_conformance/images/clGetInfo/main.cpp +++ b/test_conformance/images/clGetInfo/main.cpp @@ -27,106 +27,123 @@ bool gDebugTrace = false, gTestSmallImages = false, gTestMaxImages = false, gTestRounding = false; int gTypesToTest = 0; +static bool gTest3DImages = true; cl_channel_type gChannelTypeToUse = (cl_channel_type)-1; cl_device_type gDeviceType = CL_DEVICE_TYPE_DEFAULT; cl_command_queue queue; cl_context context; +static cl_device_id device; extern int test_image_set( cl_device_id device, cl_mem_object_type image_type ); +static void printUsage( const char *execName ); #define MAX_ALLOWED_STD_DEVIATION_IN_MB 8.0 -void printUsage( const char *execName ) +int test_1D(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) { - const char *p = strrchr( execName, '/' ); - if( p != NULL ) - execName = p + 1; + return test_image_set( device, CL_MEM_OBJECT_IMAGE1D ); +} +int test_2D(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return test_image_set( device, CL_MEM_OBJECT_IMAGE2D ); +} +int test_3D(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + if( !gTest3DImages ) + { + log_info("3D image is not supported, test not run.\n"); + return 0; + } - log_info( "Usage: %s [debug_trace] [1D|2D|3D|1Darray|2Darray] [small_images|max_images] [randomize]\n", execName ); - log_info( "Where:\n" ); - log_info( "\t1D - Only test 1D images\n" ); - log_info( "\t2D - Only test 2D images\n" ); - log_info( "\t3D - Only test 3D images\n" ); - log_info( "\t1Darray - Only test 1D image arrays\n" ); - log_info( "\t2Darray - Only test 2D image arrays\n" ); - log_info( "\n" ); - log_info( "\tdebug_trace - Enables additional debug info logging (default no debug info)\n" ); - log_info( "\n" ); - log_info( "\tsmall_images - Runs every format through a loop of widths 1-13 and heights 1-9, instead of random sizes (default test random sizes)\n" ); - log_info( "\tmax_images - Runs every format through a set of size combinations with the max values, max values - 1, and max values / 128 (default test random sizes)\n" ); - log_info( "\n" ); - log_info( "\trandomize - Seed random number generator (default do not seed random number generator)\n" ); + return test_image_set( device, CL_MEM_OBJECT_IMAGE3D ); +} +int test_1Darray(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return test_image_set( device, CL_MEM_OBJECT_IMAGE1D_ARRAY ); +} +int test_2Darray(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return test_image_set( device, CL_MEM_OBJECT_IMAGE2D_ARRAY ); } +basefn basefn_list[] = { + test_1D, + test_2D, + test_3D, + test_1Darray, + test_2Darray, +}; + +const char *basefn_names[] = { + "1D", + "2D", + "3D", + "1Darray", + "2Darray", +}; + +ct_assert((sizeof(basefn_names) / sizeof(basefn_names[0])) == (sizeof(basefn_list) / sizeof(basefn_list[0]))); + +int num_fns = sizeof(basefn_names) / sizeof(char *); int main(int argc, const char *argv[]) { cl_platform_id platform; - cl_device_id device; cl_channel_type chanType; - char str[ 128 ]; - bool test3DImages = true; bool randomize = false; - int testMethods = 0; test_start(); checkDeviceTypeOverride( &gDeviceType ); + const char ** argList = (const char **)calloc( argc, sizeof( char*) ); + + if( NULL == argList ) + { + log_error( "Failed to allocate memory for argList array.\n" ); + return 1; + } + + argList[0] = argv[0]; + size_t argCount = 1; + // Parse arguments for( int i = 1; i < argc; i++ ) { - strncpy( str, argv[ i ], sizeof( str ) - 1 ); - - if( strcmp( str, "cpu" ) == 0 || strcmp( str, "CL_DEVICE_TYPE_CPU" ) == 0 ) + if( strcmp( argv[i], "cpu" ) == 0 || strcmp( argv[i], "CL_DEVICE_TYPE_CPU" ) == 0 ) gDeviceType = CL_DEVICE_TYPE_CPU; - else if( strcmp( str, "gpu" ) == 0 || strcmp( str, "CL_DEVICE_TYPE_GPU" ) == 0 ) + else if( strcmp( argv[i], "gpu" ) == 0 || strcmp( argv[i], "CL_DEVICE_TYPE_GPU" ) == 0 ) gDeviceType = CL_DEVICE_TYPE_GPU; - else if( strcmp( str, "accelerator" ) == 0 || strcmp( str, "CL_DEVICE_TYPE_ACCELERATOR" ) == 0 ) + else if( strcmp( argv[i], "accelerator" ) == 0 || strcmp( argv[i], "CL_DEVICE_TYPE_ACCELERATOR" ) == 0 ) gDeviceType = CL_DEVICE_TYPE_ACCELERATOR; - else if( strcmp( str, "CL_DEVICE_TYPE_DEFAULT" ) == 0 ) + else if( strcmp( argv[i], "CL_DEVICE_TYPE_DEFAULT" ) == 0 ) gDeviceType = CL_DEVICE_TYPE_DEFAULT; - else if( strcmp( str, "debug_trace" ) == 0 ) + else if( strcmp( argv[i], "debug_trace" ) == 0 ) gDebugTrace = true; - else if( strcmp( str, "small_images" ) == 0 ) + else if( strcmp( argv[i], "small_images" ) == 0 ) gTestSmallImages = true; - else if( strcmp( str, "max_images" ) == 0 ) + else if( strcmp( argv[i], "max_images" ) == 0 ) gTestMaxImages = true; - else if( strcmp( str, "randomize" ) == 0 ) + else if( strcmp( argv[i], "randomize" ) == 0 ) randomize = true; - else if( strcmp( str, "1D" ) == 0 ) - testMethods |= k1D; - else if( strcmp( str, "2D" ) == 0 ) - testMethods |= k2D; - else if( strcmp( str, "3D" ) == 0 ) - testMethods |= k3D; - else if( strcmp( str, "1Darray" ) == 0 ) - testMethods |= k1DArray; - else if( strcmp( str, "2Darray" ) == 0 ) - testMethods |= k2DArray; - - else if( strcmp( str, "help" ) == 0 || strcmp( str, "?" ) == 0 ) + else if( strcmp( argv[i], "--help" ) == 0 || strcmp( argv[i], "-h" ) == 0 ) { printUsage( argv[ 0 ] ); return -1; } - else if( ( chanType = get_channel_type_from_name( str ) ) != (cl_channel_type)-1 ) + else if( ( chanType = get_channel_type_from_name( argv[i] ) ) != (cl_channel_type)-1 ) gChannelTypeToUse = chanType; - else - { - log_error( "ERROR: Unknown argument %d: %s. Exiting....\n", i, str ); - return -1; + else + { + argList[argCount] = argv[i]; + argCount++; + } } - } - - if ( testMethods == 0 ) - testMethods = k1D | k2D | k3D | k1DArray | k2DArray; - // Seed the random # generators if( randomize ) { @@ -225,7 +242,7 @@ int main(int argc, const char *argv[]) return -1; } - test3DImages = false; + gTest3DImages = false; } } @@ -250,38 +267,47 @@ int main(int argc, const char *argv[]) if( gTestSmallImages ) log_info( "Note: Using small test images\n" ); - // Run the test now - int ret = 0; - if (testMethods & k1D) - ret += test_image_set( device, CL_MEM_OBJECT_IMAGE1D ); - if (testMethods & k2D) - ret += test_image_set( device, CL_MEM_OBJECT_IMAGE2D ); - if (test3DImages && (testMethods & k3D)) - ret += test_image_set( device, CL_MEM_OBJECT_IMAGE3D ); - if (testMethods & k1DArray) - ret += test_image_set( device, CL_MEM_OBJECT_IMAGE1D_ARRAY ); - if (testMethods & k2DArray) - ret += test_image_set( device, CL_MEM_OBJECT_IMAGE2D_ARRAY ); + int ret = parseAndCallCommandLineTests( argCount, argList, NULL, num_fns, basefn_list, basefn_names, true, 0, 0 ); if (gTestFailure == 0) { if (gTestCount > 1) - log_info("PASSED %d of %d tests.\n", gTestCount, gTestCount); + log_info("PASSED %d of %d sub-tests.\n", gTestCount, gTestCount); else - log_info("PASSED test.\n"); + log_info("PASSED sub-test.\n"); } else if (gTestFailure > 0) { if (gTestCount > 1) - log_error("FAILED %d of %d tests.\n", gTestFailure, gTestCount); + log_error("FAILED %d of %d sub-tests.\n", gTestFailure, gTestCount); else - log_error("FAILED test.\n"); + log_error("FAILED sub-test.\n"); } // Clean up clReleaseCommandQueue(queue); clReleaseContext(context); + free(argList); test_finish(); - if (gTestFailure > 0) - return gTestFailure; - return ret; } + +static void printUsage( const char *execName ) +{ + const char *p = strrchr( execName, '/' ); + if( p != NULL ) + execName = p + 1; + + log_info( "Usage: %s [options] [test_names]\n", execName ); + log_info( "Options:\n" ); + log_info( "\tdebug_trace - Enables additional debug info logging (default no debug info)\n" ); + log_info( "\n" ); + log_info( "\tsmall_images - Runs every format through a loop of widths 1-13 and heights 1-9, instead of random sizes (default test random sizes)\n" ); + log_info( "\tmax_images - Runs every format through a set of size combinations with the max values, max values - 1, and max values / 128 (default test random sizes)\n" ); + log_info( "\n" ); + log_info( "\trandomize - Seed random number generator (default do not seed random number generator)\n" ); + log_info( "\n" ); + log_info( "Test names:\n" ); + for( int i = 0; i < num_fns; i++ ) + { + log_info( "\t%s\n", basefn_names[i] ); + } +} diff --git a/test_conformance/images/clReadWriteImage/main.cpp b/test_conformance/images/clReadWriteImage/main.cpp index afee9c4c..cfea18e2 100644 --- a/test_conformance/images/clReadWriteImage/main.cpp +++ b/test_conformance/images/clReadWriteImage/main.cpp @@ -32,108 +32,120 @@ bool gEnablePitch = false; cl_device_type gDeviceType = CL_DEVICE_TYPE_DEFAULT; cl_command_queue queue; cl_context context; +static cl_device_id device; #define MAX_ALLOWED_STD_DEVIATION_IN_MB 8.0 -void printUsage( const char *execName ) -{ - const char *p = strrchr( execName, '/' ); - if( p != NULL ) - execName = p + 1; - - log_info( "Usage: %s [debug_trace] [small_images]\n", execName ); - log_info( "Where:\n" ); - log_info( "\t1D - Only test 1D images\n" ); - log_info( "\t2D - Only test 2D images\n" ); - log_info( "\t3D - Only test 3D images\n" ); - log_info( "\t1Darray - Only test 1D image arrays\n" ); - log_info( "\t2Darray - Only test 2D image arrays\n" ); - log_info( "\n" ); - log_info( "\tdebug_trace - Enables additional debug info logging\n" ); - log_info( "\tsmall_images - Runs every format through a loop of widths 1-13 and heights 1-9, instead of random sizes\n" ); - log_info( "\tmax_images - Runs every format through a set of size combinations with the max values, max values - 1, and max values / 128\n" ); - log_info( "\trounding - Runs every format through a single image filled with every possible value for that image format, to verify rounding works properly\n" ); - log_info( "\tuse_pitches - Enables row and slice pitches\n" ); - log_info( "\tuse_ramp - Instead of random data, uses images filled with ramps (and 0xff on any padding pixels) to ease debugging\n" ); - log_info( "\ttest_mipmaps - Test mipmapped images\n" ); -} - +static void printUsage( const char *execName ); extern int test_image_set( cl_device_id device, cl_mem_object_type image_type ); +int test_1D(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return test_image_set( device, CL_MEM_OBJECT_IMAGE1D ); +} +int test_2D(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return test_image_set( device, CL_MEM_OBJECT_IMAGE2D ); +} +int test_3D(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return test_image_set( device, CL_MEM_OBJECT_IMAGE3D ); +} +int test_1Darray(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return test_image_set( device, CL_MEM_OBJECT_IMAGE1D_ARRAY ); +} +int test_2Darray(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return test_image_set( device, CL_MEM_OBJECT_IMAGE2D_ARRAY ); +} + +basefn basefn_list[] = { + test_1D, + test_2D, + test_3D, + test_1Darray, + test_2Darray, +}; + +const char *basefn_names[] = { + "1D", + "2D", + "3D", + "1Darray", + "2Darray", +}; + +ct_assert((sizeof(basefn_names) / sizeof(basefn_names[0])) == (sizeof(basefn_list) / sizeof(basefn_list[0]))); + +int num_fns = sizeof(basefn_names) / sizeof(char *); + int main(int argc, const char *argv[]) { cl_platform_id platform; - cl_device_id device; cl_channel_type chanType; - char str[ 128 ]; bool randomize = false; - int testMethods = 0; test_start(); checkDeviceTypeOverride( &gDeviceType ); + const char ** argList = (const char **)calloc( argc, sizeof( char*) ); + + if( NULL == argList ) + { + log_error( "Failed to allocate memory for argList array.\n" ); + return 1; + } + + argList[0] = argv[0]; + size_t argCount = 1; + // Parse arguments for( int i = 1; i < argc; i++ ) { - strncpy( str, argv[ i ], sizeof( str ) - 1 ); - - if( strcmp( str, "cpu" ) == 0 || strcmp( str, "CL_DEVICE_TYPE_CPU" ) == 0 ) + if( strcmp( argv[i], "cpu" ) == 0 || strcmp( argv[i], "CL_DEVICE_TYPE_CPU" ) == 0 ) gDeviceType = CL_DEVICE_TYPE_CPU; - else if( strcmp( str, "gpu" ) == 0 || strcmp( str, "CL_DEVICE_TYPE_GPU" ) == 0 ) + else if( strcmp( argv[i], "gpu" ) == 0 || strcmp( argv[i], "CL_DEVICE_TYPE_GPU" ) == 0 ) gDeviceType = CL_DEVICE_TYPE_GPU; - else if( strcmp( str, "accelerator" ) == 0 || strcmp( str, "CL_DEVICE_TYPE_ACCELERATOR" ) == 0 ) + else if( strcmp( argv[i], "accelerator" ) == 0 || strcmp( argv[i], "CL_DEVICE_TYPE_ACCELERATOR" ) == 0 ) gDeviceType = CL_DEVICE_TYPE_ACCELERATOR; - else if( strcmp( str, "CL_DEVICE_TYPE_DEFAULT" ) == 0 ) + else if( strcmp( argv[i], "CL_DEVICE_TYPE_DEFAULT" ) == 0 ) gDeviceType = CL_DEVICE_TYPE_DEFAULT; - else if( strcmp( str, "debug_trace" ) == 0 ) + else if( strcmp( argv[i], "debug_trace" ) == 0 ) gDebugTrace = true; - else if( strcmp( str, "small_images" ) == 0 ) + else if( strcmp( argv[i], "small_images" ) == 0 ) gTestSmallImages = true; - else if( strcmp( str, "max_images" ) == 0 ) + else if( strcmp( argv[i], "max_images" ) == 0 ) gTestMaxImages = true; - else if( strcmp( str, "use_pitches" ) == 0 ) + else if( strcmp( argv[i], "use_pitches" ) == 0 ) gEnablePitch = true; - else if( strcmp( str, "use_ramps" ) == 0 ) + else if( strcmp( argv[i], "use_ramps" ) == 0 ) gUseRamp = true; - else if( strcmp(str, "test_mipmaps") == 0 ) { + else if( strcmp( argv[i], "test_mipmaps") == 0 ) { gTestMipmaps = true; // Don't test pitches with mipmaps right now. gEnablePitch = false; } - else if( strcmp( str, "randomize" ) == 0 ) + else if( strcmp( argv[i], "randomize" ) == 0 ) randomize = true; - else if( strcmp( str, "1D" ) == 0 ) - testMethods |= k1D; - else if( strcmp( str, "2D" ) == 0 ) - testMethods |= k2D; - else if( strcmp( str, "3D" ) == 0 ) - testMethods |= k3D; - else if( strcmp( str, "1Darray" ) == 0 ) - testMethods |= k1DArray; - else if( strcmp( str, "2Darray" ) == 0 ) - testMethods |= k2DArray; - - else if( strcmp( str, "help" ) == 0 || strcmp( str, "?" ) == 0 ) + else if( strcmp( argv[i], "--help" ) == 0 || strcmp( argv[i], "-h" ) == 0 ) { printUsage( argv[ 0 ] ); return -1; } - else if( ( chanType = get_channel_type_from_name( str ) ) != (cl_channel_type)-1 ) + else if( ( chanType = get_channel_type_from_name( argv[i] ) ) != (cl_channel_type)-1 ) gChannelTypeToUse = chanType; - else - { - log_error( "ERROR: Unknown argument %d: %s. Exiting....\n", i, str ); - return -1; + else + { + argList[argCount] = argv[i]; + argCount++; + } } - } - - if (testMethods == 0) - testMethods = k1D | k2D | k3D | k1DArray | k2DArray; // Seed the random # generators if( randomize ) @@ -224,18 +236,7 @@ int main(int argc, const char *argv[]) if( gTestSmallImages ) log_info( "Note: Using small test images\n" ); - // Run the test now - int ret = 0; - if (testMethods & k1D) - ret += test_image_set( device, CL_MEM_OBJECT_IMAGE1D ); - if (testMethods & k2D) - ret += test_image_set( device, CL_MEM_OBJECT_IMAGE2D ); - if (testMethods & k3D) - ret += test_image_set( device, CL_MEM_OBJECT_IMAGE3D ); - if (testMethods & k1DArray) - ret += test_image_set( device, CL_MEM_OBJECT_IMAGE1D_ARRAY ); - if (testMethods & k2DArray) - ret += test_image_set( device, CL_MEM_OBJECT_IMAGE2D_ARRAY ); + int ret = parseAndCallCommandLineTests( argCount, argList, NULL, num_fns, basefn_list, basefn_names, true, 0, 0 ); error = clFinish(queue); if (error) @@ -243,23 +244,44 @@ int main(int argc, const char *argv[]) if (gTestFailure == 0) { if (gTestCount > 1) - log_info("PASSED %d of %d tests.\n", gTestCount, gTestCount); + log_info("PASSED %d of %d sub-tests.\n", gTestCount, gTestCount); else - log_info("PASSED test.\n"); + log_info("PASSED sub-test.\n"); } else if (gTestFailure > 0) { if (gTestCount > 1) - log_error("FAILED %d of %d tests.\n", gTestFailure, gTestCount); + log_error("FAILED %d of %d sub-tests.\n", gTestFailure, gTestCount); else - log_error("FAILED test.\n"); + log_error("FAILED sub-test.\n"); } // Clean up clReleaseCommandQueue(queue); clReleaseContext(context); + free(argList); test_finish(); - if (gTestFailure > 0) - return gTestFailure; - return ret; } + +static void printUsage( const char *execName ) +{ + const char *p = strrchr( execName, '/' ); + if( p != NULL ) + execName = p + 1; + + log_info( "Usage: %s [options] [test_names]\n", execName ); + log_info( "Options:\n" ); + log_info( "\tdebug_trace - Enables additional debug info logging\n" ); + log_info( "\tsmall_images - Runs every format through a loop of widths 1-13 and heights 1-9, instead of random sizes\n" ); + log_info( "\tmax_images - Runs every format through a set of size combinations with the max values, max values - 1, and max values / 128\n" ); + log_info( "\tuse_pitches - Enables row and slice pitches\n" ); + log_info( "\tuse_ramp - Instead of random data, uses images filled with ramps (and 0xff on any padding pixels) to ease debugging\n" ); + log_info( "\ttest_mipmaps - Test mipmapped images\n" ); + log_info( "\trandomize - Uses random seed\n" ); + log_info( "\n" ); + log_info( "Test names:\n" ); + for( int i = 0; i < num_fns; i++ ) + { + log_info( "\t%s\n", basefn_names[i] ); + } +} diff --git a/test_conformance/images/kernel_image_methods/main.cpp b/test_conformance/images/kernel_image_methods/main.cpp index f3dd9c55..f4f464a3 100644 --- a/test_conformance/images/kernel_image_methods/main.cpp +++ b/test_conformance/images/kernel_image_methods/main.cpp @@ -30,41 +30,62 @@ bool gDebugTrace = false, gTestSmallImages = false, gTestMaxImages = int gTypesToTest = 0; cl_channel_type gChannelTypeToUse = (cl_channel_type)-1; cl_device_type gDeviceType = CL_DEVICE_TYPE_DEFAULT; +static cl_device_id device; extern int test_image_set( cl_device_id device, cl_mem_object_type imageType ); +static void printUsage( const char *execName ); + #define MAX_ALLOWED_STD_DEVIATION_IN_MB 8.0 clCommandQueueWrapper queue; clContextWrapper context; -void printUsage( const char *execName ) +int test_1D(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) { - const char *p = strrchr( execName, '/' ); - if( p != NULL ) - execName = p + 1; - - log_info( "Usage: %s [debug_trace] [small_images]\n", execName ); - log_info( "Where:\n" ); - log_info( "\t1D - Only test 1D images\n" ); - log_info( "\t2D - Only test 2D images\n" ); - log_info( "\t3D - Only test 3D images\n" ); - log_info( "\t1Darray - Only test 1D image arrays\n" ); - log_info( "\t2Darray - Only test 2D image arrays\n" ); - log_info( "\n" ); - log_info( "\tdebug_trace - Enables additional debug info logging\n" ); - log_info( "\tsmall_images - Runs every format through a loop of widths 1-13 and heights 1-9, instead of random sizes\n" ); - log_info( "\tmax_images - Runs every format through a set of size combinations with the max values, max values - 1, and max values / 128\n" ); + return test_image_set( device, CL_MEM_OBJECT_IMAGE1D ); +} +int test_2D(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return test_image_set( device, CL_MEM_OBJECT_IMAGE2D ); +} +int test_3D(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return test_image_set( device, CL_MEM_OBJECT_IMAGE3D ); +} +int test_1Darray(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return test_image_set( device, CL_MEM_OBJECT_IMAGE1D_ARRAY ); +} +int test_2Darray(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return test_image_set( device, CL_MEM_OBJECT_IMAGE2D_ARRAY ); } +basefn basefn_list[] = { + test_1D, + test_2D, + test_3D, + test_1Darray, + test_2Darray, +}; + +const char *basefn_names[] = { + "1D", + "2D", + "3D", + "1Darray", + "2Darray", +}; + +ct_assert((sizeof(basefn_names) / sizeof(basefn_names[0])) == (sizeof(basefn_list) / sizeof(basefn_list[0]))); + +int num_fns = sizeof(basefn_names) / sizeof(char *); int main(int argc, const char *argv[]) { cl_platform_id platform; - cl_device_id device; cl_channel_type chanType; - char str[ 128 ]; - int testMethods = 0; bool randomize = false; test_start(); @@ -78,58 +99,53 @@ int main(int argc, const char *argv[]) checkDeviceTypeOverride( &gDeviceType ); + const char ** argList = (const char **)calloc( argc, sizeof( char*) ); + + if( NULL == argList ) + { + log_error( "Failed to allocate memory for argList array.\n" ); + return 1; + } + + argList[0] = argv[0]; + size_t argCount = 1; + // Parse arguments for( int i = 1; i < argc; i++ ) { - strncpy( str, argv[ i ], sizeof( str ) - 1 ); - - if( strcmp( str, "cpu" ) == 0 || strcmp( str, "CL_DEVICE_TYPE_CPU" ) == 0 ) + if( strcmp( argv[i], "cpu" ) == 0 || strcmp( argv[i], "CL_DEVICE_TYPE_CPU" ) == 0 ) gDeviceType = CL_DEVICE_TYPE_CPU; - else if( strcmp( str, "gpu" ) == 0 || strcmp( str, "CL_DEVICE_TYPE_GPU" ) == 0 ) + else if( strcmp( argv[i], "gpu" ) == 0 || strcmp( argv[i], "CL_DEVICE_TYPE_GPU" ) == 0 ) gDeviceType = CL_DEVICE_TYPE_GPU; - else if( strcmp( str, "accelerator" ) == 0 || strcmp( str, "CL_DEVICE_TYPE_ACCELERATOR" ) == 0 ) + else if( strcmp( argv[i], "accelerator" ) == 0 || strcmp( argv[i], "CL_DEVICE_TYPE_ACCELERATOR" ) == 0 ) gDeviceType = CL_DEVICE_TYPE_ACCELERATOR; - else if( strcmp( str, "CL_DEVICE_TYPE_DEFAULT" ) == 0 ) + else if( strcmp( argv[i], "CL_DEVICE_TYPE_DEFAULT" ) == 0 ) gDeviceType = CL_DEVICE_TYPE_DEFAULT; - else if( strcmp( str, "debug_trace" ) == 0 ) + else if( strcmp( argv[i], "debug_trace" ) == 0 ) gDebugTrace = true; - else if( strcmp( str, "small_images" ) == 0 ) + else if( strcmp( argv[i], "small_images" ) == 0 ) gTestSmallImages = true; - else if( strcmp( str, "max_images" ) == 0 ) + else if( strcmp( argv[i], "max_images" ) == 0 ) gTestMaxImages = true; - else if( strcmp( str, "randomize" ) == 0 ) + else if( strcmp( argv[i], "randomize" ) == 0 ) randomize = true; - else if ( strcmp( str, "1D" ) == 0 ) - testMethods |= k1D; - else if( strcmp( str, "2D" ) == 0 ) - testMethods |= k2D; - else if( strcmp( str, "3D" ) == 0 ) - testMethods |= k3D; - else if( strcmp( str, "1Darray" ) == 0 ) - testMethods |= k1DArray; - else if( strcmp( str, "2Darray" ) == 0 ) - testMethods |= k2DArray; - - else if( strcmp( str, "help" ) == 0 || strcmp( str, "?" ) == 0 ) + else if( strcmp( argv[i], "--help" ) == 0 || strcmp( argv[i], "-h" ) == 0 ) { printUsage( argv[ 0 ] ); return -1; } - else if( ( chanType = get_channel_type_from_name( str ) ) != (cl_channel_type)-1 ) + else if( ( chanType = get_channel_type_from_name( argv[i] ) ) != (cl_channel_type)-1 ) gChannelTypeToUse = chanType; - else - { - log_error( "ERROR: Unknown argument %d: %s. Exiting....\n", i, str ); - return -1; + else + { + argList[argCount] = argv[i]; + argCount++; + } } - } - - if (testMethods == 0) - testMethods = k1D | k2D | k3D | k1DArray | k2DArray; // Seed the random # generators if( randomize ) @@ -223,18 +239,7 @@ int main(int argc, const char *argv[]) if( gTestSmallImages ) log_info( "Note: Using small test images\n" ); - // Run the test now - int ret = 0; - if (testMethods & k1D) - ret += test_image_set( device, CL_MEM_OBJECT_IMAGE1D ); - if (testMethods & k2D) - ret += test_image_set( device, CL_MEM_OBJECT_IMAGE2D ); - if (testMethods & k3D) - ret += test_image_set( device, CL_MEM_OBJECT_IMAGE3D ); - if (testMethods & k1DArray) - ret += test_image_set( device, CL_MEM_OBJECT_IMAGE1D_ARRAY ); - if (testMethods & k2DArray) - ret += test_image_set( device, CL_MEM_OBJECT_IMAGE2D_ARRAY ); + int ret = parseAndCallCommandLineTests( argCount, argList, NULL, num_fns, basefn_list, basefn_names, true, 0, 0 ); // Clean up error = clFinish(queue); @@ -243,20 +248,38 @@ int main(int argc, const char *argv[]) if (gTestFailure == 0) { if (gTestCount > 1) - log_info("PASSED %d of %d tests.\n", gTestCount, gTestCount); + log_info("PASSED %d of %d sub-tests.\n", gTestCount, gTestCount); else - log_info("PASSED test.\n"); + log_info("PASSED sub-test.\n"); } else if (gTestFailure > 0) { if (gTestCount > 1) - log_error("FAILED %d of %d tests.\n", gTestFailure, gTestCount); + log_error("FAILED %d of %d sub-tests.\n", gTestFailure, gTestCount); else - log_error("FAILED test.\n"); + log_error("FAILED sub-test.\n"); } + free(argList); test_finish(); - if (gTestFailure > 0) - return gTestFailure; - return ret; } + +static void printUsage( const char *execName ) +{ + const char *p = strrchr( execName, '/' ); + if( p != NULL ) + execName = p + 1; + + log_info( "Usage: %s [options] [test_names]\n", execName ); + log_info( "Options:\n" ); + log_info( "\tdebug_trace - Enables additional debug info logging\n" ); + log_info( "\tsmall_images - Runs every format through a loop of widths 1-13 and heights 1-9, instead of random sizes\n" ); + log_info( "\tmax_images - Runs every format through a set of size combinations with the max values, max values - 1, and max values / 128\n" ); + log_info( "\trandomize - Uses random seed\n" ); + log_info( "\n" ); + log_info( "Test names:\n" ); + for( int i = 0; i < num_fns; i++ ) + { + log_info( "\t%s\n", basefn_names[i] ); + } +} diff --git a/test_conformance/images/samplerlessReads/main.cpp b/test_conformance/images/samplerlessReads/main.cpp index cb95dc92..c0ec3e62 100644 --- a/test_conformance/images/samplerlessReads/main.cpp +++ b/test_conformance/images/samplerlessReads/main.cpp @@ -45,51 +45,61 @@ cl_device_type gDeviceType = CL_DEVICE_TYPE_DEFAULT; cl_command_queue queue; cl_context context; +static cl_device_id device; #define MAX_ALLOWED_STD_DEVIATION_IN_MB 8.0 -void printUsage( const char *execName ) -{ - const char *p = strrchr( execName, '/' ); - if ( p != NULL ) - execName = p + 1; - - log_info( "Usage: %s [options]\n", execName ); - log_info( "Where:\n" ); - log_info( "\n" ); - log_info( "\tThe following flags specify the types to test. They can be combined; if none are specified, all are tested:\n" ); - log_info( "\t\tint - Test integer I/O (read_imagei)\n" ); - log_info( "\t\tuint - Test unsigned integer I/O (read_imageui)\n" ); - log_info( "\t\tfloat - Test float I/O (read_imagef)\n" ); - log_info( "\n" ); - log_info( "You may also use appropriate CL_ channel type and ordering constants.\n" ); - log_info( "\n" ); - log_info( "\t1D - Only test 1D images\n" ); - log_info( "\t2D - Only test 2D images\n" ); - log_info( "\t3D - Only test 3D images\n" ); - log_info( "\t1Darray - Only test 1D image arrays\n" ); - log_info( "\t2Darray - Only test 2D image arrays\n" ); - log_info( "\n" ); - log_info( "\tThe following modify the types of images tested:\n" ); - log_info( "\t\read_write - Runs the tests with read_write images which allow a kernel do both read and write to the same image \n" ); - log_info( "\t\tsmall_images - Runs every format through a loop of widths 1-13 and heights 1-9, instead of random sizes\n" ); - log_info( "\t\tmax_images - Runs every format through a set of size combinations with the max values, max values - 1, and max values / 128\n" ); - log_info( "\n" ); - log_info( "\tdebug_trace - Enables additional debug info logging\n" ); - log_info( "\tuse_pitches - Enables row and slice pitches\n" ); -} - +static void printUsage( const char *execName ); extern int test_image_set( cl_device_id device, cl_mem_object_type imageType ); +int test_1D(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return test_image_set( device, CL_MEM_OBJECT_IMAGE1D ) + + test_image_set( device, CL_MEM_OBJECT_IMAGE1D_BUFFER ); +} +int test_2D(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return test_image_set( device, CL_MEM_OBJECT_IMAGE2D ); +} +int test_3D(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return test_image_set( device, CL_MEM_OBJECT_IMAGE3D ); +} +int test_1Darray(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return test_image_set( device, CL_MEM_OBJECT_IMAGE1D_ARRAY ); +} +int test_2Darray(cl_device_id deviceID, cl_context context, cl_command_queue queue, int num_elements) +{ + return test_image_set( device, CL_MEM_OBJECT_IMAGE2D_ARRAY ); +} + +basefn basefn_list[] = { + test_1D, + test_2D, + test_3D, + test_1Darray, + test_2Darray, +}; + +const char *basefn_names[] = { + "1D", + "2D", + "3D", + "1Darray", + "2Darray", +}; + +ct_assert((sizeof(basefn_names) / sizeof(basefn_names[0])) == (sizeof(basefn_list) / sizeof(basefn_list[0]))); + +int num_fns = sizeof(basefn_names) / sizeof(char *); + int main(int argc, const char *argv[]) { cl_platform_id platform; - cl_device_id device; cl_channel_type chanType; cl_channel_order chanOrder; - char str[ 128 ]; - int testMethods = 0; bool randomize = false; test_start(); @@ -104,72 +114,68 @@ int main(int argc, const char *argv[]) //Check CL_DEVICE_TYPE environment variable checkDeviceTypeOverride( &gDeviceType ); + const char ** argList = (const char **)calloc( argc, sizeof( char*) ); + + if( NULL == argList ) + { + log_error( "Failed to allocate memory for argList array.\n" ); + return 1; + } + + argList[0] = argv[0]; + size_t argCount = 1; + // Parse arguments for ( int i = 1; i < argc; i++ ) { - strncpy( str, argv[ i ], sizeof( str ) - 1 ); - - if ( strcmp( str, "cpu" ) == 0 || strcmp( str, "CL_DEVICE_TYPE_CPU" ) == 0 ) + if ( strcmp( argv[i], "cpu" ) == 0 || strcmp( argv[i], "CL_DEVICE_TYPE_CPU" ) == 0 ) gDeviceType = CL_DEVICE_TYPE_CPU; - else if ( strcmp( str, "gpu" ) == 0 || strcmp( str, "CL_DEVICE_TYPE_GPU" ) == 0 ) + else if ( strcmp( argv[i], "gpu" ) == 0 || strcmp( argv[i], "CL_DEVICE_TYPE_GPU" ) == 0 ) gDeviceType = CL_DEVICE_TYPE_GPU; - else if ( strcmp( str, "accelerator" ) == 0 || strcmp( str, "CL_DEVICE_TYPE_ACCELERATOR" ) == 0 ) + else if ( strcmp( argv[i], "accelerator" ) == 0 || strcmp( argv[i], "CL_DEVICE_TYPE_ACCELERATOR" ) == 0 ) gDeviceType = CL_DEVICE_TYPE_ACCELERATOR; - else if ( strcmp( str, "CL_DEVICE_TYPE_DEFAULT" ) == 0 ) + else if ( strcmp( argv[i], "CL_DEVICE_TYPE_DEFAULT" ) == 0 ) gDeviceType = CL_DEVICE_TYPE_DEFAULT; - else if ( strcmp( str, "debug_trace" ) == 0 ) + else if ( strcmp( argv[i], "debug_trace" ) == 0 ) gDebugTrace = true; - else if ( strcmp( str, "read_write" ) == 0 ) + else if ( strcmp( argv[i], "read_write" ) == 0 ) gTestReadWrite = true; - else if ( strcmp( str, "small_images" ) == 0 ) + else if ( strcmp( argv[i], "small_images" ) == 0 ) gTestSmallImages = true; - else if ( strcmp( str, "max_images" ) == 0 ) + else if ( strcmp( argv[i], "max_images" ) == 0 ) gTestMaxImages = true; - else if ( strcmp( str, "use_pitches" ) == 0 ) + else if ( strcmp( argv[i], "use_pitches" ) == 0 ) gEnablePitch = true; - else if ( strcmp( str, "int" ) == 0 ) + else if ( strcmp( argv[i], "int" ) == 0 ) gTypesToTest |= kTestInt; - else if ( strcmp( str, "uint" ) == 0 ) + else if ( strcmp( argv[i], "uint" ) == 0 ) gTypesToTest |= kTestUInt; - else if ( strcmp( str, "float" ) == 0 ) + else if ( strcmp( argv[i], "float" ) == 0 ) gTypesToTest |= kTestFloat; - else if ( strcmp( str, "randomize" ) == 0 ) + else if ( strcmp( argv[i], "randomize" ) == 0 ) randomize = true; - else if ( strcmp( str, "1D" ) == 0 ) - testMethods |= k1D; - else if( strcmp( str, "2D" ) == 0 ) - testMethods |= k2D; - else if( strcmp( str, "3D" ) == 0 ) - testMethods |= k3D; - else if( strcmp( str, "1Darray" ) == 0 ) - testMethods |= k1DArray; - else if( strcmp( str, "2Darray" ) == 0 ) - testMethods |= k2DArray; - - else if ( strcmp( str, "help" ) == 0 || strcmp( str, "?" ) == 0 ) + else if ( strcmp( argv[i], "--help" ) == 0 || strcmp( argv[i], "-h" ) == 0 ) { printUsage( argv[ 0 ] ); return -1; } - else if ( ( chanType = get_channel_type_from_name( str ) ) != (cl_channel_type)-1 ) + else if ( ( chanType = get_channel_type_from_name( argv[i] ) ) != (cl_channel_type)-1 ) gChannelTypeToUse = chanType; - else if ( ( chanOrder = get_channel_order_from_name( str ) ) != (cl_channel_order)-1 ) + else if ( ( chanOrder = get_channel_order_from_name( argv[i] ) ) != (cl_channel_order)-1 ) gChannelOrderToUse = chanOrder; else { - log_error( "ERROR: Unknown argument %d: %s. Exiting....\n", i, str ); - return -1; + argList[argCount] = argv[i]; + argCount++; } } - if (testMethods == 0) - testMethods = k1D | k2D | k3D | k1DArray | k2DArray; if ( gTypesToTest == 0 ) gTypesToTest = kTestAllTypes; @@ -255,20 +261,7 @@ int main(int argc, const char *argv[]) FPU_mode_type oldMode; DisableFTZ(&oldMode); - // Run the test now - int ret = 0; - if (testMethods & k1D) { - ret += test_image_set( device, CL_MEM_OBJECT_IMAGE1D ); - ret += test_image_set( device, CL_MEM_OBJECT_IMAGE1D_BUFFER ); - } - if (testMethods & k2D) - ret += test_image_set( device, CL_MEM_OBJECT_IMAGE2D ); - if (testMethods & k3D) - ret += test_image_set( device, CL_MEM_OBJECT_IMAGE3D ); - if (testMethods & k1DArray) - ret += test_image_set( device, CL_MEM_OBJECT_IMAGE1D_ARRAY ); - if (testMethods & k2DArray) - ret += test_image_set( device, CL_MEM_OBJECT_IMAGE2D_ARRAY ); + int ret = parseAndCallCommandLineTests( argCount, argList, NULL, num_fns, basefn_list, basefn_names, true, 0, 0 ); // Restore FP state before leaving RestoreFPState(&oldMode); @@ -282,22 +275,51 @@ int main(int argc, const char *argv[]) if (gTestFailure == 0) { if (gTestCount > 1) - log_info("PASSED %d of %d tests.\n", gTestCount, gTestCount); + log_info("PASSED %d of %d sub-tests.\n", gTestCount, gTestCount); else - log_info("PASSED test.\n"); + log_info("PASSED sub-test.\n"); } else if (gTestFailure > 0) { if (gTestCount > 1) - log_error("FAILED %d of %d tests.\n", gTestFailure, gTestCount); + log_error("FAILED %d of %d sub-tests.\n", gTestFailure, gTestCount); else - log_error("FAILED test.\n"); + log_error("FAILED sub-test.\n"); } // Clean up + free(argList); test_finish(); - if (gTestFailure > 0) - return gTestFailure; - return ret; } + +static void printUsage( const char *execName ) +{ + const char *p = strrchr( execName, '/' ); + if ( p != NULL ) + execName = p + 1; + + log_info( "Usage: %s [options] [test_names]\n", execName ); + log_info( "Options:\n" ); + log_info( "\n" ); + log_info( "\tThe following flags specify the types to test. They can be combined; if none are specified, all are tested:\n" ); + log_info( "\t\tint - Test integer I/O (read_imagei)\n" ); + log_info( "\t\tuint - Test unsigned integer I/O (read_imageui)\n" ); + log_info( "\t\tfloat - Test float I/O (read_imagef)\n" ); + log_info( "\n" ); + log_info( "You may also use appropriate CL_ channel type and ordering constants.\n" ); + log_info( "\n" ); + log_info( "\tThe following modify the types of images tested:\n" ); + log_info( "\t\read_write - Runs the tests with read_write images which allow a kernel do both read and write to the same image \n" ); + log_info( "\t\tsmall_images - Runs every format through a loop of widths 1-13 and heights 1-9, instead of random sizes\n" ); + log_info( "\t\tmax_images - Runs every format through a set of size combinations with the max values, max values - 1, and max values / 128\n" ); + log_info( "\n" ); + log_info( "\tdebug_trace - Enables additional debug info logging\n" ); + log_info( "\tuse_pitches - Enables row and slice pitches\n" ); + log_info( "\n" ); + log_info( "Test names:\n" ); + for( int i = 0; i < num_fns; i++ ) + { + log_info( "\t%s\n", basefn_names[i] ); + } +} diff --git a/test_conformance/math_brute_force/binary.c b/test_conformance/math_brute_force/binary.c index 5800aaf5..042076ec 100644 --- a/test_conformance/math_brute_force/binary.c +++ b/test_conformance/math_brute_force/binary.c @@ -233,6 +233,7 @@ typedef struct TestInfo cl_kernel *k[VECTOR_SIZE_COUNT ]; // arrays of thread-specific kernels for each worker thread: k[vector_size][thread_id] ThreadInfo *tinfo; // An array of thread specific information for each worker thread cl_uint threadCount; // Number of worker threads + cl_uint jobCount; // Number of jobs cl_uint step; // step between each chunk and the next. cl_uint scale; // stride between individual test values float ulps; // max_allowed ulps @@ -268,6 +269,16 @@ int TestFunc_Float_Float_Float_common(const Func *f, MTdata d, int isNextafter) test_info.scale = (cl_uint) sizeof(cl_float) * 2 * gWimpyReductionFactor; } test_info.step = (cl_uint) test_info.subBufferSize * test_info.scale; + if (test_info.step / test_info.subBufferSize != test_info.scale) + { + //there was overflow + test_info.jobCount = 1; + } + else + { + test_info.jobCount = (cl_uint)((1ULL << 32) / test_info.step); + } + test_info.f = f; test_info.ulps = gIsEmbedded ? f->float_embedded_ulps : f->float_ulps; test_info.ftz = f->ftz || gForceFTZ || 0 == (CL_FP_DENORM & gFloatCapabilities); @@ -341,7 +352,7 @@ int TestFunc_Float_Float_Float_common(const Func *f, MTdata d, int isNextafter) // Run the kernels if( !gSkipCorrectnessTesting ) { - error = ThreadPool_Do( TestFloat, (cl_uint) ((1ULL<<32) / test_info.step), &test_info ); + error = ThreadPool_Do( TestFloat, test_info.jobCount, &test_info ); // Accumulate the arithmetic errors for( i = 0; i < test_info.threadCount; i++ ) @@ -991,6 +1002,16 @@ int TestFunc_Double_Double_Double_common(const Func *f, MTdata d, int isNextafte test_info.scale = (cl_uint) sizeof(cl_double) * 2 * gWimpyReductionFactor; } test_info.step = (cl_uint) test_info.subBufferSize * test_info.scale; + if (test_info.step / test_info.subBufferSize != test_info.scale) + { + //there was overflow + test_info.jobCount = 1; + } + else + { + test_info.jobCount = (cl_uint)((1ULL << 32) / test_info.step); + } + test_info.f = f; test_info.ulps = f->double_ulps; test_info.ftz = f->ftz || gForceFTZ; @@ -1063,7 +1084,7 @@ int TestFunc_Double_Double_Double_common(const Func *f, MTdata d, int isNextafte if( !gSkipCorrectnessTesting ) { - error = ThreadPool_Do( TestDouble, (cl_uint) ((1ULL<<32) / test_info.step), &test_info ); + error = ThreadPool_Do( TestDouble, test_info.jobCount, &test_info ); // Accumulate the arithmetic errors for( i = 0; i < test_info.threadCount; i++ ) diff --git a/test_conformance/math_brute_force/binaryOperator.c b/test_conformance/math_brute_force/binaryOperator.c index 718afd3d..0368aafc 100644 --- a/test_conformance/math_brute_force/binaryOperator.c +++ b/test_conformance/math_brute_force/binaryOperator.c @@ -207,6 +207,7 @@ typedef struct TestInfo cl_kernel *k[VECTOR_SIZE_COUNT ]; // arrays of thread-specific kernels for each worker thread: k[vector_size][thread_id] ThreadInfo *tinfo; // An array of thread specific information for each worker thread cl_uint threadCount; // Number of worker threads + cl_uint jobCount; // Number of jobs cl_uint step; // step between each chunk and the next. cl_uint scale; // stride between individual test values float ulps; // max_allowed ulps @@ -260,6 +261,16 @@ int TestFunc_Float_Float_Float_Operator(const Func *f, MTdata d) } test_info.step = test_info.subBufferSize * test_info.scale; + if (test_info.step / test_info.subBufferSize != test_info.scale) + { + //there was overflow + test_info.jobCount = 1; + } + else + { + test_info.jobCount = (cl_uint)((1ULL << 32) / test_info.step); + } + test_info.f = f; test_info.ulps = gIsEmbedded ? f->float_embedded_ulps : f->float_ulps; test_info.ftz = f->ftz || gForceFTZ || 0 == (CL_FP_DENORM & gFloatCapabilities); @@ -329,7 +340,7 @@ int TestFunc_Float_Float_Float_Operator(const Func *f, MTdata d) if( !gSkipCorrectnessTesting ) { - error = ThreadPool_Do( TestFloat, (cl_uint) ((1ULL<<32) / test_info.step), &test_info ); + error = ThreadPool_Do( TestFloat, test_info.jobCount, &test_info ); // Accumulate the arithmetic errors for( i = 0; i < test_info.threadCount; i++ ) @@ -501,63 +512,51 @@ static cl_int TestFloat( cl_uint job_id, cl_uint thread_id, void *data ) int totalSpecialValueCount = specialValuesFloatCount * specialValuesFloatCount; int indx = (totalSpecialValueCount - 1) / buffer_elements; - if( job_id <= (cl_uint)indx ) - { // test edge cases - float *fp = (float *)p; - float *fp2 = (float *)p2; + + if( job_id <= (cl_uint)indx ) { + // Insert special values uint32_t x, y; - x = (job_id * buffer_elements) % specialValuesFloatCount; - y = (job_id * buffer_elements) / specialValuesFloatCount; + x = (job_id * buffer_elements) % specialValuesFloatCount; + y = (job_id * buffer_elements) / specialValuesFloatCount; - for( ; j < buffer_elements; j++ ) - { - fp[j] = specialValuesFloat[x]; - fp2[j] = specialValuesFloat[y]; - if( ++x >= specialValuesFloatCount ) - { + for( ; j < buffer_elements; j++ ) { + p[j] = ((cl_uint *)specialValuesFloat)[x]; + p2[j] = ((cl_uint *)specialValuesFloat)[y]; + ++x; + if (x >= specialValuesFloatCount) { x = 0; y++; - if( y >= specialValuesFloatCount ) + if (y >= specialValuesFloatCount) break; } - if(gTestFastRelaxed && strcmp(name,"divide") == 0 ) - { - float fpj = *(float*)&fp[j]; - float fpj2 = *(float*)&fp2[j]; - if(fabs(fpj) > 0x5E800000 ) //[2^-62,2^62] - { - fp[j] = NAN; - } - if( fabs(fpj2) > 0x5E800000 ) //[2^-62,2^62] - { - fp2[j] = NAN; - } + if (gTestFastRelaxed && strcmp(name,"divide") == 0) { + cl_uint pj = p[j] & 0x7fffffff; + cl_uint p2j = p2[j] & 0x7fffffff; + // Replace values outside [2^-62, 2^62] with QNaN + if (pj < 0x20800000 || pj > 0x5e800000) + p[j] = 0x7fc00000; + if (p2j < 0x20800000 || p2j > 0x5e800000) + p2[j] = 0x7fc00000; + } } } - } - //Init any remaining values. + // Init any remaining values. for( ; j < buffer_elements; j++ ) { p[j] = genrand_int32(d); p2[j] = genrand_int32(d); - if(gTestFastRelaxed) - { - if( strcmp(name,"divide")==0){ - float pj = *(float*)&p[j]; - float pj2 = *(float*)&p2[j]; - if(fabs(pj) > 0x5E800000 ) //[2^-62,2^62] - { - p[j] = NAN; - } - if( fabs(pj2) > 0x5E800000 ) //[2^-62,2^62] - { - p2[j] = NAN; - } - } - } + if (gTestFastRelaxed && strcmp(name,"divide") == 0) { + cl_uint pj = p[j] & 0x7fffffff; + cl_uint p2j = p2[j] & 0x7fffffff; + // Replace values outside [2^-62, 2^62] with QNaN + if (pj < 0x20800000 || pj > 0x5e800000) + p[j] = 0x7fc00000; + if (p2j < 0x20800000 || p2j > 0x5e800000) + p2[j] = 0x7fc00000; + } } if( (error = clEnqueueWriteBuffer( tinfo->tQueue, tinfo->inBuf, CL_FALSE, 0, buffer_size, p, 0, NULL, NULL) )) @@ -950,6 +949,16 @@ int TestFunc_Double_Double_Double_Operator(const Func *f, MTdata d) } test_info.step = (cl_uint) test_info.subBufferSize * test_info.scale; + if (test_info.step / test_info.subBufferSize != test_info.scale) + { + //there was overflow + test_info.jobCount = 1; + } + else + { + test_info.jobCount = (cl_uint)((1ULL << 32) / test_info.step); + } + test_info.f = f; test_info.ulps = f->double_ulps; test_info.ftz = f->ftz || gForceFTZ; @@ -1020,7 +1029,7 @@ int TestFunc_Double_Double_Double_Operator(const Func *f, MTdata d) if( !gSkipCorrectnessTesting ) { - error = ThreadPool_Do( TestDouble, (cl_uint) ((1ULL<<32) / test_info.step), &test_info ); + error = ThreadPool_Do( TestDouble, test_info.jobCount, &test_info ); // Accumulate the arithmetic errors for( i = 0; i < test_info.threadCount; i++ ) diff --git a/test_conformance/math_brute_force/binary_i.c b/test_conformance/math_brute_force/binary_i.c index b72d117f..5cea1bc6 100644 --- a/test_conformance/math_brute_force/binary_i.c +++ b/test_conformance/math_brute_force/binary_i.c @@ -230,6 +230,7 @@ typedef struct TestInfo cl_kernel *k[VECTOR_SIZE_COUNT ]; // arrays of thread-specific kernels for each worker thread: k[vector_size][thread_id] ThreadInfo *tinfo; // An array of thread specific information for each worker thread cl_uint threadCount; // Number of worker threads + cl_uint jobCount; // Number of jobs cl_uint step; // step between each chunk and the next. cl_uint scale; // stride between individual test values float ulps; // max_allowed ulps @@ -262,6 +263,16 @@ int TestFunc_Float_Float_Int(const Func *f, MTdata d) test_info.scale = (cl_uint) sizeof(cl_float) * 2 * gWimpyReductionFactor; } test_info.step = (cl_uint) test_info.subBufferSize * test_info.scale; + if (test_info.step / test_info.subBufferSize != test_info.scale) + { + //there was overflow + test_info.jobCount = 1; + } + else + { + test_info.jobCount = (cl_uint)((1ULL << 32) / test_info.step); + } + test_info.f = f; test_info.ulps = gIsEmbedded ? f->float_embedded_ulps : f->float_ulps; test_info.ftz = f->ftz || gForceFTZ || 0 == (CL_FP_DENORM & gFloatCapabilities); @@ -330,7 +341,7 @@ int TestFunc_Float_Float_Int(const Func *f, MTdata d) } // Run the kernels - error = ThreadPool_Do( TestFloat, (cl_uint) ((1ULL<<32) / test_info.step), &test_info ); + error = ThreadPool_Do( TestFloat, test_info.jobCount, &test_info ); // Accumulate the arithmetic errors @@ -758,6 +769,16 @@ int TestFunc_Double_Double_Int(const Func *f, MTdata d) test_info.scale = (cl_uint) sizeof(cl_double) * 2 * gWimpyReductionFactor; } test_info.step = (cl_uint) test_info.subBufferSize * test_info.scale; + if (test_info.step / test_info.subBufferSize != test_info.scale) + { + //there was overflow + test_info.jobCount = 1; + } + else + { + test_info.jobCount = (cl_uint)((1ULL << 32) / test_info.step); + } + test_info.f = f; test_info.ulps = f->double_ulps; test_info.ftz = f->ftz || gForceFTZ; @@ -831,7 +852,7 @@ int TestFunc_Double_Double_Int(const Func *f, MTdata d) // Run the kernels if( !gSkipCorrectnessTesting ) - error = ThreadPool_Do( TestDouble, (cl_uint) ((1ULL<<32) / test_info.step), &test_info ); + error = ThreadPool_Do( TestDouble, test_info.jobCount, &test_info ); // Accumulate the arithmetic errors diff --git a/test_conformance/math_brute_force/macro_binary.c b/test_conformance/math_brute_force/macro_binary.c index e489c598..b65948ee 100644 --- a/test_conformance/math_brute_force/macro_binary.c +++ b/test_conformance/math_brute_force/macro_binary.c @@ -222,6 +222,7 @@ typedef struct TestInfo cl_kernel *k[VECTOR_SIZE_COUNT ]; // arrays of thread-specific kernels for each worker thread: k[vector_size][thread_id] ThreadInfo *tinfo; // An array of thread specific information for each worker thread cl_uint threadCount; // Number of worker threads + cl_uint jobCount; // Number of jobs cl_uint step; // step between each chunk and the next. cl_uint scale; // stride between individual test values int ftz; // non-zero if running in flush to zero mode @@ -249,6 +250,16 @@ int TestMacro_Int_Float_Float(const Func *f, MTdata d) test_info.scale = (cl_uint) sizeof(cl_float) * 2 * gWimpyReductionFactor; } test_info.step = (cl_uint) test_info.subBufferSize * test_info.scale; + if (test_info.step / test_info.subBufferSize != test_info.scale) + { + //there was overflow + test_info.jobCount = 1; + } + else + { + test_info.jobCount = (cl_uint)((1ULL << 32) / test_info.step); + } + test_info.f = f; test_info.ftz = f->ftz || gForceFTZ || 0 == (CL_FP_DENORM & gFloatCapabilities); @@ -319,7 +330,7 @@ int TestMacro_Int_Float_Float(const Func *f, MTdata d) // Run the kernels if( !gSkipCorrectnessTesting ) { - error = ThreadPool_Do( TestFloat, (cl_uint) ((1ULL<<32) / test_info.step), &test_info ); + error = ThreadPool_Do( TestFloat, test_info.jobCount, &test_info ); if( error ) goto exit; @@ -749,6 +760,16 @@ int TestMacro_Int_Double_Double(const Func *f, MTdata d) } test_info.step = (cl_uint) test_info.subBufferSize * test_info.scale; + if (test_info.step / test_info.subBufferSize != test_info.scale) + { + //there was overflow + test_info.jobCount = 1; + } + else + { + test_info.jobCount = (cl_uint)((1ULL << 32) / test_info.step); + } + test_info.f = f; test_info.ftz = f->ftz || gForceFTZ; @@ -820,7 +841,7 @@ int TestMacro_Int_Double_Double(const Func *f, MTdata d) if( !gSkipCorrectnessTesting ) { - error = ThreadPool_Do( TestDouble, (cl_uint) ((1ULL<<32) / test_info.step), &test_info ); + error = ThreadPool_Do( TestDouble, test_info.jobCount, &test_info ); if( error ) goto exit; diff --git a/test_conformance/math_brute_force/macro_unary.c b/test_conformance/math_brute_force/macro_unary.c index 74e1dece..95af882a 100644 --- a/test_conformance/math_brute_force/macro_unary.c +++ b/test_conformance/math_brute_force/macro_unary.c @@ -193,6 +193,7 @@ typedef struct TestInfo cl_kernel *k[VECTOR_SIZE_COUNT ]; // arrays of thread-specific kernels for each worker thread: k[vector_size][thread_id] ThreadInfo *tinfo; // An array of thread specific information for each worker thread cl_uint threadCount; // Number of worker threads + cl_uint jobCount; // Number of jobs cl_uint step; // step between each chunk and the next. cl_uint scale; // stride between individual test values int ftz; // non-zero if running in flush to zero mode @@ -220,6 +221,16 @@ int TestMacro_Int_Float(const Func *f, MTdata d) test_info.scale = (cl_uint) sizeof(cl_float) * 2 * gWimpyReductionFactor; } test_info.step = (cl_uint) test_info.subBufferSize * test_info.scale; + if (test_info.step / test_info.subBufferSize != test_info.scale) + { + //there was overflow + test_info.jobCount = 1; + } + else + { + test_info.jobCount = (cl_uint)((1ULL << 32) / test_info.step); + } + test_info.f = f; test_info.ftz = f->ftz || gForceFTZ || 0 == (CL_FP_DENORM & gFloatCapabilities); // cl_kernels aren't thread safe, so we make one for each vector size for every thread @@ -279,7 +290,7 @@ int TestMacro_Int_Float(const Func *f, MTdata d) if( !gSkipCorrectnessTesting ) { - error = ThreadPool_Do( TestFloat, (cl_uint) ((1ULL<<32) / test_info.step), &test_info ); + error = ThreadPool_Do( TestFloat, test_info.jobCount, &test_info ); if( error ) goto exit; @@ -602,6 +613,16 @@ int TestMacro_Int_Double(const Func *f, MTdata d) } test_info.step = (cl_uint) test_info.subBufferSize * test_info.scale; + if (test_info.step / test_info.subBufferSize != test_info.scale) + { + //there was overflow + test_info.jobCount = 1; + } + else + { + test_info.jobCount = (cl_uint)((1ULL << 32) / test_info.step); + } + test_info.f = f; test_info.ftz = f->ftz || gForceFTZ; @@ -664,7 +685,7 @@ int TestMacro_Int_Double(const Func *f, MTdata d) if( !gSkipCorrectnessTesting ) { - error = ThreadPool_Do( TestDouble, (cl_uint) ((1ULL<<32) / test_info.step), &test_info ); + error = ThreadPool_Do( TestDouble, test_info.jobCount, &test_info ); if( error ) goto exit; diff --git a/test_conformance/math_brute_force/main.c b/test_conformance/math_brute_force/main.c index 147e3af2..fea797cc 100644 --- a/test_conformance/math_brute_force/main.c +++ b/test_conformance/math_brute_force/main.c @@ -499,24 +499,7 @@ static int ParseArgs( int argc, const char **argv ) break; case '[': - // wimpy reduction factor can be set with the option -[2^n] - // Default factor is 32, and n practically can be from 1 to 10 - { - const char *arg_temp = strchr(&arg[1], ']'); - if( arg_temp != 0) - { - int new_factor = atoi(&arg[1]); - arg=arg_temp; // Advance until ']' - if(new_factor && !(new_factor & (new_factor - 1))) - { - vlog( " WimpyReduction factor changed from %d to %d \n",gWimpyReductionFactor, new_factor); - gWimpyReductionFactor = new_factor; - }else - { - vlog( " Error in WimpyReduction factor %d, must be power of 2 \n",gWimpyReductionFactor); - } - } - } + parseWimpyReductionFactor(arg, gWimpyReductionFactor); break; case 'z': @@ -699,6 +682,8 @@ static void PrintArch( void ) vlog( "\tARCH:\tx86_64\n" ); #elif defined( __arm__ ) vlog( "\tARCH:\tarm\n" ); + #elif defined( __aarch64__ ) + vlog( "\tARCH:\taarch64\n" ); #else vlog( "\tARCH:\tunknown\n" ); #endif diff --git a/test_conformance/math_brute_force/reference_math.c b/test_conformance/math_brute_force/reference_math.c index d90f4508..6e8f79aa 100644 --- a/test_conformance/math_brute_force/reference_math.c +++ b/test_conformance/math_brute_force/reference_math.c @@ -1790,7 +1790,7 @@ static const double //two52 = 4.50359962737049600000e+15, /* 0x43300000, 0x00000 // *signgamp = 1; ix = hx&0x7fffffff; if(ix>=0x7ff00000) return x*x; - if((ix|lx)==0) return one/zero; + if((ix|lx)==0) return INFINITY; if(ix<0x3b900000) { /* |x|<2**-70, return -log(|x|) */ if(hx<0) { // *signgamp = -1; @@ -1799,9 +1799,9 @@ static const double //two52 = 4.50359962737049600000e+15, /* 0x43300000, 0x00000 } if(hx<0) { if(ix>=0x43300000) /* |x|>=2**52, must be -integer */ - return one/zero; + return INFINITY; t = reference_sinpi(x); - if(t==zero) return one/zero; /* -integer */ + if(t==zero) return INFINITY; /* -integer */ nadj = reference_log(pi/reference_fabs(t*x)); // if(tfloat_embedded_ulps : f->float_ulps; test_info.ftz = f->ftz || gForceFTZ || 0 == (CL_FP_DENORM & gFloatCapabilities); @@ -309,7 +320,7 @@ int TestFunc_Float_Float(const Func *f, MTdata d) if( !gSkipCorrectnessTesting || skipTestingRelaxed) { - error = ThreadPool_Do( TestFloat, (cl_uint) ((1ULL<<32) / test_info.step), &test_info ); + error = ThreadPool_Do( TestFloat, test_info.jobCount, &test_info ); // Accumulate the arithmetic errors for( i = 0; i < test_info.threadCount; i++ ) @@ -997,7 +1008,16 @@ int TestFunc_Double_Double(const Func *f, MTdata d) test_info.subBufferSize = gWimpyBufferSize / (sizeof( cl_double) * RoundUpToNextPowerOfTwo(test_info.threadCount)); test_info.scale = (cl_uint) sizeof(cl_double) * 2 * gWimpyReductionFactor; } - test_info.step = (cl_uint) test_info.subBufferSize * test_info.scale; + test_info.step = (cl_uint) test_info.subBufferSize * test_info.scale; + if (test_info.step / test_info.subBufferSize != test_info.scale) + { + //there was overflow + test_info.jobCount = 1; + } + else + { + test_info.jobCount = (cl_uint)((1ULL << 32) / test_info.step); + } test_info.f = f; test_info.ulps = f->double_ulps; @@ -1062,7 +1082,7 @@ int TestFunc_Double_Double(const Func *f, MTdata d) if( !gSkipCorrectnessTesting ) { - error = ThreadPool_Do( TestDouble, (cl_uint) ((1ULL<<32) / test_info.step), &test_info ); + error = ThreadPool_Do( TestDouble, test_info.jobCount, &test_info ); // Accumulate the arithmetic errors for( i = 0; i < test_info.threadCount; i++ ) diff --git a/test_conformance/non_uniform_work_group/TestNonUniformWorkGroup.cpp b/test_conformance/non_uniform_work_group/TestNonUniformWorkGroup.cpp index 381d29bc..58478a1e 100644 --- a/test_conformance/non_uniform_work_group/TestNonUniformWorkGroup.cpp +++ b/test_conformance/non_uniform_work_group/TestNonUniformWorkGroup.cpp @@ -605,6 +605,28 @@ void TestNonUniformWorkGroup::showTestInfo () { } } +size_t TestNonUniformWorkGroup::adjustLocalArraySize (size_t localArraySize) { + // In case if localArraySize is too big, sometimes we can not run kernel because of lack + // of resources due to kernel itself requires some local memory to run + int err; + + cl_ulong kernelLocalMemSize = 0; + err = clGetKernelWorkGroupInfo(_testKernel, _device, CL_KERNEL_LOCAL_MEM_SIZE, sizeof(kernelLocalMemSize), &kernelLocalMemSize, NULL); + test_error(err, "clGetKernelWorkGroupInfo failed"); + + cl_ulong deviceLocalMemSize = 0; + err = clGetDeviceInfo(_device, CL_DEVICE_LOCAL_MEM_SIZE, sizeof(deviceLocalMemSize), &deviceLocalMemSize, NULL); + test_error(err, "clGetDeviceInfo failed"); + + if (kernelLocalMemSize + localArraySize > deviceLocalMemSize) { + size_t adjustedLocalArraySize = deviceLocalMemSize - kernelLocalMemSize; + log_info("localArraySize was adjusted from %lu to %lu\n", localArraySize, adjustedLocalArraySize); + localArraySize = adjustedLocalArraySize; + } + + return localArraySize; +} + int TestNonUniformWorkGroup::runKernel () { int err; @@ -622,7 +644,8 @@ int TestNonUniformWorkGroup::runKernel () { test_error(err, "clSetKernelArg failed"); //creating local buffer - err = clSetKernelArg(_testKernel, 1, localArraySize*sizeof(unsigned int), NULL); + localArraySize = adjustLocalArraySize(localArraySize*sizeof(unsigned int)); + err = clSetKernelArg(_testKernel, 1, localArraySize, NULL); test_error(err, "clSetKernelArg failed"); clMemWrapper testGlobalArray = clCreateBuffer(_context, CL_MEM_READ_WRITE, _numOfGlobalWorkItems*sizeof(cl_uint), NULL, &err); diff --git a/test_conformance/non_uniform_work_group/TestNonUniformWorkGroup.h b/test_conformance/non_uniform_work_group/TestNonUniformWorkGroup.h index e7f261b5..a077296d 100644 --- a/test_conformance/non_uniform_work_group/TestNonUniformWorkGroup.h +++ b/test_conformance/non_uniform_work_group/TestNonUniformWorkGroup.h @@ -116,6 +116,7 @@ private: void verifyData (DataContainerAttrib * reference, DataContainerAttrib * results, short regionNumber); void calculateExpectedValues (); void showTestInfo (); + size_t adjustLocalArraySize(size_t localArraySize); }; // Class responsible for running subtest scenarios in test function diff --git a/test_conformance/opencl_conformance_tests_21_full_spirv.csv b/test_conformance/opencl_conformance_tests_21_full_spirv.csv index 214ae89e..8a7a8257 100644 --- a/test_conformance/opencl_conformance_tests_21_full_spirv.csv +++ b/test_conformance/opencl_conformance_tests_21_full_spirv.csv @@ -111,6 +111,7 @@ Workgroups,workgroups/test_workgroups -offlineCompiler spir_v cache . # OpenCL 2.1 tests ##################################### Device timer,device_timer/test_device_timer +SPIRV new,spirv_new/test_spirv_new -ILPath spirv_bin ######################################### # Extensions diff --git a/test_conformance/opencl_conformance_tests_21_legacy_wimpy.csv b/test_conformance/opencl_conformance_tests_21_legacy_wimpy.csv index 3f80eed1..3751aae3 100644 --- a/test_conformance/opencl_conformance_tests_21_legacy_wimpy.csv +++ b/test_conformance/opencl_conformance_tests_21_legacy_wimpy.csv @@ -93,6 +93,12 @@ Pipes,pipes/test_pipes SVM,SVM/test_SVM Workgroups,workgroups/test_workgroups +##################################### +# OpenCL 2.1 tests +##################################### +Device timer,device_timer/test_device_timer +SPIRV new,spirv_new/test_spirv_new -ILPath spirv_bin + ######################################### # Extensions ######################################### diff --git a/test_conformance/opencl_conformance_tests_full.csv b/test_conformance/opencl_conformance_tests_full.csv index 93458cae..e00fac78 100644 --- a/test_conformance/opencl_conformance_tests_full.csv +++ b/test_conformance/opencl_conformance_tests_full.csv @@ -107,6 +107,12 @@ Pipes,pipes/test_pipes SVM,SVM/test_SVM Workgroups,workgroups/test_workgroups +##################################### +# OpenCL 2.1 tests +##################################### +Device timer,device_timer/test_device_timer +SPIRV new,spirv_new/test_spirv_new -ILPath spirv_bin + ######################################### # Extensions ######################################### diff --git a/test_conformance/opencl_conformance_tests_full_no_math_or_conversions.csv b/test_conformance/opencl_conformance_tests_full_no_math_or_conversions.csv index 15d829aa..c475e996 100644 --- a/test_conformance/opencl_conformance_tests_full_no_math_or_conversions.csv +++ b/test_conformance/opencl_conformance_tests_full_no_math_or_conversions.csv @@ -1,5 +1,5 @@ # -# OpenCL Conformance Test Suite (full version) +# OpenCL Conformance Test Suite (no math and no conversion) # # ######################################### @@ -33,6 +33,8 @@ Allocations (single maximum),allocations/test_allocations single 5 all Allocations (total maximum),allocations/test_allocations multiple 5 all VecAlign, vec_align/test_vecalign VecStep, vec_step/test_vecstep +Printf,printf/test_printf +Device Partitioning,device_partition/test_device_partition # ######################################### # Buffers and images @@ -65,10 +67,6 @@ Headers (cl.h standalone), headers/test_cl_h Headers (cl_platform.h standalone), headers/test_cl_platform_h Headers (cl_gl.h standalone), headers/test_cl_gl_h Headers (opencl.h standalone), headers/test_opencl_h -Headers (cl.h standalone C99), headers/test_cl_h_c99 -Headers (cl_platform.h standalone C99), headers/test_cl_platform_h_c99 -Headers (cl_gl.h standalone C99), headers/test_cl_gl_h_c99 -Headers (opencl.h standalone C99), headers/test_opencl_h_c99 # ######################################### # CPU is required to pass linear and normalized image filtering @@ -88,5 +86,36 @@ OpenCL-GL Sharing,gl/test_gl Select,select/test_select Contractions,contractions/contractions Integer Ops,integer_ops/test_integer_ops -Half Ops,half/Test_half +Half Ops,half/test_half +# ######################################### +# Compatibility with Previous Versions +# ######################################### +Basic 1.2,compatibility/test_conformance/basic/test_basic +API 1.2,compatibility/test_conformance/api/test_api + +##################################### +# OpenCL 2.0 tests +##################################### +C11 Atomics,c11_atomics/test_c11_atomics +Execution Model,device_execution/test_device_execution +Generic Address Space,generic_address_space/test_generic_address_space +Non Uniform Work Groups,non_uniform_work_group/test_non_uniform_work_group +Pipes,pipes/test_pipes +SVM,SVM/test_SVM +Workgroups,workgroups/test_workgroups + +##################################### +# OpenCL 2.1 tests +##################################### +Device timer,device_timer/test_device_timer +SPIRV new,spirv_new/test_spirv_new -ILPath spirv_bin + +######################################### +# Extensions +######################################### +SPIR,spir/test_spir +Mipmaps (Kernel),images/kernel_read_write/test_image_streams test_mipmaps CL_FILTER_NEAREST +Mipmaps (clCopyImage),images/clCopyImage/test_cl_copy_images test_mipmaps +Mipmaps (clReadWriteImage),images/clReadWriteImage/test_cl_read_write_images test_mipmaps +Subgroups,subgroups/test_subgroups \ No newline at end of file diff --git a/test_conformance/printf/test_printf.c b/test_conformance/printf/test_printf.c index fcb6d69e..efaecfe2 100644 --- a/test_conformance/printf/test_printf.c +++ b/test_conformance/printf/test_printf.c @@ -17,6 +17,7 @@ #include #include +#include #if ! defined( _WIN32) #if ! defined( __ANDROID__ ) @@ -304,9 +305,6 @@ static cl_program makePrintfProgram(cl_kernel *kernel_ptr, const cl_context cont //----------------------------------------- static bool isLongSupported(cl_device_id device_id) { - //profile type && device extention for long support checking - char *profileType = NULL,*devExt = NULL; - size_t tempSize = 0; cl_int status; bool extSupport = true; @@ -325,7 +323,7 @@ static bool isLongSupported(cl_device_id device_id) return false; } - profileType = new char[tempSize]; + std::unique_ptr profileType(new char[tempSize]); if(profileType == NULL) { log_error("Failed to allocate memory(profileType)"); @@ -336,11 +334,11 @@ static bool isLongSupported(cl_device_id device_id) device_id, CL_DEVICE_PROFILE, sizeof(char) * tempSize, - profileType, + profileType.get(), NULL); - if(!strcmp("EMBEDDED_PROFILE",profileType)) + if(!strcmp("EMBEDDED_PROFILE",profileType.get())) { // Device extention status = clGetDeviceInfo( @@ -356,7 +354,7 @@ static bool isLongSupported(cl_device_id device_id) return false; } - devExt = new char[tempSize]; + std::unique_ptr devExt(new char[tempSize]); if(devExt == NULL) { log_error("Failed to allocate memory(devExt)"); @@ -367,13 +365,10 @@ static bool isLongSupported(cl_device_id device_id) device_id, CL_DEVICE_EXTENSIONS, sizeof(char) * tempSize, - devExt, + devExt.get(), NULL); - extSupport = (strstr(devExt,"cles_khr_int64") != NULL); - - delete devExt; - delete profileType; + extSupport = (strstr(devExt.get(),"cles_khr_int64") != NULL); } return extSupport; } @@ -410,7 +405,8 @@ static int doTest(cl_command_queue queue, cl_context context, const unsigned int int err; cl_program program; cl_kernel kernel; - cl_mem d_out; + cl_mem d_out = NULL; + cl_mem d_a = NULL; char _analysisBuffer[ANALYSIS_BUFFER_SIZE]; cl_uint out32 = 0; cl_ulong out64 = 0; @@ -431,7 +427,7 @@ static int doTest(cl_command_queue queue, cl_context context, const unsigned int if(isKernelArgument(allTestCase[testId],testNum)) { int a = 2; - cl_mem d_a = clCreateBuffer(context, CL_MEM_READ_ONLY|CL_MEM_COPY_HOST_PTR, + d_a = clCreateBuffer(context, CL_MEM_READ_ONLY|CL_MEM_COPY_HOST_PTR, sizeof(int), &a, &err); if(err!= CL_SUCCESS || d_a == NULL) { log_error("clCreateBuffer failed\n"); @@ -460,10 +456,12 @@ static int doTest(cl_command_queue queue, cl_context context, const unsigned int } } + int fd = acquireOutputStream(); globalWorkSize[0] = 1; cl_event ndrEvt; err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, globalWorkSize, NULL, 0, NULL,&ndrEvt); if (err != CL_SUCCESS) { + releaseOutputStream(fd); log_error("\n clEnqueueNDRangeKernel failed errcode:%d\n", err); ++s_test_fail; goto exit; @@ -473,6 +471,7 @@ static int doTest(cl_command_queue queue, cl_context context, const unsigned int err = clFlush(queue); if(err != CL_SUCCESS) { + releaseOutputStream(fd); log_error("clFlush failed\n"); goto exit; } @@ -480,6 +479,8 @@ static int doTest(cl_command_queue queue, cl_context context, const unsigned int //is immidatly printed err = waitForEvent(&ndrEvt); + releaseOutputStream(fd); + if(err != CL_SUCCESS) { log_error("waitforEvent failed\n"); @@ -521,6 +522,10 @@ exit: log_error("clReleaseKernel failed\n"); if(clReleaseProgram(program) != CL_SUCCESS) log_error("clReleaseProgram failed\n"); + if(d_out) + clReleaseMemObject(d_out); + if(d_a) + clReleaseMemObject(d_a); ++s_test_cnt; return err; } @@ -553,6 +558,8 @@ static void printArch( void ) log_info( "ARCH:\tx86_64\n" ); #elif defined( __arm__ ) log_info( "ARCH:\tarm\n" ); +#elif defined( __aarch64__ ); + log_info( "ARCH:\taarch64\n" ); #else #error unknown arch #endif @@ -669,7 +676,6 @@ int main(int argc, const char* argv[]) { int err; - int fd = acquireOutputStream(); // Get platform err = clGetPlatformIDs(1, &platform_id, NULL); @@ -695,8 +701,6 @@ int main(int argc, const char* argv[]) { if((err = clGetDeviceInfo(device_id, CL_DEVICE_MAX_CLOCK_FREQUENCY, config_size, &device_frequency, NULL ))) device_frequency = 1; - releaseOutputStream(fd); - log_info( "\nCompute Device info:\n" ); log_info( "\tProcessing with %d devices\n", compute_devices ); log_info( "\tDevice Frequency: %d MHz\n", device_frequency ); @@ -716,8 +720,6 @@ int main(int argc, const char* argv[]) { log_info( "Test binary built %s %s\n", __DATE__, __TIME__ ); - fd = acquireOutputStream(); - cl_context context = clCreateContext(NULL, 1, &device_id, notify_callback, NULL, NULL); checkNull(context, "clCreateContext"); @@ -727,17 +729,13 @@ int main(int argc, const char* argv[]) { // Forall types for (int testId = 0; testId < TYPE_COUNT; ++testId) { if (test_filter_num && (testId != test_filter_num)) { - releaseOutputStream(fd); log_info("\n*** Skipping printf for %s ***\n",strType[testId]); - fd = acquireOutputStream(); } else { - releaseOutputStream(fd); log_info("\n*** Testing printf for %s ***\n",strType[testId]); - fd = acquireOutputStream(); + //For all formats for(unsigned int testNum = 0;testNum < allTestCase[testId]->_testNum;++testNum){ - releaseOutputStream(fd); if(allTestCase[testId]->_type == TYPE_VECTOR) log_info("%d)testing printf(\"%sv%s%s\",%s)\n",testNum,allTestCase[testId]->_genParameters[testNum].vectorFormatFlag,allTestCase[testId]->_genParameters[testNum].vectorSize, allTestCase[testId]->_genParameters[testNum].vectorFormatSpecifier,allTestCase[testId]->_genParameters[testNum].dataRepresentation); @@ -752,7 +750,6 @@ int main(int argc, const char* argv[]) { } else log_info("%d)testing printf(\"%s\",%s)\n",testNum,allTestCase[testId]->_genParameters[testNum].genericFormat,allTestCase[testId]->_genParameters[testNum].dataRepresentation); - fd = acquireOutputStream(); // Long support for varible type if(allTestCase[testId]->_type == TYPE_VECTOR && !strcmp(allTestCase[testId]->_genParameters[testNum].dataType,"long") && !isLongSupported(device_id)) @@ -766,15 +763,11 @@ int main(int argc, const char* argv[]) { // Perform the test if (doTest(queue, context,testId,testNum,device_id,isLongSupport) != 0) { - releaseOutputStream(fd); log_error("*** FAILED ***\n\n"); - fd = acquireOutputStream(); } else { - releaseOutputStream(fd); log_info("Passed\n"); - fd = acquireOutputStream(); } } } @@ -790,8 +783,6 @@ int main(int argc, const char* argv[]) { if(clReleaseContext(context)!= CL_SUCCESS) log_error("clReleaseContext\n"); - releaseOutputStream(fd); - if (s_test_fail == 0) { if (s_test_cnt > 1) diff --git a/test_conformance/printf/util_printf.c b/test_conformance/printf/util_printf.c index 5bd9be1a..842a0f74 100644 --- a/test_conformance/printf/util_printf.c +++ b/test_conformance/printf/util_printf.c @@ -212,8 +212,6 @@ struct printDataGenParameters printFloatGenParameters[] = { {"%+#21.15E","789456123.0"}, -#if ! defined( __ANDROID__ ) - //Double argument representing floating-point,in [-]xh.hhhhpAd style {"%.6a","0.1"}, @@ -222,8 +220,6 @@ struct printDataGenParameters printFloatGenParameters[] = { {"%10.2a","9990.235"}, -#endif - //Infinity (1.0/0.0) {"%f","1.0f/0.0f"}, @@ -275,14 +271,10 @@ const char* correctBufferFloat[] = { "+7.894561230000000E+8", -#if ! defined( __ANDROID__ ) - "0x1.99999ap-4", "0x1.38p+13", -#endif - "inf", "-nan", @@ -621,11 +613,6 @@ struct printDataGenParameters printStringGenParameters[] = { //%% specification {"%s","\"%%\""}, - - //null string - - {"%s","(void*)0"} - }; //--------------------------------------------------------- @@ -641,9 +628,6 @@ const char * correctBufferString[] = { "f", "%%", - - "(null)" - }; //--------------------------------------------------------- @@ -887,7 +871,7 @@ size_t verifyOutputBuffer(char *analysisBuffer,testCase* pTestCase,size_t testId if(!strcmp(pTestCase->_correctBuffer[testId],"inf")) return strcmp(analysisBuffer,"inf")&&strcmp(analysisBuffer,"infinity")&&strcmp(analysisBuffer,"1.#INF00")&&strcmp(analysisBuffer,"Inf"); if(!strcmp(pTestCase->_correctBuffer[testId],"nan") || !strcmp(pTestCase->_correctBuffer[testId],"-nan")) { - return strcmp(analysisBuffer,"nan")&&strcmp(analysisBuffer,"-nan")&&strcmp(analysisBuffer,"1.#IND00")&&strcmp(analysisBuffer,"-1.#IND00")&&strcmp(analysisBuffer,"NaN")&&strcmp(analysisBuffer,"nan(ind)")&&strcmp(analysisBuffer,"nan(snan)"); + return strcmp(analysisBuffer,"nan")&&strcmp(analysisBuffer,"-nan")&&strcmp(analysisBuffer,"1.#IND00")&&strcmp(analysisBuffer,"-1.#IND00")&&strcmp(analysisBuffer,"NaN")&&strcmp(analysisBuffer,"nan(ind)")&&strcmp(analysisBuffer,"nan(snan)")&&strcmp(analysisBuffer,"-nan(ind)"); } return strcmp(analysisBuffer,pTestCase->_correctBuffer[testId]); } diff --git a/test_conformance/run_conformance.py b/test_conformance/run_conformance.py old mode 100644 new mode 100755 diff --git a/test_conformance/select/test_select.c b/test_conformance/select/test_select.c index 5eec6a3d..49c44020 100644 --- a/test_conformance/select/test_select.c +++ b/test_conformance/select/test_select.c @@ -72,6 +72,7 @@ static int doTest(cl_command_queue queue, cl_context context, // range. Otherwise, we test a subset of the range // [-min_short, min_short] static bool s_wimpy_mode = false; +static int s_wimpy_reduction_factor = 256; // Tests are broken into the major test which is based on the // src and cmp type and their corresponding vector types and @@ -304,7 +305,7 @@ static int doTest(cl_command_queue queue, cl_context context, Type stype, Type c cl_ulong blocks = type_size[stype] * 0x100000000ULL / BUFFER_SIZE; size_t block_elements = BUFFER_SIZE / type_size[stype]; - size_t step = s_wimpy_mode ? 256 : 1; + size_t step = s_wimpy_mode ? s_wimpy_reduction_factor : 1; cl_ulong cmp_stride = block_elements * step; // It is more efficient to create the tests all at once since we @@ -471,6 +472,7 @@ static void printUsage( void ) log_info("test_select: [-cghw] [test_name|start_test_num] \n"); log_info(" default is to run the full test on the default device\n"); log_info(" -w run in wimpy mode (smoke test)\n"); + log_info(" -[2^n] Set wimpy reduction factor, recommended range of n is 1-12, default factor(%u)\n", s_wimpy_reduction_factor); log_info(" test_name will run only one test of that name\n"); log_info(" start_test_num will start running from that num\n"); } @@ -491,6 +493,8 @@ static void printArch( void ) log_info( "ARCH:\tx86_64\n" ); #elif defined( __arm__ ) log_info( "ARCH:\tarm\n" ); +#elif defined( __aarch64__ ) + log_info( "ARCH:\taarch64\n" ); #else #error unknown arch #endif @@ -582,6 +586,9 @@ int main(int argc, const char* argv[]) { case 'w': // Wimpy mode s_wimpy_mode = true; break; + case '[': + parseWimpyReductionFactor(arg, s_wimpy_reduction_factor); + break; default: log_error( " <-- unknown flag: %c (0x%2.2x)\n)", *arg, *arg ); printUsage(); @@ -659,6 +666,7 @@ int main(int argc, const char* argv[]) { log_info("*** WARNING: Testing in Wimpy mode! ***\n"); log_info("*** Wimpy mode is not sufficient to verify correctness. ***\n"); log_info("*** It gives warm fuzzy feelings and then nevers calls. ***\n\n"); + log_info("*** Wimpy Reduction Factor: %-27u ***\n\n", s_wimpy_reduction_factor); } cl_context context = clCreateContext(NULL, 1, &device_id, notify_callback, NULL, NULL); diff --git a/test_conformance/spir/basic.zip b/test_conformance/spir/basic.zip index d60636fb..14c7a3f4 100644 Binary files a/test_conformance/spir/basic.zip and b/test_conformance/spir/basic.zip differ diff --git a/test_conformance/spir/half.zip b/test_conformance/spir/half.zip index f0d3e8ff..0b1deca1 100644 Binary files a/test_conformance/spir/half.zip and b/test_conformance/spir/half.zip differ diff --git a/test_conformance/spir/images_kernel_read_write.zip b/test_conformance/spir/images_kernel_read_write.zip index 65fa8728..dc701137 100644 Binary files a/test_conformance/spir/images_kernel_read_write.zip and b/test_conformance/spir/images_kernel_read_write.zip differ diff --git a/test_conformance/spir/main.cpp b/test_conformance/spir/main.cpp index b0fba6fc..95fcd8bf 100644 --- a/test_conformance/spir/main.cpp +++ b/test_conformance/spir/main.cpp @@ -840,7 +840,6 @@ bool test_basic (cl_device_id device, cl_uint size_t_width, const char *folder) "test_sizeof.sizeof_uintptr_t", "test_sizeof.sizeof_image2d_t", "test_sizeof.sizeof_image3d_t", - "test_sizeof.sizeof_sampler_t", "test_sizeof.sizeof_double", "test_sizeof.sizeof_double2", "test_sizeof.sizeof_double4", diff --git a/test_conformance/spir/profiling.zip b/test_conformance/spir/profiling.zip index 33ac3396..c792bbec 100644 Binary files a/test_conformance/spir/profiling.zip and b/test_conformance/spir/profiling.zip differ diff --git a/test_conformance/spir/typeinfo.h b/test_conformance/spir/typeinfo.h index ea1f6b66..a9dc7124 100644 --- a/test_conformance/spir/typeinfo.h +++ b/test_conformance/spir/typeinfo.h @@ -93,6 +93,42 @@ TYPE_HNDL("image3d_int", false, 0, 1, 0x0, TYPE_HNDL("image3d_uint", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage3d) TYPE_HNDL("image_kernel_data", false, 0, 1, 0x0, 0xffffffff, KernelStructTypeArgGenerator) //image_kernel_data defines as 5 X int TYPE_HNDL("image_kernel_data*", true, 0, 1, 0x0, 0xffffffff, KernelStructTypeArgGenerator) //image_kernel_data defines as 5 X int +TYPE_HNDL("read_only_image1d_array_float", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage1dArray) +TYPE_HNDL("read_only_image1d_array_int", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage1dArray) +TYPE_HNDL("read_only_image1d_array_uint", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage1dArray) +TYPE_HNDL("read_only_image1d_buffer_float", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage1dBuffer) +TYPE_HNDL("read_only_image1d_buffer_int", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage1dBuffer) +TYPE_HNDL("read_only_image1d_buffer_uint", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage1dBuffer) +TYPE_HNDL("read_only_image1d_float", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage1d) +TYPE_HNDL("read_only_image1d_int", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage1d) +TYPE_HNDL("read_only_image1d_uint", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage1d) +TYPE_HNDL("read_only_image2d_array_float", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage2dArray) +TYPE_HNDL("read_only_image2d_array_int", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage2dArray) +TYPE_HNDL("read_only_image2d_array_uint", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage2dArray) +TYPE_HNDL("read_only_image2d_float", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage2d) +TYPE_HNDL("read_only_image2d_int", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage2d) +TYPE_HNDL("read_only_image2d_uint", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage2d) +TYPE_HNDL("read_only_image3d_float", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage3d) +TYPE_HNDL("read_only_image3d_int", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage3d) +TYPE_HNDL("read_only_image3d_uint", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage3d) +TYPE_HNDL("write_only_image1d_array_float", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage1dArray) +TYPE_HNDL("write_only_image1d_array_int", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage1dArray) +TYPE_HNDL("write_only_image1d_array_uint", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage1dArray) +TYPE_HNDL("write_only_image1d_buffer_float", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage1dBuffer) +TYPE_HNDL("write_only_image1d_buffer_int", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage1dBuffer) +TYPE_HNDL("write_only_image1d_buffer_uint", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage1dBuffer) +TYPE_HNDL("write_only_image1d_float", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage1d) +TYPE_HNDL("write_only_image1d_int", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage1d) +TYPE_HNDL("write_only_image1d_uint", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage1d) +TYPE_HNDL("write_only_image2d_array_float", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage2dArray) +TYPE_HNDL("write_only_image2d_array_int", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage2dArray) +TYPE_HNDL("write_only_image2d_array_uint", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage2dArray) +TYPE_HNDL("write_only_image2d_float", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage2d) +TYPE_HNDL("write_only_image2d_int", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage2d) +TYPE_HNDL("write_only_image2d_uint", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage2d) +TYPE_HNDL("write_only_image3d_float", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage3d) +TYPE_HNDL("write_only_image3d_int", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage3d) +TYPE_HNDL("write_only_image3d_uint", false, 0, 1, 0x0, 0x7f, KernelArgGeneratorImage3d) TYPE_HNDL("int", false, 0, 1, 0x0, 0x7fffffff, KernelArgGeneratorT) TYPE_HNDL("int*", true, 0, 16, 0x0, 0x7fffffff, KernelArgGeneratorT) TYPE_HNDL("int16", false, 0, 16, 0x0, 0x7fffffff, KernelArgGeneratorT) diff --git a/test_conformance/spirv_new/CMakeLists.txt b/test_conformance/spirv_new/CMakeLists.txt new file mode 100644 index 00000000..23d6e3d6 --- /dev/null +++ b/test_conformance/spirv_new/CMakeLists.txt @@ -0,0 +1,37 @@ +###################################################################################################### +#Copyright (c) 2016 The Khronos Group Inc. All Rights Reserved. +# +#This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc. +#This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed in whole or in part to +#third parties, and may not be reproduced, republished, distributed, transmitted, displayed, +#broadcast or otherwise exploited in any manner without the express prior written permission +#of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce, +#disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe, +#in whole or in part other than under the terms of the Khronos Adopters Agreement +#or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient. +###################################################################################################### + +set(MODULE_NAME SPIRV_NEW) +set(CMAKE_CXX_STANDARD 11) + +file(GLOB SPIRV_NEW_SOURCES "*.cpp") + +set(TEST_HARNESS_SOURCES + ../../test_common/harness/errorHelpers.c + ../../test_common/harness/threadTesting.c + ../../test_common/harness/testHarness.c + ../../test_common/harness/kernelHelpers.c + ../../test_common/harness/typeWrappers.cpp + ../../test_common/harness/mt19937.c + ../../test_common/harness/conversions.c + ../../test_common/harness/msvc9.c + ../../test_common/harness/rounding_mode.c + ../../test_common/harness/os_helpers.cpp + ../../test_common/harness/parseParameters.cpp + ../../test_conformance/math_brute_force/reference_math.c + ../../test_conformance/math_brute_force/Utility.c + ) + +set(${MODULE_NAME}_SOURCES ${SPIRV_NEW_SOURCES} ${TEST_HARNESS_SOURCES}) + +include(../CMakeCommon.txt) diff --git a/test_conformance/spirv_new/README.txt b/test_conformance/spirv_new/README.txt new file mode 100644 index 00000000..71beaade --- /dev/null +++ b/test_conformance/spirv_new/README.txt @@ -0,0 +1,13 @@ +test_conformance/spirv_new README +================================== + +The text versions of the spirv files are present in `conformance-tests/test_conformance/spriv_new/spirv_txt`. +These text files have been used to generate the binaries in `spirv_bin` using the assembler from `spirv-tools`. + +The absolute path to `spirv_bin` needs to be passed after `-ILPath` token for the test to find the SPIRV binaries. + +An example invocation looks like the following: + +``` +./test_conformance/spirv_new/test_conformance_spirv_new -ILPath /home/user/workspace/conformance-tests/test_conformance/spirv_new/spirv_bin/ [other options] +``` diff --git a/test_conformance/spirv_new/main.cpp b/test_conformance/spirv_new/main.cpp new file mode 100644 index 00000000..69d05849 --- /dev/null +++ b/test_conformance/spirv_new/main.cpp @@ -0,0 +1,173 @@ +/****************************************************************** +Copyright (c) 2016 The Khronos Group Inc. All Rights Reserved. + +This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc. +This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed in whole or in part to +third parties, and may not be reproduced, republished, distributed, transmitted, displayed, +broadcast or otherwise exploited in any manner without the express prior written permission +of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce, +disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe, +in whole or in part other than under the terms of the Khronos Adopters Agreement +or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient. +******************************************************************/ + +#include +#include +#include "procs.h" +#if !defined(_WIN32) +#include +#endif + +#include +#include +#include +#include + +#if defined(_WIN32) +const std::string slash = "\\"; +#else +const std::string slash = "/"; +#endif + +const std::string spvExt = ".spv"; +const std::string addrWidth = (sizeof(void *) == 4) ? "32" : "64"; + +std::vector readBinary(const char *file_name) +{ + using namespace std; + + ifstream file(file_name, ios::in | ios::binary | ios::ate); + + std::vector tmpBuffer(0); + + if (file.is_open()) { + size_t size = file.tellg(); + tmpBuffer.resize(size); + file.seekg(0, ios::beg); + file.read(&tmpBuffer[0], size); + file.close(); + } else { + log_error("File %s not found\n", file_name); + } + + std::vector result(tmpBuffer.begin(), tmpBuffer.end()); + + return result; +} + + +std::vector readSPIRV(const char *file_name) +{ + std::string full_name_str = gSpirVPath + slash + file_name + spvExt + addrWidth; + return readBinary(full_name_str.c_str()); +} + +const char **spirvTestsRegistry::getTestNames() +{ + return &testNames[0]; +} + +basefn *spirvTestsRegistry::getTests() +{ + return &tests[0]; +} + +size_t spirvTestsRegistry::getNumTests() +{ + return tests.size(); +} + +void spirvTestsRegistry::addTestClass(baseTestClass *test, const char *testName) +{ + testNames.push_back(testName); + testClasses.push_back(test); + tests.push_back(test->getFunction()); +} + +spirvTestsRegistry& spirvTestsRegistry::getInstance() +{ + static spirvTestsRegistry instance; + return instance; +} + +static int offline_get_program_with_il(clProgramWrapper &prog, + const cl_device_id deviceID, + const cl_context context, + const char *prog_name) +{ + cl_int err = 0; + std::string outputTypeStr = "binary"; + std::string defaultScript = std::string("..") + slash + std::string("spv_to_binary.py"); + std::string gOfflineCompilerOutput = gSpirVPath + slash + std::string(prog_name); + std::string gOfflineCompilerInput = gOfflineCompilerOutput + spvExt; + + std::string scriptArgs = + gOfflineCompilerInput + " " + + gOfflineCompilerOutput + " " + + addrWidth + " " + + outputTypeStr + " " + + "-cl-std=CL2.0"; + + std::string scriptToRunString = defaultScript + scriptArgs; + + // execute script + log_info("Executing command: %s\n", scriptToRunString.c_str()); + fflush(stdout); + int returnCode = system(scriptToRunString.c_str()); + if (returnCode != 0) { + log_error("Command finished with error: 0x%x\n", returnCode); + return CL_COMPILE_PROGRAM_FAILURE; + } + + // read output file + std::vector buffer_vec = readBinary(gOfflineCompilerOutput.c_str()); + size_t file_bytes = buffer_vec.size(); + if (file_bytes == 0) { + log_error("OfflinerCompiler: Failed to open binary file: %s", gOfflineCompilerOutput.c_str()); + return -1; + } + + const unsigned char *buffer = &buffer_vec[0]; + cl_int status = 0; + prog = clCreateProgramWithBinary(context, 1, &deviceID, &file_bytes, &buffer, &status, &err); + SPIRV_CHECK_ERROR((err || status), "Failed to create program with clCreateProgramWithBinary"); + return err; +} + +int get_program_with_il(clProgramWrapper &prog, + const cl_device_id deviceID, + const cl_context context, + const char *prog_name) +{ + cl_int err = 0; + if (gOfflineCompiler && gOfflineCompilerOutputType == kBinary) { + return offline_get_program_with_il(prog, deviceID, context, prog_name); + } + + std::vector buffer_vec = readSPIRV(prog_name); + + int file_bytes = buffer_vec.size(); + if (file_bytes == 0) { + log_error("File %s not found\n", prog_name); + return -1; + } + + unsigned char *buffer = &buffer_vec[0]; + prog = clCreateProgramWithIL(context, buffer, file_bytes, &err); + SPIRV_CHECK_ERROR(err, "Failed to create program with clCreateProgramWithIL"); + + err = clBuildProgram(prog, 1, &deviceID, NULL, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to build program"); + + return err; +} + +int main(int argc, const char *argv[]) +{ + gReSeed = 1; + return runTestHarness(argc, argv, + spirvTestsRegistry::getInstance().getNumTests(), + spirvTestsRegistry::getInstance().getTests(), + spirvTestsRegistry::getInstance().getTestNames(), + false, false, 0); +} diff --git a/test_conformance/spirv_new/procs.h b/test_conformance/spirv_new/procs.h new file mode 100644 index 00000000..4d624441 --- /dev/null +++ b/test_conformance/spirv_new/procs.h @@ -0,0 +1,101 @@ +/****************************************************************** +Copyright (c) 2016 The Khronos Group Inc. All Rights Reserved. + +This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc. +This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed in whole or in part to +third parties, and may not be reproduced, republished, distributed, transmitted, displayed, +broadcast or otherwise exploited in any manner without the express prior written permission +of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce, +disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe, +in whole or in part other than under the terms of the Khronos Adopters Agreement +or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient. +******************************************************************/ + +#pragma once + +#include "../../test_common/harness/errorHelpers.h" +#include "../../test_common/harness/kernelHelpers.h" +#include "../../test_common/harness/typeWrappers.h" +#include "../../test_common/harness/conversions.h" +#include "../../test_common/harness/mt19937.h" +#include "../../test_common/harness/compat.h" +#include "../../test_common/harness/testHarness.h" +#include "../../test_common/harness/parseParameters.h" + +#include + +#define SPIRV_CHECK_ERROR(err, fmt, ...) do { \ + if (err == CL_SUCCESS) break; \ + log_error("%s(%d): Error %d\n" fmt "\n", \ + __FILE__, __LINE__, err, ##__VA_ARGS__); \ + return -1; \ + } while(0) + + +class baseTestClass +{ +public: + baseTestClass() {} + virtual basefn getFunction() = 0; +}; + +class spirvTestsRegistry { +private: + std::vector testNames; + std::vector testClasses; + std::vector tests; + +public: + + static spirvTestsRegistry& getInstance(); + + const char **getTestNames(); + + basefn *getTests(); + + size_t getNumTests(); + + void addTestClass(baseTestClass *test, const char *testName); + spirvTestsRegistry() {} +}; + +template +T* createAndRegister(const char *name) +{ + T *testClass = new T(); + spirvTestsRegistry::getInstance().addTestClass((baseTestClass *)testClass, name); + return testClass; +} + +#define TEST_SPIRV_FUNC(name) \ + extern int test_##name(cl_device_id deviceID, \ + cl_context context, \ + cl_command_queue queue, \ + int num_elements); \ + class test_##name##_class : public baseTestClass \ + { \ + private: \ + basefn fn; \ + \ + public: \ + test_##name##_class() : fn(test_##name) \ + { \ + } \ + basefn getFunction() \ + { \ + return fn; \ + } \ + }; \ + test_##name##_class *var_##name = \ + createAndRegister(#name); \ + int test_##name(cl_device_id deviceID, \ + cl_context context, \ + cl_command_queue queue, \ + int num_elements) + +std::vector readSPIRV(const char *file_name); + +int get_program_with_il(clProgramWrapper &prog, + const cl_device_id deviceID, + const cl_context context, + const char *prog_name); diff --git a/test_conformance/spirv_new/spirv_bin/atomic_dec_global.spv32 b/test_conformance/spirv_new/spirv_bin/atomic_dec_global.spv32 new file mode 100644 index 00000000..22a286cc Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/atomic_dec_global.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/atomic_dec_global.spv64 b/test_conformance/spirv_new/spirv_bin/atomic_dec_global.spv64 new file mode 100644 index 00000000..d590b8b3 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/atomic_dec_global.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/atomic_inc_global.spv32 b/test_conformance/spirv_new/spirv_bin/atomic_inc_global.spv32 new file mode 100644 index 00000000..7680b2b9 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/atomic_inc_global.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/atomic_inc_global.spv64 b/test_conformance/spirv_new/spirv_bin/atomic_inc_global.spv64 new file mode 100644 index 00000000..a049df83 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/atomic_inc_global.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/branch_conditional.spv32 b/test_conformance/spirv_new/spirv_bin/branch_conditional.spv32 new file mode 100644 index 00000000..5b16aca3 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/branch_conditional.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/branch_conditional.spv64 b/test_conformance/spirv_new/spirv_bin/branch_conditional.spv64 new file mode 100644 index 00000000..806b1bb4 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/branch_conditional.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/branch_conditional_weighted.spv32 b/test_conformance/spirv_new/spirv_bin/branch_conditional_weighted.spv32 new file mode 100644 index 00000000..739d60dc Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/branch_conditional_weighted.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/branch_conditional_weighted.spv64 b/test_conformance/spirv_new/spirv_bin/branch_conditional_weighted.spv64 new file mode 100644 index 00000000..2ca9127c Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/branch_conditional_weighted.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/branch_simple.spv32 b/test_conformance/spirv_new/spirv_bin/branch_simple.spv32 new file mode 100644 index 00000000..4747a244 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/branch_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/branch_simple.spv64 b/test_conformance/spirv_new/spirv_bin/branch_simple.spv64 new file mode 100644 index 00000000..a5795b5c Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/branch_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/composite_construct_int4.spv32 b/test_conformance/spirv_new/spirv_bin/composite_construct_int4.spv32 new file mode 100644 index 00000000..ac668439 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/composite_construct_int4.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/composite_construct_int4.spv64 b/test_conformance/spirv_new/spirv_bin/composite_construct_int4.spv64 new file mode 100644 index 00000000..279a2177 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/composite_construct_int4.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/composite_construct_struct.spv32 b/test_conformance/spirv_new/spirv_bin/composite_construct_struct.spv32 new file mode 100644 index 00000000..3ad1aaa2 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/composite_construct_struct.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/composite_construct_struct.spv64 b/test_conformance/spirv_new/spirv_bin/composite_construct_struct.spv64 new file mode 100644 index 00000000..22a21cd5 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/composite_construct_struct.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_char_simple.spv32 b/test_conformance/spirv_new/spirv_bin/constant_char_simple.spv32 new file mode 100644 index 00000000..7f0a8fed Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_char_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_char_simple.spv64 b/test_conformance/spirv_new/spirv_bin/constant_char_simple.spv64 new file mode 100644 index 00000000..0a9b667b Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_char_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_double_simple.spv32 b/test_conformance/spirv_new/spirv_bin/constant_double_simple.spv32 new file mode 100644 index 00000000..bb6b2bcb Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_double_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_double_simple.spv64 b/test_conformance/spirv_new/spirv_bin/constant_double_simple.spv64 new file mode 100644 index 00000000..4cb895c6 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_double_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_false_simple.spv32 b/test_conformance/spirv_new/spirv_bin/constant_false_simple.spv32 new file mode 100644 index 00000000..4e8f9f64 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_false_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_false_simple.spv64 b/test_conformance/spirv_new/spirv_bin/constant_false_simple.spv64 new file mode 100644 index 00000000..302ac272 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_false_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_float_simple.spv32 b/test_conformance/spirv_new/spirv_bin/constant_float_simple.spv32 new file mode 100644 index 00000000..a97471b4 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_float_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_float_simple.spv64 b/test_conformance/spirv_new/spirv_bin/constant_float_simple.spv64 new file mode 100644 index 00000000..2891abf6 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_float_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_half_simple.spv32 b/test_conformance/spirv_new/spirv_bin/constant_half_simple.spv32 new file mode 100644 index 00000000..84c80197 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_half_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_half_simple.spv64 b/test_conformance/spirv_new/spirv_bin/constant_half_simple.spv64 new file mode 100644 index 00000000..a05102a3 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_half_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_int3_simple.spv32 b/test_conformance/spirv_new/spirv_bin/constant_int3_simple.spv32 new file mode 100644 index 00000000..77985519 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_int3_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_int3_simple.spv64 b/test_conformance/spirv_new/spirv_bin/constant_int3_simple.spv64 new file mode 100644 index 00000000..ea5580ed Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_int3_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_int4_simple.spv32 b/test_conformance/spirv_new/spirv_bin/constant_int4_simple.spv32 new file mode 100644 index 00000000..49141cee Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_int4_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_int4_simple.spv64 b/test_conformance/spirv_new/spirv_bin/constant_int4_simple.spv64 new file mode 100644 index 00000000..e4aeb68d Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_int4_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_int_simple.spv32 b/test_conformance/spirv_new/spirv_bin/constant_int_simple.spv32 new file mode 100644 index 00000000..829cfc48 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_int_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_int_simple.spv64 b/test_conformance/spirv_new/spirv_bin/constant_int_simple.spv64 new file mode 100644 index 00000000..ce03e974 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_int_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_long_simple.spv32 b/test_conformance/spirv_new/spirv_bin/constant_long_simple.spv32 new file mode 100644 index 00000000..b99b03f5 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_long_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_long_simple.spv64 b/test_conformance/spirv_new/spirv_bin/constant_long_simple.spv64 new file mode 100644 index 00000000..b52f09aa Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_long_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_short_simple.spv32 b/test_conformance/spirv_new/spirv_bin/constant_short_simple.spv32 new file mode 100644 index 00000000..b121db4a Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_short_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_short_simple.spv64 b/test_conformance/spirv_new/spirv_bin/constant_short_simple.spv64 new file mode 100644 index 00000000..3f230303 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_short_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_struct_int_char_simple.spv32 b/test_conformance/spirv_new/spirv_bin/constant_struct_int_char_simple.spv32 new file mode 100644 index 00000000..2a01869b Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_struct_int_char_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_struct_int_char_simple.spv64 b/test_conformance/spirv_new/spirv_bin/constant_struct_int_char_simple.spv64 new file mode 100644 index 00000000..39a461cf Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_struct_int_char_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_struct_int_float_simple.spv32 b/test_conformance/spirv_new/spirv_bin/constant_struct_int_float_simple.spv32 new file mode 100644 index 00000000..e5fcb4ec Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_struct_int_float_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_struct_int_float_simple.spv64 b/test_conformance/spirv_new/spirv_bin/constant_struct_int_float_simple.spv64 new file mode 100644 index 00000000..b77f5477 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_struct_int_float_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_struct_struct_simple.spv32 b/test_conformance/spirv_new/spirv_bin/constant_struct_struct_simple.spv32 new file mode 100644 index 00000000..fd43ccd7 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_struct_struct_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_struct_struct_simple.spv64 b/test_conformance/spirv_new/spirv_bin/constant_struct_struct_simple.spv64 new file mode 100644 index 00000000..98ee0891 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_struct_struct_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_true_simple.spv32 b/test_conformance/spirv_new/spirv_bin/constant_true_simple.spv32 new file mode 100644 index 00000000..7e4ad767 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_true_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_true_simple.spv64 b/test_conformance/spirv_new/spirv_bin/constant_true_simple.spv64 new file mode 100644 index 00000000..1f2306de Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_true_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_uchar_simple.spv32 b/test_conformance/spirv_new/spirv_bin/constant_uchar_simple.spv32 new file mode 100644 index 00000000..1b63fafe Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_uchar_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_uchar_simple.spv64 b/test_conformance/spirv_new/spirv_bin/constant_uchar_simple.spv64 new file mode 100644 index 00000000..8bf38d0e Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_uchar_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_uint_simple.spv32 b/test_conformance/spirv_new/spirv_bin/constant_uint_simple.spv32 new file mode 100644 index 00000000..fe7463d7 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_uint_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_uint_simple.spv64 b/test_conformance/spirv_new/spirv_bin/constant_uint_simple.spv64 new file mode 100644 index 00000000..eb8ea019 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_uint_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_ulong_simple.spv32 b/test_conformance/spirv_new/spirv_bin/constant_ulong_simple.spv32 new file mode 100644 index 00000000..29a76a1f Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_ulong_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_ulong_simple.spv64 b/test_conformance/spirv_new/spirv_bin/constant_ulong_simple.spv64 new file mode 100644 index 00000000..c26d62df Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_ulong_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_ushort_simple.spv32 b/test_conformance/spirv_new/spirv_bin/constant_ushort_simple.spv32 new file mode 100644 index 00000000..0fbde369 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_ushort_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/constant_ushort_simple.spv64 b/test_conformance/spirv_new/spirv_bin/constant_ushort_simple.spv64 new file mode 100644 index 00000000..1f35a8df Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/constant_ushort_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_char_simple.spv32 b/test_conformance/spirv_new/spirv_bin/copy_char_simple.spv32 new file mode 100644 index 00000000..23334e01 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_char_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_char_simple.spv64 b/test_conformance/spirv_new/spirv_bin/copy_char_simple.spv64 new file mode 100644 index 00000000..34c16d9f Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_char_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_double_simple.spv32 b/test_conformance/spirv_new/spirv_bin/copy_double_simple.spv32 new file mode 100644 index 00000000..a04ee052 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_double_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_double_simple.spv64 b/test_conformance/spirv_new/spirv_bin/copy_double_simple.spv64 new file mode 100644 index 00000000..7fa5ca4d Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_double_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_float_simple.spv32 b/test_conformance/spirv_new/spirv_bin/copy_float_simple.spv32 new file mode 100644 index 00000000..8f5f6067 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_float_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_float_simple.spv64 b/test_conformance/spirv_new/spirv_bin/copy_float_simple.spv64 new file mode 100644 index 00000000..37757844 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_float_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_half_simple.spv32 b/test_conformance/spirv_new/spirv_bin/copy_half_simple.spv32 new file mode 100644 index 00000000..84eba798 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_half_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_half_simple.spv64 b/test_conformance/spirv_new/spirv_bin/copy_half_simple.spv64 new file mode 100644 index 00000000..3943a52f Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_half_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_int3_simple.spv32 b/test_conformance/spirv_new/spirv_bin/copy_int3_simple.spv32 new file mode 100644 index 00000000..853acbe3 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_int3_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_int3_simple.spv64 b/test_conformance/spirv_new/spirv_bin/copy_int3_simple.spv64 new file mode 100644 index 00000000..485fb3cd Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_int3_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_int4_simple.spv32 b/test_conformance/spirv_new/spirv_bin/copy_int4_simple.spv32 new file mode 100644 index 00000000..720f3e79 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_int4_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_int4_simple.spv64 b/test_conformance/spirv_new/spirv_bin/copy_int4_simple.spv64 new file mode 100644 index 00000000..1a4e94e7 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_int4_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_int_simple.spv32 b/test_conformance/spirv_new/spirv_bin/copy_int_simple.spv32 new file mode 100644 index 00000000..7b194074 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_int_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_int_simple.spv64 b/test_conformance/spirv_new/spirv_bin/copy_int_simple.spv64 new file mode 100644 index 00000000..61af430d Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_int_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_long_simple.spv32 b/test_conformance/spirv_new/spirv_bin/copy_long_simple.spv32 new file mode 100644 index 00000000..daf32092 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_long_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_long_simple.spv64 b/test_conformance/spirv_new/spirv_bin/copy_long_simple.spv64 new file mode 100644 index 00000000..19e49d9a Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_long_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_short_simple.spv32 b/test_conformance/spirv_new/spirv_bin/copy_short_simple.spv32 new file mode 100644 index 00000000..cd6b9fe0 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_short_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_short_simple.spv64 b/test_conformance/spirv_new/spirv_bin/copy_short_simple.spv64 new file mode 100644 index 00000000..a7060480 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_short_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_struct_int_char_simple.spv32 b/test_conformance/spirv_new/spirv_bin/copy_struct_int_char_simple.spv32 new file mode 100644 index 00000000..4555a397 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_struct_int_char_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_struct_int_char_simple.spv64 b/test_conformance/spirv_new/spirv_bin/copy_struct_int_char_simple.spv64 new file mode 100644 index 00000000..0e9de18d Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_struct_int_char_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_struct_int_float_simple.spv32 b/test_conformance/spirv_new/spirv_bin/copy_struct_int_float_simple.spv32 new file mode 100644 index 00000000..7e7fc8a8 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_struct_int_float_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_struct_int_float_simple.spv64 b/test_conformance/spirv_new/spirv_bin/copy_struct_int_float_simple.spv64 new file mode 100644 index 00000000..832efe74 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_struct_int_float_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_struct_struct_simple.spv32 b/test_conformance/spirv_new/spirv_bin/copy_struct_struct_simple.spv32 new file mode 100644 index 00000000..ac029613 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_struct_struct_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_struct_struct_simple.spv64 b/test_conformance/spirv_new/spirv_bin/copy_struct_struct_simple.spv64 new file mode 100644 index 00000000..c027f9c0 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_struct_struct_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_uchar_simple.spv32 b/test_conformance/spirv_new/spirv_bin/copy_uchar_simple.spv32 new file mode 100644 index 00000000..5416c5d0 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_uchar_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_uchar_simple.spv64 b/test_conformance/spirv_new/spirv_bin/copy_uchar_simple.spv64 new file mode 100644 index 00000000..ab6c8276 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_uchar_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_uint_simple.spv32 b/test_conformance/spirv_new/spirv_bin/copy_uint_simple.spv32 new file mode 100644 index 00000000..4031b089 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_uint_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_uint_simple.spv64 b/test_conformance/spirv_new/spirv_bin/copy_uint_simple.spv64 new file mode 100644 index 00000000..ca834567 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_uint_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_ulong_simple.spv32 b/test_conformance/spirv_new/spirv_bin/copy_ulong_simple.spv32 new file mode 100644 index 00000000..8dc0519d Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_ulong_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_ulong_simple.spv64 b/test_conformance/spirv_new/spirv_bin/copy_ulong_simple.spv64 new file mode 100644 index 00000000..11796a24 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_ulong_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_ushort_simple.spv32 b/test_conformance/spirv_new/spirv_bin/copy_ushort_simple.spv32 new file mode 100644 index 00000000..3c1045b9 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_ushort_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/copy_ushort_simple.spv64 b/test_conformance/spirv_new/spirv_bin/copy_ushort_simple.spv64 new file mode 100644 index 00000000..08db8547 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/copy_ushort_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_aliased.spv32 b/test_conformance/spirv_new/spirv_bin/decorate_aliased.spv32 new file mode 100644 index 00000000..dc6ead2e Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_aliased.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_aliased.spv64 b/test_conformance/spirv_new/spirv_bin/decorate_aliased.spv64 new file mode 100644 index 00000000..6a13de3a Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_aliased.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_alignment.spv32 b/test_conformance/spirv_new/spirv_bin/decorate_alignment.spv32 new file mode 100644 index 00000000..21ba5600 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_alignment.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_alignment.spv64 b/test_conformance/spirv_new/spirv_bin/decorate_alignment.spv64 new file mode 100644 index 00000000..d2b55080 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_alignment.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_coherent.spv32 b/test_conformance/spirv_new/spirv_bin/decorate_coherent.spv32 new file mode 100644 index 00000000..2e49c6fb Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_coherent.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_coherent.spv64 b/test_conformance/spirv_new/spirv_bin/decorate_coherent.spv64 new file mode 100644 index 00000000..9227ffd7 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_coherent.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_constant.spv32 b/test_conformance/spirv_new/spirv_bin/decorate_constant.spv32 new file mode 100644 index 00000000..63f1fa08 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_constant.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_constant.spv64 b/test_conformance/spirv_new/spirv_bin/decorate_constant.spv64 new file mode 100644 index 00000000..b9fa920f Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_constant.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_constant_fail.spv32 b/test_conformance/spirv_new/spirv_bin/decorate_constant_fail.spv32 new file mode 100644 index 00000000..0b6d84cf Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_constant_fail.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_constant_fail.spv64 b/test_conformance/spirv_new/spirv_bin/decorate_constant_fail.spv64 new file mode 100644 index 00000000..67700c1f Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_constant_fail.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_cpacked.spv32 b/test_conformance/spirv_new/spirv_bin/decorate_cpacked.spv32 new file mode 100644 index 00000000..13364847 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_cpacked.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_cpacked.spv64 b/test_conformance/spirv_new/spirv_bin/decorate_cpacked.spv64 new file mode 100644 index 00000000..9fa9b9a2 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_cpacked.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_nonreadable.spv32 b/test_conformance/spirv_new/spirv_bin/decorate_nonreadable.spv32 new file mode 100644 index 00000000..085ef6c7 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_nonreadable.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_nonreadable.spv64 b/test_conformance/spirv_new/spirv_bin/decorate_nonreadable.spv64 new file mode 100644 index 00000000..22f70a14 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_nonreadable.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_nonwritable.spv32 b/test_conformance/spirv_new/spirv_bin/decorate_nonwritable.spv32 new file mode 100644 index 00000000..af3bb37e Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_nonwritable.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_nonwritable.spv64 b/test_conformance/spirv_new/spirv_bin/decorate_nonwritable.spv64 new file mode 100644 index 00000000..7559d52d Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_nonwritable.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_restrict.spv32 b/test_conformance/spirv_new/spirv_bin/decorate_restrict.spv32 new file mode 100644 index 00000000..202d6810 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_restrict.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_restrict.spv64 b/test_conformance/spirv_new/spirv_bin/decorate_restrict.spv64 new file mode 100644 index 00000000..a5389e4f Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_restrict.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_rounding_rte_double_long.spv32 b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rte_double_long.spv32 new file mode 100644 index 00000000..65747902 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rte_double_long.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_rounding_rte_double_long.spv64 b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rte_double_long.spv64 new file mode 100644 index 00000000..9beb6d21 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rte_double_long.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_rounding_rte_float_int.spv32 b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rte_float_int.spv32 new file mode 100644 index 00000000..85ae5fa9 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rte_float_int.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_rounding_rte_float_int.spv64 b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rte_float_int.spv64 new file mode 100644 index 00000000..86094bf5 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rte_float_int.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtn_double_long.spv32 b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtn_double_long.spv32 new file mode 100644 index 00000000..b4d9a429 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtn_double_long.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtn_double_long.spv64 b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtn_double_long.spv64 new file mode 100644 index 00000000..2520d57d Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtn_double_long.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtn_float_int.spv32 b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtn_float_int.spv32 new file mode 100644 index 00000000..ebd57929 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtn_float_int.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtn_float_int.spv64 b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtn_float_int.spv64 new file mode 100644 index 00000000..ff5e2b52 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtn_float_int.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtp_double_long.spv32 b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtp_double_long.spv32 new file mode 100644 index 00000000..3c8a9f69 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtp_double_long.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtp_double_long.spv64 b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtp_double_long.spv64 new file mode 100644 index 00000000..c4832c79 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtp_double_long.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtp_float_int.spv32 b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtp_float_int.spv32 new file mode 100644 index 00000000..eb5bbf2a Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtp_float_int.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtp_float_int.spv64 b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtp_float_int.spv64 new file mode 100644 index 00000000..f836c096 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtp_float_int.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtz_double_long.spv32 b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtz_double_long.spv32 new file mode 100644 index 00000000..cf6a0f73 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtz_double_long.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtz_double_long.spv64 b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtz_double_long.spv64 new file mode 100644 index 00000000..39c9bee0 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtz_double_long.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtz_float_int.spv32 b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtz_float_int.spv32 new file mode 100644 index 00000000..a1cbf95a Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtz_float_int.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtz_float_int.spv64 b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtz_float_int.spv64 new file mode 100644 index 00000000..5c440276 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_rounding_rtz_float_int.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_char.spv32 b/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_char.spv32 new file mode 100644 index 00000000..66ea8450 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_char.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_char.spv64 b/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_char.spv64 new file mode 100644 index 00000000..ec87755f Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_char.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_int.spv32 b/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_int.spv32 new file mode 100644 index 00000000..ccb5396e Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_int.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_int.spv64 b/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_int.spv64 new file mode 100644 index 00000000..6cb8ffc3 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_int.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_short.spv32 b/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_short.spv32 new file mode 100644 index 00000000..4786da6d Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_short.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_short.spv64 b/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_short.spv64 new file mode 100644 index 00000000..6b76d270 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_short.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_uchar.spv32 b/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_uchar.spv32 new file mode 100644 index 00000000..589334c9 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_uchar.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_uchar.spv64 b/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_uchar.spv64 new file mode 100644 index 00000000..31b10825 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_uchar.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_uint.spv32 b/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_uint.spv32 new file mode 100644 index 00000000..ebc4b81c Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_uint.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_uint.spv64 b/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_uint.spv64 new file mode 100644 index 00000000..0b66792f Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_uint.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_ushort.spv32 b/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_ushort.spv32 new file mode 100644 index 00000000..405f98dc Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_ushort.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_ushort.spv64 b/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_ushort.spv64 new file mode 100644 index 00000000..57b18789 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_saturated_conversion_ushort.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_volatile.spv32 b/test_conformance/spirv_new/spirv_bin/decorate_volatile.spv32 new file mode 100644 index 00000000..00ea3786 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_volatile.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/decorate_volatile.spv64 b/test_conformance/spirv_new/spirv_bin/decorate_volatile.spv64 new file mode 100644 index 00000000..0eaefba4 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/decorate_volatile.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/fadd_double.spv32 b/test_conformance/spirv_new/spirv_bin/fadd_double.spv32 new file mode 100644 index 00000000..84fad15a Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fadd_double.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/fadd_double.spv64 b/test_conformance/spirv_new/spirv_bin/fadd_double.spv64 new file mode 100644 index 00000000..f453a28c Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fadd_double.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/fadd_double2.spv32 b/test_conformance/spirv_new/spirv_bin/fadd_double2.spv32 new file mode 100644 index 00000000..724c71d7 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fadd_double2.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/fadd_double2.spv64 b/test_conformance/spirv_new/spirv_bin/fadd_double2.spv64 new file mode 100644 index 00000000..8bb4fe13 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fadd_double2.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/fadd_float.spv32 b/test_conformance/spirv_new/spirv_bin/fadd_float.spv32 new file mode 100644 index 00000000..238aeee7 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fadd_float.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/fadd_float.spv64 b/test_conformance/spirv_new/spirv_bin/fadd_float.spv64 new file mode 100644 index 00000000..de288552 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fadd_float.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/fadd_float4.spv32 b/test_conformance/spirv_new/spirv_bin/fadd_float4.spv32 new file mode 100644 index 00000000..880f2d92 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fadd_float4.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/fadd_float4.spv64 b/test_conformance/spirv_new/spirv_bin/fadd_float4.spv64 new file mode 100644 index 00000000..652b8f43 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fadd_float4.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/fadd_half.spv32 b/test_conformance/spirv_new/spirv_bin/fadd_half.spv32 new file mode 100644 index 00000000..e0294324 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fadd_half.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/fadd_half.spv64 b/test_conformance/spirv_new/spirv_bin/fadd_half.spv64 new file mode 100644 index 00000000..ce54ba58 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fadd_half.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/fdiv_double.spv32 b/test_conformance/spirv_new/spirv_bin/fdiv_double.spv32 new file mode 100644 index 00000000..4249cea2 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fdiv_double.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/fdiv_double.spv64 b/test_conformance/spirv_new/spirv_bin/fdiv_double.spv64 new file mode 100644 index 00000000..47f39e82 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fdiv_double.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/fdiv_double2.spv32 b/test_conformance/spirv_new/spirv_bin/fdiv_double2.spv32 new file mode 100644 index 00000000..88ef457a Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fdiv_double2.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/fdiv_double2.spv64 b/test_conformance/spirv_new/spirv_bin/fdiv_double2.spv64 new file mode 100644 index 00000000..6d753164 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fdiv_double2.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/fdiv_float.spv32 b/test_conformance/spirv_new/spirv_bin/fdiv_float.spv32 new file mode 100644 index 00000000..3278deae Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fdiv_float.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/fdiv_float.spv64 b/test_conformance/spirv_new/spirv_bin/fdiv_float.spv64 new file mode 100644 index 00000000..687048cb Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fdiv_float.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/fdiv_float4.spv32 b/test_conformance/spirv_new/spirv_bin/fdiv_float4.spv32 new file mode 100644 index 00000000..24b267e7 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fdiv_float4.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/fdiv_float4.spv64 b/test_conformance/spirv_new/spirv_bin/fdiv_float4.spv64 new file mode 100644 index 00000000..5cd84ed1 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fdiv_float4.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/fdiv_half.spv32 b/test_conformance/spirv_new/spirv_bin/fdiv_half.spv32 new file mode 100644 index 00000000..638c44a3 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fdiv_half.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/fdiv_half.spv64 b/test_conformance/spirv_new/spirv_bin/fdiv_half.spv64 new file mode 100644 index 00000000..c7a1bffb Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fdiv_half.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/fmod_double.spv32 b/test_conformance/spirv_new/spirv_bin/fmod_double.spv32 new file mode 100644 index 00000000..80ebe51a Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fmod_double.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/fmod_double.spv64 b/test_conformance/spirv_new/spirv_bin/fmod_double.spv64 new file mode 100644 index 00000000..a9dc49f3 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fmod_double.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/fmod_double2.spv32 b/test_conformance/spirv_new/spirv_bin/fmod_double2.spv32 new file mode 100644 index 00000000..f598faf6 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fmod_double2.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/fmod_double2.spv64 b/test_conformance/spirv_new/spirv_bin/fmod_double2.spv64 new file mode 100644 index 00000000..eadd41ef Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fmod_double2.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/fmod_float.spv32 b/test_conformance/spirv_new/spirv_bin/fmod_float.spv32 new file mode 100644 index 00000000..354087f7 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fmod_float.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/fmod_float.spv64 b/test_conformance/spirv_new/spirv_bin/fmod_float.spv64 new file mode 100644 index 00000000..20a0c703 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fmod_float.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/fmod_float4.spv32 b/test_conformance/spirv_new/spirv_bin/fmod_float4.spv32 new file mode 100644 index 00000000..d6a853c1 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fmod_float4.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/fmod_float4.spv64 b/test_conformance/spirv_new/spirv_bin/fmod_float4.spv64 new file mode 100644 index 00000000..1616a106 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fmod_float4.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/fmod_half.spv32 b/test_conformance/spirv_new/spirv_bin/fmod_half.spv32 new file mode 100644 index 00000000..5fac82e3 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fmod_half.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/fmod_half.spv64 b/test_conformance/spirv_new/spirv_bin/fmod_half.spv64 new file mode 100644 index 00000000..3a411a34 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fmod_half.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/fmul_double.spv32 b/test_conformance/spirv_new/spirv_bin/fmul_double.spv32 new file mode 100644 index 00000000..8018033f Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fmul_double.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/fmul_double.spv64 b/test_conformance/spirv_new/spirv_bin/fmul_double.spv64 new file mode 100644 index 00000000..e7e98079 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fmul_double.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/fmul_double2.spv32 b/test_conformance/spirv_new/spirv_bin/fmul_double2.spv32 new file mode 100644 index 00000000..4057b946 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fmul_double2.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/fmul_double2.spv64 b/test_conformance/spirv_new/spirv_bin/fmul_double2.spv64 new file mode 100644 index 00000000..b3082700 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fmul_double2.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/fmul_float.spv32 b/test_conformance/spirv_new/spirv_bin/fmul_float.spv32 new file mode 100644 index 00000000..96d2a18e Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fmul_float.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/fmul_float.spv64 b/test_conformance/spirv_new/spirv_bin/fmul_float.spv64 new file mode 100644 index 00000000..a160a8e8 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fmul_float.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/fmul_float4.spv32 b/test_conformance/spirv_new/spirv_bin/fmul_float4.spv32 new file mode 100644 index 00000000..5856ef1a Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fmul_float4.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/fmul_float4.spv64 b/test_conformance/spirv_new/spirv_bin/fmul_float4.spv64 new file mode 100644 index 00000000..b3c22bd4 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fmul_float4.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/fmul_half.spv32 b/test_conformance/spirv_new/spirv_bin/fmul_half.spv32 new file mode 100644 index 00000000..f9eff003 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fmul_half.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/fmul_half.spv64 b/test_conformance/spirv_new/spirv_bin/fmul_half.spv64 new file mode 100644 index 00000000..467674e4 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fmul_half.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/frem_double.spv32 b/test_conformance/spirv_new/spirv_bin/frem_double.spv32 new file mode 100644 index 00000000..887e7ec8 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/frem_double.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/frem_double.spv64 b/test_conformance/spirv_new/spirv_bin/frem_double.spv64 new file mode 100644 index 00000000..b11c4e56 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/frem_double.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/frem_double2.spv32 b/test_conformance/spirv_new/spirv_bin/frem_double2.spv32 new file mode 100644 index 00000000..15a7192d Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/frem_double2.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/frem_double2.spv64 b/test_conformance/spirv_new/spirv_bin/frem_double2.spv64 new file mode 100644 index 00000000..13ffb491 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/frem_double2.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/frem_float.spv32 b/test_conformance/spirv_new/spirv_bin/frem_float.spv32 new file mode 100644 index 00000000..7f8e5d55 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/frem_float.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/frem_float.spv64 b/test_conformance/spirv_new/spirv_bin/frem_float.spv64 new file mode 100644 index 00000000..214541c7 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/frem_float.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/frem_float4.spv32 b/test_conformance/spirv_new/spirv_bin/frem_float4.spv32 new file mode 100644 index 00000000..e2f66103 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/frem_float4.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/frem_float4.spv64 b/test_conformance/spirv_new/spirv_bin/frem_float4.spv64 new file mode 100644 index 00000000..4ae62aa8 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/frem_float4.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/frem_half.spv32 b/test_conformance/spirv_new/spirv_bin/frem_half.spv32 new file mode 100644 index 00000000..58da29f1 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/frem_half.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/frem_half.spv64 b/test_conformance/spirv_new/spirv_bin/frem_half.spv64 new file mode 100644 index 00000000..36327524 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/frem_half.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/fsub_double.spv32 b/test_conformance/spirv_new/spirv_bin/fsub_double.spv32 new file mode 100644 index 00000000..8643553a Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fsub_double.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/fsub_double.spv64 b/test_conformance/spirv_new/spirv_bin/fsub_double.spv64 new file mode 100644 index 00000000..63bef826 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fsub_double.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/fsub_double2.spv32 b/test_conformance/spirv_new/spirv_bin/fsub_double2.spv32 new file mode 100644 index 00000000..11dbd588 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fsub_double2.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/fsub_double2.spv64 b/test_conformance/spirv_new/spirv_bin/fsub_double2.spv64 new file mode 100644 index 00000000..22c89d8f Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fsub_double2.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/fsub_float.spv32 b/test_conformance/spirv_new/spirv_bin/fsub_float.spv32 new file mode 100644 index 00000000..aadc29d2 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fsub_float.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/fsub_float.spv64 b/test_conformance/spirv_new/spirv_bin/fsub_float.spv64 new file mode 100644 index 00000000..e8bbec1d Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fsub_float.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/fsub_float4.spv32 b/test_conformance/spirv_new/spirv_bin/fsub_float4.spv32 new file mode 100644 index 00000000..cb97b5c3 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fsub_float4.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/fsub_float4.spv64 b/test_conformance/spirv_new/spirv_bin/fsub_float4.spv64 new file mode 100644 index 00000000..4b2b8d2a Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fsub_float4.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/fsub_half.spv32 b/test_conformance/spirv_new/spirv_bin/fsub_half.spv32 new file mode 100644 index 00000000..4f7e4e90 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fsub_half.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/fsub_half.spv64 b/test_conformance/spirv_new/spirv_bin/fsub_half.spv64 new file mode 100644 index 00000000..f5ccc297 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/fsub_half.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/label_simple.spv32 b/test_conformance/spirv_new/spirv_bin/label_simple.spv32 new file mode 100644 index 00000000..2cd91baa Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/label_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/label_simple.spv64 b/test_conformance/spirv_new/spirv_bin/label_simple.spv64 new file mode 100644 index 00000000..66b4bfc3 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/label_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/lifetime_simple.spv32 b/test_conformance/spirv_new/spirv_bin/lifetime_simple.spv32 new file mode 100644 index 00000000..05fb5be2 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/lifetime_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/lifetime_simple.spv64 b/test_conformance/spirv_new/spirv_bin/lifetime_simple.spv64 new file mode 100644 index 00000000..34c873d5 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/lifetime_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/linkage_export.spv32 b/test_conformance/spirv_new/spirv_bin/linkage_export.spv32 new file mode 100644 index 00000000..280021b6 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/linkage_export.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/linkage_export.spv64 b/test_conformance/spirv_new/spirv_bin/linkage_export.spv64 new file mode 100644 index 00000000..fefdc26c Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/linkage_export.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/linkage_import.spv32 b/test_conformance/spirv_new/spirv_bin/linkage_import.spv32 new file mode 100644 index 00000000..e8ae0f31 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/linkage_import.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/linkage_import.spv64 b/test_conformance/spirv_new/spirv_bin/linkage_import.spv64 new file mode 100644 index 00000000..9aa48765 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/linkage_import.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/loop_merge_branch_conditional_dont_unroll.spv32 b/test_conformance/spirv_new/spirv_bin/loop_merge_branch_conditional_dont_unroll.spv32 new file mode 100644 index 00000000..6e5a1f1f Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/loop_merge_branch_conditional_dont_unroll.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/loop_merge_branch_conditional_dont_unroll.spv64 b/test_conformance/spirv_new/spirv_bin/loop_merge_branch_conditional_dont_unroll.spv64 new file mode 100644 index 00000000..602b5318 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/loop_merge_branch_conditional_dont_unroll.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/loop_merge_branch_conditional_none.spv32 b/test_conformance/spirv_new/spirv_bin/loop_merge_branch_conditional_none.spv32 new file mode 100644 index 00000000..52e1a52c Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/loop_merge_branch_conditional_none.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/loop_merge_branch_conditional_none.spv64 b/test_conformance/spirv_new/spirv_bin/loop_merge_branch_conditional_none.spv64 new file mode 100644 index 00000000..14483d80 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/loop_merge_branch_conditional_none.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/loop_merge_branch_conditional_unroll.spv32 b/test_conformance/spirv_new/spirv_bin/loop_merge_branch_conditional_unroll.spv32 new file mode 100644 index 00000000..81d8e277 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/loop_merge_branch_conditional_unroll.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/loop_merge_branch_conditional_unroll.spv64 b/test_conformance/spirv_new/spirv_bin/loop_merge_branch_conditional_unroll.spv64 new file mode 100644 index 00000000..4e4bc2bd Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/loop_merge_branch_conditional_unroll.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/loop_merge_branch_dont_unroll.spv32 b/test_conformance/spirv_new/spirv_bin/loop_merge_branch_dont_unroll.spv32 new file mode 100644 index 00000000..799140d6 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/loop_merge_branch_dont_unroll.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/loop_merge_branch_dont_unroll.spv64 b/test_conformance/spirv_new/spirv_bin/loop_merge_branch_dont_unroll.spv64 new file mode 100644 index 00000000..d482be77 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/loop_merge_branch_dont_unroll.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/loop_merge_branch_none.spv32 b/test_conformance/spirv_new/spirv_bin/loop_merge_branch_none.spv32 new file mode 100644 index 00000000..b486dd7b Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/loop_merge_branch_none.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/loop_merge_branch_none.spv64 b/test_conformance/spirv_new/spirv_bin/loop_merge_branch_none.spv64 new file mode 100644 index 00000000..cfa96d7f Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/loop_merge_branch_none.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/loop_merge_branch_unroll.spv32 b/test_conformance/spirv_new/spirv_bin/loop_merge_branch_unroll.spv32 new file mode 100644 index 00000000..82459b20 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/loop_merge_branch_unroll.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/loop_merge_branch_unroll.spv64 b/test_conformance/spirv_new/spirv_bin/loop_merge_branch_unroll.spv64 new file mode 100644 index 00000000..b3bff498 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/loop_merge_branch_unroll.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_function_const.spv32 b/test_conformance/spirv_new/spirv_bin/op_function_const.spv32 new file mode 100644 index 00000000..c371d5df Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_function_const.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_function_const.spv64 b/test_conformance/spirv_new/spirv_bin/op_function_const.spv64 new file mode 100644 index 00000000..07df8ab7 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_function_const.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_function_inline.spv32 b/test_conformance/spirv_new/spirv_bin/op_function_inline.spv32 new file mode 100644 index 00000000..3def2ee3 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_function_inline.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_function_inline.spv64 b/test_conformance/spirv_new/spirv_bin/op_function_inline.spv64 new file mode 100644 index 00000000..872e4efe Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_function_inline.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_function_noinline.spv32 b/test_conformance/spirv_new/spirv_bin/op_function_noinline.spv32 new file mode 100644 index 00000000..3ac4c241 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_function_noinline.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_function_noinline.spv64 b/test_conformance/spirv_new/spirv_bin/op_function_noinline.spv64 new file mode 100644 index 00000000..c9fbf134 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_function_noinline.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_function_none.spv32 b/test_conformance/spirv_new/spirv_bin/op_function_none.spv32 new file mode 100644 index 00000000..027522f6 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_function_none.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_function_none.spv64 b/test_conformance/spirv_new/spirv_bin/op_function_none.spv64 new file mode 100644 index 00000000..5411a368 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_function_none.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_function_pure.spv32 b/test_conformance/spirv_new/spirv_bin/op_function_pure.spv32 new file mode 100644 index 00000000..64a261e5 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_function_pure.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_function_pure.spv64 b/test_conformance/spirv_new/spirv_bin/op_function_pure.spv64 new file mode 100644 index 00000000..d03a1b7b Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_function_pure.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_function_pure_ptr.spv32 b/test_conformance/spirv_new/spirv_bin/op_function_pure_ptr.spv32 new file mode 100644 index 00000000..acdec9d6 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_function_pure_ptr.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_function_pure_ptr.spv64 b/test_conformance/spirv_new/spirv_bin/op_function_pure_ptr.spv64 new file mode 100644 index 00000000..34e495b3 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_function_pure_ptr.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_neg_double.spv32 b/test_conformance/spirv_new/spirv_bin/op_neg_double.spv32 new file mode 100644 index 00000000..005d38c4 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_neg_double.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_neg_double.spv64 b/test_conformance/spirv_new/spirv_bin/op_neg_double.spv64 new file mode 100644 index 00000000..71e7241f Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_neg_double.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_neg_float.spv32 b/test_conformance/spirv_new/spirv_bin/op_neg_float.spv32 new file mode 100644 index 00000000..7a89c8dc Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_neg_float.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_neg_float.spv64 b/test_conformance/spirv_new/spirv_bin/op_neg_float.spv64 new file mode 100644 index 00000000..c76a39e9 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_neg_float.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_neg_float4.spv32 b/test_conformance/spirv_new/spirv_bin/op_neg_float4.spv32 new file mode 100644 index 00000000..f1a88fa8 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_neg_float4.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_neg_float4.spv64 b/test_conformance/spirv_new/spirv_bin/op_neg_float4.spv64 new file mode 100644 index 00000000..3d306ea4 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_neg_float4.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_neg_int.spv32 b/test_conformance/spirv_new/spirv_bin/op_neg_int.spv32 new file mode 100644 index 00000000..f7feecdc Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_neg_int.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_neg_int.spv64 b/test_conformance/spirv_new/spirv_bin/op_neg_int.spv64 new file mode 100644 index 00000000..7ad8a109 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_neg_int.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_neg_int4.spv32 b/test_conformance/spirv_new/spirv_bin/op_neg_int4.spv32 new file mode 100644 index 00000000..285f8988 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_neg_int4.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_neg_int4.spv64 b/test_conformance/spirv_new/spirv_bin/op_neg_int4.spv64 new file mode 100644 index 00000000..1fc4696b Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_neg_int4.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_neg_long.spv32 b/test_conformance/spirv_new/spirv_bin/op_neg_long.spv32 new file mode 100644 index 00000000..b4f7fe69 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_neg_long.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_neg_long.spv64 b/test_conformance/spirv_new/spirv_bin/op_neg_long.spv64 new file mode 100644 index 00000000..c5474441 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_neg_long.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_neg_short.spv32 b/test_conformance/spirv_new/spirv_bin/op_neg_short.spv32 new file mode 100644 index 00000000..ddc874b0 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_neg_short.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_neg_short.spv64 b/test_conformance/spirv_new/spirv_bin/op_neg_short.spv64 new file mode 100644 index 00000000..3e29164e Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_neg_short.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_not_int.spv32 b/test_conformance/spirv_new/spirv_bin/op_not_int.spv32 new file mode 100644 index 00000000..892fe554 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_not_int.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_not_int.spv64 b/test_conformance/spirv_new/spirv_bin/op_not_int.spv64 new file mode 100644 index 00000000..3c6f6d87 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_not_int.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_not_int4.spv32 b/test_conformance/spirv_new/spirv_bin/op_not_int4.spv32 new file mode 100644 index 00000000..0af94521 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_not_int4.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_not_int4.spv64 b/test_conformance/spirv_new/spirv_bin/op_not_int4.spv64 new file mode 100644 index 00000000..a40c025e Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_not_int4.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_not_long.spv32 b/test_conformance/spirv_new/spirv_bin/op_not_long.spv32 new file mode 100644 index 00000000..b00d205b Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_not_long.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_not_long.spv64 b/test_conformance/spirv_new/spirv_bin/op_not_long.spv64 new file mode 100644 index 00000000..671a10bb Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_not_long.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_not_short.spv32 b/test_conformance/spirv_new/spirv_bin/op_not_short.spv32 new file mode 100644 index 00000000..fa1a88dd Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_not_short.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/op_not_short.spv64 b/test_conformance/spirv_new/spirv_bin/op_not_short.spv64 new file mode 100644 index 00000000..648f92fb Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/op_not_short.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/opaque.spv32 b/test_conformance/spirv_new/spirv_bin/opaque.spv32 new file mode 100644 index 00000000..3400d988 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/opaque.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/opaque.spv64 b/test_conformance/spirv_new/spirv_bin/opaque.spv64 new file mode 100644 index 00000000..8383e93b Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/opaque.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/phi_2.spv32 b/test_conformance/spirv_new/spirv_bin/phi_2.spv32 new file mode 100644 index 00000000..85558579 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/phi_2.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/phi_2.spv64 b/test_conformance/spirv_new/spirv_bin/phi_2.spv64 new file mode 100644 index 00000000..4ef16fb6 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/phi_2.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/phi_3.spv32 b/test_conformance/spirv_new/spirv_bin/phi_3.spv32 new file mode 100644 index 00000000..c9c6f65a Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/phi_3.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/phi_3.spv64 b/test_conformance/spirv_new/spirv_bin/phi_3.spv64 new file mode 100644 index 00000000..383b3646 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/phi_3.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/phi_4.spv32 b/test_conformance/spirv_new/spirv_bin/phi_4.spv32 new file mode 100644 index 00000000..7221e5ec Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/phi_4.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/phi_4.spv64 b/test_conformance/spirv_new/spirv_bin/phi_4.spv64 new file mode 100644 index 00000000..f5fc7637 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/phi_4.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/select_if_dont_flatten.spv32 b/test_conformance/spirv_new/spirv_bin/select_if_dont_flatten.spv32 new file mode 100644 index 00000000..a82c609e Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/select_if_dont_flatten.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/select_if_dont_flatten.spv64 b/test_conformance/spirv_new/spirv_bin/select_if_dont_flatten.spv64 new file mode 100644 index 00000000..ee6686d6 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/select_if_dont_flatten.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/select_if_flatten.spv32 b/test_conformance/spirv_new/spirv_bin/select_if_flatten.spv32 new file mode 100644 index 00000000..4e53ee51 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/select_if_flatten.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/select_if_flatten.spv64 b/test_conformance/spirv_new/spirv_bin/select_if_flatten.spv64 new file mode 100644 index 00000000..06bc45fa Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/select_if_flatten.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/select_if_none.spv32 b/test_conformance/spirv_new/spirv_bin/select_if_none.spv32 new file mode 100644 index 00000000..59162481 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/select_if_none.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/select_if_none.spv64 b/test_conformance/spirv_new/spirv_bin/select_if_none.spv64 new file mode 100644 index 00000000..32f4248e Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/select_if_none.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/select_switch_dont_flatten.spv32 b/test_conformance/spirv_new/spirv_bin/select_switch_dont_flatten.spv32 new file mode 100644 index 00000000..80092e59 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/select_switch_dont_flatten.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/select_switch_dont_flatten.spv64 b/test_conformance/spirv_new/spirv_bin/select_switch_dont_flatten.spv64 new file mode 100644 index 00000000..b0c9f7ff Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/select_switch_dont_flatten.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/select_switch_flatten.spv32 b/test_conformance/spirv_new/spirv_bin/select_switch_flatten.spv32 new file mode 100644 index 00000000..dad04416 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/select_switch_flatten.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/select_switch_flatten.spv64 b/test_conformance/spirv_new/spirv_bin/select_switch_flatten.spv64 new file mode 100644 index 00000000..3bc755d8 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/select_switch_flatten.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/select_switch_none.spv32 b/test_conformance/spirv_new/spirv_bin/select_switch_none.spv32 new file mode 100644 index 00000000..c26e4a4f Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/select_switch_none.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/select_switch_none.spv64 b/test_conformance/spirv_new/spirv_bin/select_switch_none.spv64 new file mode 100644 index 00000000..43eea32a Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/select_switch_none.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_char_simple.spv32 b/test_conformance/spirv_new/spirv_bin/undef_char_simple.spv32 new file mode 100644 index 00000000..aaa7d8d4 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_char_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_char_simple.spv64 b/test_conformance/spirv_new/spirv_bin/undef_char_simple.spv64 new file mode 100644 index 00000000..73318ea7 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_char_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_double_simple.spv32 b/test_conformance/spirv_new/spirv_bin/undef_double_simple.spv32 new file mode 100644 index 00000000..f5274718 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_double_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_double_simple.spv64 b/test_conformance/spirv_new/spirv_bin/undef_double_simple.spv64 new file mode 100644 index 00000000..8260c99f Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_double_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_false_simple.spv32 b/test_conformance/spirv_new/spirv_bin/undef_false_simple.spv32 new file mode 100644 index 00000000..1387d14e Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_false_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_false_simple.spv64 b/test_conformance/spirv_new/spirv_bin/undef_false_simple.spv64 new file mode 100644 index 00000000..5b3c33d3 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_false_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_float_simple.spv32 b/test_conformance/spirv_new/spirv_bin/undef_float_simple.spv32 new file mode 100644 index 00000000..fe1365ab Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_float_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_float_simple.spv64 b/test_conformance/spirv_new/spirv_bin/undef_float_simple.spv64 new file mode 100644 index 00000000..d3a78f16 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_float_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_half_simple.spv32 b/test_conformance/spirv_new/spirv_bin/undef_half_simple.spv32 new file mode 100644 index 00000000..947fdc95 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_half_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_half_simple.spv64 b/test_conformance/spirv_new/spirv_bin/undef_half_simple.spv64 new file mode 100644 index 00000000..ef6473f0 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_half_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_int3_simple.spv32 b/test_conformance/spirv_new/spirv_bin/undef_int3_simple.spv32 new file mode 100644 index 00000000..7c7f2a2e Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_int3_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_int3_simple.spv64 b/test_conformance/spirv_new/spirv_bin/undef_int3_simple.spv64 new file mode 100644 index 00000000..38e6b23a Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_int3_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_int4_simple.spv32 b/test_conformance/spirv_new/spirv_bin/undef_int4_simple.spv32 new file mode 100644 index 00000000..9905f137 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_int4_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_int4_simple.spv64 b/test_conformance/spirv_new/spirv_bin/undef_int4_simple.spv64 new file mode 100644 index 00000000..92c785a2 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_int4_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_int_simple.spv32 b/test_conformance/spirv_new/spirv_bin/undef_int_simple.spv32 new file mode 100644 index 00000000..a7fc24e8 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_int_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_int_simple.spv64 b/test_conformance/spirv_new/spirv_bin/undef_int_simple.spv64 new file mode 100644 index 00000000..ee152ea3 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_int_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_long_simple.spv32 b/test_conformance/spirv_new/spirv_bin/undef_long_simple.spv32 new file mode 100644 index 00000000..6c304c6a Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_long_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_long_simple.spv64 b/test_conformance/spirv_new/spirv_bin/undef_long_simple.spv64 new file mode 100644 index 00000000..087bb131 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_long_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_short_simple.spv32 b/test_conformance/spirv_new/spirv_bin/undef_short_simple.spv32 new file mode 100644 index 00000000..c55c7ed7 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_short_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_short_simple.spv64 b/test_conformance/spirv_new/spirv_bin/undef_short_simple.spv64 new file mode 100644 index 00000000..9aa240ce Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_short_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_struct_int_char_simple.spv32 b/test_conformance/spirv_new/spirv_bin/undef_struct_int_char_simple.spv32 new file mode 100644 index 00000000..652b8358 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_struct_int_char_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_struct_int_char_simple.spv64 b/test_conformance/spirv_new/spirv_bin/undef_struct_int_char_simple.spv64 new file mode 100644 index 00000000..092cee07 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_struct_int_char_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_struct_int_float_simple.spv32 b/test_conformance/spirv_new/spirv_bin/undef_struct_int_float_simple.spv32 new file mode 100644 index 00000000..f6ad4ceb Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_struct_int_float_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_struct_int_float_simple.spv64 b/test_conformance/spirv_new/spirv_bin/undef_struct_int_float_simple.spv64 new file mode 100644 index 00000000..a1ef3fc5 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_struct_int_float_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_struct_struct_simple.spv32 b/test_conformance/spirv_new/spirv_bin/undef_struct_struct_simple.spv32 new file mode 100644 index 00000000..a66ae58a Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_struct_struct_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_struct_struct_simple.spv64 b/test_conformance/spirv_new/spirv_bin/undef_struct_struct_simple.spv64 new file mode 100644 index 00000000..80304402 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_struct_struct_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_true_simple.spv32 b/test_conformance/spirv_new/spirv_bin/undef_true_simple.spv32 new file mode 100644 index 00000000..bf658802 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_true_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_true_simple.spv64 b/test_conformance/spirv_new/spirv_bin/undef_true_simple.spv64 new file mode 100644 index 00000000..41c2bef9 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_true_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_uchar_simple.spv32 b/test_conformance/spirv_new/spirv_bin/undef_uchar_simple.spv32 new file mode 100644 index 00000000..e3b3074e Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_uchar_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_uchar_simple.spv64 b/test_conformance/spirv_new/spirv_bin/undef_uchar_simple.spv64 new file mode 100644 index 00000000..929d352e Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_uchar_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_uint_simple.spv32 b/test_conformance/spirv_new/spirv_bin/undef_uint_simple.spv32 new file mode 100644 index 00000000..cd0c23ca Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_uint_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_uint_simple.spv64 b/test_conformance/spirv_new/spirv_bin/undef_uint_simple.spv64 new file mode 100644 index 00000000..6e58cef7 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_uint_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_ulong_simple.spv32 b/test_conformance/spirv_new/spirv_bin/undef_ulong_simple.spv32 new file mode 100644 index 00000000..4a51c3cb Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_ulong_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_ulong_simple.spv64 b/test_conformance/spirv_new/spirv_bin/undef_ulong_simple.spv64 new file mode 100644 index 00000000..f0c9959e Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_ulong_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_ushort_simple.spv32 b/test_conformance/spirv_new/spirv_bin/undef_ushort_simple.spv32 new file mode 100644 index 00000000..6030982b Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_ushort_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/undef_ushort_simple.spv64 b/test_conformance/spirv_new/spirv_bin/undef_ushort_simple.spv64 new file mode 100644 index 00000000..c348a95d Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/undef_ushort_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/unreachable_simple.spv32 b/test_conformance/spirv_new/spirv_bin/unreachable_simple.spv32 new file mode 100644 index 00000000..2411c130 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/unreachable_simple.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/unreachable_simple.spv64 b/test_conformance/spirv_new/spirv_bin/unreachable_simple.spv64 new file mode 100644 index 00000000..70596a0e Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/unreachable_simple.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/vector_char16_extract.spv32 b/test_conformance/spirv_new/spirv_bin/vector_char16_extract.spv32 new file mode 100644 index 00000000..567f79fd Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/vector_char16_extract.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/vector_char16_extract.spv64 b/test_conformance/spirv_new/spirv_bin/vector_char16_extract.spv64 new file mode 100644 index 00000000..65dde381 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/vector_char16_extract.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/vector_char16_insert.spv32 b/test_conformance/spirv_new/spirv_bin/vector_char16_insert.spv32 new file mode 100644 index 00000000..ac3f8ead Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/vector_char16_insert.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/vector_char16_insert.spv64 b/test_conformance/spirv_new/spirv_bin/vector_char16_insert.spv64 new file mode 100644 index 00000000..3e127407 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/vector_char16_insert.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/vector_double2_extract.spv32 b/test_conformance/spirv_new/spirv_bin/vector_double2_extract.spv32 new file mode 100644 index 00000000..b90d90a5 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/vector_double2_extract.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/vector_double2_extract.spv64 b/test_conformance/spirv_new/spirv_bin/vector_double2_extract.spv64 new file mode 100644 index 00000000..f7cf8a74 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/vector_double2_extract.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/vector_double2_insert.spv32 b/test_conformance/spirv_new/spirv_bin/vector_double2_insert.spv32 new file mode 100644 index 00000000..7d50d010 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/vector_double2_insert.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/vector_double2_insert.spv64 b/test_conformance/spirv_new/spirv_bin/vector_double2_insert.spv64 new file mode 100644 index 00000000..1dd7e636 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/vector_double2_insert.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/vector_float4_extract.spv32 b/test_conformance/spirv_new/spirv_bin/vector_float4_extract.spv32 new file mode 100644 index 00000000..dab24e00 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/vector_float4_extract.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/vector_float4_extract.spv64 b/test_conformance/spirv_new/spirv_bin/vector_float4_extract.spv64 new file mode 100644 index 00000000..16d0194f Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/vector_float4_extract.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/vector_float4_insert.spv32 b/test_conformance/spirv_new/spirv_bin/vector_float4_insert.spv32 new file mode 100644 index 00000000..c613d211 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/vector_float4_insert.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/vector_float4_insert.spv64 b/test_conformance/spirv_new/spirv_bin/vector_float4_insert.spv64 new file mode 100644 index 00000000..0d84bd6e Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/vector_float4_insert.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/vector_int4_extract.spv32 b/test_conformance/spirv_new/spirv_bin/vector_int4_extract.spv32 new file mode 100644 index 00000000..e1a38be1 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/vector_int4_extract.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/vector_int4_extract.spv64 b/test_conformance/spirv_new/spirv_bin/vector_int4_extract.spv64 new file mode 100644 index 00000000..8ea6cb15 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/vector_int4_extract.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/vector_int4_insert.spv32 b/test_conformance/spirv_new/spirv_bin/vector_int4_insert.spv32 new file mode 100644 index 00000000..e2121368 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/vector_int4_insert.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/vector_int4_insert.spv64 b/test_conformance/spirv_new/spirv_bin/vector_int4_insert.spv64 new file mode 100644 index 00000000..faf0238e Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/vector_int4_insert.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/vector_long2_extract.spv32 b/test_conformance/spirv_new/spirv_bin/vector_long2_extract.spv32 new file mode 100644 index 00000000..aa7fe80e Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/vector_long2_extract.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/vector_long2_extract.spv64 b/test_conformance/spirv_new/spirv_bin/vector_long2_extract.spv64 new file mode 100644 index 00000000..7efda1ee Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/vector_long2_extract.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/vector_long2_insert.spv32 b/test_conformance/spirv_new/spirv_bin/vector_long2_insert.spv32 new file mode 100644 index 00000000..e42212f2 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/vector_long2_insert.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/vector_long2_insert.spv64 b/test_conformance/spirv_new/spirv_bin/vector_long2_insert.spv64 new file mode 100644 index 00000000..9ef31d8b Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/vector_long2_insert.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/vector_times_scalar_double.spv32 b/test_conformance/spirv_new/spirv_bin/vector_times_scalar_double.spv32 new file mode 100644 index 00000000..8e672ddd Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/vector_times_scalar_double.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/vector_times_scalar_double.spv64 b/test_conformance/spirv_new/spirv_bin/vector_times_scalar_double.spv64 new file mode 100644 index 00000000..21e4dc40 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/vector_times_scalar_double.spv64 differ diff --git a/test_conformance/spirv_new/spirv_bin/vector_times_scalar_float.spv32 b/test_conformance/spirv_new/spirv_bin/vector_times_scalar_float.spv32 new file mode 100644 index 00000000..2c4d9c3e Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/vector_times_scalar_float.spv32 differ diff --git a/test_conformance/spirv_new/spirv_bin/vector_times_scalar_float.spv64 b/test_conformance/spirv_new/spirv_bin/vector_times_scalar_float.spv64 new file mode 100644 index 00000000..94dff077 Binary files /dev/null and b/test_conformance/spirv_new/spirv_bin/vector_times_scalar_float.spv64 differ diff --git a/test_conformance/spirv_new/spirv_txt/atomic_dec_global.spvasm32 b/test_conformance/spirv_new/spirv_txt/atomic_dec_global.spvasm32 new file mode 100644 index 00000000..cc6f048e --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/atomic_dec_global.spvasm32 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "atomic_dec_global" + OpName %global_id "__spirv_GlobalInvocationId" + OpName %val_ptr "val" + OpName %ctr_ptr "counter" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %val_ptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t +%scope_dev = OpConstant %int_t 1 +%sem_cwg = OpConstant %int_t 512 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%val_ptr = OpFunctionParameter %int_ptr_t +%ctr_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%res = OpAtomicIDecrement %int_t %ctr_ptr %scope_dev %sem_cwg +%val_loc = OpInBoundsPtrAccessChain %int_ptr_t %val_ptr %idx + OpStore %val_loc %res Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/atomic_dec_global.spvasm64 b/test_conformance/spirv_new/spirv_txt/atomic_dec_global.spvasm64 new file mode 100644 index 00000000..4df145f5 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/atomic_dec_global.spvasm64 @@ -0,0 +1,37 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "atomic_dec_global" + OpName %global_id "__spirv_GlobalInvocationId" + OpName %val_ptr "val" + OpName %ctr_ptr "counter" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %val_ptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t +%scope_dev = OpConstant %int_t 1 +%sem_cwg = OpConstant %int_t 512 +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%val_ptr = OpFunctionParameter %int_ptr_t +%ctr_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%res = OpAtomicIDecrement %int_t %ctr_ptr %scope_dev %sem_cwg +%val_loc = OpInBoundsPtrAccessChain %int_ptr_t %val_ptr %idx + OpStore %val_loc %res Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/atomic_inc_global.spvasm32 b/test_conformance/spirv_new/spirv_txt/atomic_inc_global.spvasm32 new file mode 100644 index 00000000..c6c8b30c --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/atomic_inc_global.spvasm32 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "atomic_inc_global" + OpName %global_id "__spirv_GlobalInvocationId" + OpName %val_ptr "val" + OpName %ctr_ptr "counter" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %val_ptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t +%scope_dev = OpConstant %int_t 1 +%sem_cwg = OpConstant %int_t 512 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%val_ptr = OpFunctionParameter %int_ptr_t +%ctr_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%res = OpAtomicIIncrement %int_t %ctr_ptr %scope_dev %sem_cwg +%val_loc = OpInBoundsPtrAccessChain %int_ptr_t %val_ptr %idx + OpStore %val_loc %res Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/atomic_inc_global.spvasm64 b/test_conformance/spirv_new/spirv_txt/atomic_inc_global.spvasm64 new file mode 100644 index 00000000..ec0a35d1 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/atomic_inc_global.spvasm64 @@ -0,0 +1,37 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "atomic_inc_global" + OpName %global_id "__spirv_GlobalInvocationId" + OpName %val_ptr "val" + OpName %ctr_ptr "counter" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %val_ptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t +%scope_dev = OpConstant %int_t 1 +%sem_cwg = OpConstant %int_t 512 +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%val_ptr = OpFunctionParameter %int_ptr_t +%ctr_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%res = OpAtomicIIncrement %int_t %ctr_ptr %scope_dev %sem_cwg +%val_loc = OpInBoundsPtrAccessChain %int_ptr_t %val_ptr %idx + OpStore %val_loc %res Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/branch_conditional.spvasm32 b/test_conformance/spirv_new/spirv_txt/branch_conditional.spvasm32 new file mode 100644 index 00000000..40a0404d --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/branch_conditional.spvasm32 @@ -0,0 +1,53 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "branch_conditional" + OpName %out_ptr "res" + OpName %lhs_ptr "lhs" + OpName %rhs_ptr "rhs" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %lhs_ptr %rhs_ptr +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_zero = OpConstant %int_t 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%lhs_ptr = OpFunctionParameter %int_ptr_t +%rhs_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%lhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %lhs_ptr %idx +%lhs_val = OpLoad %int_t %lhs_loc Aligned 4 +%rhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %rhs_ptr %idx +%rhs_val = OpLoad %int_t %rhs_loc Aligned 4 +%tmp = OpVariable %tmp_ptr_t Function +%compare = OpSLessThan %bool_t %lhs_val %rhs_val + OpBranchConditional %compare %block1 %block2 +%block1 = OpLabel +%out1 = OpISub %int_t %rhs_val %lhs_val + OpStore %tmp %out1 + OpBranch %final_block +%block2 = OpLabel +%out2 = OpISub %int_t %lhs_val %rhs_val + OpStore %tmp %out2 + OpBranch %final_block +%final_block = OpLabel +%out_val = OpLoad %int_t %tmp +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/branch_conditional.spvasm64 b/test_conformance/spirv_new/spirv_txt/branch_conditional.spvasm64 new file mode 100644 index 00000000..e318e14c --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/branch_conditional.spvasm64 @@ -0,0 +1,58 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "branch_conditional" + OpName %out_ptr "res" + OpName %lhs_ptr "lhs" + OpName %rhs_ptr "rhs" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %lhs_ptr %rhs_ptr +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%shift_val = OpConstant %idx_t 32 +%int_zero = OpConstant %int_t 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%lhs_ptr = OpFunctionParameter %int_ptr_t +%rhs_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%lhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %lhs_ptr %idx +%lhs_val = OpLoad %int_t %lhs_loc Aligned 4 +%rhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %rhs_ptr %idx +%rhs_val = OpLoad %int_t %rhs_loc Aligned 4 +%tmp = OpVariable %tmp_ptr_t Function + OpStore %tmp %int_zero +%compare = OpSLessThan %bool_t %lhs_val %rhs_val + OpBranchConditional %compare %block1 %block2 +%block1 = OpLabel +%out1 = OpISub %int_t %rhs_val %lhs_val + OpStore %tmp %out1 + OpBranch %final_block +%block2 = OpLabel +%out2 = OpISub %int_t %lhs_val %rhs_val + OpStore %tmp %out2 + OpBranch %final_block +%final_block = OpLabel +%out_val = OpLoad %int_t %tmp +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/branch_conditional_weighted.spvasm32 b/test_conformance/spirv_new/spirv_txt/branch_conditional_weighted.spvasm32 new file mode 100644 index 00000000..779d5ef9 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/branch_conditional_weighted.spvasm32 @@ -0,0 +1,53 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "branch_conditional_weighted" + OpName %out_ptr "res" + OpName %lhs_ptr "lhs" + OpName %rhs_ptr "rhs" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %lhs_ptr %rhs_ptr +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_zero = OpConstant %int_t 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%lhs_ptr = OpFunctionParameter %int_ptr_t +%rhs_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%lhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %lhs_ptr %idx +%lhs_val = OpLoad %int_t %lhs_loc Aligned 4 +%rhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %rhs_ptr %idx +%rhs_val = OpLoad %int_t %rhs_loc Aligned 4 +%tmp = OpVariable %tmp_ptr_t Function +%compare = OpSLessThan %bool_t %lhs_val %rhs_val + OpBranchConditional %compare %block1 %block2 4 6 +%block1 = OpLabel +%out1 = OpISub %int_t %rhs_val %lhs_val + OpStore %tmp %out1 + OpBranch %final_block +%block2 = OpLabel +%out2 = OpISub %int_t %lhs_val %rhs_val + OpStore %tmp %out2 + OpBranch %final_block +%final_block = OpLabel +%out_val = OpLoad %int_t %tmp +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/branch_conditional_weighted.spvasm64 b/test_conformance/spirv_new/spirv_txt/branch_conditional_weighted.spvasm64 new file mode 100644 index 00000000..6ae492f9 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/branch_conditional_weighted.spvasm64 @@ -0,0 +1,58 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "branch_conditional_weighted" + OpName %out_ptr "res" + OpName %lhs_ptr "lhs" + OpName %rhs_ptr "rhs" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %lhs_ptr %rhs_ptr +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%shift_val = OpConstant %idx_t 32 +%int_zero = OpConstant %int_t 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%lhs_ptr = OpFunctionParameter %int_ptr_t +%rhs_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%lhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %lhs_ptr %idx +%lhs_val = OpLoad %int_t %lhs_loc Aligned 4 +%rhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %rhs_ptr %idx +%rhs_val = OpLoad %int_t %rhs_loc Aligned 4 +%tmp = OpVariable %tmp_ptr_t Function + OpStore %tmp %int_zero +%compare = OpSLessThan %bool_t %lhs_val %rhs_val + OpBranchConditional %compare %block1 %block2 4 6 +%block1 = OpLabel +%out1 = OpISub %int_t %rhs_val %lhs_val + OpStore %tmp %out1 + OpBranch %final_block +%block2 = OpLabel +%out2 = OpISub %int_t %lhs_val %rhs_val + OpStore %tmp %out2 + OpBranch %final_block +%final_block = OpLabel +%out_val = OpLoad %int_t %tmp +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/branch_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/branch_simple.spvasm32 new file mode 100644 index 00000000..8d2308e3 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/branch_simple.spvasm32 @@ -0,0 +1,32 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "branch_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int_ptr_t +%outptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current_in = OpInBoundsPtrAccessChain %int_ptr_t %inptr %idx +%current_out = OpInBoundsPtrAccessChain %int_ptr_t %outptr %idx +%val = OpLoad %int_t %current_in + OpBranch %final_block +%final_block = OpLabel + OpStore %current_out %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/branch_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/branch_simple.spvasm64 new file mode 100644 index 00000000..9d4f5884 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/branch_simple.spvasm64 @@ -0,0 +1,37 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "branch_simple" + OpName %inptr "in" + OpName %outptr "out" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%shift_val = OpConstant %idx_t 32 +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int_ptr_t +%outptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current_in = OpInBoundsPtrAccessChain %int_ptr_t %inptr %idx +%current_out = OpInBoundsPtrAccessChain %int_ptr_t %outptr %idx + OpBranch %final_block +%final_block = OpLabel +%val = OpLoad %int_t %current_in + OpStore %current_out %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/composite_construct_int4.spvasm32 b/test_conformance/spirv_new/spirv_txt/composite_construct_int4.spvasm32 new file mode 100644 index 00000000..a4de927f --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/composite_construct_int4.spvasm32 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "composite_construct_int4" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int4_t = OpTypeVector %int_t 4 +%int4_ptr_t = OpTypePointer CrossWorkgroup %int4_t +%func_t = OpTypeFunction %void_t %int4_ptr_t +%val0 = OpConstant %int_t 123 +%val1 = OpConstant %int_t 122 +%val2 = OpConstant %int_t 121 +%val3 = OpConstant %int_t 119 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int4_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%vec = OpCompositeConstruct %int4_t %val0 %val1 %val2 %val3 +%current = OpInBoundsPtrAccessChain %int4_ptr_t %inptr %idx + OpStore %current %vec Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/composite_construct_int4.spvasm64 b/test_conformance/spirv_new/spirv_txt/composite_construct_int4.spvasm64 new file mode 100644 index 00000000..69806cbe --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/composite_construct_int4.spvasm64 @@ -0,0 +1,37 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "composite_construct_int4" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int4_t = OpTypeVector %int_t 4 +%int4_ptr_t = OpTypePointer CrossWorkgroup %int4_t +%func_t = OpTypeFunction %void_t %int4_ptr_t +%shift_val = OpConstant %idx_t 32 +%val0 = OpConstant %int_t 123 +%val1 = OpConstant %int_t 122 +%val2 = OpConstant %int_t 121 +%val3 = OpConstant %int_t 119 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int4_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%vec = OpCompositeConstruct %int4_t %val0 %val1 %val2 %val3 +%current = OpInBoundsPtrAccessChain %int4_ptr_t %inptr %idx + OpStore %current %vec + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/composite_construct_struct.spvasm32 b/test_conformance/spirv_new/spirv_txt/composite_construct_struct.spvasm32 new file mode 100644 index 00000000..270c2e7e --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/composite_construct_struct.spvasm32 @@ -0,0 +1,39 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int8 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "composite_construct_struct" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int2_t = OpTypeVector %int_t 2 +%char_t = OpTypeInt 8 0 +%struct_t = OpTypeStruct %int_t %char_t +%struct2_t = OpTypeStruct %int2_t %struct_t +%struct_ptr_t = OpTypePointer CrossWorkgroup %struct2_t +%func_t = OpTypeFunction %void_t %struct_ptr_t +%int_val = OpConstant %int_t 2100483600 +%char_val = OpConstant %char_t 128 +%int_vec_0 = OpConstant %int_t 2100480000 +%int_vec_1 = OpConstant %int_t 2100480000 +%int2_val = OpConstantComposite %int2_t %int_vec_0 %int_vec_1 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %struct_ptr_t +%entry = OpLabel +%struct_val = OpCompositeConstruct %struct_t %int_val %char_val +%struct2_val = OpCompositeConstruct %struct2_t %int2_val %struct_val +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %struct_ptr_t %inptr %idx + OpStore %current %struct2_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/composite_construct_struct.spvasm64 b/test_conformance/spirv_new/spirv_txt/composite_construct_struct.spvasm64 new file mode 100644 index 00000000..67c99bc0 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/composite_construct_struct.spvasm64 @@ -0,0 +1,43 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int8 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "composite_construct_struct" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int2_t = OpTypeVector %int_t 2 +%char_t = OpTypeInt 8 0 +%struct_t = OpTypeStruct %int_t %char_t +%struct2_t = OpTypeStruct %int2_t %struct_t +%struct_ptr_t = OpTypePointer CrossWorkgroup %struct2_t +%func_t = OpTypeFunction %void_t %struct_ptr_t +%shift_val = OpConstant %idx_t 32 +%int_val = OpConstant %int_t 2100483600 +%char_val = OpConstant %char_t 128 +%int_vec_0 = OpConstant %int_t 2100480000 +%int_vec_1 = OpConstant %int_t 2100480000 +%int2_val = OpConstantComposite %int2_t %int_vec_0 %int_vec_1 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %struct_ptr_t +%entry = OpLabel +%struct_val = OpCompositeConstruct %struct_t %int_val %char_val +%struct2_val = OpCompositeConstruct %struct2_t %int2_val %struct_val +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %struct_ptr_t %inptr %idx + OpStore %current %struct2_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_char_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/constant_char_simple.spvasm32 new file mode 100644 index 00000000..9ce758a2 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_char_simple.spvasm32 @@ -0,0 +1,29 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int8 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "constant_char_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%char_t = OpTypeInt 8 0 +%char_ptr_t = OpTypePointer CrossWorkgroup %char_t +%func_t = OpTypeFunction %void_t %char_ptr_t +%val = OpConstant %char_t 20 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %char_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %char_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_char_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/constant_char_simple.spvasm64 new file mode 100644 index 00000000..8c5cea76 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_char_simple.spvasm64 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int8 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "constant_char_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%char_t = OpTypeInt 8 0 +%char_ptr_t = OpTypePointer CrossWorkgroup %char_t +%func_t = OpTypeFunction %void_t %char_ptr_t +%shift_val = OpConstant %idx_t 32 +%val = OpConstant %char_t 20 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %char_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %char_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_double_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/constant_double_simple.spvasm32 new file mode 100644 index 00000000..15af1dae --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_double_simple.spvasm32 @@ -0,0 +1,29 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Float64 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "constant_double_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%double_t = OpTypeFloat 64 +%double_ptr_t = OpTypePointer CrossWorkgroup %double_t +%func_t = OpTypeFunction %void_t %double_ptr_t +%val = OpConstant %double_t 3.141592653589793 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %double_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %double_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_double_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/constant_double_simple.spvasm64 new file mode 100644 index 00000000..52a95c20 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_double_simple.spvasm64 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Float64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "constant_double_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%double_t = OpTypeFloat 64 +%double_ptr_t = OpTypePointer CrossWorkgroup %double_t +%func_t = OpTypeFunction %void_t %double_ptr_t +%shift_val = OpConstant %idx_t 32 +%val = OpConstant %double_t 3.141592653589793 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %double_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %double_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_false_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/constant_false_simple.spvasm32 new file mode 100644 index 00000000..67ea6f1c --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_false_simple.spvasm32 @@ -0,0 +1,32 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "constant_false_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%bool_t = OpTypeBool +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t +%bool_val = OpConstantFalse %bool_t +%true_val = OpConstant %int_t 1 +%false_val = OpConstant %int_t 0 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%val = OpSelect %int_t %bool_val %true_val %false_val +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %int_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_false_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/constant_false_simple.spvasm64 new file mode 100644 index 00000000..99f203bf --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_false_simple.spvasm64 @@ -0,0 +1,36 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "constant_false_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%bool_t = OpTypeBool +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t +%shift_val = OpConstant %idx_t 32 +%bool_val = OpConstantFalse %bool_t +%true_val = OpConstant %int_t 1 +%false_val = OpConstant %int_t 0 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%val = OpSelect %int_t %bool_val %true_val %false_val +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %int_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_float_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/constant_float_simple.spvasm32 new file mode 100644 index 00000000..54aa082b --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_float_simple.spvasm32 @@ -0,0 +1,28 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "constant_float_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%val = OpConstant %float_t 3.1415927 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %float_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_float_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/constant_float_simple.spvasm64 new file mode 100644 index 00000000..f52a86a8 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_float_simple.spvasm64 @@ -0,0 +1,32 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "constant_float_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%val = OpConstant %float_t 3.1415927 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %float_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_half_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/constant_half_simple.spvasm32 new file mode 100644 index 00000000..c8cdb9f4 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_half_simple.spvasm32 @@ -0,0 +1,31 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Float16 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "constant_half_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%half_t = OpTypeFloat 16 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%half_val = OpConstant %half_t 3.25 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%val = OpFConvert %float_t %half_val +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %float_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_half_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/constant_half_simple.spvasm64 new file mode 100644 index 00000000..ab33b6a1 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_half_simple.spvasm64 @@ -0,0 +1,35 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Float16 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "constant_half_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%half_t = OpTypeFloat 16 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%half_val = OpConstant %half_t 3.25 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%val = OpFConvert %float_t %half_val +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %float_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_int3_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/constant_int3_simple.spvasm32 new file mode 100644 index 00000000..752a52e4 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_int3_simple.spvasm32 @@ -0,0 +1,32 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "constant_int3_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int3_t = OpTypeVector %int_t 3 +%int3_ptr_t = OpTypePointer CrossWorkgroup %int3_t +%func_t = OpTypeFunction %void_t %int3_ptr_t +%val0 = OpConstant %int_t 123 +%val1 = OpConstant %int_t 122 +%val2 = OpConstant %int_t 121 +%vec = OpConstantComposite %int3_t %val0 %val1 %val2 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int3_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %int3_ptr_t %inptr %idx + OpStore %current %vec Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_int3_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/constant_int3_simple.spvasm64 new file mode 100644 index 00000000..def2ae5f --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_int3_simple.spvasm64 @@ -0,0 +1,36 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "constant_int3_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int3_t = OpTypeVector %int_t 3 +%int3_ptr_t = OpTypePointer CrossWorkgroup %int3_t +%func_t = OpTypeFunction %void_t %int3_ptr_t +%shift_val = OpConstant %idx_t 32 +%val0 = OpConstant %int_t 123 +%val1 = OpConstant %int_t 122 +%val2 = OpConstant %int_t 121 +%vec = OpConstantComposite %int3_t %val0 %val1 %val2 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int3_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %int3_ptr_t %inptr %idx + OpStore %current %vec Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_int4_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/constant_int4_simple.spvasm32 new file mode 100644 index 00000000..04523f8a --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_int4_simple.spvasm32 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "constant_int4_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int4_t = OpTypeVector %int_t 4 +%int4_ptr_t = OpTypePointer CrossWorkgroup %int4_t +%func_t = OpTypeFunction %void_t %int4_ptr_t +%val0 = OpConstant %int_t 123 +%val1 = OpConstant %int_t 122 +%val2 = OpConstant %int_t 121 +%val3 = OpConstant %int_t 119 +%vec = OpConstantComposite %int4_t %val0 %val1 %val2 %val3 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int4_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %int4_ptr_t %inptr %idx + OpStore %current %vec Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_int4_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/constant_int4_simple.spvasm64 new file mode 100644 index 00000000..d3c741f3 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_int4_simple.spvasm64 @@ -0,0 +1,37 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "constant_int4_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int4_t = OpTypeVector %int_t 4 +%int4_ptr_t = OpTypePointer CrossWorkgroup %int4_t +%func_t = OpTypeFunction %void_t %int4_ptr_t +%shift_val = OpConstant %idx_t 32 +%val0 = OpConstant %int_t 123 +%val1 = OpConstant %int_t 122 +%val2 = OpConstant %int_t 121 +%val3 = OpConstant %int_t 119 +%vec = OpConstantComposite %int4_t %val0 %val1 %val2 %val3 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int4_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %int4_ptr_t %inptr %idx + OpStore %current %vec + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_int_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/constant_int_simple.spvasm32 new file mode 100644 index 00000000..2f7e7d7a --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_int_simple.spvasm32 @@ -0,0 +1,28 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "constant_int_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t +%val = OpConstant %int_t 123 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %int_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_int_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/constant_int_simple.spvasm64 new file mode 100644 index 00000000..f2e8a6fb --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_int_simple.spvasm64 @@ -0,0 +1,32 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "constant_int_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t +%shift_val = OpConstant %idx_t 32 +%val = OpConstant %int_t 123 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %int_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_long_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/constant_long_simple.spvasm32 new file mode 100644 index 00000000..46659e7c --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_long_simple.spvasm32 @@ -0,0 +1,29 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "constant_long_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%long_t = OpTypeInt 64 0 +%long_ptr_t = OpTypePointer CrossWorkgroup %long_t +%func_t = OpTypeFunction %void_t %long_ptr_t +%val = OpConstant %long_t 34359738368 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %long_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %long_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_long_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/constant_long_simple.spvasm64 new file mode 100644 index 00000000..626554a9 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_long_simple.spvasm64 @@ -0,0 +1,32 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "constant_long_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%long_t = OpTypeInt 64 0 +%long_ptr_t = OpTypePointer CrossWorkgroup %long_t +%func_t = OpTypeFunction %void_t %long_ptr_t +%shift_val = OpConstant %idx_t 32 +%val = OpConstant %long_t 34359738368 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %long_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %long_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_short_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/constant_short_simple.spvasm32 new file mode 100644 index 00000000..8416d112 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_short_simple.spvasm32 @@ -0,0 +1,29 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int16 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "constant_short_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%short_t = OpTypeInt 16 0 +%short_ptr_t = OpTypePointer CrossWorkgroup %short_t +%func_t = OpTypeFunction %void_t %short_ptr_t +%val = OpConstant %short_t 32000 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %short_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %short_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_short_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/constant_short_simple.spvasm64 new file mode 100644 index 00000000..73a5cfea --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_short_simple.spvasm64 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int16 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "constant_short_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%short_t = OpTypeInt 16 0 +%short_ptr_t = OpTypePointer CrossWorkgroup %short_t +%func_t = OpTypeFunction %void_t %short_ptr_t +%shift_val = OpConstant %idx_t 32 +%val = OpConstant %short_t 32000 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %short_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %short_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_struct_int_char_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/constant_struct_int_char_simple.spvasm32 new file mode 100644 index 00000000..130f2567 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_struct_int_char_simple.spvasm32 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int8 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "constant_struct_int_char_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%char_t = OpTypeInt 8 0 +%struct_t = OpTypeStruct %int_t %char_t +%struct_ptr_t = OpTypePointer CrossWorkgroup %struct_t +%func_t = OpTypeFunction %void_t %struct_ptr_t +%int_val = OpConstant %int_t 2100483600 +%char_val = OpConstant %char_t 128 +%struct_val = OpConstantComposite %struct_t %int_val %char_val +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %struct_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %struct_ptr_t %inptr %idx + OpStore %current %struct_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_struct_int_char_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/constant_struct_int_char_simple.spvasm64 new file mode 100644 index 00000000..d67f91d3 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_struct_int_char_simple.spvasm64 @@ -0,0 +1,37 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int8 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "constant_struct_int_char_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%char_t = OpTypeInt 8 0 +%struct_t = OpTypeStruct %int_t %char_t +%struct_ptr_t = OpTypePointer CrossWorkgroup %struct_t +%func_t = OpTypeFunction %void_t %struct_ptr_t +%shift_val = OpConstant %idx_t 32 +%int_val = OpConstant %int_t 2100483600 +%char_val = OpConstant %char_t 128 +%struct_val = OpConstantComposite %struct_t %int_val %char_val +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %struct_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %struct_ptr_t %inptr %idx + OpStore %current %struct_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_struct_int_float_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/constant_struct_int_float_simple.spvasm32 new file mode 100644 index 00000000..dd53cef7 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_struct_int_float_simple.spvasm32 @@ -0,0 +1,32 @@ + OpCapability Addresses + OpCapability Kernel + OpCapability Linkage + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "constant_struct_int_float_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%float_t = OpTypeFloat 32 +%struct_t = OpTypeStruct %int_t %float_t +%struct_ptr_t = OpTypePointer CrossWorkgroup %struct_t +%func_t = OpTypeFunction %void_t %struct_ptr_t +%int_val = OpConstant %int_t 1024 +%float_val = OpConstant %float_t 3.1415 +%struct_val = OpConstantComposite %struct_t %int_val %float_val +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %struct_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %struct_ptr_t %inptr %idx + OpStore %current %struct_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_struct_int_float_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/constant_struct_int_float_simple.spvasm64 new file mode 100644 index 00000000..14a0ea3d --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_struct_int_float_simple.spvasm64 @@ -0,0 +1,36 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "constant_struct_int_float_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%float_t = OpTypeFloat 32 +%struct_t = OpTypeStruct %int_t %float_t +%struct_ptr_t = OpTypePointer CrossWorkgroup %struct_t +%func_t = OpTypeFunction %void_t %struct_ptr_t +%shift_val = OpConstant %idx_t 32 +%int_val = OpConstant %int_t 1024 +%float_val = OpConstant %float_t 3.1415 +%struct_val = OpConstantComposite %struct_t %int_val %float_val +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %struct_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %struct_ptr_t %inptr %idx + OpStore %current %struct_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_struct_struct_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/constant_struct_struct_simple.spvasm32 new file mode 100644 index 00000000..b61db8ee --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_struct_struct_simple.spvasm32 @@ -0,0 +1,39 @@ + OpCapability Addresses + OpCapability Kernel + OpCapability Linkage + OpCapability Int8 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "constant_struct_struct_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int2_t = OpTypeVector %int_t 2 +%char_t = OpTypeInt 8 0 +%struct_t = OpTypeStruct %int_t %char_t +%struct2_t = OpTypeStruct %int2_t %struct_t +%struct_ptr_t = OpTypePointer CrossWorkgroup %struct2_t +%func_t = OpTypeFunction %void_t %struct_ptr_t +%int_val = OpConstant %int_t 2100483600 +%char_val = OpConstant %char_t 128 +%int_vec_0 = OpConstant %int_t 2100480000 +%int_vec_1 = OpConstant %int_t 2100480000 +%struct_val = OpConstantComposite %struct_t %int_val %char_val +%int2_val = OpConstantComposite %int2_t %int_vec_0 %int_vec_1 +%struct2_val = OpConstantComposite %struct2_t %int2_val %struct_val +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %struct_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %struct_ptr_t %inptr %idx + OpStore %current %struct2_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_struct_struct_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/constant_struct_struct_simple.spvasm64 new file mode 100644 index 00000000..7159c704 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_struct_struct_simple.spvasm64 @@ -0,0 +1,43 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int8 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "constant_struct_struct_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int2_t = OpTypeVector %int_t 2 +%char_t = OpTypeInt 8 0 +%struct_t = OpTypeStruct %int_t %char_t +%struct2_t = OpTypeStruct %int2_t %struct_t +%struct_ptr_t = OpTypePointer CrossWorkgroup %struct2_t +%func_t = OpTypeFunction %void_t %struct_ptr_t +%shift_val = OpConstant %idx_t 32 +%int_val = OpConstant %int_t 2100483600 +%char_val = OpConstant %char_t 128 +%int_vec_0 = OpConstant %int_t 2100480000 +%int_vec_1 = OpConstant %int_t 2100480000 +%struct_val = OpConstantComposite %struct_t %int_val %char_val +%int2_val = OpConstantComposite %int2_t %int_vec_0 %int_vec_1 +%struct2_val = OpConstantComposite %struct2_t %int2_val %struct_val +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %struct_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %struct_ptr_t %inptr %idx + OpStore %current %struct2_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_true_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/constant_true_simple.spvasm32 new file mode 100644 index 00000000..a8f6d0eb --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_true_simple.spvasm32 @@ -0,0 +1,32 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "constant_true_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%bool_t = OpTypeBool +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t +%bool_val = OpConstantTrue %bool_t +%true_val = OpConstant %int_t 1 +%false_val = OpConstant %int_t 0 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%val = OpSelect %int_t %bool_val %true_val %false_val +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %int_ptr_t %inptr %idx + OpStore %current %val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_true_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/constant_true_simple.spvasm64 new file mode 100644 index 00000000..8854e004 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_true_simple.spvasm64 @@ -0,0 +1,36 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "constant_true_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%bool_t = OpTypeBool +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t +%shift_val = OpConstant %idx_t 32 +%bool_val = OpConstantTrue %bool_t +%true_val = OpConstant %int_t 1 +%false_val = OpConstant %int_t 0 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%val = OpSelect %int_t %bool_val %true_val %false_val +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %int_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_uchar_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/constant_uchar_simple.spvasm32 new file mode 100644 index 00000000..fd8e0d8b --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_uchar_simple.spvasm32 @@ -0,0 +1,29 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int8 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "constant_uchar_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%uchar_t = OpTypeInt 8 0 +%uchar_ptr_t = OpTypePointer CrossWorkgroup %uchar_t +%func_t = OpTypeFunction %void_t %uchar_ptr_t +%val = OpConstant %uchar_t 19 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %uchar_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %uchar_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_uchar_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/constant_uchar_simple.spvasm64 new file mode 100644 index 00000000..acb6b3bf --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_uchar_simple.spvasm64 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int8 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "constant_uchar_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%uchar_t = OpTypeInt 8 0 +%uchar_ptr_t = OpTypePointer CrossWorkgroup %uchar_t +%func_t = OpTypeFunction %void_t %uchar_ptr_t +%shift_val = OpConstant %idx_t 32 +%val = OpConstant %uchar_t 19 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %uchar_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %uchar_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_uint_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/constant_uint_simple.spvasm32 new file mode 100644 index 00000000..563e5389 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_uint_simple.spvasm32 @@ -0,0 +1,28 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "constant_uint_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%uint_t = OpTypeInt 32 0 +%uint_ptr_t = OpTypePointer CrossWorkgroup %uint_t +%func_t = OpTypeFunction %void_t %uint_ptr_t +%val = OpConstant %uint_t 54321 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %uint_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %uint_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_uint_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/constant_uint_simple.spvasm64 new file mode 100644 index 00000000..e383513e --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_uint_simple.spvasm64 @@ -0,0 +1,32 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "constant_uint_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%uint_t = OpTypeInt 32 0 +%uint_ptr_t = OpTypePointer CrossWorkgroup %uint_t +%func_t = OpTypeFunction %void_t %uint_ptr_t +%shift_val = OpConstant %idx_t 32 +%val = OpConstant %uint_t 54321 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %uint_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %uint_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_ulong_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/constant_ulong_simple.spvasm32 new file mode 100644 index 00000000..09e8e3fe --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_ulong_simple.spvasm32 @@ -0,0 +1,29 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "constant_ulong_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%ulong_t = OpTypeInt 64 0 +%ulong_ptr_t = OpTypePointer CrossWorkgroup %ulong_t +%func_t = OpTypeFunction %void_t %ulong_ptr_t +%val = OpConstant %ulong_t 9223372036854775810 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %ulong_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %ulong_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_ulong_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/constant_ulong_simple.spvasm64 new file mode 100644 index 00000000..87621844 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_ulong_simple.spvasm64 @@ -0,0 +1,32 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "constant_ulong_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%ulong_t = OpTypeInt 64 0 +%ulong_ptr_t = OpTypePointer CrossWorkgroup %ulong_t +%func_t = OpTypeFunction %void_t %ulong_ptr_t +%shift_val = OpConstant %idx_t 32 +%val = OpConstant %ulong_t 9223372036854775810 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %ulong_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %ulong_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_ushort_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/constant_ushort_simple.spvasm32 new file mode 100644 index 00000000..198a96da --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_ushort_simple.spvasm32 @@ -0,0 +1,29 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int16 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "constant_ushort_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%ushort_t = OpTypeInt 16 0 +%ushort_ptr_t = OpTypePointer CrossWorkgroup %ushort_t +%func_t = OpTypeFunction %void_t %ushort_ptr_t +%val = OpConstant %ushort_t 65000 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %ushort_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %ushort_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/constant_ushort_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/constant_ushort_simple.spvasm64 new file mode 100644 index 00000000..a5c770b3 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/constant_ushort_simple.spvasm64 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int16 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "constant_ushort_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%ushort_t = OpTypeInt 16 0 +%ushort_ptr_t = OpTypePointer CrossWorkgroup %ushort_t +%func_t = OpTypeFunction %void_t %ushort_ptr_t +%shift_val = OpConstant %idx_t 32 +%val = OpConstant %ushort_t 65000 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %ushort_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %ushort_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_char_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/copy_char_simple.spvasm32 new file mode 100644 index 00000000..ea1bb922 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_char_simple.spvasm32 @@ -0,0 +1,30 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int8 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "copy_char_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%char_t = OpTypeInt 8 0 +%char_ptr_t = OpTypePointer CrossWorkgroup %char_t +%func_t = OpTypeFunction %void_t %char_ptr_t +%val = OpConstant %char_t 20 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %char_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %char_ptr_t %inptr %idx +%out_val = OpCopyObject %char_t %val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_char_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/copy_char_simple.spvasm64 new file mode 100644 index 00000000..396898ff --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_char_simple.spvasm64 @@ -0,0 +1,34 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int8 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "copy_char_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%char_t = OpTypeInt 8 0 +%char_ptr_t = OpTypePointer CrossWorkgroup %char_t +%func_t = OpTypeFunction %void_t %char_ptr_t +%shift_val = OpConstant %idx_t 32 +%val = OpConstant %char_t 20 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %char_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %char_ptr_t %inptr %idx +%out_val = OpCopyObject %char_t %val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_double_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/copy_double_simple.spvasm32 new file mode 100644 index 00000000..53d615e1 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_double_simple.spvasm32 @@ -0,0 +1,30 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Float64 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "copy_double_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%double_t = OpTypeFloat 64 +%double_ptr_t = OpTypePointer CrossWorkgroup %double_t +%func_t = OpTypeFunction %void_t %double_ptr_t +%val = OpConstant %double_t 3.141592653589793 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %double_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %double_ptr_t %inptr %idx +%out_val = OpCopyObject %double_t %val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_double_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/copy_double_simple.spvasm64 new file mode 100644 index 00000000..5ad9a360 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_double_simple.spvasm64 @@ -0,0 +1,34 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Float64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "copy_double_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%double_t = OpTypeFloat 64 +%double_ptr_t = OpTypePointer CrossWorkgroup %double_t +%func_t = OpTypeFunction %void_t %double_ptr_t +%shift_val = OpConstant %idx_t 32 +%val = OpConstant %double_t 3.141592653589793 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %double_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %double_ptr_t %inptr %idx +%out_val = OpCopyObject %double_t %val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_float_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/copy_float_simple.spvasm32 new file mode 100644 index 00000000..ae8ac96f --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_float_simple.spvasm32 @@ -0,0 +1,29 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "copy_float_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%val = OpConstant %float_t 3.1415927 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %float_ptr_t %inptr %idx +%out_val = OpCopyObject %float_t %val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_float_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/copy_float_simple.spvasm64 new file mode 100644 index 00000000..773e16ed --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_float_simple.spvasm64 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "copy_float_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%val = OpConstant %float_t 3.1415927 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %float_ptr_t %inptr %idx +%out_val = OpCopyObject %float_t %val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_half_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/copy_half_simple.spvasm32 new file mode 100644 index 00000000..07caf390 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_half_simple.spvasm32 @@ -0,0 +1,32 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Float16 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "copy_half_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%half_t = OpTypeFloat 16 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%half_val = OpConstant %half_t 3.25 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%half_copy = OpCopyObject %half_t %half_val +%val = OpFConvert %float_t %half_copy +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %float_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_half_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/copy_half_simple.spvasm64 new file mode 100644 index 00000000..165d71e6 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_half_simple.spvasm64 @@ -0,0 +1,36 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Float16 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "copy_half_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%half_t = OpTypeFloat 16 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%half_val = OpConstant %half_t 3.25 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%half_copy = OpCopyObject %half_t %half_val +%val = OpFConvert %float_t %half_copy +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %float_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_int3_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/copy_int3_simple.spvasm32 new file mode 100644 index 00000000..1cd2eca8 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_int3_simple.spvasm32 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "copy_int3_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int3_t = OpTypeVector %int_t 3 +%int3_ptr_t = OpTypePointer CrossWorkgroup %int3_t +%func_t = OpTypeFunction %void_t %int3_ptr_t +%val0 = OpConstant %int_t 123 +%val1 = OpConstant %int_t 122 +%val2 = OpConstant %int_t 121 +%vec = OpConstantComposite %int3_t %val0 %val1 %val2 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int3_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %int3_ptr_t %inptr %idx +%out_vec = OpCopyObject %int3_t %vec + OpStore %current %out_vec Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_int3_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/copy_int3_simple.spvasm64 new file mode 100644 index 00000000..b2ec5289 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_int3_simple.spvasm64 @@ -0,0 +1,37 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "copy_int3_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int3_t = OpTypeVector %int_t 3 +%int3_ptr_t = OpTypePointer CrossWorkgroup %int3_t +%func_t = OpTypeFunction %void_t %int3_ptr_t +%shift_val = OpConstant %idx_t 32 +%val0 = OpConstant %int_t 123 +%val1 = OpConstant %int_t 122 +%val2 = OpConstant %int_t 121 +%vec = OpConstantComposite %int3_t %val0 %val1 %val2 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int3_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %int3_ptr_t %inptr %idx +%out_vec = OpCopyObject %int3_t %vec + OpStore %current %out_vec Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_int4_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/copy_int4_simple.spvasm32 new file mode 100644 index 00000000..f434988d --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_int4_simple.spvasm32 @@ -0,0 +1,34 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "copy_int4_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int4_t = OpTypeVector %int_t 4 +%int4_ptr_t = OpTypePointer CrossWorkgroup %int4_t +%func_t = OpTypeFunction %void_t %int4_ptr_t +%val0 = OpConstant %int_t 123 +%val1 = OpConstant %int_t 122 +%val2 = OpConstant %int_t 121 +%val3 = OpConstant %int_t 119 +%vec = OpConstantComposite %int4_t %val0 %val1 %val2 %val3 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int4_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %int4_ptr_t %inptr %idx +%out_vec = OpCopyObject %int4_t %vec + OpStore %current %out_vec Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_int4_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/copy_int4_simple.spvasm64 new file mode 100644 index 00000000..62e1668b --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_int4_simple.spvasm64 @@ -0,0 +1,38 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "copy_int4_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int4_t = OpTypeVector %int_t 4 +%int4_ptr_t = OpTypePointer CrossWorkgroup %int4_t +%func_t = OpTypeFunction %void_t %int4_ptr_t +%shift_val = OpConstant %idx_t 32 +%val0 = OpConstant %int_t 123 +%val1 = OpConstant %int_t 122 +%val2 = OpConstant %int_t 121 +%val3 = OpConstant %int_t 119 +%vec = OpConstantComposite %int4_t %val0 %val1 %val2 %val3 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int4_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %int4_ptr_t %inptr %idx +%out_vec = OpCopyObject %int4_t %vec + OpStore %current %out_vec Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_int_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/copy_int_simple.spvasm32 new file mode 100644 index 00000000..204409fd --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_int_simple.spvasm32 @@ -0,0 +1,29 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "copy_int_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t +%val = OpConstant %int_t 123 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %int_ptr_t %inptr %idx +%out_val = OpCopyObject %int_t %val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_int_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/copy_int_simple.spvasm64 new file mode 100644 index 00000000..0af0641e --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_int_simple.spvasm64 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "copy_int_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t +%shift_val = OpConstant %idx_t 32 +%val = OpConstant %int_t 123 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %int_ptr_t %inptr %idx +%out_val = OpCopyObject %int_t %val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_long_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/copy_long_simple.spvasm32 new file mode 100644 index 00000000..3e317c77 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_long_simple.spvasm32 @@ -0,0 +1,30 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "copy_long_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%long_t = OpTypeInt 64 0 +%long_ptr_t = OpTypePointer CrossWorkgroup %long_t +%func_t = OpTypeFunction %void_t %long_ptr_t +%val = OpConstant %long_t 34359738368 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %long_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %long_ptr_t %inptr %idx +%out_val = OpCopyObject %long_t %val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_long_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/copy_long_simple.spvasm64 new file mode 100644 index 00000000..5e4a899c --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_long_simple.spvasm64 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "copy_long_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%long_t = OpTypeInt 64 0 +%long_ptr_t = OpTypePointer CrossWorkgroup %long_t +%func_t = OpTypeFunction %void_t %long_ptr_t +%shift_val = OpConstant %idx_t 32 +%val = OpConstant %long_t 34359738368 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %long_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %long_ptr_t %inptr %idx +%out_val = OpCopyObject %long_t %val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_short_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/copy_short_simple.spvasm32 new file mode 100644 index 00000000..c4c00063 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_short_simple.spvasm32 @@ -0,0 +1,30 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int16 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "copy_short_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%short_t = OpTypeInt 16 0 +%short_ptr_t = OpTypePointer CrossWorkgroup %short_t +%func_t = OpTypeFunction %void_t %short_ptr_t +%val = OpConstant %short_t 32000 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %short_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %short_ptr_t %inptr %idx +%out_val = OpCopyObject %short_t %val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_short_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/copy_short_simple.spvasm64 new file mode 100644 index 00000000..6704cdd5 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_short_simple.spvasm64 @@ -0,0 +1,34 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int16 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "copy_short_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%short_t = OpTypeInt 16 0 +%short_ptr_t = OpTypePointer CrossWorkgroup %short_t +%func_t = OpTypeFunction %void_t %short_ptr_t +%shift_val = OpConstant %idx_t 32 +%val = OpConstant %short_t 32000 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %short_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %short_ptr_t %inptr %idx +%out_val = OpCopyObject %short_t %val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_struct_int_char_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/copy_struct_int_char_simple.spvasm32 new file mode 100644 index 00000000..836ce149 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_struct_int_char_simple.spvasm32 @@ -0,0 +1,34 @@ + OpCapability Addresses + OpCapability Kernel + OpCapability Linkage + OpCapability Int8 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "copy_struct_int_char_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%char_t = OpTypeInt 8 0 +%struct_t = OpTypeStruct %int_t %char_t +%struct_ptr_t = OpTypePointer CrossWorkgroup %struct_t +%func_t = OpTypeFunction %void_t %struct_ptr_t +%int_val = OpConstant %int_t 2100483600 +%char_val = OpConstant %char_t 128 +%struct_val = OpConstantComposite %struct_t %int_val %char_val +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %struct_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %struct_ptr_t %inptr %idx +%out_val = OpCopyObject %struct_t %struct_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_struct_int_char_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/copy_struct_int_char_simple.spvasm64 new file mode 100644 index 00000000..38d10920 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_struct_int_char_simple.spvasm64 @@ -0,0 +1,38 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int8 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "copy_struct_int_char_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%char_t = OpTypeInt 8 0 +%struct_t = OpTypeStruct %int_t %char_t +%struct_ptr_t = OpTypePointer CrossWorkgroup %struct_t +%func_t = OpTypeFunction %void_t %struct_ptr_t +%shift_val = OpConstant %idx_t 32 +%int_val = OpConstant %int_t 2100483600 +%char_val = OpConstant %char_t 128 +%struct_val = OpConstantComposite %struct_t %int_val %char_val +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %struct_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %struct_ptr_t %inptr %idx +%out_val = OpCopyObject %struct_t %struct_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_struct_int_float_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/copy_struct_int_float_simple.spvasm32 new file mode 100644 index 00000000..1fe7188e --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_struct_int_float_simple.spvasm32 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Kernel + OpCapability Linkage + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "copy_struct_int_float_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%float_t = OpTypeFloat 32 +%struct_t = OpTypeStruct %int_t %float_t +%struct_ptr_t = OpTypePointer CrossWorkgroup %struct_t +%func_t = OpTypeFunction %void_t %struct_ptr_t +%int_val = OpConstant %int_t 1024 +%float_val = OpConstant %float_t 3.1415 +%struct_val = OpConstantComposite %struct_t %int_val %float_val +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %struct_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %struct_ptr_t %inptr %idx +%out_val = OpCopyObject %struct_t %struct_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_struct_int_float_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/copy_struct_int_float_simple.spvasm64 new file mode 100644 index 00000000..4293a921 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_struct_int_float_simple.spvasm64 @@ -0,0 +1,37 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "copy_struct_int_float_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%float_t = OpTypeFloat 32 +%struct_t = OpTypeStruct %int_t %float_t +%struct_ptr_t = OpTypePointer CrossWorkgroup %struct_t +%func_t = OpTypeFunction %void_t %struct_ptr_t +%shift_val = OpConstant %idx_t 32 +%int_val = OpConstant %int_t 1024 +%float_val = OpConstant %float_t 3.1415 +%struct_val = OpConstantComposite %struct_t %int_val %float_val +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %struct_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %struct_ptr_t %inptr %idx +%out_val = OpCopyObject %struct_t %struct_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_struct_struct_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/copy_struct_struct_simple.spvasm32 new file mode 100644 index 00000000..cc1959d3 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_struct_struct_simple.spvasm32 @@ -0,0 +1,40 @@ + OpCapability Addresses + OpCapability Kernel + OpCapability Int8 + OpCapability Linkage + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "copy_struct_struct_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int2_t = OpTypeVector %int_t 2 +%char_t = OpTypeInt 8 0 +%struct_t = OpTypeStruct %int_t %char_t +%struct2_t = OpTypeStruct %int2_t %struct_t +%struct_ptr_t = OpTypePointer CrossWorkgroup %struct2_t +%func_t = OpTypeFunction %void_t %struct_ptr_t +%int_val = OpConstant %int_t 2100483600 +%char_val = OpConstant %char_t 128 +%int_vec_0 = OpConstant %int_t 2100480000 +%int_vec_1 = OpConstant %int_t 2100480000 +%struct_val = OpConstantComposite %struct_t %int_val %char_val +%int2_val = OpConstantComposite %int2_t %int_vec_0 %int_vec_1 +%struct2_val = OpConstantComposite %struct2_t %int2_val %struct_val +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %struct_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %struct_ptr_t %inptr %idx +%out_val = OpCopyObject %struct2_t %struct2_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_struct_struct_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/copy_struct_struct_simple.spvasm64 new file mode 100644 index 00000000..2445bae0 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_struct_struct_simple.spvasm64 @@ -0,0 +1,44 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int8 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "copy_struct_struct_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int2_t = OpTypeVector %int_t 2 +%char_t = OpTypeInt 8 0 +%struct_t = OpTypeStruct %int_t %char_t +%struct2_t = OpTypeStruct %int2_t %struct_t +%struct_ptr_t = OpTypePointer CrossWorkgroup %struct2_t +%func_t = OpTypeFunction %void_t %struct_ptr_t +%shift_val = OpConstant %idx_t 32 +%int_val = OpConstant %int_t 2100483600 +%char_val = OpConstant %char_t 128 +%int_vec_0 = OpConstant %int_t 2100480000 +%int_vec_1 = OpConstant %int_t 2100480000 +%struct_val = OpConstantComposite %struct_t %int_val %char_val +%int2_val = OpConstantComposite %int2_t %int_vec_0 %int_vec_1 +%struct2_val = OpConstantComposite %struct2_t %int2_val %struct_val +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %struct_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %struct_ptr_t %inptr %idx +%out_val = OpCopyObject %struct2_t %struct2_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_uchar_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/copy_uchar_simple.spvasm32 new file mode 100644 index 00000000..df648d9e --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_uchar_simple.spvasm32 @@ -0,0 +1,30 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int8 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "copy_uchar_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%uchar_t = OpTypeInt 8 0 +%uchar_ptr_t = OpTypePointer CrossWorkgroup %uchar_t +%func_t = OpTypeFunction %void_t %uchar_ptr_t +%val = OpConstant %uchar_t 19 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %uchar_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %uchar_ptr_t %inptr %idx +%out_val = OpCopyObject %uchar_t %val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_uchar_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/copy_uchar_simple.spvasm64 new file mode 100644 index 00000000..88bec6b6 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_uchar_simple.spvasm64 @@ -0,0 +1,34 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int8 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "copy_uchar_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%uchar_t = OpTypeInt 8 0 +%uchar_ptr_t = OpTypePointer CrossWorkgroup %uchar_t +%func_t = OpTypeFunction %void_t %uchar_ptr_t +%shift_val = OpConstant %idx_t 32 +%val = OpConstant %uchar_t 19 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %uchar_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %uchar_ptr_t %inptr %idx +%out_val = OpCopyObject %uchar_t %val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_uint_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/copy_uint_simple.spvasm32 new file mode 100644 index 00000000..7e96279a --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_uint_simple.spvasm32 @@ -0,0 +1,29 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "copy_uint_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%uint_t = OpTypeInt 32 0 +%uint_ptr_t = OpTypePointer CrossWorkgroup %uint_t +%func_t = OpTypeFunction %void_t %uint_ptr_t +%val = OpConstant %uint_t 54321 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %uint_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %uint_ptr_t %inptr %idx +%out_val = OpCopyObject %uint_t %val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_uint_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/copy_uint_simple.spvasm64 new file mode 100644 index 00000000..61b70281 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_uint_simple.spvasm64 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "copy_uint_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%uint_t = OpTypeInt 32 0 +%uint_ptr_t = OpTypePointer CrossWorkgroup %uint_t +%func_t = OpTypeFunction %void_t %uint_ptr_t +%shift_val = OpConstant %idx_t 32 +%val = OpConstant %uint_t 54321 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %uint_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %uint_ptr_t %inptr %idx +%out_val = OpCopyObject %uint_t %val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_ulong_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/copy_ulong_simple.spvasm32 new file mode 100644 index 00000000..8135e14b --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_ulong_simple.spvasm32 @@ -0,0 +1,30 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "copy_ulong_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%ulong_t = OpTypeInt 64 0 +%ulong_ptr_t = OpTypePointer CrossWorkgroup %ulong_t +%func_t = OpTypeFunction %void_t %ulong_ptr_t +%val = OpConstant %ulong_t 9223372036854775810 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %ulong_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %ulong_ptr_t %inptr %idx +%out_val = OpCopyObject %ulong_t %val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_ulong_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/copy_ulong_simple.spvasm64 new file mode 100644 index 00000000..37cdc1f4 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_ulong_simple.spvasm64 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "copy_ulong_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%ulong_t = OpTypeInt 64 0 +%ulong_ptr_t = OpTypePointer CrossWorkgroup %ulong_t +%func_t = OpTypeFunction %void_t %ulong_ptr_t +%shift_val = OpConstant %idx_t 32 +%val = OpConstant %ulong_t 9223372036854775810 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %ulong_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %ulong_ptr_t %inptr %idx +%out_val = OpCopyObject %ulong_t %val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_ushort_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/copy_ushort_simple.spvasm32 new file mode 100644 index 00000000..091e3e4b --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_ushort_simple.spvasm32 @@ -0,0 +1,30 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int16 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "copy_ushort_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%ushort_t = OpTypeInt 16 0 +%ushort_ptr_t = OpTypePointer CrossWorkgroup %ushort_t +%func_t = OpTypeFunction %void_t %ushort_ptr_t +%val = OpConstant %ushort_t 65000 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %ushort_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %ushort_ptr_t %inptr %idx +%out_val = OpCopyObject %ushort_t %val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/copy_ushort_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/copy_ushort_simple.spvasm64 new file mode 100644 index 00000000..2aa5e122 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/copy_ushort_simple.spvasm64 @@ -0,0 +1,34 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int16 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "copy_ushort_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%ushort_t = OpTypeInt 16 0 +%ushort_ptr_t = OpTypePointer CrossWorkgroup %ushort_t +%func_t = OpTypeFunction %void_t %ushort_ptr_t +%shift_val = OpConstant %idx_t 32 +%val = OpConstant %ushort_t 65000 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %ushort_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %ushort_ptr_t %inptr %idx +%out_val = OpCopyObject %ushort_t %val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_aliased.spvasm32 b/test_conformance/spirv_new/spirv_txt/decorate_aliased.spvasm32 new file mode 100644 index 00000000..bd6e575a --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_aliased.spvasm32 @@ -0,0 +1,39 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "decorate_aliased" + OpName %res "res" + OpName %lhs "lhs" + OpName %rhs "rhs" + OpName %entry "entry" + OpDecorate %dec_group Aliased +%dec_group = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec_group %res %lhs %rhs +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%res = OpFunctionParameter %int_ptr_t +%lhs = OpFunctionParameter %int_ptr_t +%rhs = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%lhs_curr = OpInBoundsPtrAccessChain %int_ptr_t %lhs %idx +%lhs_val = OpLoad %int_t %lhs_curr Aligned 4 +%rhs_curr = OpInBoundsPtrAccessChain %int_ptr_t %rhs %idx +%rhs_val = OpLoad %int_t %rhs_curr Aligned 4 +%res_val = OpIAdd %int_t %lhs_val %rhs_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %res %idx + OpStore %res_curr %res_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_aliased.spvasm64 b/test_conformance/spirv_new/spirv_txt/decorate_aliased.spvasm64 new file mode 100644 index 00000000..beb2842a --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_aliased.spvasm64 @@ -0,0 +1,43 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "decorate_aliased" + OpName %res "res" + OpName %lhs "lhs" + OpName %rhs "rhs" + OpName %entry "entry" + OpDecorate %dec_group Aliased +%dec_group = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec_group %res %lhs %rhs +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%res = OpFunctionParameter %int_ptr_t +%lhs = OpFunctionParameter %int_ptr_t +%rhs = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%lhs_curr = OpInBoundsPtrAccessChain %int_ptr_t %lhs %idx +%lhs_val = OpLoad %int_t %lhs_curr Aligned 4 +%rhs_curr = OpInBoundsPtrAccessChain %int_ptr_t %rhs %idx +%rhs_val = OpLoad %int_t %rhs_curr Aligned 4 +%res_val = OpIAdd %int_t %lhs_val %rhs_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %res %idx + OpStore %res_curr %res_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_alignment.spvasm32 b/test_conformance/spirv_new/spirv_txt/decorate_alignment.spvasm32 new file mode 100644 index 00000000..48960abe --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_alignment.spvasm32 @@ -0,0 +1,39 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "decorate_alignment" + OpName %res "res" + OpName %lhs "lhs" + OpName %rhs "rhs" + OpName %entry "entry" + OpDecorate %dec_group Alignment 4 +%dec_group = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec_group %res %lhs %rhs +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%res = OpFunctionParameter %int_ptr_t +%lhs = OpFunctionParameter %int_ptr_t +%rhs = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%lhs_curr = OpInBoundsPtrAccessChain %int_ptr_t %lhs %idx +%lhs_val = OpLoad %int_t %lhs_curr Aligned 4 +%rhs_curr = OpInBoundsPtrAccessChain %int_ptr_t %rhs %idx +%rhs_val = OpLoad %int_t %rhs_curr Aligned 4 +%res_val = OpIAdd %int_t %lhs_val %rhs_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %res %idx + OpStore %res_curr %res_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_alignment.spvasm64 b/test_conformance/spirv_new/spirv_txt/decorate_alignment.spvasm64 new file mode 100644 index 00000000..980e74b6 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_alignment.spvasm64 @@ -0,0 +1,43 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "decorate_alignment" + OpName %res "res" + OpName %lhs "lhs" + OpName %rhs "rhs" + OpName %entry "entry" + OpDecorate %dec_group Alignment 4 +%dec_group = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec_group %res %lhs %rhs +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%res = OpFunctionParameter %int_ptr_t +%lhs = OpFunctionParameter %int_ptr_t +%rhs = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%lhs_curr = OpInBoundsPtrAccessChain %int_ptr_t %lhs %idx +%lhs_val = OpLoad %int_t %lhs_curr Aligned 4 +%rhs_curr = OpInBoundsPtrAccessChain %int_ptr_t %rhs %idx +%rhs_val = OpLoad %int_t %rhs_curr Aligned 4 +%res_val = OpIAdd %int_t %lhs_val %rhs_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %res %idx + OpStore %res_curr %res_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_coherent.spvasm32 b/test_conformance/spirv_new/spirv_txt/decorate_coherent.spvasm32 new file mode 100644 index 00000000..718fb36a --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_coherent.spvasm32 @@ -0,0 +1,75 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability ImageBasic + OpCapability LiteralSampler + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %15 "decorate_coherent" + OpName %5 "sampler" + OpName %8 "__spirv_BuiltInGlobalInvocationId" + OpName %9 "__spirv_BuiltInGlobalSize" + OpName %16 "dst" + OpName %17 "src" + OpName %18 "entry" + OpName %20 "call" + OpName %22 "call1" + OpName %24 "call2" + OpName %25 "mul" + OpName %26 "add" + OpName %29 "vecinit" + OpName %30 "vecinit6" + OpName %34 "TempSampledImage" + OpName %35 "call7.old" + OpName %38 "arrayidx" + OpDecorate %17 Coherent + OpDecorate %39 Constant +%39 = OpDecorationGroup + OpDecorate %8 BuiltIn GlobalInvocationId + OpDecorate %9 BuiltIn GlobalSize + OpDecorate %16 FuncParamAttr NoCapture + OpDecorate %5 LinkageAttributes "sampler" Export + OpDecorate %9 LinkageAttributes "__spirv_BuiltInGlobalSize" Import + OpDecorate %8 LinkageAttributes "__spirv_BuiltInGlobalInvocationId" Import + OpDecorate %5 Alignment 4 + OpGroupDecorate %39 %5 %8 %9 + %2 = OpTypeInt 32 0 + %3 = OpConstant %2 16 + %4 = OpTypePointer UniformConstant %2 + %6 = OpTypeVector %2 3 + %7 = OpTypePointer UniformConstant %6 +%10 = OpTypeVoid +%11 = OpTypeVector %2 4 +%12 = OpTypePointer CrossWorkgroup %11 +%13 = OpTypeImage %10 2D 0 0 0 0 Unknown +%14 = OpTypeFunction %10 %12 %13 +%27 = OpTypeVector %2 2 +%31 = OpTypeSampler +%33 = OpTypeSampledImage %13 +%36 = OpTypeFloat 32 +%32 = OpConstantSampler %31 None 0 Nearest +%37 = OpConstant %36 0 + %5 = OpVariable %4 UniformConstant %3 + %8 = OpVariable %7 UniformConstant + %9 = OpVariable %7 UniformConstant +%15 = OpFunction %10 None %14 +%16 = OpFunctionParameter %12 +%17 = OpFunctionParameter %13 +%18 = OpLabel +%28 = OpUndef %27 +%19 = OpLoad %6 %8 Aligned 0 +%20 = OpCompositeExtract %2 %19 0 +%21 = OpLoad %6 %8 Aligned 0 +%22 = OpCompositeExtract %2 %21 1 +%23 = OpLoad %6 %9 Aligned 0 +%24 = OpCompositeExtract %2 %23 0 +%25 = OpIMul %2 %24 %22 +%26 = OpIAdd %2 %25 %20 +%29 = OpCompositeInsert %27 %22 %28 0 +%30 = OpCompositeInsert %27 %20 %29 1 +%34 = OpSampledImage %33 %17 %32 +%35 = OpImageSampleExplicitLod %11 %34 %30 Lod %37 +%38 = OpInBoundsPtrAccessChain %12 %16 %26 + OpStore %38 %35 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_coherent.spvasm64 b/test_conformance/spirv_new/spirv_txt/decorate_coherent.spvasm64 new file mode 100644 index 00000000..60604b24 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_coherent.spvasm64 @@ -0,0 +1,88 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability ImageBasic + OpCapability LiteralSampler + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %16 "decorate_coherent" + OpName %5 "sampler" + OpName %9 "__spirv_BuiltInGlobalInvocationId" + OpName %10 "__spirv_BuiltInGlobalSize" + OpName %17 "dst" + OpName %18 "src" + OpName %19 "entry" + OpName %21 "call" + OpName %22 "conv" + OpName %24 "call1" + OpName %25 "conv2" + OpName %26 "conv3" + OpName %28 "call4" + OpName %29 "mul" + OpName %30 "add" + OpName %33 "vecinit" + OpName %34 "vecinit10" + OpName %38 "TempSampledImage" + OpName %39 "call11.old" + OpName %43 "sext" + OpName %44 "idxprom" + OpName %45 "arrayidx" + OpDecorate %18 Coherent + OpDecorate %46 Constant +%46 = OpDecorationGroup + OpDecorate %9 BuiltIn GlobalInvocationId + OpDecorate %10 BuiltIn GlobalSize + OpDecorate %17 FuncParamAttr NoCapture + OpDecorate %5 LinkageAttributes "sampler" Export + OpDecorate %10 LinkageAttributes "__spirv_BuiltInGlobalSize" Import + OpDecorate %9 LinkageAttributes "__spirv_BuiltInGlobalInvocationId" Import + OpDecorate %5 Alignment 4 + OpGroupDecorate %46 %5 %9 %10 + %2 = OpTypeInt 32 0 + %6 = OpTypeInt 64 0 + %3 = OpConstant %2 16 +%42 = OpConstant %6 32 + %4 = OpTypePointer UniformConstant %2 + %7 = OpTypeVector %6 3 + %8 = OpTypePointer UniformConstant %7 +%11 = OpTypeVoid +%12 = OpTypeVector %2 4 +%13 = OpTypePointer CrossWorkgroup %12 +%14 = OpTypeImage %11 2D 0 0 0 0 Unknown +%15 = OpTypeFunction %11 %13 %14 +%31 = OpTypeVector %2 2 +%35 = OpTypeSampler +%37 = OpTypeSampledImage %14 +%40 = OpTypeFloat 32 +%36 = OpConstantSampler %35 None 0 Nearest +%41 = OpConstant %40 0 + %5 = OpVariable %4 UniformConstant %3 + %9 = OpVariable %8 UniformConstant +%10 = OpVariable %8 UniformConstant +%16 = OpFunction %11 None %15 +%17 = OpFunctionParameter %13 +%18 = OpFunctionParameter %14 +%19 = OpLabel +%32 = OpUndef %31 +%20 = OpLoad %7 %9 Aligned 0 +%21 = OpCompositeExtract %6 %20 0 +%22 = OpUConvert %2 %21 +%23 = OpLoad %7 %9 Aligned 0 +%24 = OpCompositeExtract %6 %23 1 +%25 = OpUConvert %2 %24 +%26 = OpSConvert %6 %25 +%27 = OpLoad %7 %10 Aligned 0 +%28 = OpCompositeExtract %6 %27 0 +%29 = OpIMul %6 %26 %28 +%30 = OpIAdd %6 %29 %21 +%33 = OpCompositeInsert %31 %25 %32 0 +%34 = OpCompositeInsert %31 %22 %33 1 +%38 = OpSampledImage %37 %18 %36 +%39 = OpImageSampleExplicitLod %12 %38 %34 Lod %41 +%43 = OpShiftLeftLogical %6 %30 %42 +%44 = OpShiftRightArithmetic %6 %43 %42 +%45 = OpInBoundsPtrAccessChain %13 %17 %44 + OpStore %45 %39 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_constant.spvasm32 b/test_conformance/spirv_new/spirv_txt/decorate_constant.spvasm32 new file mode 100644 index 00000000..1f01838f --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_constant.spvasm32 @@ -0,0 +1,39 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "decorate_constant" + OpName %res "res" + OpName %lhs "lhs" + OpName %rhs "rhs" + OpName %entry "entry" + OpDecorate %dec_group Constant +%dec_group = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec_group %lhs %rhs +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%res = OpFunctionParameter %int_ptr_t +%lhs = OpFunctionParameter %int_ptr_t +%rhs = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%lhs_curr = OpInBoundsPtrAccessChain %int_ptr_t %lhs %idx +%lhs_val = OpLoad %int_t %lhs_curr Aligned 4 +%rhs_curr = OpInBoundsPtrAccessChain %int_ptr_t %rhs %idx +%rhs_val = OpLoad %int_t %rhs_curr Aligned 4 +%res_val = OpIAdd %int_t %lhs_val %rhs_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %res %idx + OpStore %res_curr %res_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_constant.spvasm64 b/test_conformance/spirv_new/spirv_txt/decorate_constant.spvasm64 new file mode 100644 index 00000000..dff1925a --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_constant.spvasm64 @@ -0,0 +1,43 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "decorate_constant" + OpName %res "res" + OpName %lhs "lhs" + OpName %rhs "rhs" + OpName %entry "entry" + OpDecorate %dec_group Constant +%dec_group = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec_group %lhs %rhs +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%res = OpFunctionParameter %int_ptr_t +%lhs = OpFunctionParameter %int_ptr_t +%rhs = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%lhs_curr = OpInBoundsPtrAccessChain %int_ptr_t %lhs %idx +%lhs_val = OpLoad %int_t %lhs_curr Aligned 4 +%rhs_curr = OpInBoundsPtrAccessChain %int_ptr_t %rhs %idx +%rhs_val = OpLoad %int_t %rhs_curr Aligned 4 +%res_val = OpIAdd %int_t %lhs_val %rhs_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %res %idx + OpStore %res_curr %res_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_constant_fail.spvasm32 b/test_conformance/spirv_new/spirv_txt/decorate_constant_fail.spvasm32 new file mode 100644 index 00000000..ab91da33 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_constant_fail.spvasm32 @@ -0,0 +1,39 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "decorate_constant" + OpName %res "res" + OpName %lhs "lhs" + OpName %rhs "rhs" + OpName %entry "entry" + OpDecorate %dec_group Constant +%dec_group = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec_group %res %lhs %rhs +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%res = OpFunctionParameter %int_ptr_t +%lhs = OpFunctionParameter %int_ptr_t +%rhs = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%lhs_curr = OpInBoundsPtrAccessChain %int_ptr_t %lhs %idx +%lhs_val = OpLoad %int_t %lhs_curr Aligned 4 +%rhs_curr = OpInBoundsPtrAccessChain %int_ptr_t %rhs %idx +%rhs_val = OpLoad %int_t %rhs_curr Aligned 4 +%res_val = OpIAdd %int_t %lhs_val %rhs_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %res %idx + OpStore %res_curr %res_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_constant_fail.spvasm64 b/test_conformance/spirv_new/spirv_txt/decorate_constant_fail.spvasm64 new file mode 100644 index 00000000..1c4bd986 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_constant_fail.spvasm64 @@ -0,0 +1,43 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "decorate_constant" + OpName %res "res" + OpName %lhs "lhs" + OpName %rhs "rhs" + OpName %entry "entry" + OpDecorate %dec_group Constant +%dec_group = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec_group %res %lhs %rhs +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%res = OpFunctionParameter %int_ptr_t +%lhs = OpFunctionParameter %int_ptr_t +%rhs = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%lhs_curr = OpInBoundsPtrAccessChain %int_ptr_t %lhs %idx +%lhs_val = OpLoad %int_t %lhs_curr Aligned 4 +%rhs_curr = OpInBoundsPtrAccessChain %int_ptr_t %rhs %idx +%rhs_val = OpLoad %int_t %rhs_curr Aligned 4 +%res_val = OpIAdd %int_t %lhs_val %rhs_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %res %idx + OpStore %res_curr %res_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_cpacked.spvasm32 b/test_conformance/spirv_new/spirv_txt/decorate_cpacked.spvasm32 new file mode 100644 index 00000000..d8aa11d3 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_cpacked.spvasm32 @@ -0,0 +1,34 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int8 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "decorate_cpacked" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %struct_t CPacked +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%char_t = OpTypeInt 8 0 +%struct_t = OpTypeStruct %int_t %char_t +%struct_ptr_t = OpTypePointer CrossWorkgroup %struct_t +%func_t = OpTypeFunction %void_t %struct_ptr_t +%int_val = OpConstant %int_t 2100483600 +%char_val = OpConstant %char_t 127 +%struct_val = OpConstantComposite %struct_t %int_val %char_val +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %struct_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %struct_ptr_t %inptr %idx + OpStore %current %struct_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_cpacked.spvasm64 b/test_conformance/spirv_new/spirv_txt/decorate_cpacked.spvasm64 new file mode 100644 index 00000000..a4600c16 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_cpacked.spvasm64 @@ -0,0 +1,38 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int8 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "decorate_cpacked" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %struct_t CPacked +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%char_t = OpTypeInt 8 0 +%struct_t = OpTypeStruct %int_t %char_t +%struct_ptr_t = OpTypePointer CrossWorkgroup %struct_t +%func_t = OpTypeFunction %void_t %struct_ptr_t +%shift_val = OpConstant %idx_t 32 +%int_val = OpConstant %int_t 2100483600 +%char_val = OpConstant %char_t 127 +%struct_val = OpConstantComposite %struct_t %int_val %char_val +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %struct_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %struct_ptr_t %inptr %idx + OpStore %current %struct_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_nonreadable.spvasm32 b/test_conformance/spirv_new/spirv_txt/decorate_nonreadable.spvasm32 new file mode 100644 index 00000000..79cb9def --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_nonreadable.spvasm32 @@ -0,0 +1,61 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability ImageBasic + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %12 "decorate_nonreadable" + OpSource OpenCL_C 100000 + OpName %5 "__spirv_BuiltInGlobalInvocationId" + OpName %6 "__spirv_BuiltInGlobalSize" + OpName %13 "dst" + OpName %14 "src" + OpName %15 "entry" + OpName %17 "call" + OpName %19 "call1" + OpName %21 "call2" + OpName %22 "mul" + OpName %23 "add" + OpName %26 "vecinit" + OpName %27 "vecinit3" + OpName %28 "arrayidx" + OpDecorate %13 NonReadable + OpDecorate %30 Constant +%30 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %6 BuiltIn GlobalSize + OpDecorate %14 FuncParamAttr NoCapture + OpDecorate %6 LinkageAttributes "__spirv_BuiltInGlobalSize" Import + OpDecorate %5 LinkageAttributes "__spirv_BuiltInGlobalInvocationId" Import + OpGroupDecorate %30 %5 %6 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %7 = OpTypeVoid + %8 = OpTypeImage %7 2D 0 0 0 0 Unknown + %9 = OpTypeVector %2 4 +%10 = OpTypePointer CrossWorkgroup %9 +%11 = OpTypeFunction %7 %8 %10 +%24 = OpTypeVector %2 2 + %5 = OpVariable %4 UniformConstant + %6 = OpVariable %4 UniformConstant +%12 = OpFunction %7 None %11 +%13 = OpFunctionParameter %8 +%14 = OpFunctionParameter %10 +%15 = OpLabel +%25 = OpUndef %24 +%16 = OpLoad %3 %5 Aligned 0 +%17 = OpCompositeExtract %2 %16 0 +%18 = OpLoad %3 %5 Aligned 0 +%19 = OpCompositeExtract %2 %18 1 +%20 = OpLoad %3 %6 Aligned 0 +%21 = OpCompositeExtract %2 %20 0 +%22 = OpIMul %2 %21 %19 +%23 = OpIAdd %2 %22 %17 +%26 = OpCompositeInsert %24 %19 %25 0 +%27 = OpCompositeInsert %24 %17 %26 1 +%28 = OpInBoundsPtrAccessChain %10 %14 %23 +%29 = OpLoad %9 %28 Aligned 16 + OpImageWrite %13 %27 %29 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_nonreadable.spvasm64 b/test_conformance/spirv_new/spirv_txt/decorate_nonreadable.spvasm64 new file mode 100644 index 00000000..6659560a --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_nonreadable.spvasm64 @@ -0,0 +1,74 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability ImageBasic + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %13 "decorate_nonreadable" + OpSource OpenCL_C 100000 + OpName %5 "__spirv_BuiltInGlobalInvocationId" + OpName %6 "__spirv_BuiltInGlobalSize" + OpName %14 "dst" + OpName %15 "src" + OpName %16 "entry" + OpName %18 "call" + OpName %19 "conv" + OpName %21 "call1" + OpName %22 "conv2" + OpName %23 "conv3" + OpName %25 "call4" + OpName %26 "mul" + OpName %27 "add" + OpName %30 "vecinit" + OpName %31 "vecinit7" + OpName %33 "sext" + OpName %34 "idxprom" + OpName %35 "arrayidx" + OpDecorate %14 NonReadable + OpDecorate %37 Constant +%37 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %6 BuiltIn GlobalSize + OpDecorate %15 FuncParamAttr NoCapture + OpDecorate %6 LinkageAttributes "__spirv_BuiltInGlobalSize" Import + OpDecorate %5 LinkageAttributes "__spirv_BuiltInGlobalInvocationId" Import + OpGroupDecorate %37 %5 %6 + %2 = OpTypeInt 64 0 + %9 = OpTypeInt 32 0 +%32 = OpConstant %2 32 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %7 = OpTypeVoid + %8 = OpTypeImage %7 2D 0 0 0 0 Unknown +%10 = OpTypeVector %9 4 +%11 = OpTypePointer CrossWorkgroup %10 +%12 = OpTypeFunction %7 %8 %11 +%28 = OpTypeVector %9 2 + %5 = OpVariable %4 UniformConstant + %6 = OpVariable %4 UniformConstant +%13 = OpFunction %7 None %12 +%14 = OpFunctionParameter %8 +%15 = OpFunctionParameter %11 +%16 = OpLabel +%29 = OpUndef %28 +%17 = OpLoad %3 %5 Aligned 0 +%18 = OpCompositeExtract %2 %17 0 +%19 = OpUConvert %9 %18 +%20 = OpLoad %3 %5 Aligned 0 +%21 = OpCompositeExtract %2 %20 1 +%22 = OpUConvert %9 %21 +%23 = OpSConvert %2 %22 +%24 = OpLoad %3 %6 Aligned 0 +%25 = OpCompositeExtract %2 %24 0 +%26 = OpIMul %2 %23 %25 +%27 = OpIAdd %2 %26 %18 +%30 = OpCompositeInsert %28 %22 %29 0 +%31 = OpCompositeInsert %28 %19 %30 1 +%33 = OpShiftLeftLogical %2 %27 %32 +%34 = OpShiftRightArithmetic %2 %33 %32 +%35 = OpInBoundsPtrAccessChain %11 %15 %34 +%36 = OpLoad %10 %35 Aligned 16 + OpImageWrite %14 %31 %36 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_nonwritable.spvasm32 b/test_conformance/spirv_new/spirv_txt/decorate_nonwritable.spvasm32 new file mode 100644 index 00000000..ef908f43 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_nonwritable.spvasm32 @@ -0,0 +1,75 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability ImageBasic + OpCapability LiteralSampler + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %15 "decorate_nonwritable" + OpName %5 "sampler" + OpName %8 "__spirv_BuiltInGlobalInvocationId" + OpName %9 "__spirv_BuiltInGlobalSize" + OpName %16 "dst" + OpName %17 "src" + OpName %18 "entry" + OpName %20 "call" + OpName %22 "call1" + OpName %24 "call2" + OpName %25 "mul" + OpName %26 "add" + OpName %29 "vecinit" + OpName %30 "vecinit6" + OpName %34 "TempSampledImage" + OpName %35 "call7.old" + OpName %38 "arrayidx" + OpDecorate %17 NonWritable + OpDecorate %39 Constant +%39 = OpDecorationGroup + OpDecorate %8 BuiltIn GlobalInvocationId + OpDecorate %9 BuiltIn GlobalSize + OpDecorate %16 FuncParamAttr NoCapture + OpDecorate %5 LinkageAttributes "sampler" Export + OpDecorate %9 LinkageAttributes "__spirv_BuiltInGlobalSize" Import + OpDecorate %8 LinkageAttributes "__spirv_BuiltInGlobalInvocationId" Import + OpDecorate %5 Alignment 4 + OpGroupDecorate %39 %5 %8 %9 + %2 = OpTypeInt 32 0 + %3 = OpConstant %2 16 + %4 = OpTypePointer UniformConstant %2 + %6 = OpTypeVector %2 3 + %7 = OpTypePointer UniformConstant %6 +%10 = OpTypeVoid +%11 = OpTypeVector %2 4 +%12 = OpTypePointer CrossWorkgroup %11 +%13 = OpTypeImage %10 2D 0 0 0 0 Unknown +%14 = OpTypeFunction %10 %12 %13 +%27 = OpTypeVector %2 2 +%31 = OpTypeSampler +%33 = OpTypeSampledImage %13 +%36 = OpTypeFloat 32 +%32 = OpConstantSampler %31 None 0 Nearest +%37 = OpConstant %36 0 + %5 = OpVariable %4 UniformConstant %3 + %8 = OpVariable %7 UniformConstant + %9 = OpVariable %7 UniformConstant +%15 = OpFunction %10 None %14 +%16 = OpFunctionParameter %12 +%17 = OpFunctionParameter %13 +%18 = OpLabel +%28 = OpUndef %27 +%19 = OpLoad %6 %8 Aligned 0 +%20 = OpCompositeExtract %2 %19 0 +%21 = OpLoad %6 %8 Aligned 0 +%22 = OpCompositeExtract %2 %21 1 +%23 = OpLoad %6 %9 Aligned 0 +%24 = OpCompositeExtract %2 %23 0 +%25 = OpIMul %2 %24 %22 +%26 = OpIAdd %2 %25 %20 +%29 = OpCompositeInsert %27 %22 %28 0 +%30 = OpCompositeInsert %27 %20 %29 1 +%34 = OpSampledImage %33 %17 %32 +%35 = OpImageSampleExplicitLod %11 %34 %30 Lod %37 +%38 = OpInBoundsPtrAccessChain %12 %16 %26 + OpStore %38 %35 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_nonwritable.spvasm64 b/test_conformance/spirv_new/spirv_txt/decorate_nonwritable.spvasm64 new file mode 100644 index 00000000..f8e6af95 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_nonwritable.spvasm64 @@ -0,0 +1,88 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability ImageBasic + OpCapability LiteralSampler + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %16 "decorate_nonwritable" + OpName %5 "sampler" + OpName %9 "__spirv_BuiltInGlobalInvocationId" + OpName %10 "__spirv_BuiltInGlobalSize" + OpName %17 "dst" + OpName %18 "src" + OpName %19 "entry" + OpName %21 "call" + OpName %22 "conv" + OpName %24 "call1" + OpName %25 "conv2" + OpName %26 "conv3" + OpName %28 "call4" + OpName %29 "mul" + OpName %30 "add" + OpName %33 "vecinit" + OpName %34 "vecinit10" + OpName %38 "TempSampledImage" + OpName %39 "call11.old" + OpName %43 "sext" + OpName %44 "idxprom" + OpName %45 "arrayidx" + OpDecorate %18 NonWritable + OpDecorate %46 Constant +%46 = OpDecorationGroup + OpDecorate %9 BuiltIn GlobalInvocationId + OpDecorate %10 BuiltIn GlobalSize + OpDecorate %17 FuncParamAttr NoCapture + OpDecorate %5 LinkageAttributes "sampler" Export + OpDecorate %10 LinkageAttributes "__spirv_BuiltInGlobalSize" Import + OpDecorate %9 LinkageAttributes "__spirv_BuiltInGlobalInvocationId" Import + OpDecorate %5 Alignment 4 + OpGroupDecorate %46 %5 %9 %10 + %2 = OpTypeInt 32 0 + %6 = OpTypeInt 64 0 + %3 = OpConstant %2 16 +%42 = OpConstant %6 32 + %4 = OpTypePointer UniformConstant %2 + %7 = OpTypeVector %6 3 + %8 = OpTypePointer UniformConstant %7 +%11 = OpTypeVoid +%12 = OpTypeVector %2 4 +%13 = OpTypePointer CrossWorkgroup %12 +%14 = OpTypeImage %11 2D 0 0 0 0 Unknown +%15 = OpTypeFunction %11 %13 %14 +%31 = OpTypeVector %2 2 +%35 = OpTypeSampler +%37 = OpTypeSampledImage %14 +%40 = OpTypeFloat 32 +%36 = OpConstantSampler %35 None 0 Nearest +%41 = OpConstant %40 0 + %5 = OpVariable %4 UniformConstant %3 + %9 = OpVariable %8 UniformConstant +%10 = OpVariable %8 UniformConstant +%16 = OpFunction %11 None %15 +%17 = OpFunctionParameter %13 +%18 = OpFunctionParameter %14 +%19 = OpLabel +%32 = OpUndef %31 +%20 = OpLoad %7 %9 Aligned 0 +%21 = OpCompositeExtract %6 %20 0 +%22 = OpUConvert %2 %21 +%23 = OpLoad %7 %9 Aligned 0 +%24 = OpCompositeExtract %6 %23 1 +%25 = OpUConvert %2 %24 +%26 = OpSConvert %6 %25 +%27 = OpLoad %7 %10 Aligned 0 +%28 = OpCompositeExtract %6 %27 0 +%29 = OpIMul %6 %26 %28 +%30 = OpIAdd %6 %29 %21 +%33 = OpCompositeInsert %31 %25 %32 0 +%34 = OpCompositeInsert %31 %22 %33 1 +%38 = OpSampledImage %37 %18 %36 +%39 = OpImageSampleExplicitLod %12 %38 %34 Lod %41 +%43 = OpShiftLeftLogical %6 %30 %42 +%44 = OpShiftRightArithmetic %6 %43 %42 +%45 = OpInBoundsPtrAccessChain %13 %17 %44 + OpStore %45 %39 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_restrict.spvasm32 b/test_conformance/spirv_new/spirv_txt/decorate_restrict.spvasm32 new file mode 100644 index 00000000..a8f002b5 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_restrict.spvasm32 @@ -0,0 +1,39 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "decorate_restrict" + OpName %res "res" + OpName %lhs "lhs" + OpName %rhs "rhs" + OpName %entry "entry" + OpDecorate %dec_group Restrict +%dec_group = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec_group %res %lhs %rhs +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%res = OpFunctionParameter %int_ptr_t +%lhs = OpFunctionParameter %int_ptr_t +%rhs = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%lhs_curr = OpInBoundsPtrAccessChain %int_ptr_t %lhs %idx +%lhs_val = OpLoad %int_t %lhs_curr Aligned 4 +%rhs_curr = OpInBoundsPtrAccessChain %int_ptr_t %rhs %idx +%rhs_val = OpLoad %int_t %rhs_curr Aligned 4 +%res_val = OpIAdd %int_t %lhs_val %rhs_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %res %idx + OpStore %res_curr %res_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_restrict.spvasm64 b/test_conformance/spirv_new/spirv_txt/decorate_restrict.spvasm64 new file mode 100644 index 00000000..470d8bed --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_restrict.spvasm64 @@ -0,0 +1,43 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "decorate_restrict" + OpName %res "res" + OpName %lhs "lhs" + OpName %rhs "rhs" + OpName %entry "entry" + OpDecorate %dec_group Restrict +%dec_group = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec_group %res %lhs %rhs +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%res = OpFunctionParameter %int_ptr_t +%lhs = OpFunctionParameter %int_ptr_t +%rhs = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%lhs_curr = OpInBoundsPtrAccessChain %int_ptr_t %lhs %idx +%lhs_val = OpLoad %int_t %lhs_curr Aligned 4 +%rhs_curr = OpInBoundsPtrAccessChain %int_ptr_t %rhs %idx +%rhs_val = OpLoad %int_t %rhs_curr Aligned 4 +%res_val = OpIAdd %int_t %lhs_val %rhs_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %res %idx + OpStore %res_curr %res_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_rounding_rte_double_long.spvasm32 b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rte_double_long.spvasm32 new file mode 100644 index 00000000..341f6d9e --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rte_double_long.spvasm32 @@ -0,0 +1,37 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Float64 + OpCapability Int64 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "decorate_rounding_rte_double_long" + OpName %out "res" + OpName %in "in" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %res_val FPRoundingMode RTE +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 64 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 64 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out = OpFunctionParameter %int_ptr_t +%in = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%in_curr = OpInBoundsPtrAccessChain %float_ptr_t %in %idx +%in_val = OpLoad %float_t %in_curr +%res_val = OpConvertFToS %int_t %in_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %out %idx + OpStore %res_curr %res_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_rounding_rte_double_long.spvasm64 b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rte_double_long.spvasm64 new file mode 100644 index 00000000..3ec0b291 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rte_double_long.spvasm64 @@ -0,0 +1,40 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Float64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "decorate_rounding_rte_double_long" + OpName %out "res" + OpName %in "in" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %out_val FPRoundingMode RTE +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 64 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 64 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out = OpFunctionParameter %int_ptr_t +%in = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%in_curr = OpInBoundsPtrAccessChain %float_ptr_t %in %idx +%in_val = OpLoad %float_t %in_curr +%out_val = OpConvertFToS %int_t %in_val +%out_curr = OpInBoundsPtrAccessChain %int_ptr_t %out %idx + OpStore %out_curr %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_rounding_rte_float_int.spvasm32 b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rte_float_int.spvasm32 new file mode 100644 index 00000000..d9ed3545 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rte_float_int.spvasm32 @@ -0,0 +1,35 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "decorate_rounding_rte_float_int" + OpName %out "res" + OpName %in "in" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %res_val FPRoundingMode RTE +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out = OpFunctionParameter %int_ptr_t +%in = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%in_curr = OpInBoundsPtrAccessChain %float_ptr_t %in %idx +%in_val = OpLoad %float_t %in_curr Aligned 4 +%res_val = OpConvertFToS %int_t %in_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %out %idx + OpStore %res_curr %res_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_rounding_rte_float_int.spvasm64 b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rte_float_int.spvasm64 new file mode 100644 index 00000000..15cda593 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rte_float_int.spvasm64 @@ -0,0 +1,39 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "decorate_rounding_rte_float_int" + OpName %out "res" + OpName %in "in" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %out_val FPRoundingMode RTE +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out = OpFunctionParameter %int_ptr_t +%in = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%in_curr = OpInBoundsPtrAccessChain %float_ptr_t %in %idx +%in_val = OpLoad %float_t %in_curr Aligned 4 +%out_val = OpConvertFToS %int_t %in_val +%out_curr = OpInBoundsPtrAccessChain %int_ptr_t %out %idx + OpStore %out_curr %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtn_double_long.spvasm32 b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtn_double_long.spvasm32 new file mode 100644 index 00000000..f314a0fd --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtn_double_long.spvasm32 @@ -0,0 +1,37 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Float64 + OpCapability Int64 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "decorate_rounding_rtn_double_long" + OpName %out "res" + OpName %in "in" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %res_val FPRoundingMode RTN +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 64 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 64 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out = OpFunctionParameter %int_ptr_t +%in = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%in_curr = OpInBoundsPtrAccessChain %float_ptr_t %in %idx +%in_val = OpLoad %float_t %in_curr +%res_val = OpConvertFToS %int_t %in_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %out %idx + OpStore %res_curr %res_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtn_double_long.spvasm64 b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtn_double_long.spvasm64 new file mode 100644 index 00000000..419b8afa --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtn_double_long.spvasm64 @@ -0,0 +1,40 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Float64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "decorate_rounding_rtn_double_long" + OpName %out "res" + OpName %in "in" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %out_val FPRoundingMode RTN +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 64 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 64 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out = OpFunctionParameter %int_ptr_t +%in = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%in_curr = OpInBoundsPtrAccessChain %float_ptr_t %in %idx +%in_val = OpLoad %float_t %in_curr +%out_val = OpConvertFToS %int_t %in_val +%out_curr = OpInBoundsPtrAccessChain %int_ptr_t %out %idx + OpStore %out_curr %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtn_float_int.spvasm32 b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtn_float_int.spvasm32 new file mode 100644 index 00000000..d5c1b854 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtn_float_int.spvasm32 @@ -0,0 +1,35 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "decorate_rounding_rtn_float_int" + OpName %out "res" + OpName %in "in" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %res_val FPRoundingMode RTN +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out = OpFunctionParameter %int_ptr_t +%in = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%in_curr = OpInBoundsPtrAccessChain %float_ptr_t %in %idx +%in_val = OpLoad %float_t %in_curr Aligned 4 +%res_val = OpConvertFToS %int_t %in_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %out %idx + OpStore %res_curr %res_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtn_float_int.spvasm64 b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtn_float_int.spvasm64 new file mode 100644 index 00000000..a66855f0 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtn_float_int.spvasm64 @@ -0,0 +1,39 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "decorate_rounding_rtn_float_int" + OpName %out "res" + OpName %in "in" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %out_val FPRoundingMode RTN +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out = OpFunctionParameter %int_ptr_t +%in = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%in_curr = OpInBoundsPtrAccessChain %float_ptr_t %in %idx +%in_val = OpLoad %float_t %in_curr Aligned 4 +%out_val = OpConvertFToS %int_t %in_val +%out_curr = OpInBoundsPtrAccessChain %int_ptr_t %out %idx + OpStore %out_curr %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtp_double_long.spvasm32 b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtp_double_long.spvasm32 new file mode 100644 index 00000000..abadb9b6 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtp_double_long.spvasm32 @@ -0,0 +1,37 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Float64 + OpCapability Int64 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "decorate_rounding_rtp_double_long" + OpName %out "res" + OpName %in "in" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %res_val FPRoundingMode RTP +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 64 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 64 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out = OpFunctionParameter %int_ptr_t +%in = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%in_curr = OpInBoundsPtrAccessChain %float_ptr_t %in %idx +%in_val = OpLoad %float_t %in_curr +%res_val = OpConvertFToS %int_t %in_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %out %idx + OpStore %res_curr %res_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtp_double_long.spvasm64 b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtp_double_long.spvasm64 new file mode 100644 index 00000000..2e47c119 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtp_double_long.spvasm64 @@ -0,0 +1,40 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Float64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "decorate_rounding_rtp_double_long" + OpName %out "res" + OpName %in "in" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %out_val FPRoundingMode RTP +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 64 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 64 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out = OpFunctionParameter %int_ptr_t +%in = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%in_curr = OpInBoundsPtrAccessChain %float_ptr_t %in %idx +%in_val = OpLoad %float_t %in_curr +%out_val = OpConvertFToS %int_t %in_val +%out_curr = OpInBoundsPtrAccessChain %int_ptr_t %out %idx + OpStore %out_curr %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtp_float_int.spvasm32 b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtp_float_int.spvasm32 new file mode 100644 index 00000000..bc3458af --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtp_float_int.spvasm32 @@ -0,0 +1,35 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "decorate_rounding_rtp_float_int" + OpName %out "res" + OpName %in "in" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %res_val FPRoundingMode RTP +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out = OpFunctionParameter %int_ptr_t +%in = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%in_curr = OpInBoundsPtrAccessChain %float_ptr_t %in %idx +%in_val = OpLoad %float_t %in_curr Aligned 4 +%res_val = OpConvertFToS %int_t %in_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %out %idx + OpStore %res_curr %res_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtp_float_int.spvasm64 b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtp_float_int.spvasm64 new file mode 100644 index 00000000..59c11604 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtp_float_int.spvasm64 @@ -0,0 +1,39 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "decorate_rounding_rtp_float_int" + OpName %out "res" + OpName %in "in" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %out_val FPRoundingMode RTP +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out = OpFunctionParameter %int_ptr_t +%in = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%in_curr = OpInBoundsPtrAccessChain %float_ptr_t %in %idx +%in_val = OpLoad %float_t %in_curr Aligned 4 +%out_val = OpConvertFToS %int_t %in_val +%out_curr = OpInBoundsPtrAccessChain %int_ptr_t %out %idx + OpStore %out_curr %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtz_double_long.spvasm32 b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtz_double_long.spvasm32 new file mode 100644 index 00000000..7bb34ddf --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtz_double_long.spvasm32 @@ -0,0 +1,37 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Float64 + OpCapability Int64 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "decorate_rounding_rtz_double_long" + OpName %out "res" + OpName %in "in" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %res_val FPRoundingMode RTZ +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 64 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 64 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out = OpFunctionParameter %int_ptr_t +%in = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%in_curr = OpInBoundsPtrAccessChain %float_ptr_t %in %idx +%in_val = OpLoad %float_t %in_curr +%res_val = OpConvertFToS %int_t %in_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %out %idx + OpStore %res_curr %res_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtz_double_long.spvasm64 b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtz_double_long.spvasm64 new file mode 100644 index 00000000..90fbb2d5 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtz_double_long.spvasm64 @@ -0,0 +1,40 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Float64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "decorate_rounding_rtz_double_long" + OpName %out "res" + OpName %in "in" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %out_val FPRoundingMode RTZ +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 64 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 64 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out = OpFunctionParameter %int_ptr_t +%in = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%in_curr = OpInBoundsPtrAccessChain %float_ptr_t %in %idx +%in_val = OpLoad %float_t %in_curr +%out_val = OpConvertFToS %int_t %in_val +%out_curr = OpInBoundsPtrAccessChain %int_ptr_t %out %idx + OpStore %out_curr %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtz_float_int.spvasm32 b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtz_float_int.spvasm32 new file mode 100644 index 00000000..fe726197 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtz_float_int.spvasm32 @@ -0,0 +1,35 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "decorate_rounding_rtz_float_int" + OpName %out "res" + OpName %in "in" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %res_val FPRoundingMode RTZ +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out = OpFunctionParameter %int_ptr_t +%in = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%in_curr = OpInBoundsPtrAccessChain %float_ptr_t %in %idx +%in_val = OpLoad %float_t %in_curr Aligned 4 +%res_val = OpConvertFToS %int_t %in_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %out %idx + OpStore %res_curr %res_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtz_float_int.spvasm64 b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtz_float_int.spvasm64 new file mode 100644 index 00000000..f3dda3b8 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_rounding_rtz_float_int.spvasm64 @@ -0,0 +1,39 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "decorate_rounding_rtz_float_int" + OpName %out "res" + OpName %in "in" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %out_val FPRoundingMode RTZ +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out = OpFunctionParameter %int_ptr_t +%in = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%in_curr = OpInBoundsPtrAccessChain %float_ptr_t %in %idx +%in_val = OpLoad %float_t %in_curr Aligned 4 +%out_val = OpConvertFToS %int_t %in_val +%out_curr = OpInBoundsPtrAccessChain %int_ptr_t %out %idx + OpStore %out_curr %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_char.spvasm32 b/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_char.spvasm32 new file mode 100644 index 00000000..58ac84aa --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_char.spvasm32 @@ -0,0 +1,41 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int8 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "decorate_saturated_conversion_char" + OpName %res "res" + OpName %lhs "lhs" + OpName %rhs "rhs" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %res_val SaturatedConversion +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 8 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t %float_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%res = OpFunctionParameter %int_ptr_t +%lhs = OpFunctionParameter %float_ptr_t +%rhs = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%lhs_curr = OpInBoundsPtrAccessChain %float_ptr_t %lhs %idx +%lhs_val = OpLoad %float_t %lhs_curr Aligned 4 +%rhs_curr = OpInBoundsPtrAccessChain %float_ptr_t %rhs %idx +%rhs_val = OpLoad %float_t %rhs_curr Aligned 4 +%float_val = OpFMul %float_t %lhs_val %rhs_val +%res_val = OpConvertFToS %int_t %float_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %res %idx + OpStore %res_curr %res_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_char.spvasm64 b/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_char.spvasm64 new file mode 100644 index 00000000..82d7cd5d --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_char.spvasm64 @@ -0,0 +1,45 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int8 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "decorate_saturated_conversion_char" + OpName %res "res" + OpName %lhs "lhs" + OpName %rhs "rhs" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %res_val SaturatedConversion +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 8 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%res = OpFunctionParameter %int_ptr_t +%lhs = OpFunctionParameter %float_ptr_t +%rhs = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%lhs_curr = OpInBoundsPtrAccessChain %float_ptr_t %lhs %idx +%lhs_val = OpLoad %float_t %lhs_curr Aligned 4 +%rhs_curr = OpInBoundsPtrAccessChain %float_ptr_t %rhs %idx +%rhs_val = OpLoad %float_t %rhs_curr Aligned 4 +%float_val = OpFMul %float_t %lhs_val %rhs_val +%res_val = OpConvertFToS %int_t %float_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %res %idx + OpStore %res_curr %res_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_int.spvasm32 b/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_int.spvasm32 new file mode 100644 index 00000000..d50fcaee --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_int.spvasm32 @@ -0,0 +1,41 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Float64 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "decorate_saturated_conversion_int" + OpName %res "res" + OpName %lhs "lhs" + OpName %rhs "rhs" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %res_val SaturatedConversion +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 64 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t %float_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%res = OpFunctionParameter %int_ptr_t +%lhs = OpFunctionParameter %float_ptr_t +%rhs = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%lhs_curr = OpInBoundsPtrAccessChain %float_ptr_t %lhs %idx +%lhs_val = OpLoad %float_t %lhs_curr +%rhs_curr = OpInBoundsPtrAccessChain %float_ptr_t %rhs %idx +%rhs_val = OpLoad %float_t %rhs_curr +%float_val = OpFMul %float_t %lhs_val %rhs_val +%res_val = OpConvertFToS %int_t %float_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %res %idx + OpStore %res_curr %res_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_int.spvasm64 b/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_int.spvasm64 new file mode 100644 index 00000000..737aa0ab --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_int.spvasm64 @@ -0,0 +1,45 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Float64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "decorate_saturated_conversion_int" + OpName %res "res" + OpName %lhs "lhs" + OpName %rhs "rhs" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %res_val SaturatedConversion +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 64 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%res = OpFunctionParameter %int_ptr_t +%lhs = OpFunctionParameter %float_ptr_t +%rhs = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%lhs_curr = OpInBoundsPtrAccessChain %float_ptr_t %lhs %idx +%lhs_val = OpLoad %float_t %lhs_curr +%rhs_curr = OpInBoundsPtrAccessChain %float_ptr_t %rhs %idx +%rhs_val = OpLoad %float_t %rhs_curr +%float_val = OpFMul %float_t %lhs_val %rhs_val +%res_val = OpConvertFToS %int_t %float_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %res %idx + OpStore %res_curr %res_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_short.spvasm32 b/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_short.spvasm32 new file mode 100644 index 00000000..abff4a7b --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_short.spvasm32 @@ -0,0 +1,41 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int16 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "decorate_saturated_conversion_short" + OpName %res "res" + OpName %lhs "lhs" + OpName %rhs "rhs" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %res_val SaturatedConversion +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 16 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t %float_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%res = OpFunctionParameter %int_ptr_t +%lhs = OpFunctionParameter %float_ptr_t +%rhs = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%lhs_curr = OpInBoundsPtrAccessChain %float_ptr_t %lhs %idx +%lhs_val = OpLoad %float_t %lhs_curr Aligned 4 +%rhs_curr = OpInBoundsPtrAccessChain %float_ptr_t %rhs %idx +%rhs_val = OpLoad %float_t %rhs_curr Aligned 4 +%float_val = OpFMul %float_t %lhs_val %rhs_val +%res_val = OpConvertFToS %int_t %float_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %res %idx + OpStore %res_curr %res_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_short.spvasm64 b/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_short.spvasm64 new file mode 100644 index 00000000..54e82f47 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_short.spvasm64 @@ -0,0 +1,45 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int16 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "decorate_saturated_conversion_short" + OpName %res "res" + OpName %lhs "lhs" + OpName %rhs "rhs" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %res_val SaturatedConversion +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 16 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%res = OpFunctionParameter %int_ptr_t +%lhs = OpFunctionParameter %float_ptr_t +%rhs = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%lhs_curr = OpInBoundsPtrAccessChain %float_ptr_t %lhs %idx +%lhs_val = OpLoad %float_t %lhs_curr Aligned 4 +%rhs_curr = OpInBoundsPtrAccessChain %float_ptr_t %rhs %idx +%rhs_val = OpLoad %float_t %rhs_curr Aligned 4 +%float_val = OpFMul %float_t %lhs_val %rhs_val +%res_val = OpConvertFToS %int_t %float_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %res %idx + OpStore %res_curr %res_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_uchar.spvasm32 b/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_uchar.spvasm32 new file mode 100644 index 00000000..2f9b5a9e --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_uchar.spvasm32 @@ -0,0 +1,41 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int8 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "decorate_saturated_conversion_uchar" + OpName %res "res" + OpName %lhs "lhs" + OpName %rhs "rhs" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %res_val SaturatedConversion +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 8 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t %float_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%res = OpFunctionParameter %int_ptr_t +%lhs = OpFunctionParameter %float_ptr_t +%rhs = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%lhs_curr = OpInBoundsPtrAccessChain %float_ptr_t %lhs %idx +%lhs_val = OpLoad %float_t %lhs_curr Aligned 4 +%rhs_curr = OpInBoundsPtrAccessChain %float_ptr_t %rhs %idx +%rhs_val = OpLoad %float_t %rhs_curr Aligned 4 +%float_val = OpFMul %float_t %lhs_val %rhs_val +%res_val = OpConvertFToU %int_t %float_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %res %idx + OpStore %res_curr %res_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_uchar.spvasm64 b/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_uchar.spvasm64 new file mode 100644 index 00000000..77f6af0c --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_uchar.spvasm64 @@ -0,0 +1,45 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int8 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "decorate_saturated_conversion_uchar" + OpName %res "res" + OpName %lhs "lhs" + OpName %rhs "rhs" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %res_val SaturatedConversion +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 8 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%res = OpFunctionParameter %int_ptr_t +%lhs = OpFunctionParameter %float_ptr_t +%rhs = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%lhs_curr = OpInBoundsPtrAccessChain %float_ptr_t %lhs %idx +%lhs_val = OpLoad %float_t %lhs_curr Aligned 4 +%rhs_curr = OpInBoundsPtrAccessChain %float_ptr_t %rhs %idx +%rhs_val = OpLoad %float_t %rhs_curr Aligned 4 +%float_val = OpFMul %float_t %lhs_val %rhs_val +%res_val = OpConvertFToU %int_t %float_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %res %idx + OpStore %res_curr %res_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_uint.spvasm32 b/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_uint.spvasm32 new file mode 100644 index 00000000..352d61b5 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_uint.spvasm32 @@ -0,0 +1,41 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Float64 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "decorate_saturated_conversion_uint" + OpName %res "res" + OpName %lhs "lhs" + OpName %rhs "rhs" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %res_val SaturatedConversion +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 64 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t %float_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%res = OpFunctionParameter %int_ptr_t +%lhs = OpFunctionParameter %float_ptr_t +%rhs = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%lhs_curr = OpInBoundsPtrAccessChain %float_ptr_t %lhs %idx +%lhs_val = OpLoad %float_t %lhs_curr +%rhs_curr = OpInBoundsPtrAccessChain %float_ptr_t %rhs %idx +%rhs_val = OpLoad %float_t %rhs_curr +%float_val = OpFMul %float_t %lhs_val %rhs_val +%res_val = OpConvertFToU %int_t %float_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %res %idx + OpStore %res_curr %res_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_uint.spvasm64 b/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_uint.spvasm64 new file mode 100644 index 00000000..10067f8a --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_uint.spvasm64 @@ -0,0 +1,45 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Float64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "decorate_saturated_conversion_uint" + OpName %res "res" + OpName %lhs "lhs" + OpName %rhs "rhs" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %res_val SaturatedConversion +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 64 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%res = OpFunctionParameter %int_ptr_t +%lhs = OpFunctionParameter %float_ptr_t +%rhs = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%lhs_curr = OpInBoundsPtrAccessChain %float_ptr_t %lhs %idx +%lhs_val = OpLoad %float_t %lhs_curr +%rhs_curr = OpInBoundsPtrAccessChain %float_ptr_t %rhs %idx +%rhs_val = OpLoad %float_t %rhs_curr +%float_val = OpFMul %float_t %lhs_val %rhs_val +%res_val = OpConvertFToS %int_t %float_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %res %idx + OpStore %res_curr %res_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_ushort.spvasm32 b/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_ushort.spvasm32 new file mode 100644 index 00000000..bdc56e7d --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_ushort.spvasm32 @@ -0,0 +1,41 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int16 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "decorate_saturated_conversion_ushort" + OpName %res "res" + OpName %lhs "lhs" + OpName %rhs "rhs" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %res_val SaturatedConversion +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 16 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t %float_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%res = OpFunctionParameter %int_ptr_t +%lhs = OpFunctionParameter %float_ptr_t +%rhs = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%lhs_curr = OpInBoundsPtrAccessChain %float_ptr_t %lhs %idx +%lhs_val = OpLoad %float_t %lhs_curr Aligned 4 +%rhs_curr = OpInBoundsPtrAccessChain %float_ptr_t %rhs %idx +%rhs_val = OpLoad %float_t %rhs_curr Aligned 4 +%float_val = OpFMul %float_t %lhs_val %rhs_val +%res_val = OpConvertFToU %int_t %float_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %res %idx + OpStore %res_curr %res_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_ushort.spvasm64 b/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_ushort.spvasm64 new file mode 100644 index 00000000..81f341be --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_saturated_conversion_ushort.spvasm64 @@ -0,0 +1,45 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int16 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "decorate_saturated_conversion_ushort" + OpName %res "res" + OpName %lhs "lhs" + OpName %rhs "rhs" + OpName %entry "entry" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %res_val SaturatedConversion +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 16 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %int_ptr_t %float_ptr_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%res = OpFunctionParameter %int_ptr_t +%lhs = OpFunctionParameter %float_ptr_t +%rhs = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%lhs_curr = OpInBoundsPtrAccessChain %float_ptr_t %lhs %idx +%lhs_val = OpLoad %float_t %lhs_curr Aligned 4 +%rhs_curr = OpInBoundsPtrAccessChain %float_ptr_t %rhs %idx +%rhs_val = OpLoad %float_t %rhs_curr Aligned 4 +%float_val = OpFMul %float_t %lhs_val %rhs_val +%res_val = OpConvertFToU %int_t %float_val +%res_curr = OpInBoundsPtrAccessChain %int_ptr_t %res %idx + OpStore %res_curr %res_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_volatile.spvasm32 b/test_conformance/spirv_new/spirv_txt/decorate_volatile.spvasm32 new file mode 100644 index 00000000..c86b54b0 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_volatile.spvasm32 @@ -0,0 +1,75 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability ImageBasic + OpCapability LiteralSampler + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %15 "decorate_volatile" + OpName %5 "sampler" + OpName %8 "__spirv_BuiltInGlobalInvocationId" + OpName %9 "__spirv_BuiltInGlobalSize" + OpName %16 "dst" + OpName %17 "src" + OpName %18 "entry" + OpName %20 "call" + OpName %22 "call1" + OpName %24 "call2" + OpName %25 "mul" + OpName %26 "add" + OpName %29 "vecinit" + OpName %30 "vecinit6" + OpName %34 "TempSampledImage" + OpName %35 "call7.old" + OpName %38 "arrayidx" + OpDecorate %17 Volatile + OpDecorate %39 Constant +%39 = OpDecorationGroup + OpDecorate %8 BuiltIn GlobalInvocationId + OpDecorate %9 BuiltIn GlobalSize + OpDecorate %16 FuncParamAttr NoCapture + OpDecorate %5 LinkageAttributes "sampler" Export + OpDecorate %9 LinkageAttributes "__spirv_BuiltInGlobalSize" Import + OpDecorate %8 LinkageAttributes "__spirv_BuiltInGlobalInvocationId" Import + OpDecorate %5 Alignment 4 + OpGroupDecorate %39 %5 %8 %9 + %2 = OpTypeInt 32 0 + %3 = OpConstant %2 16 + %4 = OpTypePointer UniformConstant %2 + %6 = OpTypeVector %2 3 + %7 = OpTypePointer UniformConstant %6 +%10 = OpTypeVoid +%11 = OpTypeVector %2 4 +%12 = OpTypePointer CrossWorkgroup %11 +%13 = OpTypeImage %10 2D 0 0 0 0 Unknown +%14 = OpTypeFunction %10 %12 %13 +%27 = OpTypeVector %2 2 +%31 = OpTypeSampler +%33 = OpTypeSampledImage %13 +%36 = OpTypeFloat 32 +%32 = OpConstantSampler %31 None 0 Nearest +%37 = OpConstant %36 0 + %5 = OpVariable %4 UniformConstant %3 + %8 = OpVariable %7 UniformConstant + %9 = OpVariable %7 UniformConstant +%15 = OpFunction %10 None %14 +%16 = OpFunctionParameter %12 +%17 = OpFunctionParameter %13 +%18 = OpLabel +%28 = OpUndef %27 +%19 = OpLoad %6 %8 Aligned 0 +%20 = OpCompositeExtract %2 %19 0 +%21 = OpLoad %6 %8 Aligned 0 +%22 = OpCompositeExtract %2 %21 1 +%23 = OpLoad %6 %9 Aligned 0 +%24 = OpCompositeExtract %2 %23 0 +%25 = OpIMul %2 %24 %22 +%26 = OpIAdd %2 %25 %20 +%29 = OpCompositeInsert %27 %22 %28 0 +%30 = OpCompositeInsert %27 %20 %29 1 +%34 = OpSampledImage %33 %17 %32 +%35 = OpImageSampleExplicitLod %11 %34 %30 Lod %37 +%38 = OpInBoundsPtrAccessChain %12 %16 %26 + OpStore %38 %35 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/decorate_volatile.spvasm64 b/test_conformance/spirv_new/spirv_txt/decorate_volatile.spvasm64 new file mode 100644 index 00000000..0f32fba4 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/decorate_volatile.spvasm64 @@ -0,0 +1,88 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability ImageBasic + OpCapability LiteralSampler + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %16 "decorate_volatile" + OpName %5 "sampler" + OpName %9 "__spirv_BuiltInGlobalInvocationId" + OpName %10 "__spirv_BuiltInGlobalSize" + OpName %17 "dst" + OpName %18 "src" + OpName %19 "entry" + OpName %21 "call" + OpName %22 "conv" + OpName %24 "call1" + OpName %25 "conv2" + OpName %26 "conv3" + OpName %28 "call4" + OpName %29 "mul" + OpName %30 "add" + OpName %33 "vecinit" + OpName %34 "vecinit10" + OpName %38 "TempSampledImage" + OpName %39 "call11.old" + OpName %43 "sext" + OpName %44 "idxprom" + OpName %45 "arrayidx" + OpDecorate %18 Volatile + OpDecorate %46 Constant +%46 = OpDecorationGroup + OpDecorate %9 BuiltIn GlobalInvocationId + OpDecorate %10 BuiltIn GlobalSize + OpDecorate %17 FuncParamAttr NoCapture + OpDecorate %5 LinkageAttributes "sampler" Export + OpDecorate %10 LinkageAttributes "__spirv_BuiltInGlobalSize" Import + OpDecorate %9 LinkageAttributes "__spirv_BuiltInGlobalInvocationId" Import + OpDecorate %5 Alignment 4 + OpGroupDecorate %46 %5 %9 %10 + %2 = OpTypeInt 32 0 + %6 = OpTypeInt 64 0 + %3 = OpConstant %2 16 +%42 = OpConstant %6 32 + %4 = OpTypePointer UniformConstant %2 + %7 = OpTypeVector %6 3 + %8 = OpTypePointer UniformConstant %7 +%11 = OpTypeVoid +%12 = OpTypeVector %2 4 +%13 = OpTypePointer CrossWorkgroup %12 +%14 = OpTypeImage %11 2D 0 0 0 0 Unknown +%15 = OpTypeFunction %11 %13 %14 +%31 = OpTypeVector %2 2 +%35 = OpTypeSampler +%37 = OpTypeSampledImage %14 +%40 = OpTypeFloat 32 +%36 = OpConstantSampler %35 None 0 Nearest +%41 = OpConstant %40 0 + %5 = OpVariable %4 UniformConstant %3 + %9 = OpVariable %8 UniformConstant +%10 = OpVariable %8 UniformConstant +%16 = OpFunction %11 None %15 +%17 = OpFunctionParameter %13 +%18 = OpFunctionParameter %14 +%19 = OpLabel +%32 = OpUndef %31 +%20 = OpLoad %7 %9 Aligned 0 +%21 = OpCompositeExtract %6 %20 0 +%22 = OpUConvert %2 %21 +%23 = OpLoad %7 %9 Aligned 0 +%24 = OpCompositeExtract %6 %23 1 +%25 = OpUConvert %2 %24 +%26 = OpSConvert %6 %25 +%27 = OpLoad %7 %10 Aligned 0 +%28 = OpCompositeExtract %6 %27 0 +%29 = OpIMul %6 %26 %28 +%30 = OpIAdd %6 %29 %21 +%33 = OpCompositeInsert %31 %25 %32 0 +%34 = OpCompositeInsert %31 %22 %33 1 +%38 = OpSampledImage %37 %18 %36 +%39 = OpImageSampleExplicitLod %12 %38 %34 Lod %41 +%43 = OpShiftLeftLogical %6 %30 %42 +%44 = OpShiftRightArithmetic %6 %43 %42 +%45 = OpInBoundsPtrAccessChain %13 %17 %44 + OpStore %45 %39 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fadd_double.spvasm32 b/test_conformance/spirv_new/spirv_txt/fadd_double.spvasm32 new file mode 100644 index 00000000..89095c1e --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fadd_double.spvasm32 @@ -0,0 +1,41 @@ + OpCapability Float64 + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 64 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %7 %17 Aligned 8 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %7 %19 Aligned 8 +%21 = OpFAdd %7 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 Aligned 8 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fadd_double.spvasm64 b/test_conformance/spirv_new/spirv_txt/fadd_double.spvasm64 new file mode 100644 index 00000000..5157bdb2 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fadd_double.spvasm64 @@ -0,0 +1,45 @@ + OpCapability Float64 + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 64 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %7 %20 Aligned 8 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %7 %22 Aligned 8 +%24 = OpFAdd %7 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 Aligned 8 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fadd_double2.spvasm32 b/test_conformance/spirv_new/spirv_txt/fadd_double2.spvasm32 new file mode 100644 index 00000000..3ec0b375 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fadd_double2.spvasm32 @@ -0,0 +1,42 @@ + OpCapability Float64 + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 64 +%72 = OpTypeVector %7 2 + %8 = OpTypePointer CrossWorkgroup %72 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %72 %17 Aligned 16 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %72 %19 Aligned 16 +%21 = OpFAdd %72 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fadd_double2.spvasm64 b/test_conformance/spirv_new/spirv_txt/fadd_double2.spvasm64 new file mode 100644 index 00000000..d7c811c8 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fadd_double2.spvasm64 @@ -0,0 +1,46 @@ + OpCapability Float64 + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 64 +%72 = OpTypeVector %7 2 + %8 = OpTypePointer CrossWorkgroup %72 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %72 %20 Aligned 16 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %72 %22 Aligned 16 +%24 = OpFAdd %72 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fadd_float.spvasm32 b/test_conformance/spirv_new/spirv_txt/fadd_float.spvasm32 new file mode 100644 index 00000000..82d84e0b --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fadd_float.spvasm32 @@ -0,0 +1,40 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 32 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %7 %17 Aligned 4 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %7 %19 Aligned 4 +%21 = OpFAdd %7 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fadd_float.spvasm64 b/test_conformance/spirv_new/spirv_txt/fadd_float.spvasm64 new file mode 100644 index 00000000..c13094a3 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fadd_float.spvasm64 @@ -0,0 +1,44 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 32 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %7 %20 Aligned 4 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %7 %22 Aligned 4 +%24 = OpFAdd %7 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fadd_float4.spvasm32 b/test_conformance/spirv_new/spirv_txt/fadd_float4.spvasm32 new file mode 100644 index 00000000..1f831368 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fadd_float4.spvasm32 @@ -0,0 +1,41 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 32 +%74 = OpTypeVector %7 4 + %8 = OpTypePointer CrossWorkgroup %74 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %74 %17 Aligned 16 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %74 %19 Aligned 16 +%21 = OpFAdd %74 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fadd_float4.spvasm64 b/test_conformance/spirv_new/spirv_txt/fadd_float4.spvasm64 new file mode 100644 index 00000000..eb7ecd5c --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fadd_float4.spvasm64 @@ -0,0 +1,45 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 32 +%74 = OpTypeVector %7 4 + %8 = OpTypePointer CrossWorkgroup %74 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %74 %20 Aligned 16 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %74 %22 Aligned 16 +%24 = OpFAdd %74 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fadd_half.spvasm32 b/test_conformance/spirv_new/spirv_txt/fadd_half.spvasm32 new file mode 100644 index 00000000..ab351a61 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fadd_half.spvasm32 @@ -0,0 +1,41 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Float16 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 16 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %7 %17 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %7 %19 +%21 = OpFAdd %7 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fadd_half.spvasm64 b/test_conformance/spirv_new/spirv_txt/fadd_half.spvasm64 new file mode 100644 index 00000000..fd60259e --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fadd_half.spvasm64 @@ -0,0 +1,45 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Float16 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 16 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %7 %20 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %7 %22 +%24 = OpFAdd %7 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fdiv_double.spvasm32 b/test_conformance/spirv_new/spirv_txt/fdiv_double.spvasm32 new file mode 100644 index 00000000..bc73e689 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fdiv_double.spvasm32 @@ -0,0 +1,41 @@ + OpCapability Float64 + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 64 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %7 %17 Aligned 8 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %7 %19 Aligned 8 +%21 = OpFDiv %7 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 Aligned 8 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fdiv_double.spvasm64 b/test_conformance/spirv_new/spirv_txt/fdiv_double.spvasm64 new file mode 100644 index 00000000..c3abc9c0 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fdiv_double.spvasm64 @@ -0,0 +1,45 @@ + OpCapability Float64 + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 64 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %7 %20 Aligned 8 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %7 %22 Aligned 8 +%24 = OpFDiv %7 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 Aligned 8 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fdiv_double2.spvasm32 b/test_conformance/spirv_new/spirv_txt/fdiv_double2.spvasm32 new file mode 100644 index 00000000..9bad4fa5 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fdiv_double2.spvasm32 @@ -0,0 +1,42 @@ + OpCapability Float64 + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 64 +%72 = OpTypeVector %7 2 + %8 = OpTypePointer CrossWorkgroup %72 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %72 %17 Aligned 16 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %72 %19 Aligned 16 +%21 = OpFDiv %72 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fdiv_double2.spvasm64 b/test_conformance/spirv_new/spirv_txt/fdiv_double2.spvasm64 new file mode 100644 index 00000000..660370c0 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fdiv_double2.spvasm64 @@ -0,0 +1,46 @@ + OpCapability Float64 + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 64 +%72 = OpTypeVector %7 2 + %8 = OpTypePointer CrossWorkgroup %72 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %72 %20 Aligned 16 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %72 %22 Aligned 16 +%24 = OpFDiv %72 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fdiv_float.spvasm32 b/test_conformance/spirv_new/spirv_txt/fdiv_float.spvasm32 new file mode 100644 index 00000000..f00aae44 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fdiv_float.spvasm32 @@ -0,0 +1,40 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 32 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %7 %17 Aligned 4 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %7 %19 Aligned 4 +%21 = OpFDiv %7 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fdiv_float.spvasm64 b/test_conformance/spirv_new/spirv_txt/fdiv_float.spvasm64 new file mode 100644 index 00000000..903eeedc --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fdiv_float.spvasm64 @@ -0,0 +1,44 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 32 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %7 %20 Aligned 4 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %7 %22 Aligned 4 +%24 = OpFDiv %7 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fdiv_float4.spvasm32 b/test_conformance/spirv_new/spirv_txt/fdiv_float4.spvasm32 new file mode 100644 index 00000000..7b81eab3 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fdiv_float4.spvasm32 @@ -0,0 +1,41 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 32 +%74 = OpTypeVector %7 4 + %8 = OpTypePointer CrossWorkgroup %74 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %74 %17 Aligned 16 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %74 %19 Aligned 16 +%21 = OpFDiv %74 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fdiv_float4.spvasm64 b/test_conformance/spirv_new/spirv_txt/fdiv_float4.spvasm64 new file mode 100644 index 00000000..84156f48 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fdiv_float4.spvasm64 @@ -0,0 +1,45 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 32 +%74 = OpTypeVector %7 4 + %8 = OpTypePointer CrossWorkgroup %74 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %74 %20 Aligned 16 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %74 %22 Aligned 16 +%24 = OpFDiv %74 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fdiv_half.spvasm32 b/test_conformance/spirv_new/spirv_txt/fdiv_half.spvasm32 new file mode 100644 index 00000000..3c455c83 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fdiv_half.spvasm32 @@ -0,0 +1,41 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Float16 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 16 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %7 %17 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %7 %19 +%21 = OpFDiv %7 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fdiv_half.spvasm64 b/test_conformance/spirv_new/spirv_txt/fdiv_half.spvasm64 new file mode 100644 index 00000000..a5b77a06 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fdiv_half.spvasm64 @@ -0,0 +1,45 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Float16 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 16 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %7 %20 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %7 %22 +%24 = OpFDiv %7 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fmod_double.spvasm32 b/test_conformance/spirv_new/spirv_txt/fmod_double.spvasm32 new file mode 100644 index 00000000..fc3478cd --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fmod_double.spvasm32 @@ -0,0 +1,41 @@ + OpCapability Float64 + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 64 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %7 %17 Aligned 8 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %7 %19 Aligned 8 +%21 = OpFMod %7 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 Aligned 8 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fmod_double.spvasm64 b/test_conformance/spirv_new/spirv_txt/fmod_double.spvasm64 new file mode 100644 index 00000000..ec9cf22f --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fmod_double.spvasm64 @@ -0,0 +1,45 @@ + OpCapability Float64 + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 64 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %7 %20 Aligned 8 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %7 %22 Aligned 8 +%24 = OpFMod %7 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 Aligned 8 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fmod_double2.spvasm32 b/test_conformance/spirv_new/spirv_txt/fmod_double2.spvasm32 new file mode 100644 index 00000000..52016890 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fmod_double2.spvasm32 @@ -0,0 +1,42 @@ + OpCapability Float64 + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 64 +%72 = OpTypeVector %7 2 + %8 = OpTypePointer CrossWorkgroup %72 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %72 %17 Aligned 16 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %72 %19 Aligned 16 +%21 = OpFMod %72 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fmod_double2.spvasm64 b/test_conformance/spirv_new/spirv_txt/fmod_double2.spvasm64 new file mode 100644 index 00000000..197313ee --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fmod_double2.spvasm64 @@ -0,0 +1,46 @@ + OpCapability Float64 + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 64 +%72 = OpTypeVector %7 2 + %8 = OpTypePointer CrossWorkgroup %72 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %72 %20 Aligned 16 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %72 %22 Aligned 16 +%24 = OpFMod %72 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fmod_float.spvasm32 b/test_conformance/spirv_new/spirv_txt/fmod_float.spvasm32 new file mode 100644 index 00000000..bdcbc288 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fmod_float.spvasm32 @@ -0,0 +1,40 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 32 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %7 %17 Aligned 4 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %7 %19 Aligned 4 +%21 = OpFMod %7 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fmod_float.spvasm64 b/test_conformance/spirv_new/spirv_txt/fmod_float.spvasm64 new file mode 100644 index 00000000..ccdb529a --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fmod_float.spvasm64 @@ -0,0 +1,44 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 32 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %7 %20 Aligned 4 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %7 %22 Aligned 4 +%24 = OpFMod %7 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fmod_float4.spvasm32 b/test_conformance/spirv_new/spirv_txt/fmod_float4.spvasm32 new file mode 100644 index 00000000..aa9a6fdf --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fmod_float4.spvasm32 @@ -0,0 +1,41 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 32 +%74 = OpTypeVector %7 4 + %8 = OpTypePointer CrossWorkgroup %74 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %74 %17 Aligned 16 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %74 %19 Aligned 16 +%21 = OpFMod %74 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fmod_float4.spvasm64 b/test_conformance/spirv_new/spirv_txt/fmod_float4.spvasm64 new file mode 100644 index 00000000..1ec4ba08 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fmod_float4.spvasm64 @@ -0,0 +1,45 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 32 +%74 = OpTypeVector %7 4 + %8 = OpTypePointer CrossWorkgroup %74 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %74 %20 Aligned 16 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %74 %22 Aligned 16 +%24 = OpFMod %74 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fmod_half.spvasm32 b/test_conformance/spirv_new/spirv_txt/fmod_half.spvasm32 new file mode 100644 index 00000000..86f00ca2 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fmod_half.spvasm32 @@ -0,0 +1,41 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Float16 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 16 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %7 %17 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %7 %19 +%21 = OpFMod %7 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fmod_half.spvasm64 b/test_conformance/spirv_new/spirv_txt/fmod_half.spvasm64 new file mode 100644 index 00000000..e7513d5a --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fmod_half.spvasm64 @@ -0,0 +1,45 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Float16 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 16 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %7 %20 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %7 %22 +%24 = OpFMod %7 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fmul_double.spvasm32 b/test_conformance/spirv_new/spirv_txt/fmul_double.spvasm32 new file mode 100644 index 00000000..bfd8f688 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fmul_double.spvasm32 @@ -0,0 +1,41 @@ + OpCapability Float64 + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 64 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %7 %17 Aligned 8 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %7 %19 Aligned 8 +%21 = OpFMul %7 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 Aligned 8 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fmul_double.spvasm64 b/test_conformance/spirv_new/spirv_txt/fmul_double.spvasm64 new file mode 100644 index 00000000..aaed39b5 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fmul_double.spvasm64 @@ -0,0 +1,45 @@ + OpCapability Float64 + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 64 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %7 %20 Aligned 8 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %7 %22 Aligned 8 +%24 = OpFMul %7 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 Aligned 8 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fmul_double2.spvasm32 b/test_conformance/spirv_new/spirv_txt/fmul_double2.spvasm32 new file mode 100644 index 00000000..43606f3a --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fmul_double2.spvasm32 @@ -0,0 +1,42 @@ + OpCapability Float64 + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 64 +%72 = OpTypeVector %7 2 + %8 = OpTypePointer CrossWorkgroup %72 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %72 %17 Aligned 16 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %72 %19 Aligned 16 +%21 = OpFMul %72 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fmul_double2.spvasm64 b/test_conformance/spirv_new/spirv_txt/fmul_double2.spvasm64 new file mode 100644 index 00000000..58314895 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fmul_double2.spvasm64 @@ -0,0 +1,46 @@ + OpCapability Float64 + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 64 +%72 = OpTypeVector %7 2 + %8 = OpTypePointer CrossWorkgroup %72 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %72 %20 Aligned 16 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %72 %22 Aligned 16 +%24 = OpFMul %72 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fmul_float.spvasm32 b/test_conformance/spirv_new/spirv_txt/fmul_float.spvasm32 new file mode 100644 index 00000000..4a7439aa --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fmul_float.spvasm32 @@ -0,0 +1,40 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 32 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %7 %17 Aligned 4 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %7 %19 Aligned 4 +%21 = OpFMul %7 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fmul_float.spvasm64 b/test_conformance/spirv_new/spirv_txt/fmul_float.spvasm64 new file mode 100644 index 00000000..11e72097 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fmul_float.spvasm64 @@ -0,0 +1,44 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 32 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %7 %20 Aligned 4 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %7 %22 Aligned 4 +%24 = OpFMul %7 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fmul_float4.spvasm32 b/test_conformance/spirv_new/spirv_txt/fmul_float4.spvasm32 new file mode 100644 index 00000000..0ddcf0d9 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fmul_float4.spvasm32 @@ -0,0 +1,41 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 32 +%74 = OpTypeVector %7 4 + %8 = OpTypePointer CrossWorkgroup %74 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %74 %17 Aligned 16 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %74 %19 Aligned 16 +%21 = OpFMul %74 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fmul_float4.spvasm64 b/test_conformance/spirv_new/spirv_txt/fmul_float4.spvasm64 new file mode 100644 index 00000000..0d656e09 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fmul_float4.spvasm64 @@ -0,0 +1,45 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 32 +%74 = OpTypeVector %7 4 + %8 = OpTypePointer CrossWorkgroup %74 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %74 %20 Aligned 16 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %74 %22 Aligned 16 +%24 = OpFMul %74 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fmul_half.spvasm32 b/test_conformance/spirv_new/spirv_txt/fmul_half.spvasm32 new file mode 100644 index 00000000..0aa2d7b8 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fmul_half.spvasm32 @@ -0,0 +1,41 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Float16 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 16 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %7 %17 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %7 %19 +%21 = OpFMul %7 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fmul_half.spvasm64 b/test_conformance/spirv_new/spirv_txt/fmul_half.spvasm64 new file mode 100644 index 00000000..56b52b6f --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fmul_half.spvasm64 @@ -0,0 +1,45 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Float16 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 16 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %7 %20 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %7 %22 +%24 = OpFMul %7 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/frem_double.spvasm32 b/test_conformance/spirv_new/spirv_txt/frem_double.spvasm32 new file mode 100644 index 00000000..782e1cad --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/frem_double.spvasm32 @@ -0,0 +1,41 @@ + OpCapability Float64 + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 64 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %7 %17 Aligned 8 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %7 %19 Aligned 8 +%21 = OpFRem %7 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 Aligned 8 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/frem_double.spvasm64 b/test_conformance/spirv_new/spirv_txt/frem_double.spvasm64 new file mode 100644 index 00000000..76e03c3c --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/frem_double.spvasm64 @@ -0,0 +1,45 @@ + OpCapability Float64 + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 64 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %7 %20 Aligned 8 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %7 %22 Aligned 8 +%24 = OpFRem %7 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 Aligned 8 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/frem_double2.spvasm32 b/test_conformance/spirv_new/spirv_txt/frem_double2.spvasm32 new file mode 100644 index 00000000..271615af --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/frem_double2.spvasm32 @@ -0,0 +1,42 @@ + OpCapability Float64 + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 64 +%72 = OpTypeVector %7 2 + %8 = OpTypePointer CrossWorkgroup %72 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %72 %17 Aligned 16 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %72 %19 Aligned 16 +%21 = OpFRem %72 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/frem_double2.spvasm64 b/test_conformance/spirv_new/spirv_txt/frem_double2.spvasm64 new file mode 100644 index 00000000..2d09838e --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/frem_double2.spvasm64 @@ -0,0 +1,46 @@ + OpCapability Float64 + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 64 +%72 = OpTypeVector %7 2 + %8 = OpTypePointer CrossWorkgroup %72 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %72 %20 Aligned 16 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %72 %22 Aligned 16 +%24 = OpFRem %72 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/frem_float.spvasm32 b/test_conformance/spirv_new/spirv_txt/frem_float.spvasm32 new file mode 100644 index 00000000..133fe786 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/frem_float.spvasm32 @@ -0,0 +1,40 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 32 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %7 %17 Aligned 4 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %7 %19 Aligned 4 +%21 = OpFRem %7 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/frem_float.spvasm64 b/test_conformance/spirv_new/spirv_txt/frem_float.spvasm64 new file mode 100644 index 00000000..5a5e9078 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/frem_float.spvasm64 @@ -0,0 +1,44 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 32 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %7 %20 Aligned 4 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %7 %22 Aligned 4 +%24 = OpFRem %7 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/frem_float4.spvasm32 b/test_conformance/spirv_new/spirv_txt/frem_float4.spvasm32 new file mode 100644 index 00000000..8e5032cc --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/frem_float4.spvasm32 @@ -0,0 +1,41 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 32 +%74 = OpTypeVector %7 4 + %8 = OpTypePointer CrossWorkgroup %74 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %74 %17 Aligned 16 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %74 %19 Aligned 16 +%21 = OpFRem %74 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/frem_float4.spvasm64 b/test_conformance/spirv_new/spirv_txt/frem_float4.spvasm64 new file mode 100644 index 00000000..5e8deb09 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/frem_float4.spvasm64 @@ -0,0 +1,45 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 32 +%74 = OpTypeVector %7 4 + %8 = OpTypePointer CrossWorkgroup %74 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %74 %20 Aligned 16 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %74 %22 Aligned 16 +%24 = OpFRem %74 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/frem_half.spvasm32 b/test_conformance/spirv_new/spirv_txt/frem_half.spvasm32 new file mode 100644 index 00000000..3b0a79e8 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/frem_half.spvasm32 @@ -0,0 +1,41 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Float16 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 16 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %7 %17 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %7 %19 +%21 = OpFRem %7 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/frem_half.spvasm64 b/test_conformance/spirv_new/spirv_txt/frem_half.spvasm64 new file mode 100644 index 00000000..774d96d1 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/frem_half.spvasm64 @@ -0,0 +1,45 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Float16 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 16 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %7 %20 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %7 %22 +%24 = OpFRem %7 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fsub_double.spvasm32 b/test_conformance/spirv_new/spirv_txt/fsub_double.spvasm32 new file mode 100644 index 00000000..24e3d60f --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fsub_double.spvasm32 @@ -0,0 +1,41 @@ + OpCapability Float64 + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 64 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %7 %17 Aligned 8 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %7 %19 Aligned 8 +%21 = OpFSub %7 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 Aligned 8 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fsub_double.spvasm64 b/test_conformance/spirv_new/spirv_txt/fsub_double.spvasm64 new file mode 100644 index 00000000..ce2fce68 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fsub_double.spvasm64 @@ -0,0 +1,45 @@ + OpCapability Float64 + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 64 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %7 %20 Aligned 8 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %7 %22 Aligned 8 +%24 = OpFSub %7 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 Aligned 8 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fsub_double2.spvasm32 b/test_conformance/spirv_new/spirv_txt/fsub_double2.spvasm32 new file mode 100644 index 00000000..738f7479 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fsub_double2.spvasm32 @@ -0,0 +1,42 @@ + OpCapability Float64 + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 64 +%72 = OpTypeVector %7 2 + %8 = OpTypePointer CrossWorkgroup %72 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %72 %17 Aligned 16 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %72 %19 Aligned 16 +%21 = OpFSub %72 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fsub_double2.spvasm64 b/test_conformance/spirv_new/spirv_txt/fsub_double2.spvasm64 new file mode 100644 index 00000000..3e010b2f --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fsub_double2.spvasm64 @@ -0,0 +1,46 @@ + OpCapability Float64 + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 64 +%72 = OpTypeVector %7 2 + %8 = OpTypePointer CrossWorkgroup %72 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %72 %20 Aligned 16 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %72 %22 Aligned 16 +%24 = OpFSub %72 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fsub_float.spvasm32 b/test_conformance/spirv_new/spirv_txt/fsub_float.spvasm32 new file mode 100644 index 00000000..48200b66 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fsub_float.spvasm32 @@ -0,0 +1,40 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 32 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %7 %17 Aligned 4 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %7 %19 Aligned 4 +%21 = OpFSub %7 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fsub_float.spvasm64 b/test_conformance/spirv_new/spirv_txt/fsub_float.spvasm64 new file mode 100644 index 00000000..ccfc8619 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fsub_float.spvasm64 @@ -0,0 +1,44 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 32 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %7 %20 Aligned 4 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %7 %22 Aligned 4 +%24 = OpFSub %7 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fsub_float4.spvasm32 b/test_conformance/spirv_new/spirv_txt/fsub_float4.spvasm32 new file mode 100644 index 00000000..e3ad63e0 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fsub_float4.spvasm32 @@ -0,0 +1,41 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 32 +%74 = OpTypeVector %7 4 + %8 = OpTypePointer CrossWorkgroup %74 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %74 %17 Aligned 16 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %74 %19 Aligned 16 +%21 = OpFSub %74 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fsub_float4.spvasm64 b/test_conformance/spirv_new/spirv_txt/fsub_float4.spvasm64 new file mode 100644 index 00000000..65615bdc --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fsub_float4.spvasm64 @@ -0,0 +1,45 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 32 +%74 = OpTypeVector %7 4 + %8 = OpTypePointer CrossWorkgroup %74 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %74 %20 Aligned 16 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %74 %22 Aligned 16 +%24 = OpFSub %74 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fsub_half.spvasm32 b/test_conformance/spirv_new/spirv_txt/fsub_half.spvasm32 new file mode 100644 index 00000000..3531c662 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fsub_half.spvasm32 @@ -0,0 +1,41 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Float16 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %23 FuncParamAttr NoCapture +%23 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %23 %11 %12 %13 + %2 = OpTypeInt 32 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 16 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%17 = OpInBoundsPtrAccessChain %8 %12 %16 +%18 = OpLoad %7 %17 +%19 = OpInBoundsPtrAccessChain %8 %13 %16 +%20 = OpLoad %7 %19 +%21 = OpFSub %7 %18 %20 +%22 = OpInBoundsPtrAccessChain %8 %11 %16 + OpStore %22 %21 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/fsub_half.spvasm64 b/test_conformance/spirv_new/spirv_txt/fsub_half.spvasm64 new file mode 100644 index 00000000..b9335f9b --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/fsub_half.spvasm64 @@ -0,0 +1,45 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Float16 + %1 = OpExtInstImport "OpenCL.std" + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %10 "fmath_spv" + OpName %11 "res" + OpName %12 "lhs" + OpName %13 "rhs" + OpName %14 "entry" + OpDecorate %26 FuncParamAttr NoCapture +%26 = OpDecorationGroup + OpDecorate %5 BuiltIn GlobalInvocationId + OpDecorate %5 Constant + OpDecorate %5 LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %26 %11 %12 %13 + %2 = OpTypeInt 64 0 + %3 = OpTypeVector %2 3 + %4 = OpTypePointer UniformConstant %3 + %6 = OpTypeVoid + %7 = OpTypeFloat 16 + %8 = OpTypePointer CrossWorkgroup %7 + %9 = OpTypeFunction %6 %8 %8 %8 +%17 = OpConstant %2 32 + %5 = OpVariable %4 UniformConstant +%10 = OpFunction %6 None %9 +%11 = OpFunctionParameter %8 +%12 = OpFunctionParameter %8 +%13 = OpFunctionParameter %8 +%14 = OpLabel +%15 = OpLoad %3 %5 Aligned 0 +%16 = OpCompositeExtract %2 %15 0 +%18 = OpShiftLeftLogical %2 %16 %17 +%19 = OpShiftRightArithmetic %2 %18 %17 +%20 = OpInBoundsPtrAccessChain %8 %12 %19 +%21 = OpLoad %7 %20 +%22 = OpInBoundsPtrAccessChain %8 %13 %19 +%23 = OpLoad %7 %22 +%24 = OpFSub %7 %21 %23 +%25 = OpInBoundsPtrAccessChain %8 %11 %19 + OpStore %25 %24 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/label_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/label_simple.spvasm32 new file mode 100644 index 00000000..cddd1dcc --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/label_simple.spvasm32 @@ -0,0 +1,30 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "label_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int_ptr_t +%outptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current_in = OpInBoundsPtrAccessChain %int_ptr_t %inptr %idx +%current_out = OpInBoundsPtrAccessChain %int_ptr_t %outptr %idx +%val = OpLoad %int_t %current_in + OpStore %current_out %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/label_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/label_simple.spvasm64 new file mode 100644 index 00000000..36724fb8 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/label_simple.spvasm64 @@ -0,0 +1,35 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "label_simple" + OpName %inptr "in" + OpName %outptr "out" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%shift_val = OpConstant %idx_t 32 +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int_ptr_t +%outptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current_in = OpInBoundsPtrAccessChain %int_ptr_t %inptr %idx +%current_out = OpInBoundsPtrAccessChain %int_ptr_t %outptr %idx +%val = OpLoad %int_t %current_in + OpStore %current_out %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/lifetime_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/lifetime_simple.spvasm32 new file mode 100644 index 00000000..bdac8db4 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/lifetime_simple.spvasm32 @@ -0,0 +1,46 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "lifetime_simple" + OpName %out_ptr "res" + OpName %lhs_ptr "lhs" + OpName %rhs_ptr "rhs" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %lhs_ptr %rhs_ptr +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_zero = OpConstant %int_t 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%lhs_ptr = OpFunctionParameter %int_ptr_t +%rhs_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%tmp = OpVariable %tmp_ptr_t Function +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%lhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %lhs_ptr %idx +%lhs_val = OpLoad %int_t %lhs_loc Aligned 4 +%rhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %rhs_ptr %idx +%rhs_val = OpLoad %int_t %rhs_loc Aligned 4 +%sub_val = OpISub %int_t %lhs_val %rhs_val + OpLifetimeStart %tmp 0 + OpStore %tmp %sub_val +%out_val = OpLoad %int_t %tmp + OpLifetimeStop %tmp 0 +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/lifetime_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/lifetime_simple.spvasm64 new file mode 100644 index 00000000..3a9d39aa --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/lifetime_simple.spvasm64 @@ -0,0 +1,50 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "lifetime_simple" + OpName %out_ptr "res" + OpName %lhs_ptr "lhs" + OpName %rhs_ptr "rhs" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %lhs_ptr %rhs_ptr +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%shift_val = OpConstant %idx_t 32 +%int_zero = OpConstant %int_t 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%lhs_ptr = OpFunctionParameter %int_ptr_t +%rhs_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%tmp = OpVariable %tmp_ptr_t Function +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%lhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %lhs_ptr %idx +%lhs_val = OpLoad %int_t %lhs_loc Aligned 4 +%rhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %rhs_ptr %idx +%rhs_val = OpLoad %int_t %rhs_loc Aligned 4 +%sub_val = OpISub %int_t %lhs_val %rhs_val + OpLifetimeStart %tmp 0 + OpStore %tmp %sub_val +%out_val = OpLoad %int_t %tmp + OpLifetimeStop %tmp 0 +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/linkage_export.spvasm32 b/test_conformance/spirv_new/spirv_txt/linkage_export.spvasm32 new file mode 100644 index 00000000..3f715805 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/linkage_export.spvasm32 @@ -0,0 +1,15 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpName %local_func "simple_fnegate_linkage" + OpDecorate %local_func LinkageAttributes "simple_fnegate_linkage" Export +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%local_func_t = OpTypeFunction %float_t %float_t +%local_func = OpFunction %float_t Const %local_func_t +%local_in = OpFunctionParameter %float_t +%local_label = OpLabel +%local_out = OpFNegate %float_t %local_in + OpReturnValue %local_out + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/linkage_export.spvasm64 b/test_conformance/spirv_new/spirv_txt/linkage_export.spvasm64 new file mode 100644 index 00000000..a76618b2 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/linkage_export.spvasm64 @@ -0,0 +1,15 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical64 OpenCL + OpName %local_func "simple_fnegate_linkage" + OpDecorate %local_func LinkageAttributes "simple_fnegate_linkage" Export +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%local_func_t = OpTypeFunction %float_t %float_t +%local_func = OpFunction %float_t Const %local_func_t +%local_in = OpFunctionParameter %float_t +%local_label = OpLabel +%local_out = OpFNegate %float_t %local_in + OpReturnValue %local_out + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/linkage_import.spvasm32 b/test_conformance/spirv_new/spirv_txt/linkage_import.spvasm32 new file mode 100644 index 00000000..f2364969 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/linkage_import.spvasm32 @@ -0,0 +1,34 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "test_linkage" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %local_func LinkageAttributes "simple_fnegate_linkage" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%local_func_t = OpTypeFunction %float_t %float_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%local_func = OpFunction %float_t Const %local_func_t +%local_in = OpFunctionParameter %float_t + OpFunctionEnd +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %float_ptr_t %inptr %idx +%in_val = OpLoad %float_t %current +%out_val = OpFunctionCall %float_t %local_func %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/linkage_import.spvasm64 b/test_conformance/spirv_new/spirv_txt/linkage_import.spvasm64 new file mode 100644 index 00000000..bc3f9403 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/linkage_import.spvasm64 @@ -0,0 +1,38 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "test_linkage" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %local_func LinkageAttributes "simple_fnegate_linkage" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%local_func_t = OpTypeFunction %float_t %float_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%local_func = OpFunction %float_t Const %local_func_t +%local_in = OpFunctionParameter %float_t + OpFunctionEnd +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %float_ptr_t %inptr %idx +%in_val = OpLoad %float_t %current +%out_val = OpFunctionCall %float_t %local_func %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/loop_merge_branch_conditional_dont_unroll.spvasm32 b/test_conformance/spirv_new/spirv_txt/loop_merge_branch_conditional_dont_unroll.spvasm32 new file mode 100644 index 00000000..141c33d7 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/loop_merge_branch_conditional_dont_unroll.spvasm32 @@ -0,0 +1,67 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "loop_merge_branch_conditional_dont_unroll" + OpName %out_ptr "res" + OpName %in_ptr "in" + OpName %rep_val "rep" + OpName %num_val "num" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %in_ptr +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_zero = OpConstant %int_t 0 +%int_one = OpConstant %int_t 1 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_t %int_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%in_ptr = OpFunctionParameter %int_ptr_t +%rep_val = OpFunctionParameter %int_t +%num_val = OpFunctionParameter %int_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%idx_int = OpSConvert %int_t %idx +%tmp_val_ptr = OpVariable %tmp_ptr_t Function +%tmp_idx_ptr = OpVariable %tmp_ptr_t Function + OpStore %tmp_val_ptr %int_zero Aligned 4 + OpStore %tmp_idx_ptr %int_zero Aligned 4 + OpBranch %block_loop +%block_loop = OpLabel +%tmp_idx = OpLoad %int_t %tmp_idx_ptr +%compare = OpSLessThan %bool_t %tmp_idx %rep_val + OpLoopMerge %block_end %block_cont DontUnroll + OpBranchConditional %compare %block_calc %block_end +%block_calc = OpLabel +%calc_idx = OpLoad %int_t %tmp_idx_ptr +%calc_off = OpIMul %int_t %calc_idx %num_val +%in_idx = OpIAdd %int_t %idx_int %calc_off +%in_loc = OpInBoundsPtrAccessChain %int_ptr_t %in_ptr %in_idx +%in_val = OpLoad %int_t %in_loc +%tmp_val = OpLoad %int_t %tmp_val_ptr +%res_val = OpIAdd %int_t %tmp_val %in_val + OpStore %tmp_val_ptr %res_val Aligned 4 + OpBranch %block_cont +%block_cont = OpLabel +%tmp_idx_c = OpLoad %int_t %tmp_idx_ptr +%tmp_idx_inc = OpIAdd %int_t %tmp_idx_c %int_one + OpStore %tmp_idx_ptr %tmp_idx_inc + OpBranch %block_loop +%block_end = OpLabel +%out_val = OpLoad %int_t %tmp_val_ptr +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/loop_merge_branch_conditional_dont_unroll.spvasm64 b/test_conformance/spirv_new/spirv_txt/loop_merge_branch_conditional_dont_unroll.spvasm64 new file mode 100644 index 00000000..99b01596 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/loop_merge_branch_conditional_dont_unroll.spvasm64 @@ -0,0 +1,71 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "loop_merge_branch_conditional_dont_unroll" + OpName %out_ptr "res" + OpName %in_ptr "in" + OpName %rep_val "rep" + OpName %num_val "num" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %in_ptr +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%shift_val = OpConstant %idx_t 32 +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_zero = OpConstant %int_t 0 +%int_one = OpConstant %int_t 1 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_t %int_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%in_ptr = OpFunctionParameter %int_ptr_t +%rep_val = OpFunctionParameter %int_t +%num_val = OpFunctionParameter %int_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%idx_int = OpSConvert %int_t %idx +%tmp_val_ptr = OpVariable %tmp_ptr_t Function +%tmp_idx_ptr = OpVariable %tmp_ptr_t Function + OpStore %tmp_val_ptr %int_zero Aligned 4 + OpStore %tmp_idx_ptr %int_zero Aligned 4 + OpBranch %block_loop +%block_loop = OpLabel +%tmp_idx = OpLoad %int_t %tmp_idx_ptr +%compare = OpSLessThan %bool_t %tmp_idx %rep_val + OpLoopMerge %block_end %block_cont DontUnroll + OpBranchConditional %compare %block_calc %block_end +%block_calc = OpLabel +%calc_idx = OpLoad %int_t %tmp_idx_ptr +%calc_off = OpIMul %int_t %calc_idx %num_val +%in_idx = OpIAdd %int_t %idx_int %calc_off +%in_loc = OpInBoundsPtrAccessChain %int_ptr_t %in_ptr %in_idx +%in_val = OpLoad %int_t %in_loc +%tmp_val = OpLoad %int_t %tmp_val_ptr +%res_val = OpIAdd %int_t %tmp_val %in_val + OpStore %tmp_val_ptr %res_val Aligned 4 + OpBranch %block_cont +%block_cont = OpLabel +%tmp_idx_c = OpLoad %int_t %tmp_idx_ptr +%tmp_idx_inc = OpIAdd %int_t %tmp_idx_c %int_one + OpStore %tmp_idx_ptr %tmp_idx_inc + OpBranch %block_loop +%block_end = OpLabel +%out_val = OpLoad %int_t %tmp_val_ptr +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/loop_merge_branch_conditional_none.spvasm32 b/test_conformance/spirv_new/spirv_txt/loop_merge_branch_conditional_none.spvasm32 new file mode 100644 index 00000000..ad91cba3 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/loop_merge_branch_conditional_none.spvasm32 @@ -0,0 +1,67 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "loop_merge_branch_conditional_none" + OpName %out_ptr "res" + OpName %in_ptr "in" + OpName %rep_val "rep" + OpName %num_val "num" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %in_ptr +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_zero = OpConstant %int_t 0 +%int_one = OpConstant %int_t 1 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_t %int_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%in_ptr = OpFunctionParameter %int_ptr_t +%rep_val = OpFunctionParameter %int_t +%num_val = OpFunctionParameter %int_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%idx_int = OpSConvert %int_t %idx +%tmp_val_ptr = OpVariable %tmp_ptr_t Function +%tmp_idx_ptr = OpVariable %tmp_ptr_t Function + OpStore %tmp_val_ptr %int_zero Aligned 4 + OpStore %tmp_idx_ptr %int_zero Aligned 4 + OpBranch %block_loop +%block_loop = OpLabel +%tmp_idx = OpLoad %int_t %tmp_idx_ptr +%compare = OpSLessThan %bool_t %tmp_idx %rep_val + OpLoopMerge %block_end %block_cont None + OpBranchConditional %compare %block_calc %block_end +%block_calc = OpLabel +%calc_idx = OpLoad %int_t %tmp_idx_ptr +%calc_off = OpIMul %int_t %calc_idx %num_val +%in_idx = OpIAdd %int_t %idx_int %calc_off +%in_loc = OpInBoundsPtrAccessChain %int_ptr_t %in_ptr %in_idx +%in_val = OpLoad %int_t %in_loc +%tmp_val = OpLoad %int_t %tmp_val_ptr +%res_val = OpIAdd %int_t %tmp_val %in_val + OpStore %tmp_val_ptr %res_val Aligned 4 + OpBranch %block_cont +%block_cont = OpLabel +%tmp_idx_c = OpLoad %int_t %tmp_idx_ptr +%tmp_idx_inc = OpIAdd %int_t %tmp_idx_c %int_one + OpStore %tmp_idx_ptr %tmp_idx_inc + OpBranch %block_loop +%block_end = OpLabel +%out_val = OpLoad %int_t %tmp_val_ptr +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/loop_merge_branch_conditional_none.spvasm64 b/test_conformance/spirv_new/spirv_txt/loop_merge_branch_conditional_none.spvasm64 new file mode 100644 index 00000000..867aeb21 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/loop_merge_branch_conditional_none.spvasm64 @@ -0,0 +1,71 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "loop_merge_branch_conditional_none" + OpName %out_ptr "res" + OpName %in_ptr "in" + OpName %rep_val "rep" + OpName %num_val "num" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %in_ptr +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%shift_val = OpConstant %idx_t 32 +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_zero = OpConstant %int_t 0 +%int_one = OpConstant %int_t 1 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_t %int_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%in_ptr = OpFunctionParameter %int_ptr_t +%rep_val = OpFunctionParameter %int_t +%num_val = OpFunctionParameter %int_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%idx_int = OpSConvert %int_t %idx +%tmp_val_ptr = OpVariable %tmp_ptr_t Function +%tmp_idx_ptr = OpVariable %tmp_ptr_t Function + OpStore %tmp_val_ptr %int_zero Aligned 4 + OpStore %tmp_idx_ptr %int_zero Aligned 4 + OpBranch %block_loop +%block_loop = OpLabel +%tmp_idx = OpLoad %int_t %tmp_idx_ptr +%compare = OpSLessThan %bool_t %tmp_idx %rep_val + OpLoopMerge %block_end %block_cont None + OpBranchConditional %compare %block_calc %block_end +%block_calc = OpLabel +%calc_idx = OpLoad %int_t %tmp_idx_ptr +%calc_off = OpIMul %int_t %calc_idx %num_val +%in_idx = OpIAdd %int_t %idx_int %calc_off +%in_loc = OpInBoundsPtrAccessChain %int_ptr_t %in_ptr %in_idx +%in_val = OpLoad %int_t %in_loc +%tmp_val = OpLoad %int_t %tmp_val_ptr +%res_val = OpIAdd %int_t %tmp_val %in_val + OpStore %tmp_val_ptr %res_val Aligned 4 + OpBranch %block_cont +%block_cont = OpLabel +%tmp_idx_c = OpLoad %int_t %tmp_idx_ptr +%tmp_idx_inc = OpIAdd %int_t %tmp_idx_c %int_one + OpStore %tmp_idx_ptr %tmp_idx_inc + OpBranch %block_loop +%block_end = OpLabel +%out_val = OpLoad %int_t %tmp_val_ptr +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/loop_merge_branch_conditional_unroll.spvasm32 b/test_conformance/spirv_new/spirv_txt/loop_merge_branch_conditional_unroll.spvasm32 new file mode 100644 index 00000000..2c4ed91c --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/loop_merge_branch_conditional_unroll.spvasm32 @@ -0,0 +1,67 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "loop_merge_branch_conditional_unroll" + OpName %out_ptr "res" + OpName %in_ptr "in" + OpName %rep_val "rep" + OpName %num_val "num" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %in_ptr +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_zero = OpConstant %int_t 0 +%int_one = OpConstant %int_t 1 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_t %int_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%in_ptr = OpFunctionParameter %int_ptr_t +%rep_val = OpFunctionParameter %int_t +%num_val = OpFunctionParameter %int_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%idx_int = OpSConvert %int_t %idx +%tmp_val_ptr = OpVariable %tmp_ptr_t Function +%tmp_idx_ptr = OpVariable %tmp_ptr_t Function + OpStore %tmp_val_ptr %int_zero Aligned 4 + OpStore %tmp_idx_ptr %int_zero Aligned 4 + OpBranch %block_loop +%block_loop = OpLabel +%tmp_idx = OpLoad %int_t %tmp_idx_ptr +%compare = OpSLessThan %bool_t %tmp_idx %rep_val + OpLoopMerge %block_end %block_cont Unroll + OpBranchConditional %compare %block_calc %block_end +%block_calc = OpLabel +%calc_idx = OpLoad %int_t %tmp_idx_ptr +%calc_off = OpIMul %int_t %calc_idx %num_val +%in_idx = OpIAdd %int_t %idx_int %calc_off +%in_loc = OpInBoundsPtrAccessChain %int_ptr_t %in_ptr %in_idx +%in_val = OpLoad %int_t %in_loc +%tmp_val = OpLoad %int_t %tmp_val_ptr +%res_val = OpIAdd %int_t %tmp_val %in_val + OpStore %tmp_val_ptr %res_val Aligned 4 + OpBranch %block_cont +%block_cont = OpLabel +%tmp_idx_c = OpLoad %int_t %tmp_idx_ptr +%tmp_idx_inc = OpIAdd %int_t %tmp_idx_c %int_one + OpStore %tmp_idx_ptr %tmp_idx_inc + OpBranch %block_loop +%block_end = OpLabel +%out_val = OpLoad %int_t %tmp_val_ptr +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/loop_merge_branch_conditional_unroll.spvasm64 b/test_conformance/spirv_new/spirv_txt/loop_merge_branch_conditional_unroll.spvasm64 new file mode 100644 index 00000000..da3ccd76 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/loop_merge_branch_conditional_unroll.spvasm64 @@ -0,0 +1,71 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "loop_merge_branch_conditional_unroll" + OpName %out_ptr "res" + OpName %in_ptr "in" + OpName %rep_val "rep" + OpName %num_val "num" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %in_ptr +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%shift_val = OpConstant %idx_t 32 +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_zero = OpConstant %int_t 0 +%int_one = OpConstant %int_t 1 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_t %int_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%in_ptr = OpFunctionParameter %int_ptr_t +%rep_val = OpFunctionParameter %int_t +%num_val = OpFunctionParameter %int_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%idx_int = OpSConvert %int_t %idx +%tmp_val_ptr = OpVariable %tmp_ptr_t Function +%tmp_idx_ptr = OpVariable %tmp_ptr_t Function + OpStore %tmp_val_ptr %int_zero Aligned 4 + OpStore %tmp_idx_ptr %int_zero Aligned 4 + OpBranch %block_loop +%block_loop = OpLabel +%tmp_idx = OpLoad %int_t %tmp_idx_ptr +%compare = OpSLessThan %bool_t %tmp_idx %rep_val + OpLoopMerge %block_end %block_cont Unroll + OpBranchConditional %compare %block_calc %block_end +%block_calc = OpLabel +%calc_idx = OpLoad %int_t %tmp_idx_ptr +%calc_off = OpIMul %int_t %calc_idx %num_val +%in_idx = OpIAdd %int_t %idx_int %calc_off +%in_loc = OpInBoundsPtrAccessChain %int_ptr_t %in_ptr %in_idx +%in_val = OpLoad %int_t %in_loc +%tmp_val = OpLoad %int_t %tmp_val_ptr +%res_val = OpIAdd %int_t %tmp_val %in_val + OpStore %tmp_val_ptr %res_val Aligned 4 + OpBranch %block_cont +%block_cont = OpLabel +%tmp_idx_c = OpLoad %int_t %tmp_idx_ptr +%tmp_idx_inc = OpIAdd %int_t %tmp_idx_c %int_one + OpStore %tmp_idx_ptr %tmp_idx_inc + OpBranch %block_loop +%block_end = OpLabel +%out_val = OpLoad %int_t %tmp_val_ptr +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/loop_merge_branch_dont_unroll.spvasm32 b/test_conformance/spirv_new/spirv_txt/loop_merge_branch_dont_unroll.spvasm32 new file mode 100644 index 00000000..0e981b3b --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/loop_merge_branch_dont_unroll.spvasm32 @@ -0,0 +1,69 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "loop_merge_branch_dont_unroll" + OpName %out_ptr "res" + OpName %in_ptr "in" + OpName %rep_val "rep" + OpName %num_val "num" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %in_ptr +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_zero = OpConstant %int_t 0 +%int_one = OpConstant %int_t 1 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_t %int_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%in_ptr = OpFunctionParameter %int_ptr_t +%rep_val = OpFunctionParameter %int_t +%num_val = OpFunctionParameter %int_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%idx_int = OpSConvert %int_t %idx +%tmp_val_ptr = OpVariable %tmp_ptr_t Function +%tmp_idx_ptr = OpVariable %tmp_ptr_t Function + OpStore %tmp_val_ptr %int_zero Aligned 4 + OpStore %tmp_idx_ptr %int_zero Aligned 4 + OpBranch %block_loop +%block_loop = OpLabel + OpLoopMerge %block_end %block_cont DontUnroll + OpBranch %block_check +%block_check = OpLabel +%tmp_idx = OpLoad %int_t %tmp_idx_ptr +%compare = OpSLessThan %bool_t %tmp_idx %rep_val + OpBranchConditional %compare %block_calc %block_end +%block_calc = OpLabel +%calc_idx = OpLoad %int_t %tmp_idx_ptr +%calc_off = OpIMul %int_t %calc_idx %num_val +%in_idx = OpIAdd %int_t %idx_int %calc_off +%in_loc = OpInBoundsPtrAccessChain %int_ptr_t %in_ptr %in_idx +%in_val = OpLoad %int_t %in_loc +%tmp_val = OpLoad %int_t %tmp_val_ptr +%res_val = OpIAdd %int_t %tmp_val %in_val + OpStore %tmp_val_ptr %res_val Aligned 4 + OpBranch %block_cont +%block_cont = OpLabel +%tmp_idx_c = OpLoad %int_t %tmp_idx_ptr +%tmp_idx_inc = OpIAdd %int_t %tmp_idx_c %int_one + OpStore %tmp_idx_ptr %tmp_idx_inc + OpBranch %block_loop +%block_end = OpLabel +%out_val = OpLoad %int_t %tmp_val_ptr +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/loop_merge_branch_dont_unroll.spvasm64 b/test_conformance/spirv_new/spirv_txt/loop_merge_branch_dont_unroll.spvasm64 new file mode 100644 index 00000000..b7022fce --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/loop_merge_branch_dont_unroll.spvasm64 @@ -0,0 +1,73 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "loop_merge_branch_dont_unroll" + OpName %out_ptr "res" + OpName %in_ptr "in" + OpName %rep_val "rep" + OpName %num_val "num" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %in_ptr +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%shift_val = OpConstant %idx_t 32 +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_zero = OpConstant %int_t 0 +%int_one = OpConstant %int_t 1 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_t %int_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%in_ptr = OpFunctionParameter %int_ptr_t +%rep_val = OpFunctionParameter %int_t +%num_val = OpFunctionParameter %int_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%idx_int = OpSConvert %int_t %idx +%tmp_val_ptr = OpVariable %tmp_ptr_t Function +%tmp_idx_ptr = OpVariable %tmp_ptr_t Function + OpStore %tmp_val_ptr %int_zero Aligned 4 + OpStore %tmp_idx_ptr %int_zero Aligned 4 + OpBranch %block_loop +%block_loop = OpLabel + OpLoopMerge %block_end %block_cont DontUnroll + OpBranch %block_check +%block_check = OpLabel +%tmp_idx = OpLoad %int_t %tmp_idx_ptr +%compare = OpSLessThan %bool_t %tmp_idx %rep_val + OpBranchConditional %compare %block_calc %block_end +%block_calc = OpLabel +%calc_idx = OpLoad %int_t %tmp_idx_ptr +%calc_off = OpIMul %int_t %calc_idx %num_val +%in_idx = OpIAdd %int_t %idx_int %calc_off +%in_loc = OpInBoundsPtrAccessChain %int_ptr_t %in_ptr %in_idx +%in_val = OpLoad %int_t %in_loc +%tmp_val = OpLoad %int_t %tmp_val_ptr +%res_val = OpIAdd %int_t %tmp_val %in_val + OpStore %tmp_val_ptr %res_val Aligned 4 + OpBranch %block_cont +%block_cont = OpLabel +%tmp_idx_c = OpLoad %int_t %tmp_idx_ptr +%tmp_idx_inc = OpIAdd %int_t %tmp_idx_c %int_one + OpStore %tmp_idx_ptr %tmp_idx_inc + OpBranch %block_loop +%block_end = OpLabel +%out_val = OpLoad %int_t %tmp_val_ptr +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/loop_merge_branch_none.spvasm32 b/test_conformance/spirv_new/spirv_txt/loop_merge_branch_none.spvasm32 new file mode 100644 index 00000000..89711e43 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/loop_merge_branch_none.spvasm32 @@ -0,0 +1,69 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "loop_merge_branch_none" + OpName %out_ptr "res" + OpName %in_ptr "in" + OpName %rep_val "rep" + OpName %num_val "num" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %in_ptr +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_zero = OpConstant %int_t 0 +%int_one = OpConstant %int_t 1 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_t %int_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%in_ptr = OpFunctionParameter %int_ptr_t +%rep_val = OpFunctionParameter %int_t +%num_val = OpFunctionParameter %int_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%idx_int = OpSConvert %int_t %idx +%tmp_val_ptr = OpVariable %tmp_ptr_t Function +%tmp_idx_ptr = OpVariable %tmp_ptr_t Function + OpStore %tmp_val_ptr %int_zero Aligned 4 + OpStore %tmp_idx_ptr %int_zero Aligned 4 + OpBranch %block_loop +%block_loop = OpLabel + OpLoopMerge %block_end %block_cont None + OpBranch %block_check +%block_check = OpLabel +%tmp_idx = OpLoad %int_t %tmp_idx_ptr +%compare = OpSLessThan %bool_t %tmp_idx %rep_val + OpBranchConditional %compare %block_calc %block_end +%block_calc = OpLabel +%calc_idx = OpLoad %int_t %tmp_idx_ptr +%calc_off = OpIMul %int_t %calc_idx %num_val +%in_idx = OpIAdd %int_t %idx_int %calc_off +%in_loc = OpInBoundsPtrAccessChain %int_ptr_t %in_ptr %in_idx +%in_val = OpLoad %int_t %in_loc +%tmp_val = OpLoad %int_t %tmp_val_ptr +%res_val = OpIAdd %int_t %tmp_val %in_val + OpStore %tmp_val_ptr %res_val Aligned 4 + OpBranch %block_cont +%block_cont = OpLabel +%tmp_idx_c = OpLoad %int_t %tmp_idx_ptr +%tmp_idx_inc = OpIAdd %int_t %tmp_idx_c %int_one + OpStore %tmp_idx_ptr %tmp_idx_inc + OpBranch %block_loop +%block_end = OpLabel +%out_val = OpLoad %int_t %tmp_val_ptr +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/loop_merge_branch_none.spvasm64 b/test_conformance/spirv_new/spirv_txt/loop_merge_branch_none.spvasm64 new file mode 100644 index 00000000..ce1fad65 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/loop_merge_branch_none.spvasm64 @@ -0,0 +1,73 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "loop_merge_branch_none" + OpName %out_ptr "res" + OpName %in_ptr "in" + OpName %rep_val "rep" + OpName %num_val "num" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %in_ptr +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%shift_val = OpConstant %idx_t 32 +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_zero = OpConstant %int_t 0 +%int_one = OpConstant %int_t 1 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_t %int_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%in_ptr = OpFunctionParameter %int_ptr_t +%rep_val = OpFunctionParameter %int_t +%num_val = OpFunctionParameter %int_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%idx_int = OpSConvert %int_t %idx +%tmp_val_ptr = OpVariable %tmp_ptr_t Function +%tmp_idx_ptr = OpVariable %tmp_ptr_t Function + OpStore %tmp_val_ptr %int_zero Aligned 4 + OpStore %tmp_idx_ptr %int_zero Aligned 4 + OpBranch %block_loop +%block_loop = OpLabel + OpLoopMerge %block_end %block_cont None + OpBranch %block_check +%block_check = OpLabel +%tmp_idx = OpLoad %int_t %tmp_idx_ptr +%compare = OpSLessThan %bool_t %tmp_idx %rep_val + OpBranchConditional %compare %block_calc %block_end +%block_calc = OpLabel +%calc_idx = OpLoad %int_t %tmp_idx_ptr +%calc_off = OpIMul %int_t %calc_idx %num_val +%in_idx = OpIAdd %int_t %idx_int %calc_off +%in_loc = OpInBoundsPtrAccessChain %int_ptr_t %in_ptr %in_idx +%in_val = OpLoad %int_t %in_loc +%tmp_val = OpLoad %int_t %tmp_val_ptr +%res_val = OpIAdd %int_t %tmp_val %in_val + OpStore %tmp_val_ptr %res_val Aligned 4 + OpBranch %block_cont +%block_cont = OpLabel +%tmp_idx_c = OpLoad %int_t %tmp_idx_ptr +%tmp_idx_inc = OpIAdd %int_t %tmp_idx_c %int_one + OpStore %tmp_idx_ptr %tmp_idx_inc + OpBranch %block_loop +%block_end = OpLabel +%out_val = OpLoad %int_t %tmp_val_ptr +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/loop_merge_branch_unroll.spvasm32 b/test_conformance/spirv_new/spirv_txt/loop_merge_branch_unroll.spvasm32 new file mode 100644 index 00000000..b6497816 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/loop_merge_branch_unroll.spvasm32 @@ -0,0 +1,69 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "loop_merge_branch_unroll" + OpName %out_ptr "res" + OpName %in_ptr "in" + OpName %rep_val "rep" + OpName %num_val "num" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %in_ptr +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_zero = OpConstant %int_t 0 +%int_one = OpConstant %int_t 1 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_t %int_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%in_ptr = OpFunctionParameter %int_ptr_t +%rep_val = OpFunctionParameter %int_t +%num_val = OpFunctionParameter %int_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%idx_int = OpSConvert %int_t %idx +%tmp_val_ptr = OpVariable %tmp_ptr_t Function +%tmp_idx_ptr = OpVariable %tmp_ptr_t Function + OpStore %tmp_val_ptr %int_zero Aligned 4 + OpStore %tmp_idx_ptr %int_zero Aligned 4 + OpBranch %block_loop +%block_loop = OpLabel + OpLoopMerge %block_end %block_cont Unroll + OpBranch %block_check +%block_check = OpLabel +%tmp_idx = OpLoad %int_t %tmp_idx_ptr +%compare = OpSLessThan %bool_t %tmp_idx %rep_val + OpBranchConditional %compare %block_calc %block_end +%block_calc = OpLabel +%calc_idx = OpLoad %int_t %tmp_idx_ptr +%calc_off = OpIMul %int_t %calc_idx %num_val +%in_idx = OpIAdd %int_t %idx_int %calc_off +%in_loc = OpInBoundsPtrAccessChain %int_ptr_t %in_ptr %in_idx +%in_val = OpLoad %int_t %in_loc +%tmp_val = OpLoad %int_t %tmp_val_ptr +%res_val = OpIAdd %int_t %tmp_val %in_val + OpStore %tmp_val_ptr %res_val Aligned 4 + OpBranch %block_cont +%block_cont = OpLabel +%tmp_idx_c = OpLoad %int_t %tmp_idx_ptr +%tmp_idx_inc = OpIAdd %int_t %tmp_idx_c %int_one + OpStore %tmp_idx_ptr %tmp_idx_inc + OpBranch %block_loop +%block_end = OpLabel +%out_val = OpLoad %int_t %tmp_val_ptr +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/loop_merge_branch_unroll.spvasm64 b/test_conformance/spirv_new/spirv_txt/loop_merge_branch_unroll.spvasm64 new file mode 100644 index 00000000..ee8cc809 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/loop_merge_branch_unroll.spvasm64 @@ -0,0 +1,73 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "loop_merge_branch_unroll" + OpName %out_ptr "res" + OpName %in_ptr "in" + OpName %rep_val "rep" + OpName %num_val "num" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %in_ptr +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%shift_val = OpConstant %idx_t 32 +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_zero = OpConstant %int_t 0 +%int_one = OpConstant %int_t 1 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_t %int_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%in_ptr = OpFunctionParameter %int_ptr_t +%rep_val = OpFunctionParameter %int_t +%num_val = OpFunctionParameter %int_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%idx_int = OpSConvert %int_t %idx +%tmp_val_ptr = OpVariable %tmp_ptr_t Function +%tmp_idx_ptr = OpVariable %tmp_ptr_t Function + OpStore %tmp_val_ptr %int_zero Aligned 4 + OpStore %tmp_idx_ptr %int_zero Aligned 4 + OpBranch %block_loop +%block_loop = OpLabel + OpLoopMerge %block_end %block_cont Unroll + OpBranch %block_check +%block_check = OpLabel +%tmp_idx = OpLoad %int_t %tmp_idx_ptr +%compare = OpSLessThan %bool_t %tmp_idx %rep_val + OpBranchConditional %compare %block_calc %block_end +%block_calc = OpLabel +%calc_idx = OpLoad %int_t %tmp_idx_ptr +%calc_off = OpIMul %int_t %calc_idx %num_val +%in_idx = OpIAdd %int_t %idx_int %calc_off +%in_loc = OpInBoundsPtrAccessChain %int_ptr_t %in_ptr %in_idx +%in_val = OpLoad %int_t %in_loc +%tmp_val = OpLoad %int_t %tmp_val_ptr +%res_val = OpIAdd %int_t %tmp_val %in_val + OpStore %tmp_val_ptr %res_val Aligned 4 + OpBranch %block_cont +%block_cont = OpLabel +%tmp_idx_c = OpLoad %int_t %tmp_idx_ptr +%tmp_idx_inc = OpIAdd %int_t %tmp_idx_c %int_one + OpStore %tmp_idx_ptr %tmp_idx_inc + OpBranch %block_loop +%block_end = OpLabel +%out_val = OpLoad %int_t %tmp_val_ptr +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_function_const.spvasm32 b/test_conformance/spirv_new/spirv_txt/op_function_const.spvasm32 new file mode 100644 index 00000000..32f96e8f --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_function_const.spvasm32 @@ -0,0 +1,36 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "op_function_const" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%local_func_t = OpTypeFunction %float_t %float_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%local_func = OpFunction %float_t Const %local_func_t +%local_in = OpFunctionParameter %float_t +%local_label = OpLabel +%local_out = OpFNegate %float_t %local_in + OpReturnValue %local_out + OpFunctionEnd +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %float_ptr_t %inptr %idx +%in_val = OpLoad %float_t %current +%out_val = OpFunctionCall %float_t %local_func %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_function_const.spvasm64 b/test_conformance/spirv_new/spirv_txt/op_function_const.spvasm64 new file mode 100644 index 00000000..a9b64c8c --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_function_const.spvasm64 @@ -0,0 +1,40 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "op_function_const" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%local_func_t = OpTypeFunction %float_t %float_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%local_func = OpFunction %float_t Const %local_func_t +%local_in = OpFunctionParameter %float_t +%local_label = OpLabel +%local_out = OpFNegate %float_t %local_in + OpReturnValue %local_out + OpFunctionEnd +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %float_ptr_t %inptr %idx +%in_val = OpLoad %float_t %current +%out_val = OpFunctionCall %float_t %local_func %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_function_inline.spvasm32 b/test_conformance/spirv_new/spirv_txt/op_function_inline.spvasm32 new file mode 100644 index 00000000..cfed803f --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_function_inline.spvasm32 @@ -0,0 +1,36 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "op_function_inline" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%local_func_t = OpTypeFunction %float_t %float_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%local_func = OpFunction %float_t Inline %local_func_t +%local_in = OpFunctionParameter %float_t +%local_label = OpLabel +%local_out = OpFNegate %float_t %local_in + OpReturnValue %local_out + OpFunctionEnd +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %float_ptr_t %inptr %idx +%in_val = OpLoad %float_t %current +%out_val = OpFunctionCall %float_t %local_func %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_function_inline.spvasm64 b/test_conformance/spirv_new/spirv_txt/op_function_inline.spvasm64 new file mode 100644 index 00000000..09a720fa --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_function_inline.spvasm64 @@ -0,0 +1,40 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "op_function_inline" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%local_func_t = OpTypeFunction %float_t %float_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%local_func = OpFunction %float_t Inline %local_func_t +%local_in = OpFunctionParameter %float_t +%local_label = OpLabel +%local_out = OpFNegate %float_t %local_in + OpReturnValue %local_out + OpFunctionEnd +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %float_ptr_t %inptr %idx +%in_val = OpLoad %float_t %current +%out_val = OpFunctionCall %float_t %local_func %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_function_noinline.spvasm32 b/test_conformance/spirv_new/spirv_txt/op_function_noinline.spvasm32 new file mode 100644 index 00000000..721cc171 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_function_noinline.spvasm32 @@ -0,0 +1,36 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "op_function_noinline" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%local_func_t = OpTypeFunction %float_t %float_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%local_func = OpFunction %float_t DontInline %local_func_t +%local_in = OpFunctionParameter %float_t +%local_label = OpLabel +%local_out = OpFNegate %float_t %local_in + OpReturnValue %local_out + OpFunctionEnd +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %float_ptr_t %inptr %idx +%in_val = OpLoad %float_t %current +%out_val = OpFunctionCall %float_t %local_func %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_function_noinline.spvasm64 b/test_conformance/spirv_new/spirv_txt/op_function_noinline.spvasm64 new file mode 100644 index 00000000..e2d39821 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_function_noinline.spvasm64 @@ -0,0 +1,40 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "op_function_noinline" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%local_func_t = OpTypeFunction %float_t %float_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%local_func = OpFunction %float_t DontInline %local_func_t +%local_in = OpFunctionParameter %float_t +%local_label = OpLabel +%local_out = OpFNegate %float_t %local_in + OpReturnValue %local_out + OpFunctionEnd +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %float_ptr_t %inptr %idx +%in_val = OpLoad %float_t %current +%out_val = OpFunctionCall %float_t %local_func %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_function_none.spvasm32 b/test_conformance/spirv_new/spirv_txt/op_function_none.spvasm32 new file mode 100644 index 00000000..abd28543 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_function_none.spvasm32 @@ -0,0 +1,36 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "op_function_none" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%local_func_t = OpTypeFunction %float_t %float_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%local_func = OpFunction %float_t None %local_func_t +%local_in = OpFunctionParameter %float_t +%local_label = OpLabel +%local_out = OpFNegate %float_t %local_in + OpReturnValue %local_out + OpFunctionEnd +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %float_ptr_t %inptr %idx +%in_val = OpLoad %float_t %current +%out_val = OpFunctionCall %float_t %local_func %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_function_none.spvasm64 b/test_conformance/spirv_new/spirv_txt/op_function_none.spvasm64 new file mode 100644 index 00000000..0718d318 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_function_none.spvasm64 @@ -0,0 +1,40 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "op_function_none" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%local_func_t = OpTypeFunction %float_t %float_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%local_func = OpFunction %float_t None %local_func_t +%local_in = OpFunctionParameter %float_t +%local_label = OpLabel +%local_out = OpFNegate %float_t %local_in + OpReturnValue %local_out + OpFunctionEnd +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %float_ptr_t %inptr %idx +%in_val = OpLoad %float_t %current +%out_val = OpFunctionCall %float_t %local_func %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_function_pure.spvasm32 b/test_conformance/spirv_new/spirv_txt/op_function_pure.spvasm32 new file mode 100644 index 00000000..5a204b38 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_function_pure.spvasm32 @@ -0,0 +1,36 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "op_function_pure" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%local_func_t = OpTypeFunction %float_t %float_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%local_func = OpFunction %float_t Pure %local_func_t +%local_in = OpFunctionParameter %float_t +%local_label = OpLabel +%local_out = OpFNegate %float_t %local_in + OpReturnValue %local_out + OpFunctionEnd +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %float_ptr_t %inptr %idx +%in_val = OpLoad %float_t %current +%out_val = OpFunctionCall %float_t %local_func %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_function_pure.spvasm64 b/test_conformance/spirv_new/spirv_txt/op_function_pure.spvasm64 new file mode 100644 index 00000000..ba6690fb --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_function_pure.spvasm64 @@ -0,0 +1,40 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "op_function_pure" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%local_func_t = OpTypeFunction %float_t %float_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%local_func = OpFunction %float_t Pure %local_func_t +%local_in = OpFunctionParameter %float_t +%local_label = OpLabel +%local_out = OpFNegate %float_t %local_in + OpReturnValue %local_out + OpFunctionEnd +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %float_ptr_t %inptr %idx +%in_val = OpLoad %float_t %current +%out_val = OpFunctionCall %float_t %local_func %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_function_pure_ptr.spvasm32 b/test_conformance/spirv_new/spirv_txt/op_function_pure_ptr.spvasm32 new file mode 100644 index 00000000..99efd317 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_function_pure_ptr.spvasm32 @@ -0,0 +1,48 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "op_function_pure_ptr" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%local_func_t = OpTypeFunction %float_t %float_ptr_t %idx_t +%store_func_t = OpTypeFunction %void_t %float_ptr_t %idx_t %float_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%local_func = OpFunction %float_t Pure %local_func_t +%local_in_ptr = OpFunctionParameter %float_ptr_t +%local_idx = OpFunctionParameter %idx_t +%local_label = OpLabel +%local_in_off = OpInBoundsPtrAccessChain %float_ptr_t %local_in_ptr %local_idx +%local_in_val = OpLoad %float_t %local_in_off +%local_out = OpFNegate %float_t %local_in_val + OpReturnValue %local_out + OpFunctionEnd +%store_func = OpFunction %void_t None %store_func_t +%store_ptr = OpFunctionParameter %float_ptr_t +%store_idx = OpFunctionParameter %idx_t +%store_val = OpFunctionParameter %float_t +%store_label = OpLabel +%store_loc = OpInBoundsPtrAccessChain %float_ptr_t %store_ptr %store_idx + OpStore %store_loc %store_val + OpReturn + OpFunctionEnd +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%out_val = OpFunctionCall %float_t %local_func %inptr %idx +%void_val = OpFunctionCall %void_t %store_func %inptr %idx %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_function_pure_ptr.spvasm64 b/test_conformance/spirv_new/spirv_txt/op_function_pure_ptr.spvasm64 new file mode 100644 index 00000000..41deaa0b --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_function_pure_ptr.spvasm64 @@ -0,0 +1,51 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "op_function_pure_ptr" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%local_func_t = OpTypeFunction %float_t %float_ptr_t %idx_t +%store_func_t = OpTypeFunction %void_t %float_ptr_t %idx_t %float_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%local_func = OpFunction %float_t Pure %local_func_t +%local_in_ptr = OpFunctionParameter %float_ptr_t +%local_idx = OpFunctionParameter %idx_t +%local_label = OpLabel +%local_in_off = OpInBoundsPtrAccessChain %float_ptr_t %local_in_ptr %local_idx +%local_in_val = OpLoad %float_t %local_in_off +%local_out = OpFNegate %float_t %local_in_val + OpReturnValue %local_out + OpFunctionEnd +%store_func = OpFunction %void_t None %store_func_t +%store_ptr = OpFunctionParameter %float_ptr_t +%store_idx = OpFunctionParameter %idx_t +%store_val = OpFunctionParameter %float_t +%store_label = OpLabel +%store_loc = OpInBoundsPtrAccessChain %float_ptr_t %store_ptr %store_idx + OpStore %store_loc %store_val + OpReturn + OpFunctionEnd +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%out_val = OpFunctionCall %float_t %local_func %inptr %idx +%void_val = OpFunctionCall %void_t %store_func %inptr %idx %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_neg_double.spvasm32 b/test_conformance/spirv_new/spirv_txt/op_neg_double.spvasm32 new file mode 100644 index 00000000..38574392 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_neg_double.spvasm32 @@ -0,0 +1,30 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Float64 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "op_neg_double" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%double_t = OpTypeFloat 64 +%double_ptr_t = OpTypePointer CrossWorkgroup %double_t +%func_t = OpTypeFunction %void_t %double_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %double_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %double_ptr_t %inptr %idx +%in_val = OpLoad %double_t %current +%out_val = OpFNegate %double_t %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_neg_double.spvasm64 b/test_conformance/spirv_new/spirv_txt/op_neg_double.spvasm64 new file mode 100644 index 00000000..5dcf9596 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_neg_double.spvasm64 @@ -0,0 +1,34 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Float64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "op_neg_double" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%double_t = OpTypeFloat 64 +%double_ptr_t = OpTypePointer CrossWorkgroup %double_t +%func_t = OpTypeFunction %void_t %double_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %double_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %double_ptr_t %inptr %idx +%in_val = OpLoad %double_t %current +%out_val = OpFNegate %double_t %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_neg_float.spvasm32 b/test_conformance/spirv_new/spirv_txt/op_neg_float.spvasm32 new file mode 100644 index 00000000..76bb0845 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_neg_float.spvasm32 @@ -0,0 +1,29 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "op_neg_float" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %float_ptr_t %inptr %idx +%in_val = OpLoad %float_t %current +%out_val = OpFNegate %float_t %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_neg_float.spvasm64 b/test_conformance/spirv_new/spirv_txt/op_neg_float.spvasm64 new file mode 100644 index 00000000..79173f6c --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_neg_float.spvasm64 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "op_neg_float" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %float_ptr_t %inptr %idx +%in_val = OpLoad %float_t %current +%out_val = OpFNegate %float_t %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_neg_float4.spvasm32 b/test_conformance/spirv_new/spirv_txt/op_neg_float4.spvasm32 new file mode 100644 index 00000000..2ca02d15 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_neg_float4.spvasm32 @@ -0,0 +1,30 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "op_neg_float4" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float4_t = OpTypeVector %float_t 4 +%float4_ptr_t = OpTypePointer CrossWorkgroup %float4_t +%func_t = OpTypeFunction %void_t %float4_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float4_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %float4_ptr_t %inptr %idx +%in_val = OpLoad %float4_t %current +%out_val = OpFNegate %float4_t %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_neg_float4.spvasm64 b/test_conformance/spirv_new/spirv_txt/op_neg_float4.spvasm64 new file mode 100644 index 00000000..06d3512e --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_neg_float4.spvasm64 @@ -0,0 +1,34 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "op_neg_float4" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float4_t = OpTypeVector %float_t 4 +%float4_ptr_t = OpTypePointer CrossWorkgroup %float4_t +%func_t = OpTypeFunction %void_t %float4_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float4_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %float4_ptr_t %inptr %idx +%in_val = OpLoad %float4_t %current +%out_val = OpFNegate %float4_t %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_neg_int.spvasm32 b/test_conformance/spirv_new/spirv_txt/op_neg_int.spvasm32 new file mode 100644 index 00000000..279e08f8 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_neg_int.spvasm32 @@ -0,0 +1,29 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "op_neg_int" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %int_ptr_t %inptr %idx +%in_val = OpLoad %int_t %current +%out_val = OpSNegate %int_t %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_neg_int.spvasm64 b/test_conformance/spirv_new/spirv_txt/op_neg_int.spvasm64 new file mode 100644 index 00000000..541ccf64 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_neg_int.spvasm64 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "op_neg_int" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %int_ptr_t %inptr %idx +%in_val = OpLoad %int_t %current +%out_val = OpSNegate %int_t %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_neg_int4.spvasm32 b/test_conformance/spirv_new/spirv_txt/op_neg_int4.spvasm32 new file mode 100644 index 00000000..6da4969a --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_neg_int4.spvasm32 @@ -0,0 +1,30 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "op_neg_int4" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int4_t = OpTypeVector %int_t 4 +%int4_ptr_t = OpTypePointer CrossWorkgroup %int4_t +%func_t = OpTypeFunction %void_t %int4_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int4_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %int4_ptr_t %inptr %idx +%in_val = OpLoad %int4_t %current +%out_val = OpSNegate %int4_t %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_neg_int4.spvasm64 b/test_conformance/spirv_new/spirv_txt/op_neg_int4.spvasm64 new file mode 100644 index 00000000..bf59317d --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_neg_int4.spvasm64 @@ -0,0 +1,34 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "op_neg_int4" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int4_t = OpTypeVector %int_t 4 +%int4_ptr_t = OpTypePointer CrossWorkgroup %int4_t +%func_t = OpTypeFunction %void_t %int4_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int4_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %int4_ptr_t %inptr %idx +%in_val = OpLoad %int4_t %current +%out_val = OpSNegate %int4_t %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_neg_long.spvasm32 b/test_conformance/spirv_new/spirv_txt/op_neg_long.spvasm32 new file mode 100644 index 00000000..744d35ee --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_neg_long.spvasm32 @@ -0,0 +1,30 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "op_neg_long" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%long_t = OpTypeInt 64 0 +%long_ptr_t = OpTypePointer CrossWorkgroup %long_t +%func_t = OpTypeFunction %void_t %long_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %long_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %long_ptr_t %inptr %idx +%in_val = OpLoad %long_t %current +%out_val = OpSNegate %long_t %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_neg_long.spvasm64 b/test_conformance/spirv_new/spirv_txt/op_neg_long.spvasm64 new file mode 100644 index 00000000..92a7754c --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_neg_long.spvasm64 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "op_neg_long" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%long_t = OpTypeInt 64 0 +%long_ptr_t = OpTypePointer CrossWorkgroup %long_t +%func_t = OpTypeFunction %void_t %long_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %long_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %long_ptr_t %inptr %idx +%in_val = OpLoad %long_t %current +%out_val = OpSNegate %long_t %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_neg_short.spvasm32 b/test_conformance/spirv_new/spirv_txt/op_neg_short.spvasm32 new file mode 100644 index 00000000..0cee9354 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_neg_short.spvasm32 @@ -0,0 +1,30 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int16 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "op_neg_short" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%short_t = OpTypeInt 16 0 +%short_ptr_t = OpTypePointer CrossWorkgroup %short_t +%func_t = OpTypeFunction %void_t %short_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %short_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %short_ptr_t %inptr %idx +%in_val = OpLoad %short_t %current +%out_val = OpSNegate %short_t %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_neg_short.spvasm64 b/test_conformance/spirv_new/spirv_txt/op_neg_short.spvasm64 new file mode 100644 index 00000000..da69047f --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_neg_short.spvasm64 @@ -0,0 +1,34 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int16 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "op_neg_short" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%short_t = OpTypeInt 16 0 +%short_ptr_t = OpTypePointer CrossWorkgroup %short_t +%func_t = OpTypeFunction %void_t %short_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %short_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %short_ptr_t %inptr %idx +%in_val = OpLoad %short_t %current +%out_val = OpSNegate %short_t %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_not_int.spvasm32 b/test_conformance/spirv_new/spirv_txt/op_not_int.spvasm32 new file mode 100644 index 00000000..453c78e4 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_not_int.spvasm32 @@ -0,0 +1,29 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "op_not_int" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %int_ptr_t %inptr %idx +%in_val = OpLoad %int_t %current +%out_val = OpNot %int_t %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_not_int.spvasm64 b/test_conformance/spirv_new/spirv_txt/op_not_int.spvasm64 new file mode 100644 index 00000000..78ff0943 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_not_int.spvasm64 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "op_not_int" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %int_ptr_t %inptr %idx +%in_val = OpLoad %int_t %current +%out_val = OpNot %int_t %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_not_int4.spvasm32 b/test_conformance/spirv_new/spirv_txt/op_not_int4.spvasm32 new file mode 100644 index 00000000..68c5e9c6 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_not_int4.spvasm32 @@ -0,0 +1,30 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "op_not_int4" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int4_t = OpTypeVector %int_t 4 +%int4_ptr_t = OpTypePointer CrossWorkgroup %int4_t +%func_t = OpTypeFunction %void_t %int4_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int4_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %int4_ptr_t %inptr %idx +%in_val = OpLoad %int4_t %current +%out_val = OpNot %int4_t %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_not_int4.spvasm64 b/test_conformance/spirv_new/spirv_txt/op_not_int4.spvasm64 new file mode 100644 index 00000000..ce4f2276 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_not_int4.spvasm64 @@ -0,0 +1,34 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "op_not_int4" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int4_t = OpTypeVector %int_t 4 +%int4_ptr_t = OpTypePointer CrossWorkgroup %int4_t +%func_t = OpTypeFunction %void_t %int4_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int4_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %int4_ptr_t %inptr %idx +%in_val = OpLoad %int4_t %current +%out_val = OpNot %int4_t %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_not_long.spvasm32 b/test_conformance/spirv_new/spirv_txt/op_not_long.spvasm32 new file mode 100644 index 00000000..50323d25 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_not_long.spvasm32 @@ -0,0 +1,30 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "op_not_long" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%long_t = OpTypeInt 64 0 +%long_ptr_t = OpTypePointer CrossWorkgroup %long_t +%func_t = OpTypeFunction %void_t %long_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %long_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %long_ptr_t %inptr %idx +%in_val = OpLoad %long_t %current +%out_val = OpNot %long_t %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_not_long.spvasm64 b/test_conformance/spirv_new/spirv_txt/op_not_long.spvasm64 new file mode 100644 index 00000000..cf51849f --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_not_long.spvasm64 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "op_not_long" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%long_t = OpTypeInt 64 0 +%long_ptr_t = OpTypePointer CrossWorkgroup %long_t +%func_t = OpTypeFunction %void_t %long_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %long_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %long_ptr_t %inptr %idx +%in_val = OpLoad %long_t %current +%out_val = OpNot %long_t %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_not_short.spvasm32 b/test_conformance/spirv_new/spirv_txt/op_not_short.spvasm32 new file mode 100644 index 00000000..a3c488f3 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_not_short.spvasm32 @@ -0,0 +1,30 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int16 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "op_not_short" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%short_t = OpTypeInt 16 0 +%short_ptr_t = OpTypePointer CrossWorkgroup %short_t +%func_t = OpTypeFunction %void_t %short_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %short_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %short_ptr_t %inptr %idx +%in_val = OpLoad %short_t %current +%out_val = OpNot %short_t %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/op_not_short.spvasm64 b/test_conformance/spirv_new/spirv_txt/op_not_short.spvasm64 new file mode 100644 index 00000000..779c9b13 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/op_not_short.spvasm64 @@ -0,0 +1,34 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int16 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "op_not_short" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%short_t = OpTypeInt 16 0 +%short_ptr_t = OpTypePointer CrossWorkgroup %short_t +%func_t = OpTypeFunction %void_t %short_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %short_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %short_ptr_t %inptr %idx +%in_val = OpLoad %short_t %current +%out_val = OpNot %short_t %in_val + OpStore %current %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/opaque.spvasm32 b/test_conformance/spirv_new/spirv_txt/opaque.spvasm32 new file mode 100644 index 00000000..619563ab --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/opaque.spvasm32 @@ -0,0 +1,35 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "opaque" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %opaque_store LinkageAttributes "opaque_store" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%opaque_t = OpTypeOpaque "opaque_t" +%opaque_ptr_t = OpTypePointer CrossWorkgroup %opaque_t +%val = OpConstant %float_t 3.1415927 +%func_t = OpTypeFunction %void_t %opaque_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%opaque_store_t = OpTypeFunction %void_t %opaque_ptr_t %idx_t %float_t +%opaque_store = OpFunction %void_t None %opaque_store_t +%opaque_store_in = OpFunctionParameter %opaque_ptr_t +%opaque_store_idx = OpFunctionParameter %idx_t +%opaque_store_val = OpFunctionParameter %float_t + OpFunctionEnd +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %opaque_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%return = OpFunctionCall %void_t %opaque_store %inptr %idx %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/opaque.spvasm64 b/test_conformance/spirv_new/spirv_txt/opaque.spvasm64 new file mode 100644 index 00000000..6a7875eb --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/opaque.spvasm64 @@ -0,0 +1,39 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "opaque" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpDecorate %opaque_store LinkageAttributes "opaque_store" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%shift_val = OpConstant %idx_t 32 +%val = OpConstant %float_t 3.1415927 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%opaque_t = OpTypeOpaque "opaque_t" +%opaque_ptr_t = OpTypePointer CrossWorkgroup %opaque_t +%func_t = OpTypeFunction %void_t %opaque_ptr_t +%opaque_store_t = OpTypeFunction %void_t %opaque_ptr_t %idx_t %float_t +%opaque_store = OpFunction %void_t None %opaque_store_t +%opaque_store_in = OpFunctionParameter %opaque_ptr_t +%opaque_store_idx = OpFunctionParameter %idx_t +%opaque_store_val = OpFunctionParameter %float_t + OpFunctionEnd +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %opaque_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%return = OpFunctionCall %void_t %opaque_store %inptr %idx %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/phi_2.spvasm32 b/test_conformance/spirv_new/spirv_txt/phi_2.spvasm32 new file mode 100644 index 00000000..44b55262 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/phi_2.spvasm32 @@ -0,0 +1,48 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "phi_2" + OpName %out_ptr "res" + OpName %lhs_ptr "lhs" + OpName %rhs_ptr "rhs" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %lhs_ptr %rhs_ptr +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%lhs_ptr = OpFunctionParameter %int_ptr_t +%rhs_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%lhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %lhs_ptr %idx +%lhs_val = OpLoad %int_t %lhs_loc Aligned 4 +%rhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %rhs_ptr %idx +%rhs_val = OpLoad %int_t %rhs_loc Aligned 4 +%compare = OpSLessThan %bool_t %lhs_val %rhs_val + OpBranchConditional %compare %block1 %block2 +%block1 = OpLabel +%out1 = OpISub %int_t %rhs_val %lhs_val + OpBranch %block_phi +%block2 = OpLabel +%out2 = OpISub %int_t %lhs_val %rhs_val + OpBranch %block_phi +%block_phi = OpLabel +%out_val = OpPhi %int_t %out1 %block1 %out2 %block2 +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/phi_2.spvasm64 b/test_conformance/spirv_new/spirv_txt/phi_2.spvasm64 new file mode 100644 index 00000000..4ad0c2c0 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/phi_2.spvasm64 @@ -0,0 +1,52 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "phi_2" + OpName %out_ptr "res" + OpName %lhs_ptr "lhs" + OpName %rhs_ptr "rhs" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %lhs_ptr %rhs_ptr +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%shift_val = OpConstant %idx_t 32 +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%lhs_ptr = OpFunctionParameter %int_ptr_t +%rhs_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%lhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %lhs_ptr %idx +%lhs_val = OpLoad %int_t %lhs_loc Aligned 4 +%rhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %rhs_ptr %idx +%rhs_val = OpLoad %int_t %rhs_loc Aligned 4 +%compare = OpSLessThan %bool_t %lhs_val %rhs_val + OpBranchConditional %compare %block1 %block2 +%block1 = OpLabel +%out1 = OpISub %int_t %rhs_val %lhs_val + OpBranch %block_phi +%block2 = OpLabel +%out2 = OpISub %int_t %lhs_val %rhs_val + OpBranch %block_phi +%block_phi = OpLabel +%out_val = OpPhi %int_t %out1 %block1 %out2 %block2 +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/phi_3.spvasm32 b/test_conformance/spirv_new/spirv_txt/phi_3.spvasm32 new file mode 100644 index 00000000..381dc658 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/phi_3.spvasm32 @@ -0,0 +1,55 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "phi_3" + OpName %out_ptr "res" + OpName %lhs_ptr "lhs" + OpName %rhs_ptr "rhs" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %lhs_ptr %rhs_ptr +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%cmp_val = OpConstant %int_t 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%lhs_ptr = OpFunctionParameter %int_ptr_t +%rhs_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%lhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %lhs_ptr %idx +%lhs_val = OpLoad %int_t %lhs_loc Aligned 4 +%rhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %rhs_ptr %idx +%rhs_val = OpLoad %int_t %rhs_loc Aligned 4 +%compare1 = OpSLessThan %bool_t %lhs_val %rhs_val + OpBranchConditional %compare1 %block1 %block2 +%block1 = OpLabel +%compare2 = OpSLessThan %bool_t %lhs_val %cmp_val + OpBranchConditional %compare2 %block1_1 %block1_2 +%block1_1 = OpLabel +%out1_1 = OpISub %int_t %cmp_val %lhs_val + OpBranch %block_phi +%block1_2 = OpLabel +%out1_2 = OpISub %int_t %lhs_val %cmp_val + OpBranch %block_phi +%block2 = OpLabel +%out2 = OpISub %int_t %lhs_val %rhs_val + OpBranch %block_phi +%block_phi = OpLabel +%out_val = OpPhi %int_t %out1_1 %block1_1 %out1_2 %block1_2 %out2 %block2 +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/phi_3.spvasm64 b/test_conformance/spirv_new/spirv_txt/phi_3.spvasm64 new file mode 100644 index 00000000..8e4a99a7 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/phi_3.spvasm64 @@ -0,0 +1,59 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "phi_3" + OpName %out_ptr "res" + OpName %lhs_ptr "lhs" + OpName %rhs_ptr "rhs" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %lhs_ptr %rhs_ptr +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%shift_val = OpConstant %idx_t 32 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%cmp_val = OpConstant %int_t 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%lhs_ptr = OpFunctionParameter %int_ptr_t +%rhs_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%lhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %lhs_ptr %idx +%lhs_val = OpLoad %int_t %lhs_loc Aligned 4 +%rhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %rhs_ptr %idx +%rhs_val = OpLoad %int_t %rhs_loc Aligned 4 +%compare1 = OpSLessThan %bool_t %lhs_val %rhs_val + OpBranchConditional %compare1 %block1 %block2 +%block1 = OpLabel +%compare2 = OpSLessThan %bool_t %lhs_val %cmp_val + OpBranchConditional %compare2 %block1_1 %block1_2 +%block1_1 = OpLabel +%out1_1 = OpISub %int_t %cmp_val %lhs_val + OpBranch %block_phi +%block1_2 = OpLabel +%out1_2 = OpISub %int_t %lhs_val %cmp_val + OpBranch %block_phi +%block2 = OpLabel +%out2 = OpISub %int_t %lhs_val %rhs_val + OpBranch %block_phi +%block_phi = OpLabel +%out_val = OpPhi %int_t %out1_1 %block1_1 %out1_2 %block1_2 %out2 %block2 +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/phi_4.spvasm32 b/test_conformance/spirv_new/spirv_txt/phi_4.spvasm32 new file mode 100644 index 00000000..3b841f20 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/phi_4.spvasm32 @@ -0,0 +1,61 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "phi_4" + OpName %out_ptr "res" + OpName %lhs_ptr "lhs" + OpName %rhs_ptr "rhs" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %lhs_ptr %rhs_ptr +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%cmp_val = OpConstant %int_t 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%lhs_ptr = OpFunctionParameter %int_ptr_t +%rhs_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%lhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %lhs_ptr %idx +%lhs_val = OpLoad %int_t %lhs_loc Aligned 4 +%rhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %rhs_ptr %idx +%rhs_val = OpLoad %int_t %rhs_loc Aligned 4 +%compare1 = OpSLessThan %bool_t %lhs_val %rhs_val + OpBranchConditional %compare1 %block1 %block2 +%block1 = OpLabel +%compare2 = OpSLessThan %bool_t %lhs_val %cmp_val + OpBranchConditional %compare2 %block1_1 %block1_2 +%block1_1 = OpLabel +%out1_1 = OpISub %int_t %cmp_val %lhs_val + OpBranch %block_phi +%block1_2 = OpLabel +%out1_2 = OpISub %int_t %lhs_val %cmp_val + OpBranch %block_phi +%block2 = OpLabel +%compare3 = OpSLessThan %bool_t %rhs_val %cmp_val + OpBranchConditional %compare3 %block2_1 %block2_2 +%block2_1 = OpLabel +%out2_1 = OpISub %int_t %cmp_val %rhs_val + OpBranch %block_phi +%block2_2 = OpLabel +%out2_2 = OpISub %int_t %rhs_val %cmp_val + OpBranch %block_phi +%block_phi = OpLabel +%out_val = OpPhi %int_t %out1_1 %block1_1 %out1_2 %block1_2 %out2_1 %block2_1 %out2_2 %block2_2 +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/phi_4.spvasm64 b/test_conformance/spirv_new/spirv_txt/phi_4.spvasm64 new file mode 100644 index 00000000..79a8c9bd --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/phi_4.spvasm64 @@ -0,0 +1,65 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "phi_4" + OpName %out_ptr "res" + OpName %lhs_ptr "lhs" + OpName %rhs_ptr "rhs" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %lhs_ptr %rhs_ptr +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%shift_val = OpConstant %idx_t 32 +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%cmp_val = OpConstant %int_t 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%lhs_ptr = OpFunctionParameter %int_ptr_t +%rhs_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%lhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %lhs_ptr %idx +%lhs_val = OpLoad %int_t %lhs_loc Aligned 4 +%rhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %rhs_ptr %idx +%rhs_val = OpLoad %int_t %rhs_loc Aligned 4 +%compare1 = OpSLessThan %bool_t %lhs_val %rhs_val + OpBranchConditional %compare1 %block1 %block2 +%block1 = OpLabel +%compare2 = OpSLessThan %bool_t %lhs_val %cmp_val + OpBranchConditional %compare2 %block1_1 %block1_2 +%block1_1 = OpLabel +%out1_1 = OpISub %int_t %cmp_val %lhs_val + OpBranch %block_phi +%block1_2 = OpLabel +%out1_2 = OpISub %int_t %lhs_val %cmp_val + OpBranch %block_phi +%block2 = OpLabel +%compare3 = OpSLessThan %bool_t %rhs_val %cmp_val + OpBranchConditional %compare3 %block2_1 %block2_2 +%block2_1 = OpLabel +%out2_1 = OpISub %int_t %cmp_val %rhs_val + OpBranch %block_phi +%block2_2 = OpLabel +%out2_2 = OpISub %int_t %rhs_val %cmp_val + OpBranch %block_phi +%block_phi = OpLabel +%out_val = OpPhi %int_t %out1_1 %block1_1 %out1_2 %block1_2 %out2_1 %block2_1 %out2_2 %block2_2 +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/select_if_dont_flatten.spvasm32 b/test_conformance/spirv_new/spirv_txt/select_if_dont_flatten.spvasm32 new file mode 100644 index 00000000..e3c45a37 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/select_if_dont_flatten.spvasm32 @@ -0,0 +1,54 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "select_if_dont_flatten" + OpName %out_ptr "res" + OpName %lhs_ptr "lhs" + OpName %rhs_ptr "rhs" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %lhs_ptr %rhs_ptr +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_zero = OpConstant %int_t 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%lhs_ptr = OpFunctionParameter %int_ptr_t +%rhs_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%lhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %lhs_ptr %idx +%lhs_val = OpLoad %int_t %lhs_loc Aligned 4 +%rhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %rhs_ptr %idx +%rhs_val = OpLoad %int_t %rhs_loc Aligned 4 +%tmp = OpVariable %tmp_ptr_t Function +%compare = OpSLessThan %bool_t %lhs_val %rhs_val + OpSelectionMerge %final_block DontFlatten + OpBranchConditional %compare %block1 %block2 +%block1 = OpLabel +%out1 = OpISub %int_t %rhs_val %lhs_val + OpStore %tmp %out1 + OpBranch %final_block +%block2 = OpLabel +%out2 = OpISub %int_t %lhs_val %rhs_val + OpStore %tmp %out2 + OpBranch %final_block +%final_block = OpLabel +%out_val = OpLoad %int_t %tmp +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/select_if_dont_flatten.spvasm64 b/test_conformance/spirv_new/spirv_txt/select_if_dont_flatten.spvasm64 new file mode 100644 index 00000000..e8566dac --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/select_if_dont_flatten.spvasm64 @@ -0,0 +1,59 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "select_if_dont_flatten" + OpName %out_ptr "res" + OpName %lhs_ptr "lhs" + OpName %rhs_ptr "rhs" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %lhs_ptr %rhs_ptr +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%shift_val = OpConstant %idx_t 32 +%int_zero = OpConstant %int_t 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%lhs_ptr = OpFunctionParameter %int_ptr_t +%rhs_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%lhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %lhs_ptr %idx +%lhs_val = OpLoad %int_t %lhs_loc Aligned 4 +%rhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %rhs_ptr %idx +%rhs_val = OpLoad %int_t %rhs_loc Aligned 4 +%tmp = OpVariable %tmp_ptr_t Function + OpStore %tmp %int_zero +%compare = OpSLessThan %bool_t %lhs_val %rhs_val + OpSelectionMerge %final_block DontFlatten + OpBranchConditional %compare %block1 %block2 +%block1 = OpLabel +%out1 = OpISub %int_t %rhs_val %lhs_val + OpStore %tmp %out1 + OpBranch %final_block +%block2 = OpLabel +%out2 = OpISub %int_t %lhs_val %rhs_val + OpStore %tmp %out2 + OpBranch %final_block +%final_block = OpLabel +%out_val = OpLoad %int_t %tmp +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/select_if_flatten.spvasm32 b/test_conformance/spirv_new/spirv_txt/select_if_flatten.spvasm32 new file mode 100644 index 00000000..81cc1f73 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/select_if_flatten.spvasm32 @@ -0,0 +1,54 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "select_if_flatten" + OpName %out_ptr "res" + OpName %lhs_ptr "lhs" + OpName %rhs_ptr "rhs" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %lhs_ptr %rhs_ptr +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_zero = OpConstant %int_t 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%lhs_ptr = OpFunctionParameter %int_ptr_t +%rhs_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%lhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %lhs_ptr %idx +%lhs_val = OpLoad %int_t %lhs_loc Aligned 4 +%rhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %rhs_ptr %idx +%rhs_val = OpLoad %int_t %rhs_loc Aligned 4 +%tmp = OpVariable %tmp_ptr_t Function +%compare = OpSLessThan %bool_t %lhs_val %rhs_val + OpSelectionMerge %final_block Flatten + OpBranchConditional %compare %block1 %block2 +%block1 = OpLabel +%out1 = OpISub %int_t %rhs_val %lhs_val + OpStore %tmp %out1 + OpBranch %final_block +%block2 = OpLabel +%out2 = OpISub %int_t %lhs_val %rhs_val + OpStore %tmp %out2 + OpBranch %final_block +%final_block = OpLabel +%out_val = OpLoad %int_t %tmp +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/select_if_flatten.spvasm64 b/test_conformance/spirv_new/spirv_txt/select_if_flatten.spvasm64 new file mode 100644 index 00000000..2a25ad1b --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/select_if_flatten.spvasm64 @@ -0,0 +1,59 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "select_if_flatten" + OpName %out_ptr "res" + OpName %lhs_ptr "lhs" + OpName %rhs_ptr "rhs" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %lhs_ptr %rhs_ptr +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%shift_val = OpConstant %idx_t 32 +%int_zero = OpConstant %int_t 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%lhs_ptr = OpFunctionParameter %int_ptr_t +%rhs_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%lhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %lhs_ptr %idx +%lhs_val = OpLoad %int_t %lhs_loc Aligned 4 +%rhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %rhs_ptr %idx +%rhs_val = OpLoad %int_t %rhs_loc Aligned 4 +%tmp = OpVariable %tmp_ptr_t Function + OpStore %tmp %int_zero +%compare = OpSLessThan %bool_t %lhs_val %rhs_val + OpSelectionMerge %final_block Flatten + OpBranchConditional %compare %block1 %block2 +%block1 = OpLabel +%out1 = OpISub %int_t %rhs_val %lhs_val + OpStore %tmp %out1 + OpBranch %final_block +%block2 = OpLabel +%out2 = OpISub %int_t %lhs_val %rhs_val + OpStore %tmp %out2 + OpBranch %final_block +%final_block = OpLabel +%out_val = OpLoad %int_t %tmp +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/select_if_none.spvasm32 b/test_conformance/spirv_new/spirv_txt/select_if_none.spvasm32 new file mode 100644 index 00000000..aba05ba7 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/select_if_none.spvasm32 @@ -0,0 +1,54 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "select_if_none" + OpName %out_ptr "res" + OpName %lhs_ptr "lhs" + OpName %rhs_ptr "rhs" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %lhs_ptr %rhs_ptr +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_zero = OpConstant %int_t 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%lhs_ptr = OpFunctionParameter %int_ptr_t +%rhs_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%lhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %lhs_ptr %idx +%lhs_val = OpLoad %int_t %lhs_loc Aligned 4 +%rhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %rhs_ptr %idx +%rhs_val = OpLoad %int_t %rhs_loc Aligned 4 +%tmp = OpVariable %tmp_ptr_t Function +%compare = OpSLessThan %bool_t %lhs_val %rhs_val + OpSelectionMerge %final_block None + OpBranchConditional %compare %block1 %block2 +%block1 = OpLabel +%out1 = OpISub %int_t %rhs_val %lhs_val + OpStore %tmp %out1 + OpBranch %final_block +%block2 = OpLabel +%out2 = OpISub %int_t %lhs_val %rhs_val + OpStore %tmp %out2 + OpBranch %final_block +%final_block = OpLabel +%out_val = OpLoad %int_t %tmp +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/select_if_none.spvasm64 b/test_conformance/spirv_new/spirv_txt/select_if_none.spvasm64 new file mode 100644 index 00000000..99de731c --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/select_if_none.spvasm64 @@ -0,0 +1,59 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "select_if_none" + OpName %out_ptr "res" + OpName %lhs_ptr "lhs" + OpName %rhs_ptr "rhs" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %lhs_ptr %rhs_ptr +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%shift_val = OpConstant %idx_t 32 +%int_zero = OpConstant %int_t 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%lhs_ptr = OpFunctionParameter %int_ptr_t +%rhs_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%lhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %lhs_ptr %idx +%lhs_val = OpLoad %int_t %lhs_loc Aligned 4 +%rhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %rhs_ptr %idx +%rhs_val = OpLoad %int_t %rhs_loc Aligned 4 +%tmp = OpVariable %tmp_ptr_t Function + OpStore %tmp %int_zero +%compare = OpSLessThan %bool_t %lhs_val %rhs_val + OpSelectionMerge %final_block None + OpBranchConditional %compare %block1 %block2 +%block1 = OpLabel +%out1 = OpISub %int_t %rhs_val %lhs_val + OpStore %tmp %out1 + OpBranch %final_block +%block2 = OpLabel +%out2 = OpISub %int_t %lhs_val %rhs_val + OpStore %tmp %out2 + OpBranch %final_block +%final_block = OpLabel +%out_val = OpLoad %int_t %tmp +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/select_switch_dont_flatten.spvasm32 b/test_conformance/spirv_new/spirv_txt/select_switch_dont_flatten.spvasm32 new file mode 100644 index 00000000..618b0789 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/select_switch_dont_flatten.spvasm32 @@ -0,0 +1,63 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "select_switch_dont_flatten" + OpName %out_ptr "res" + OpName %lhs_ptr "lhs" + OpName %rhs_ptr "rhs" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %lhs_ptr %rhs_ptr +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_zero = OpConstant %int_t 0 +%int_one = OpConstant %int_t 1 +%int_two = OpConstant %int_t 2 +%int_three = OpConstant %int_t 3 +%int_four = OpConstant %int_t 4 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%lhs_ptr = OpFunctionParameter %int_ptr_t +%rhs_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%lhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %lhs_ptr %idx +%lhs_val = OpLoad %int_t %lhs_loc Aligned 4 +%rhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %rhs_ptr %idx +%rhs_val = OpLoad %int_t %rhs_loc Aligned 4 +%tmp = OpVariable %tmp_ptr_t Function +%add_val = OpIAdd %int_t %lhs_val %rhs_val +%selector = OpUMod %int_t %add_val %int_four + OpSelectionMerge %final_block DontFlatten + OpSwitch %selector %default 1 %block1 2 %block2 3 %block3 +%block1 = OpLabel + OpStore %tmp %int_one + OpBranch %final_block +%block2 = OpLabel + OpStore %tmp %int_two + OpBranch %final_block +%block3 = OpLabel + OpStore %tmp %int_three + OpBranch %final_block +%default = OpLabel + OpStore %tmp %int_zero + OpBranch %final_block +%final_block = OpLabel +%out_val = OpLoad %int_t %tmp +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/select_switch_dont_flatten.spvasm64 b/test_conformance/spirv_new/spirv_txt/select_switch_dont_flatten.spvasm64 new file mode 100644 index 00000000..54f154e4 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/select_switch_dont_flatten.spvasm64 @@ -0,0 +1,68 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "select_switch_dont_flatten" + OpName %out_ptr "res" + OpName %lhs_ptr "lhs" + OpName %rhs_ptr "rhs" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %lhs_ptr %rhs_ptr +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%shift_val = OpConstant %idx_t 32 +%int_zero = OpConstant %int_t 0 +%int_one = OpConstant %int_t 1 +%int_two = OpConstant %int_t 2 +%int_three = OpConstant %int_t 3 +%int_four = OpConstant %int_t 4 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%lhs_ptr = OpFunctionParameter %int_ptr_t +%rhs_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%lhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %lhs_ptr %idx +%lhs_val = OpLoad %int_t %lhs_loc Aligned 4 +%rhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %rhs_ptr %idx +%rhs_val = OpLoad %int_t %rhs_loc Aligned 4 +%tmp = OpVariable %tmp_ptr_t Function + OpStore %tmp %int_zero +%add_val = OpIAdd %int_t %lhs_val %rhs_val +%selector = OpUMod %int_t %add_val %int_four + OpSelectionMerge %final_block DontFlatten + OpSwitch %selector %default 1 %block1 2 %block2 3 %block3 +%block1 = OpLabel + OpStore %tmp %int_one + OpBranch %final_block +%block2 = OpLabel + OpStore %tmp %int_two + OpBranch %final_block +%block3 = OpLabel + OpStore %tmp %int_three + OpBranch %final_block +%default = OpLabel + OpStore %tmp %int_zero + OpBranch %final_block +%final_block = OpLabel +%out_val = OpLoad %int_t %tmp +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/select_switch_flatten.spvasm32 b/test_conformance/spirv_new/spirv_txt/select_switch_flatten.spvasm32 new file mode 100644 index 00000000..d90af141 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/select_switch_flatten.spvasm32 @@ -0,0 +1,63 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "select_switch_flatten" + OpName %out_ptr "res" + OpName %lhs_ptr "lhs" + OpName %rhs_ptr "rhs" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %lhs_ptr %rhs_ptr +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_zero = OpConstant %int_t 0 +%int_one = OpConstant %int_t 1 +%int_two = OpConstant %int_t 2 +%int_three = OpConstant %int_t 3 +%int_four = OpConstant %int_t 4 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%lhs_ptr = OpFunctionParameter %int_ptr_t +%rhs_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%lhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %lhs_ptr %idx +%lhs_val = OpLoad %int_t %lhs_loc Aligned 4 +%rhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %rhs_ptr %idx +%rhs_val = OpLoad %int_t %rhs_loc Aligned 4 +%tmp = OpVariable %tmp_ptr_t Function +%add_val = OpIAdd %int_t %lhs_val %rhs_val +%selector = OpUMod %int_t %add_val %int_four + OpSelectionMerge %final_block Flatten + OpSwitch %selector %default 1 %block1 2 %block2 3 %block3 +%block1 = OpLabel + OpStore %tmp %int_one + OpBranch %final_block +%block2 = OpLabel + OpStore %tmp %int_two + OpBranch %final_block +%block3 = OpLabel + OpStore %tmp %int_three + OpBranch %final_block +%default = OpLabel + OpStore %tmp %int_zero + OpBranch %final_block +%final_block = OpLabel +%out_val = OpLoad %int_t %tmp +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/select_switch_flatten.spvasm64 b/test_conformance/spirv_new/spirv_txt/select_switch_flatten.spvasm64 new file mode 100644 index 00000000..41d408fd --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/select_switch_flatten.spvasm64 @@ -0,0 +1,68 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "select_switch_flatten" + OpName %out_ptr "res" + OpName %lhs_ptr "lhs" + OpName %rhs_ptr "rhs" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %lhs_ptr %rhs_ptr +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%shift_val = OpConstant %idx_t 32 +%int_zero = OpConstant %int_t 0 +%int_one = OpConstant %int_t 1 +%int_two = OpConstant %int_t 2 +%int_three = OpConstant %int_t 3 +%int_four = OpConstant %int_t 4 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%lhs_ptr = OpFunctionParameter %int_ptr_t +%rhs_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%lhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %lhs_ptr %idx +%lhs_val = OpLoad %int_t %lhs_loc Aligned 4 +%rhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %rhs_ptr %idx +%rhs_val = OpLoad %int_t %rhs_loc Aligned 4 +%tmp = OpVariable %tmp_ptr_t Function + OpStore %tmp %int_zero +%add_val = OpIAdd %int_t %lhs_val %rhs_val +%selector = OpUMod %int_t %add_val %int_four + OpSelectionMerge %final_block Flatten + OpSwitch %selector %default 1 %block1 2 %block2 3 %block3 +%block1 = OpLabel + OpStore %tmp %int_one + OpBranch %final_block +%block2 = OpLabel + OpStore %tmp %int_two + OpBranch %final_block +%block3 = OpLabel + OpStore %tmp %int_three + OpBranch %final_block +%default = OpLabel + OpStore %tmp %int_zero + OpBranch %final_block +%final_block = OpLabel +%out_val = OpLoad %int_t %tmp +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/select_switch_none.spvasm32 b/test_conformance/spirv_new/spirv_txt/select_switch_none.spvasm32 new file mode 100644 index 00000000..324e1ef1 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/select_switch_none.spvasm32 @@ -0,0 +1,63 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "select_switch_none" + OpName %out_ptr "res" + OpName %lhs_ptr "lhs" + OpName %rhs_ptr "rhs" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %lhs_ptr %rhs_ptr +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_zero = OpConstant %int_t 0 +%int_one = OpConstant %int_t 1 +%int_two = OpConstant %int_t 2 +%int_three = OpConstant %int_t 3 +%int_four = OpConstant %int_t 4 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%lhs_ptr = OpFunctionParameter %int_ptr_t +%rhs_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%lhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %lhs_ptr %idx +%lhs_val = OpLoad %int_t %lhs_loc Aligned 4 +%rhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %rhs_ptr %idx +%rhs_val = OpLoad %int_t %rhs_loc Aligned 4 +%tmp = OpVariable %tmp_ptr_t Function +%add_val = OpIAdd %int_t %lhs_val %rhs_val +%selector = OpUMod %int_t %add_val %int_four + OpSelectionMerge %final_block None + OpSwitch %selector %default 1 %block1 2 %block2 3 %block3 +%block1 = OpLabel + OpStore %tmp %int_one + OpBranch %final_block +%block2 = OpLabel + OpStore %tmp %int_two + OpBranch %final_block +%block3 = OpLabel + OpStore %tmp %int_three + OpBranch %final_block +%default = OpLabel + OpStore %tmp %int_zero + OpBranch %final_block +%final_block = OpLabel +%out_val = OpLoad %int_t %tmp +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/select_switch_none.spvasm64 b/test_conformance/spirv_new/spirv_txt/select_switch_none.spvasm64 new file mode 100644 index 00000000..3357672f --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/select_switch_none.spvasm64 @@ -0,0 +1,68 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "select_switch_none" + OpName %out_ptr "res" + OpName %lhs_ptr "lhs" + OpName %rhs_ptr "rhs" + OpDecorate %dec FuncParamAttr NoCapture +%dec = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %dec %out_ptr %lhs_ptr %rhs_ptr +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%bool_t = OpTypeBool +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%shift_val = OpConstant %idx_t 32 +%int_zero = OpConstant %int_t 0 +%int_one = OpConstant %int_t 1 +%int_two = OpConstant %int_t 2 +%int_three = OpConstant %int_t 3 +%int_four = OpConstant %int_t 4 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%tmp_ptr_t = OpTypePointer Function %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%out_ptr = OpFunctionParameter %int_ptr_t +%lhs_ptr = OpFunctionParameter %int_ptr_t +%rhs_ptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%lhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %lhs_ptr %idx +%lhs_val = OpLoad %int_t %lhs_loc Aligned 4 +%rhs_loc = OpInBoundsPtrAccessChain %int_ptr_t %rhs_ptr %idx +%rhs_val = OpLoad %int_t %rhs_loc Aligned 4 +%tmp = OpVariable %tmp_ptr_t Function + OpStore %tmp %int_zero +%add_val = OpIAdd %int_t %lhs_val %rhs_val +%selector = OpUMod %int_t %add_val %int_four + OpSelectionMerge %final_block None + OpSwitch %selector %default 1 %block1 2 %block2 3 %block3 +%block1 = OpLabel + OpStore %tmp %int_one + OpBranch %final_block +%block2 = OpLabel + OpStore %tmp %int_two + OpBranch %final_block +%block3 = OpLabel + OpStore %tmp %int_three + OpBranch %final_block +%default = OpLabel + OpStore %tmp %int_zero + OpBranch %final_block +%final_block = OpLabel +%out_val = OpLoad %int_t %tmp +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx + OpStore %out_loc %out_val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_char_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/undef_char_simple.spvasm32 new file mode 100644 index 00000000..76ba3c4e --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_char_simple.spvasm32 @@ -0,0 +1,29 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int8 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "undef_char_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%char_t = OpTypeInt 8 0 +%char_ptr_t = OpTypePointer CrossWorkgroup %char_t +%func_t = OpTypeFunction %void_t %char_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %char_ptr_t +%entry = OpLabel +%val = OpUndef %char_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %char_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_char_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/undef_char_simple.spvasm64 new file mode 100644 index 00000000..b1ac7771 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_char_simple.spvasm64 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int8 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "undef_char_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%char_t = OpTypeInt 8 0 +%char_ptr_t = OpTypePointer CrossWorkgroup %char_t +%func_t = OpTypeFunction %void_t %char_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %char_ptr_t +%entry = OpLabel +%val = OpUndef %char_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %char_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_double_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/undef_double_simple.spvasm32 new file mode 100644 index 00000000..619fead8 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_double_simple.spvasm32 @@ -0,0 +1,29 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Float64 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "undef_double_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%double_t = OpTypeFloat 64 +%double_ptr_t = OpTypePointer CrossWorkgroup %double_t +%func_t = OpTypeFunction %void_t %double_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %double_ptr_t +%entry = OpLabel +%val = OpUndef %double_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %double_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_double_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/undef_double_simple.spvasm64 new file mode 100644 index 00000000..aaa15963 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_double_simple.spvasm64 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Float64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "undef_double_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%double_t = OpTypeFloat 64 +%double_ptr_t = OpTypePointer CrossWorkgroup %double_t +%func_t = OpTypeFunction %void_t %double_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %double_ptr_t +%entry = OpLabel +%val = OpUndef %double_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %double_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_false_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/undef_false_simple.spvasm32 new file mode 100644 index 00000000..d62f7334 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_false_simple.spvasm32 @@ -0,0 +1,32 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "undef_false_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%bool_t = OpTypeBool +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t +%true_val = OpConstant %int_t 1 +%false_val = OpConstant %int_t 0 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%bool_val = OpUndef %bool_t +%val = OpSelect %int_t %bool_val %true_val %false_val +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %int_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_false_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/undef_false_simple.spvasm64 new file mode 100644 index 00000000..3f05d655 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_false_simple.spvasm64 @@ -0,0 +1,36 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "undef_false_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%bool_t = OpTypeBool +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t +%shift_val = OpConstant %idx_t 32 +%true_val = OpConstant %int_t 1 +%false_val = OpConstant %int_t 0 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%bool_val = OpUndef %bool_t +%val = OpSelect %int_t %bool_val %true_val %false_val +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %int_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_float_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/undef_float_simple.spvasm32 new file mode 100644 index 00000000..90f91c17 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_float_simple.spvasm32 @@ -0,0 +1,28 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "undef_float_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%val = OpUndef %float_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %float_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_float_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/undef_float_simple.spvasm64 new file mode 100644 index 00000000..b67a00e9 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_float_simple.spvasm64 @@ -0,0 +1,32 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "undef_float_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%val = OpUndef %float_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %float_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_half_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/undef_half_simple.spvasm32 new file mode 100644 index 00000000..df367bb5 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_half_simple.spvasm32 @@ -0,0 +1,31 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Float16 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "undef_half_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%half_t = OpTypeFloat 16 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%half_val = OpUndef %half_t +%val = OpFConvert %float_t %half_val +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %float_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_half_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/undef_half_simple.spvasm64 new file mode 100644 index 00000000..5d464ff7 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_half_simple.spvasm64 @@ -0,0 +1,35 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Float16 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "undef_half_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%half_t = OpTypeFloat 16 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%func_t = OpTypeFunction %void_t %float_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%half_val = OpUndef %half_t +%val = OpFConvert %float_t %half_val +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %float_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_int3_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/undef_int3_simple.spvasm32 new file mode 100644 index 00000000..a2361a63 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_int3_simple.spvasm32 @@ -0,0 +1,29 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "undef_int3_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int3_t = OpTypeVector %int_t 3 +%int3_ptr_t = OpTypePointer CrossWorkgroup %int3_t +%func_t = OpTypeFunction %void_t %int3_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int3_ptr_t +%entry = OpLabel +%vec = OpUndef %int3_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %int3_ptr_t %inptr %idx + OpStore %current %vec Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_int3_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/undef_int3_simple.spvasm64 new file mode 100644 index 00000000..9290f0d8 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_int3_simple.spvasm64 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "undef_int3_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int3_t = OpTypeVector %int_t 3 +%int3_ptr_t = OpTypePointer CrossWorkgroup %int3_t +%func_t = OpTypeFunction %void_t %int3_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int3_ptr_t +%entry = OpLabel +%vec = OpUndef %int3_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %int3_ptr_t %inptr %idx + OpStore %current %vec Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_int4_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/undef_int4_simple.spvasm32 new file mode 100644 index 00000000..cac2954f --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_int4_simple.spvasm32 @@ -0,0 +1,29 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "undef_int4_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int4_t = OpTypeVector %int_t 4 +%int4_ptr_t = OpTypePointer CrossWorkgroup %int4_t +%func_t = OpTypeFunction %void_t %int4_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int4_ptr_t +%entry = OpLabel +%vec = OpUndef %int4_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %int4_ptr_t %inptr %idx + OpStore %current %vec Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_int4_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/undef_int4_simple.spvasm64 new file mode 100644 index 00000000..dd4219a6 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_int4_simple.spvasm64 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "undef_int4_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int4_t = OpTypeVector %int_t 4 +%int4_ptr_t = OpTypePointer CrossWorkgroup %int4_t +%func_t = OpTypeFunction %void_t %int4_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int4_ptr_t +%entry = OpLabel +%vec = OpUndef %int4_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %int4_ptr_t %inptr %idx + OpStore %current %vec + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_int_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/undef_int_simple.spvasm32 new file mode 100644 index 00000000..0cc5658f --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_int_simple.spvasm32 @@ -0,0 +1,28 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "undef_int_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%val = OpUndef %int_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %int_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_int_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/undef_int_simple.spvasm64 new file mode 100644 index 00000000..f01ff94a --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_int_simple.spvasm64 @@ -0,0 +1,32 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "undef_int_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%val = OpUndef %int_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %int_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_long_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/undef_long_simple.spvasm32 new file mode 100644 index 00000000..451f0174 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_long_simple.spvasm32 @@ -0,0 +1,29 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "undef_long_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%long_t = OpTypeInt 64 0 +%long_ptr_t = OpTypePointer CrossWorkgroup %long_t +%func_t = OpTypeFunction %void_t %long_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %long_ptr_t +%entry = OpLabel +%val = OpUndef %long_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %long_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_long_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/undef_long_simple.spvasm64 new file mode 100644 index 00000000..dcc12b9d --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_long_simple.spvasm64 @@ -0,0 +1,32 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "undef_long_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%long_t = OpTypeInt 64 0 +%long_ptr_t = OpTypePointer CrossWorkgroup %long_t +%func_t = OpTypeFunction %void_t %long_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %long_ptr_t +%entry = OpLabel +%val = OpUndef %long_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %long_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_short_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/undef_short_simple.spvasm32 new file mode 100644 index 00000000..d1213404 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_short_simple.spvasm32 @@ -0,0 +1,29 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int16 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "undef_short_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%short_t = OpTypeInt 16 0 +%short_ptr_t = OpTypePointer CrossWorkgroup %short_t +%func_t = OpTypeFunction %void_t %short_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %short_ptr_t +%entry = OpLabel +%val = OpUndef %short_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %short_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_short_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/undef_short_simple.spvasm64 new file mode 100644 index 00000000..e2256b8e --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_short_simple.spvasm64 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int16 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "undef_short_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%short_t = OpTypeInt 16 0 +%short_ptr_t = OpTypePointer CrossWorkgroup %short_t +%func_t = OpTypeFunction %void_t %short_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %short_ptr_t +%entry = OpLabel +%val = OpUndef %short_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %short_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_struct_int_char_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/undef_struct_int_char_simple.spvasm32 new file mode 100644 index 00000000..94c04e0f --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_struct_int_char_simple.spvasm32 @@ -0,0 +1,31 @@ + OpCapability Addresses + OpCapability Kernel + OpCapability Linkage + OpCapability Int8 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "undef_struct_int_char_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%char_t = OpTypeInt 8 0 +%struct_t = OpTypeStruct %int_t %char_t +%struct_ptr_t = OpTypePointer CrossWorkgroup %struct_t +%func_t = OpTypeFunction %void_t %struct_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %struct_ptr_t +%entry = OpLabel +%struct_val = OpUndef %struct_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %struct_ptr_t %inptr %idx + OpStore %current %struct_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_struct_int_char_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/undef_struct_int_char_simple.spvasm64 new file mode 100644 index 00000000..f4b52052 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_struct_int_char_simple.spvasm64 @@ -0,0 +1,35 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int8 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "undef_struct_int_char_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%char_t = OpTypeInt 8 0 +%struct_t = OpTypeStruct %int_t %char_t +%struct_ptr_t = OpTypePointer CrossWorkgroup %struct_t +%func_t = OpTypeFunction %void_t %struct_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %struct_ptr_t +%entry = OpLabel +%struct_val = OpUndef %struct_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %struct_ptr_t %inptr %idx + OpStore %current %struct_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_struct_int_float_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/undef_struct_int_float_simple.spvasm32 new file mode 100644 index 00000000..26161e22 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_struct_int_float_simple.spvasm32 @@ -0,0 +1,30 @@ + OpCapability Addresses + OpCapability Kernel + OpCapability Linkage + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "undef_struct_int_float_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%float_t = OpTypeFloat 32 +%struct_t = OpTypeStruct %int_t %float_t +%struct_ptr_t = OpTypePointer CrossWorkgroup %struct_t +%func_t = OpTypeFunction %void_t %struct_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %struct_ptr_t +%entry = OpLabel +%struct_val = OpUndef %struct_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %struct_ptr_t %inptr %idx + OpStore %current %struct_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_struct_int_float_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/undef_struct_int_float_simple.spvasm64 new file mode 100644 index 00000000..dfb707f1 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_struct_int_float_simple.spvasm64 @@ -0,0 +1,34 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "undef_struct_int_float_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%float_t = OpTypeFloat 32 +%struct_t = OpTypeStruct %int_t %float_t +%struct_ptr_t = OpTypePointer CrossWorkgroup %struct_t +%func_t = OpTypeFunction %void_t %struct_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %struct_ptr_t +%entry = OpLabel +%struct_val = OpUndef %struct_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %struct_ptr_t %inptr %idx + OpStore %current %struct_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_struct_struct_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/undef_struct_struct_simple.spvasm32 new file mode 100644 index 00000000..da1b5709 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_struct_struct_simple.spvasm32 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Kernel + OpCapability Linkage + OpCapability Int8 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "undef_struct_struct_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int2_t = OpTypeVector %int_t 2 +%char_t = OpTypeInt 8 0 +%struct_t = OpTypeStruct %int_t %char_t +%struct2_t = OpTypeStruct %int2_t %struct_t +%struct_ptr_t = OpTypePointer CrossWorkgroup %struct2_t +%func_t = OpTypeFunction %void_t %struct_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %struct_ptr_t +%entry = OpLabel +%struct2_val = OpUndef %struct2_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %struct_ptr_t %inptr %idx + OpStore %current %struct2_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_struct_struct_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/undef_struct_struct_simple.spvasm64 new file mode 100644 index 00000000..57d54dc1 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_struct_struct_simple.spvasm64 @@ -0,0 +1,37 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int8 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "undef_struct_struct_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int2_t = OpTypeVector %int_t 2 +%char_t = OpTypeInt 8 0 +%struct_t = OpTypeStruct %int_t %char_t +%struct2_t = OpTypeStruct %int2_t %struct_t +%struct_ptr_t = OpTypePointer CrossWorkgroup %struct2_t +%func_t = OpTypeFunction %void_t %struct_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %struct_ptr_t +%entry = OpLabel +%struct2_val = OpUndef %struct2_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %struct_ptr_t %inptr %idx + OpStore %current %struct2_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_true_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/undef_true_simple.spvasm32 new file mode 100644 index 00000000..22060fd1 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_true_simple.spvasm32 @@ -0,0 +1,32 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "undef_true_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%bool_t = OpTypeBool +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t +%true_val = OpConstant %int_t 1 +%false_val = OpConstant %int_t 0 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%bool_val = OpUndef %bool_t +%val = OpSelect %int_t %bool_val %true_val %false_val +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %int_ptr_t %inptr %idx + OpStore %current %val Aligned 4 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_true_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/undef_true_simple.spvasm64 new file mode 100644 index 00000000..ffbb3bba --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_true_simple.spvasm64 @@ -0,0 +1,36 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "undef_true_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%bool_t = OpTypeBool +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t +%shift_val = OpConstant %idx_t 32 +%true_val = OpConstant %int_t 1 +%false_val = OpConstant %int_t 0 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%bool_val = OpUndef %bool_t +%val = OpSelect %int_t %bool_val %true_val %false_val +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %int_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_uchar_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/undef_uchar_simple.spvasm32 new file mode 100644 index 00000000..56ca9e8e --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_uchar_simple.spvasm32 @@ -0,0 +1,29 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int8 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "undef_uchar_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%uchar_t = OpTypeInt 8 0 +%uchar_ptr_t = OpTypePointer CrossWorkgroup %uchar_t +%func_t = OpTypeFunction %void_t %uchar_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %uchar_ptr_t +%entry = OpLabel +%val = OpUndef %uchar_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %uchar_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_uchar_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/undef_uchar_simple.spvasm64 new file mode 100644 index 00000000..5fa778c7 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_uchar_simple.spvasm64 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int8 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "undef_uchar_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%uchar_t = OpTypeInt 8 0 +%uchar_ptr_t = OpTypePointer CrossWorkgroup %uchar_t +%func_t = OpTypeFunction %void_t %uchar_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %uchar_ptr_t +%entry = OpLabel +%val = OpUndef %uchar_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %uchar_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_uint_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/undef_uint_simple.spvasm32 new file mode 100644 index 00000000..c2117ab5 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_uint_simple.spvasm32 @@ -0,0 +1,28 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "undef_uint_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%uint_t = OpTypeInt 32 0 +%uint_ptr_t = OpTypePointer CrossWorkgroup %uint_t +%func_t = OpTypeFunction %void_t %uint_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %uint_ptr_t +%entry = OpLabel +%val = OpUndef %uint_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %uint_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_uint_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/undef_uint_simple.spvasm64 new file mode 100644 index 00000000..a45231ee --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_uint_simple.spvasm64 @@ -0,0 +1,32 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "undef_uint_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%uint_t = OpTypeInt 32 0 +%uint_ptr_t = OpTypePointer CrossWorkgroup %uint_t +%func_t = OpTypeFunction %void_t %uint_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %uint_ptr_t +%entry = OpLabel +%val = OpUndef %uint_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %uint_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_ulong_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/undef_ulong_simple.spvasm32 new file mode 100644 index 00000000..42458fb8 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_ulong_simple.spvasm32 @@ -0,0 +1,29 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "undef_ulong_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%ulong_t = OpTypeInt 64 0 +%ulong_ptr_t = OpTypePointer CrossWorkgroup %ulong_t +%func_t = OpTypeFunction %void_t %ulong_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %ulong_ptr_t +%entry = OpLabel +%val = OpUndef %ulong_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %ulong_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_ulong_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/undef_ulong_simple.spvasm64 new file mode 100644 index 00000000..f0e87f96 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_ulong_simple.spvasm64 @@ -0,0 +1,32 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "undef_ulong_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%ulong_t = OpTypeInt 64 0 +%ulong_ptr_t = OpTypePointer CrossWorkgroup %ulong_t +%func_t = OpTypeFunction %void_t %ulong_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %ulong_ptr_t +%entry = OpLabel +%val = OpUndef %ulong_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %ulong_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_ushort_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/undef_ushort_simple.spvasm32 new file mode 100644 index 00000000..a8972f82 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_ushort_simple.spvasm32 @@ -0,0 +1,29 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int16 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "undef_ushort_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%ushort_t = OpTypeInt 16 0 +%ushort_ptr_t = OpTypePointer CrossWorkgroup %ushort_t +%func_t = OpTypeFunction %void_t %ushort_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %ushort_ptr_t +%entry = OpLabel +%val = OpUndef %ushort_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current = OpInBoundsPtrAccessChain %ushort_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/undef_ushort_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/undef_ushort_simple.spvasm64 new file mode 100644 index 00000000..cfdb129a --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/undef_ushort_simple.spvasm64 @@ -0,0 +1,33 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int16 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "undef_ushort_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%ushort_t = OpTypeInt 16 0 +%ushort_ptr_t = OpTypePointer CrossWorkgroup %ushort_t +%func_t = OpTypeFunction %void_t %ushort_ptr_t +%shift_val = OpConstant %idx_t 32 +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %ushort_ptr_t +%entry = OpLabel +%val = OpUndef %ushort_t +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current = OpInBoundsPtrAccessChain %ushort_ptr_t %inptr %idx + OpStore %current %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/unreachable_simple.spvasm32 b/test_conformance/spirv_new/spirv_txt/unreachable_simple.spvasm32 new file mode 100644 index 00000000..cd1acb9e --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/unreachable_simple.spvasm32 @@ -0,0 +1,34 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "unreachable_simple" + OpName %inptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int_ptr_t +%outptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%current_in = OpInBoundsPtrAccessChain %int_ptr_t %inptr %idx +%current_out = OpInBoundsPtrAccessChain %int_ptr_t %outptr %idx +%val = OpLoad %int_t %current_in + OpBranch %final_block +%unreachable = OpLabel + OpUnreachable +%final_block = OpLabel + OpStore %current_out %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/unreachable_simple.spvasm64 b/test_conformance/spirv_new/spirv_txt/unreachable_simple.spvasm64 new file mode 100644 index 00000000..ed980907 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/unreachable_simple.spvasm64 @@ -0,0 +1,39 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "unreachable_simple" + OpName %inptr "in" + OpName %outptr "out" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %inptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%shift_val = OpConstant %idx_t 32 +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%inptr = OpFunctionParameter %int_ptr_t +%outptr = OpFunctionParameter %int_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%current_in = OpInBoundsPtrAccessChain %int_ptr_t %inptr %idx +%current_out = OpInBoundsPtrAccessChain %int_ptr_t %outptr %idx + OpBranch %final_block +%unreachable = OpLabel + OpUnreachable +%final_block = OpLabel +%val = OpLoad %int_t %current_in + OpStore %current_out %val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/vector_char16_extract.spvasm32 b/test_conformance/spirv_new/spirv_txt/vector_char16_extract.spvasm32 new file mode 100644 index 00000000..cd298175 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/vector_char16_extract.spvasm32 @@ -0,0 +1,38 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Vector16 + OpCapability Int8 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "vector_char16_extract" + OpName %in_ptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %in_ptr FuncParamAttr NoCapture + OpDecorate %out_ptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%vec_idx_t = OpTypeInt 32 0 +%void_t = OpTypeVoid +%char_t = OpTypeInt 8 0 +%char16_t = OpTypeVector %char_t 16 +%char_ptr_t = OpTypePointer CrossWorkgroup %char_t +%char16_ptr_t = OpTypePointer CrossWorkgroup %char16_t +%func_t = OpTypeFunction %void_t %char16_ptr_t %char_ptr_t %vec_idx_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%in_ptr = OpFunctionParameter %char16_ptr_t +%out_ptr = OpFunctionParameter %char_ptr_t +%vec_idx = OpFunctionParameter %vec_idx_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%in_loc = OpInBoundsPtrAccessChain %char16_ptr_t %in_ptr %idx +%in_val = OpLoad %char16_t %in_loc +%out_loc = OpInBoundsPtrAccessChain %char_ptr_t %out_ptr %idx +%out_val = OpVectorExtractDynamic %char_t %in_val %vec_idx + OpStore %out_loc %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/vector_char16_extract.spvasm64 b/test_conformance/spirv_new/spirv_txt/vector_char16_extract.spvasm64 new file mode 100644 index 00000000..88fc9d65 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/vector_char16_extract.spvasm64 @@ -0,0 +1,42 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int8 + OpCapability Vector16 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "vector_char16_extract" + OpName %in_ptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %in_ptr FuncParamAttr NoCapture + OpDecorate %out_ptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%shift_val = OpConstant %idx_t 32 +%vec_idx_t = OpTypeInt 32 0 +%void_t = OpTypeVoid +%char_t = OpTypeInt 8 0 +%char16_t = OpTypeVector %char_t 16 +%char_ptr_t = OpTypePointer CrossWorkgroup %char_t +%char16_ptr_t = OpTypePointer CrossWorkgroup %char16_t +%func_t = OpTypeFunction %void_t %char16_ptr_t %char_ptr_t %vec_idx_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%in_ptr = OpFunctionParameter %char16_ptr_t +%out_ptr = OpFunctionParameter %char_ptr_t +%vec_idx = OpFunctionParameter %vec_idx_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%in_loc = OpInBoundsPtrAccessChain %char16_ptr_t %in_ptr %idx +%in_val = OpLoad %char16_t %in_loc +%out_loc = OpInBoundsPtrAccessChain %char_ptr_t %out_ptr %idx +%out_val = OpVectorExtractDynamic %char_t %in_val %vec_idx + OpStore %out_loc %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/vector_char16_insert.spvasm32 b/test_conformance/spirv_new/spirv_txt/vector_char16_insert.spvasm32 new file mode 100644 index 00000000..f9b818ed --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/vector_char16_insert.spvasm32 @@ -0,0 +1,39 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Vector16 + OpCapability Int8 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "vector_char16_insert" + OpName %in_ptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %in_ptr FuncParamAttr NoCapture + OpDecorate %out_ptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%vec_idx_t = OpTypeInt 32 0 +%void_t = OpTypeVoid +%char_t = OpTypeInt 8 0 +%char16_t = OpTypeVector %char_t 16 +%char_ptr_t = OpTypePointer CrossWorkgroup %char_t +%char16_ptr_t = OpTypePointer CrossWorkgroup %char16_t +%func_t = OpTypeFunction %void_t %char_ptr_t %char16_ptr_t %vec_idx_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%in_ptr = OpFunctionParameter %char_ptr_t +%out_ptr = OpFunctionParameter %char16_ptr_t +%vec_idx = OpFunctionParameter %vec_idx_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%in_loc = OpInBoundsPtrAccessChain %char_ptr_t %in_ptr %idx +%in_val = OpLoad %char_t %in_loc +%out_loc = OpInBoundsPtrAccessChain %char16_ptr_t %out_ptr %idx +%tmp_val = OpLoad %char16_t %out_loc +%out_val = OpVectorInsertDynamic %char16_t %tmp_val %in_val %vec_idx + OpStore %out_loc %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/vector_char16_insert.spvasm64 b/test_conformance/spirv_new/spirv_txt/vector_char16_insert.spvasm64 new file mode 100644 index 00000000..8cc1d217 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/vector_char16_insert.spvasm64 @@ -0,0 +1,43 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Int8 + OpCapability Vector16 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "vector_char16_insert" + OpName %in_ptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %in_ptr FuncParamAttr NoCapture + OpDecorate %out_ptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%shift_val = OpConstant %idx_t 32 +%vec_idx_t = OpTypeInt 32 0 +%void_t = OpTypeVoid +%char_t = OpTypeInt 8 0 +%char16_t = OpTypeVector %char_t 16 +%char_ptr_t = OpTypePointer CrossWorkgroup %char_t +%char16_ptr_t = OpTypePointer CrossWorkgroup %char16_t +%func_t = OpTypeFunction %void_t %char_ptr_t %char16_ptr_t %vec_idx_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%in_ptr = OpFunctionParameter %char_ptr_t +%out_ptr = OpFunctionParameter %char16_ptr_t +%vec_idx = OpFunctionParameter %vec_idx_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%in_loc = OpInBoundsPtrAccessChain %char_ptr_t %in_ptr %idx +%in_val = OpLoad %char_t %in_loc +%out_loc = OpInBoundsPtrAccessChain %char16_ptr_t %out_ptr %idx +%tmp_val = OpLoad %char16_t %out_loc +%out_val = OpVectorInsertDynamic %char16_t %tmp_val %in_val %vec_idx + OpStore %out_loc %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/vector_double2_extract.spvasm32 b/test_conformance/spirv_new/spirv_txt/vector_double2_extract.spvasm32 new file mode 100644 index 00000000..6c83da7a --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/vector_double2_extract.spvasm32 @@ -0,0 +1,37 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Float64 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "vector_double2_extract" + OpName %in_ptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %in_ptr FuncParamAttr NoCapture + OpDecorate %out_ptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%vec_idx_t = OpTypeInt 32 0 +%void_t = OpTypeVoid +%double_t = OpTypeFloat 64 +%double2_t = OpTypeVector %double_t 2 +%double_ptr_t = OpTypePointer CrossWorkgroup %double_t +%double2_ptr_t = OpTypePointer CrossWorkgroup %double2_t +%func_t = OpTypeFunction %void_t %double2_ptr_t %double_ptr_t %vec_idx_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%in_ptr = OpFunctionParameter %double2_ptr_t +%out_ptr = OpFunctionParameter %double_ptr_t +%vec_idx = OpFunctionParameter %vec_idx_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%in_loc = OpInBoundsPtrAccessChain %double2_ptr_t %in_ptr %idx +%in_val = OpLoad %double2_t %in_loc +%out_loc = OpInBoundsPtrAccessChain %double_ptr_t %out_ptr %idx +%out_val = OpVectorExtractDynamic %double_t %in_val %vec_idx + OpStore %out_loc %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/vector_double2_extract.spvasm64 b/test_conformance/spirv_new/spirv_txt/vector_double2_extract.spvasm64 new file mode 100644 index 00000000..ecf97f89 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/vector_double2_extract.spvasm64 @@ -0,0 +1,41 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Float64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "vector_double2_extract" + OpName %in_ptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %in_ptr FuncParamAttr NoCapture + OpDecorate %out_ptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%shift_val = OpConstant %idx_t 32 +%vec_idx_t = OpTypeInt 32 0 +%void_t = OpTypeVoid +%double_t = OpTypeFloat 64 +%double2_t = OpTypeVector %double_t 2 +%double_ptr_t = OpTypePointer CrossWorkgroup %double_t +%double2_ptr_t = OpTypePointer CrossWorkgroup %double2_t +%func_t = OpTypeFunction %void_t %double2_ptr_t %double_ptr_t %vec_idx_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%in_ptr = OpFunctionParameter %double2_ptr_t +%out_ptr = OpFunctionParameter %double_ptr_t +%vec_idx = OpFunctionParameter %vec_idx_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%in_loc = OpInBoundsPtrAccessChain %double2_ptr_t %in_ptr %idx +%in_val = OpLoad %double2_t %in_loc +%out_loc = OpInBoundsPtrAccessChain %double_ptr_t %out_ptr %idx +%out_val = OpVectorExtractDynamic %double_t %in_val %vec_idx + OpStore %out_loc %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/vector_double2_insert.spvasm32 b/test_conformance/spirv_new/spirv_txt/vector_double2_insert.spvasm32 new file mode 100644 index 00000000..db1b72ad --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/vector_double2_insert.spvasm32 @@ -0,0 +1,38 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Float64 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "vector_double2_insert" + OpName %in_ptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %in_ptr FuncParamAttr NoCapture + OpDecorate %out_ptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%vec_idx_t = OpTypeInt 32 0 +%void_t = OpTypeVoid +%double_t = OpTypeFloat 64 +%double2_t = OpTypeVector %double_t 2 +%double_ptr_t = OpTypePointer CrossWorkgroup %double_t +%double2_ptr_t = OpTypePointer CrossWorkgroup %double2_t +%func_t = OpTypeFunction %void_t %double_ptr_t %double2_ptr_t %vec_idx_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%in_ptr = OpFunctionParameter %double_ptr_t +%out_ptr = OpFunctionParameter %double2_ptr_t +%vec_idx = OpFunctionParameter %vec_idx_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%in_loc = OpInBoundsPtrAccessChain %double_ptr_t %in_ptr %idx +%in_val = OpLoad %double_t %in_loc +%out_loc = OpInBoundsPtrAccessChain %double2_ptr_t %out_ptr %idx +%tmp_val = OpLoad %double2_t %out_loc +%out_val = OpVectorInsertDynamic %double2_t %tmp_val %in_val %vec_idx + OpStore %out_loc %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/vector_double2_insert.spvasm64 b/test_conformance/spirv_new/spirv_txt/vector_double2_insert.spvasm64 new file mode 100644 index 00000000..961aa486 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/vector_double2_insert.spvasm64 @@ -0,0 +1,42 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Float64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "vector_double2_insert" + OpName %in_ptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %in_ptr FuncParamAttr NoCapture + OpDecorate %out_ptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%shift_val = OpConstant %idx_t 32 +%vec_idx_t = OpTypeInt 32 0 +%void_t = OpTypeVoid +%double_t = OpTypeFloat 64 +%double2_t = OpTypeVector %double_t 2 +%double_ptr_t = OpTypePointer CrossWorkgroup %double_t +%double2_ptr_t = OpTypePointer CrossWorkgroup %double2_t +%func_t = OpTypeFunction %void_t %double_ptr_t %double2_ptr_t %vec_idx_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%in_ptr = OpFunctionParameter %double_ptr_t +%out_ptr = OpFunctionParameter %double2_ptr_t +%vec_idx = OpFunctionParameter %vec_idx_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%in_loc = OpInBoundsPtrAccessChain %double_ptr_t %in_ptr %idx +%in_val = OpLoad %double_t %in_loc +%out_loc = OpInBoundsPtrAccessChain %double2_ptr_t %out_ptr %idx +%tmp_val = OpLoad %double2_t %out_loc +%out_val = OpVectorInsertDynamic %double2_t %tmp_val %in_val %vec_idx + OpStore %out_loc %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/vector_float4_extract.spvasm32 b/test_conformance/spirv_new/spirv_txt/vector_float4_extract.spvasm32 new file mode 100644 index 00000000..8b832700 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/vector_float4_extract.spvasm32 @@ -0,0 +1,36 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "vector_float4_extract" + OpName %in_ptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %in_ptr FuncParamAttr NoCapture + OpDecorate %out_ptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%vec_idx_t = OpTypeInt 32 0 +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float4_t = OpTypeVector %float_t 4 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%float4_ptr_t = OpTypePointer CrossWorkgroup %float4_t +%func_t = OpTypeFunction %void_t %float4_ptr_t %float_ptr_t %vec_idx_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%in_ptr = OpFunctionParameter %float4_ptr_t +%out_ptr = OpFunctionParameter %float_ptr_t +%vec_idx = OpFunctionParameter %vec_idx_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%in_loc = OpInBoundsPtrAccessChain %float4_ptr_t %in_ptr %idx +%in_val = OpLoad %float4_t %in_loc +%out_loc = OpInBoundsPtrAccessChain %float_ptr_t %out_ptr %idx +%out_val = OpVectorExtractDynamic %float_t %in_val %vec_idx + OpStore %out_loc %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/vector_float4_extract.spvasm64 b/test_conformance/spirv_new/spirv_txt/vector_float4_extract.spvasm64 new file mode 100644 index 00000000..5f832a56 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/vector_float4_extract.spvasm64 @@ -0,0 +1,40 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "vector_float4_extract" + OpName %in_ptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %in_ptr FuncParamAttr NoCapture + OpDecorate %out_ptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%shift_val = OpConstant %idx_t 32 +%vec_idx_t = OpTypeInt 32 0 +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float4_t = OpTypeVector %float_t 4 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%float4_ptr_t = OpTypePointer CrossWorkgroup %float4_t +%func_t = OpTypeFunction %void_t %float4_ptr_t %float_ptr_t %vec_idx_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%in_ptr = OpFunctionParameter %float4_ptr_t +%out_ptr = OpFunctionParameter %float_ptr_t +%vec_idx = OpFunctionParameter %vec_idx_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%in_loc = OpInBoundsPtrAccessChain %float4_ptr_t %in_ptr %idx +%in_val = OpLoad %float4_t %in_loc +%out_loc = OpInBoundsPtrAccessChain %float_ptr_t %out_ptr %idx +%out_val = OpVectorExtractDynamic %float_t %in_val %vec_idx + OpStore %out_loc %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/vector_float4_insert.spvasm32 b/test_conformance/spirv_new/spirv_txt/vector_float4_insert.spvasm32 new file mode 100644 index 00000000..23e729b3 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/vector_float4_insert.spvasm32 @@ -0,0 +1,37 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "vector_float4_insert" + OpName %in_ptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %in_ptr FuncParamAttr NoCapture + OpDecorate %out_ptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%vec_idx_t = OpTypeInt 32 0 +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float4_t = OpTypeVector %float_t 4 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%float4_ptr_t = OpTypePointer CrossWorkgroup %float4_t +%func_t = OpTypeFunction %void_t %float_ptr_t %float4_ptr_t %vec_idx_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%in_ptr = OpFunctionParameter %float_ptr_t +%out_ptr = OpFunctionParameter %float4_ptr_t +%vec_idx = OpFunctionParameter %vec_idx_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%in_loc = OpInBoundsPtrAccessChain %float_ptr_t %in_ptr %idx +%in_val = OpLoad %float_t %in_loc +%out_loc = OpInBoundsPtrAccessChain %float4_ptr_t %out_ptr %idx +%tmp_val = OpLoad %float4_t %out_loc +%out_val = OpVectorInsertDynamic %float4_t %tmp_val %in_val %vec_idx + OpStore %out_loc %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/vector_float4_insert.spvasm64 b/test_conformance/spirv_new/spirv_txt/vector_float4_insert.spvasm64 new file mode 100644 index 00000000..d4e2fe86 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/vector_float4_insert.spvasm64 @@ -0,0 +1,41 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "vector_float4_insert" + OpName %in_ptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %in_ptr FuncParamAttr NoCapture + OpDecorate %out_ptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%shift_val = OpConstant %idx_t 32 +%vec_idx_t = OpTypeInt 32 0 +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float4_t = OpTypeVector %float_t 4 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%float4_ptr_t = OpTypePointer CrossWorkgroup %float4_t +%func_t = OpTypeFunction %void_t %float_ptr_t %float4_ptr_t %vec_idx_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%in_ptr = OpFunctionParameter %float_ptr_t +%out_ptr = OpFunctionParameter %float4_ptr_t +%vec_idx = OpFunctionParameter %vec_idx_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%in_loc = OpInBoundsPtrAccessChain %float_ptr_t %in_ptr %idx +%in_val = OpLoad %float_t %in_loc +%out_loc = OpInBoundsPtrAccessChain %float4_ptr_t %out_ptr %idx +%tmp_val = OpLoad %float4_t %out_loc +%out_val = OpVectorInsertDynamic %float4_t %tmp_val %in_val %vec_idx + OpStore %out_loc %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/vector_int4_extract.spvasm32 b/test_conformance/spirv_new/spirv_txt/vector_int4_extract.spvasm32 new file mode 100644 index 00000000..690a9253 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/vector_int4_extract.spvasm32 @@ -0,0 +1,36 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "vector_int4_extract" + OpName %in_ptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %in_ptr FuncParamAttr NoCapture + OpDecorate %out_ptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%vec_idx_t = OpTypeInt 32 0 +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int4_t = OpTypeVector %int_t 4 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%int4_ptr_t = OpTypePointer CrossWorkgroup %int4_t +%func_t = OpTypeFunction %void_t %int4_ptr_t %int_ptr_t %vec_idx_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%in_ptr = OpFunctionParameter %int4_ptr_t +%out_ptr = OpFunctionParameter %int_ptr_t +%vec_idx = OpFunctionParameter %vec_idx_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%in_loc = OpInBoundsPtrAccessChain %int4_ptr_t %in_ptr %idx +%in_val = OpLoad %int4_t %in_loc +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx +%out_val = OpVectorExtractDynamic %int_t %in_val %vec_idx + OpStore %out_loc %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/vector_int4_extract.spvasm64 b/test_conformance/spirv_new/spirv_txt/vector_int4_extract.spvasm64 new file mode 100644 index 00000000..68a0aece --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/vector_int4_extract.spvasm64 @@ -0,0 +1,40 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "vector_int4_extract" + OpName %in_ptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %in_ptr FuncParamAttr NoCapture + OpDecorate %out_ptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%shift_val = OpConstant %idx_t 32 +%vec_idx_t = OpTypeInt 32 0 +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int4_t = OpTypeVector %int_t 4 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%int4_ptr_t = OpTypePointer CrossWorkgroup %int4_t +%func_t = OpTypeFunction %void_t %int4_ptr_t %int_ptr_t %vec_idx_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%in_ptr = OpFunctionParameter %int4_ptr_t +%out_ptr = OpFunctionParameter %int_ptr_t +%vec_idx = OpFunctionParameter %vec_idx_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%in_loc = OpInBoundsPtrAccessChain %int4_ptr_t %in_ptr %idx +%in_val = OpLoad %int4_t %in_loc +%out_loc = OpInBoundsPtrAccessChain %int_ptr_t %out_ptr %idx +%out_val = OpVectorExtractDynamic %int_t %in_val %vec_idx + OpStore %out_loc %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/vector_int4_insert.spvasm32 b/test_conformance/spirv_new/spirv_txt/vector_int4_insert.spvasm32 new file mode 100644 index 00000000..2a91b78c --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/vector_int4_insert.spvasm32 @@ -0,0 +1,37 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "vector_int4_insert" + OpName %in_ptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %in_ptr FuncParamAttr NoCapture + OpDecorate %out_ptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%vec_idx_t = OpTypeInt 32 0 +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int4_t = OpTypeVector %int_t 4 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%int4_ptr_t = OpTypePointer CrossWorkgroup %int4_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int4_ptr_t %vec_idx_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%in_ptr = OpFunctionParameter %int_ptr_t +%out_ptr = OpFunctionParameter %int4_ptr_t +%vec_idx = OpFunctionParameter %vec_idx_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%in_loc = OpInBoundsPtrAccessChain %int_ptr_t %in_ptr %idx +%in_val = OpLoad %int_t %in_loc +%out_loc = OpInBoundsPtrAccessChain %int4_ptr_t %out_ptr %idx +%tmp_val = OpLoad %int4_t %out_loc +%out_val = OpVectorInsertDynamic %int4_t %tmp_val %in_val %vec_idx + OpStore %out_loc %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/vector_int4_insert.spvasm64 b/test_conformance/spirv_new/spirv_txt/vector_int4_insert.spvasm64 new file mode 100644 index 00000000..67231af4 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/vector_int4_insert.spvasm64 @@ -0,0 +1,41 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "vector_int4_insert" + OpName %in_ptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %in_ptr FuncParamAttr NoCapture + OpDecorate %out_ptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%shift_val = OpConstant %idx_t 32 +%vec_idx_t = OpTypeInt 32 0 +%void_t = OpTypeVoid +%int_t = OpTypeInt 32 0 +%int4_t = OpTypeVector %int_t 4 +%int_ptr_t = OpTypePointer CrossWorkgroup %int_t +%int4_ptr_t = OpTypePointer CrossWorkgroup %int4_t +%func_t = OpTypeFunction %void_t %int_ptr_t %int4_ptr_t %vec_idx_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%in_ptr = OpFunctionParameter %int_ptr_t +%out_ptr = OpFunctionParameter %int4_ptr_t +%vec_idx = OpFunctionParameter %vec_idx_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%in_loc = OpInBoundsPtrAccessChain %int_ptr_t %in_ptr %idx +%in_val = OpLoad %int_t %in_loc +%out_loc = OpInBoundsPtrAccessChain %int4_ptr_t %out_ptr %idx +%tmp_val = OpLoad %int4_t %out_loc +%out_val = OpVectorInsertDynamic %int4_t %tmp_val %in_val %vec_idx + OpStore %out_loc %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/vector_long2_extract.spvasm32 b/test_conformance/spirv_new/spirv_txt/vector_long2_extract.spvasm32 new file mode 100644 index 00000000..e0fe95c5 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/vector_long2_extract.spvasm32 @@ -0,0 +1,37 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "vector_long2_extract" + OpName %in_ptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %in_ptr FuncParamAttr NoCapture + OpDecorate %out_ptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%vec_idx_t = OpTypeInt 32 0 +%void_t = OpTypeVoid +%long_t = OpTypeInt 64 0 +%long2_t = OpTypeVector %long_t 2 +%long_ptr_t = OpTypePointer CrossWorkgroup %long_t +%long2_ptr_t = OpTypePointer CrossWorkgroup %long2_t +%func_t = OpTypeFunction %void_t %long2_ptr_t %long_ptr_t %vec_idx_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%in_ptr = OpFunctionParameter %long2_ptr_t +%out_ptr = OpFunctionParameter %long_ptr_t +%vec_idx = OpFunctionParameter %vec_idx_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%in_loc = OpInBoundsPtrAccessChain %long2_ptr_t %in_ptr %idx +%in_val = OpLoad %long2_t %in_loc +%out_loc = OpInBoundsPtrAccessChain %long_ptr_t %out_ptr %idx +%out_val = OpVectorExtractDynamic %long_t %in_val %vec_idx + OpStore %out_loc %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/vector_long2_extract.spvasm64 b/test_conformance/spirv_new/spirv_txt/vector_long2_extract.spvasm64 new file mode 100644 index 00000000..9c523f13 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/vector_long2_extract.spvasm64 @@ -0,0 +1,40 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "vector_long2_extract" + OpName %in_ptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %in_ptr FuncParamAttr NoCapture + OpDecorate %out_ptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%shift_val = OpConstant %idx_t 32 +%vec_idx_t = OpTypeInt 32 0 +%void_t = OpTypeVoid +%long_t = OpTypeInt 64 0 +%long2_t = OpTypeVector %long_t 2 +%long_ptr_t = OpTypePointer CrossWorkgroup %long_t +%long2_ptr_t = OpTypePointer CrossWorkgroup %long2_t +%func_t = OpTypeFunction %void_t %long2_ptr_t %long_ptr_t %vec_idx_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%in_ptr = OpFunctionParameter %long2_ptr_t +%out_ptr = OpFunctionParameter %long_ptr_t +%vec_idx = OpFunctionParameter %vec_idx_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%in_loc = OpInBoundsPtrAccessChain %long2_ptr_t %in_ptr %idx +%in_val = OpLoad %long2_t %in_loc +%out_loc = OpInBoundsPtrAccessChain %long_ptr_t %out_ptr %idx +%out_val = OpVectorExtractDynamic %long_t %in_val %vec_idx + OpStore %out_loc %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/vector_long2_insert.spvasm32 b/test_conformance/spirv_new/spirv_txt/vector_long2_insert.spvasm32 new file mode 100644 index 00000000..2a2e1ca6 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/vector_long2_insert.spvasm32 @@ -0,0 +1,38 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "vector_long2_insert" + OpName %in_ptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %in_ptr FuncParamAttr NoCapture + OpDecorate %out_ptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%vec_idx_t = OpTypeInt 32 0 +%void_t = OpTypeVoid +%long_t = OpTypeInt 64 0 +%long2_t = OpTypeVector %long_t 2 +%long_ptr_t = OpTypePointer CrossWorkgroup %long_t +%long2_ptr_t = OpTypePointer CrossWorkgroup %long2_t +%func_t = OpTypeFunction %void_t %long_ptr_t %long2_ptr_t %vec_idx_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%in_ptr = OpFunctionParameter %long_ptr_t +%out_ptr = OpFunctionParameter %long2_ptr_t +%vec_idx = OpFunctionParameter %vec_idx_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%in_loc = OpInBoundsPtrAccessChain %long_ptr_t %in_ptr %idx +%in_val = OpLoad %long_t %in_loc +%out_loc = OpInBoundsPtrAccessChain %long2_ptr_t %out_ptr %idx +%tmp_val = OpLoad %long2_t %out_loc +%out_val = OpVectorInsertDynamic %long2_t %tmp_val %in_val %vec_idx + OpStore %out_loc %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/vector_long2_insert.spvasm64 b/test_conformance/spirv_new/spirv_txt/vector_long2_insert.spvasm64 new file mode 100644 index 00000000..dfea0bc8 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/vector_long2_insert.spvasm64 @@ -0,0 +1,41 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "vector_long2_insert" + OpName %in_ptr "in" + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %in_ptr FuncParamAttr NoCapture + OpDecorate %out_ptr FuncParamAttr NoCapture + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%shift_val = OpConstant %idx_t 32 +%vec_idx_t = OpTypeInt 32 0 +%void_t = OpTypeVoid +%long_t = OpTypeInt 64 0 +%long2_t = OpTypeVector %long_t 2 +%long_ptr_t = OpTypePointer CrossWorkgroup %long_t +%long2_ptr_t = OpTypePointer CrossWorkgroup %long2_t +%func_t = OpTypeFunction %void_t %long_ptr_t %long2_ptr_t %vec_idx_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%in_ptr = OpFunctionParameter %long_ptr_t +%out_ptr = OpFunctionParameter %long2_ptr_t +%vec_idx = OpFunctionParameter %vec_idx_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%in_loc = OpInBoundsPtrAccessChain %long_ptr_t %in_ptr %idx +%in_val = OpLoad %long_t %in_loc +%out_loc = OpInBoundsPtrAccessChain %long2_ptr_t %out_ptr %idx +%tmp_val = OpLoad %long2_t %out_loc +%out_val = OpVectorInsertDynamic %long2_t %tmp_val %in_val %vec_idx + OpStore %out_loc %out_val + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/vector_times_scalar_double.spvasm32 b/test_conformance/spirv_new/spirv_txt/vector_times_scalar_double.spvasm32 new file mode 100644 index 00000000..52f4c655 --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/vector_times_scalar_double.spvasm32 @@ -0,0 +1,41 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Float64 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "vector_times_scalar" + OpName %res "res" + OpName %lhs "lhs" + OpName %rhs "rhs" + OpDecorate %attr FuncParamAttr NoCapture +%attr = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %attr %res %lhs %rhs +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%double_t = OpTypeFloat 64 +%double_ptr_t = OpTypePointer CrossWorkgroup %double_t +%double4_t = OpTypeVector %double_t 4 +%double4_ptr_t = OpTypePointer CrossWorkgroup %double4_t +%func_t = OpTypeFunction %void_t %double4_ptr_t %double4_ptr_t %double_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%res = OpFunctionParameter %double4_ptr_t +%lhs = OpFunctionParameter %double4_ptr_t +%rhs = OpFunctionParameter %double_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%lhs_ptr = OpInBoundsPtrAccessChain %double4_ptr_t %lhs %idx +%lhs_val = OpLoad %double4_t %lhs_ptr Aligned 32 +%rhs_ptr = OpInBoundsPtrAccessChain %double_ptr_t %rhs %idx +%rhs_val = OpLoad %double_t %rhs_ptr Aligned 8 +%res_val = OpVectorTimesScalar %double4_t %lhs_val %rhs_val +%res_ptr = OpInBoundsPtrAccessChain %double4_ptr_t %res %idx + OpStore %res_ptr %res_val Aligned 32 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/vector_times_scalar_double.spvasm64 b/test_conformance/spirv_new/spirv_txt/vector_times_scalar_double.spvasm64 new file mode 100644 index 00000000..686b538b --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/vector_times_scalar_double.spvasm64 @@ -0,0 +1,45 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int64 + OpCapability Float64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "vector_times_scalar" + OpName %res "res" + OpName %lhs "lhs" + OpName %rhs "rhs" + OpDecorate %attr FuncParamAttr NoCapture +%attr = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %attr %res %lhs %rhs +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%shift_val = OpConstant %idx_t 32 +%void_t = OpTypeVoid +%double_t = OpTypeFloat 64 +%double_ptr_t = OpTypePointer CrossWorkgroup %double_t +%double4_t = OpTypeVector %double_t 4 +%double4_ptr_t = OpTypePointer CrossWorkgroup %double4_t +%func_t = OpTypeFunction %void_t %double4_ptr_t %double4_ptr_t %double_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%res = OpFunctionParameter %double4_ptr_t +%lhs = OpFunctionParameter %double4_ptr_t +%rhs = OpFunctionParameter %double_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%lhs_ptr = OpInBoundsPtrAccessChain %double4_ptr_t %lhs %idx +%lhs_val = OpLoad %double4_t %lhs_ptr Aligned 32 +%rhs_ptr = OpInBoundsPtrAccessChain %double_ptr_t %rhs %idx +%rhs_val = OpLoad %double_t %rhs_ptr Aligned 8 +%res_val = OpVectorTimesScalar %double4_t %lhs_val %rhs_val +%res_ptr = OpInBoundsPtrAccessChain %double4_ptr_t %res %idx + OpStore %res_ptr %res_val Aligned 32 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/vector_times_scalar_float.spvasm32 b/test_conformance/spirv_new/spirv_txt/vector_times_scalar_float.spvasm32 new file mode 100644 index 00000000..b5ec7f6b --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/vector_times_scalar_float.spvasm32 @@ -0,0 +1,41 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int16 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %func "vector_times_scalar" + OpName %res "res" + OpName %lhs "lhs" + OpName %rhs "rhs" + OpDecorate %attr FuncParamAttr NoCapture +%attr = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %attr %res %lhs %rhs +%idx_t = OpTypeInt 32 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%float4_t = OpTypeVector %float_t 4 +%float4_ptr_t = OpTypePointer CrossWorkgroup %float4_t +%func_t = OpTypeFunction %void_t %float4_ptr_t %float4_ptr_t %float_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%res = OpFunctionParameter %float4_ptr_t +%lhs = OpFunctionParameter %float4_ptr_t +%rhs = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx = OpCompositeExtract %idx_t %idx3 0 +%lhs_ptr = OpInBoundsPtrAccessChain %float4_ptr_t %lhs %idx +%lhs_val = OpLoad %float4_t %lhs_ptr Aligned 16 +%rhs_ptr = OpInBoundsPtrAccessChain %float_ptr_t %rhs %idx +%rhs_val = OpLoad %float_t %rhs_ptr Aligned 4 +%res_val = OpVectorTimesScalar %float4_t %lhs_val %rhs_val +%res_ptr = OpInBoundsPtrAccessChain %float4_ptr_t %res %idx + OpStore %res_ptr %res_val Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/spirv_txt/vector_times_scalar_float.spvasm64 b/test_conformance/spirv_new/spirv_txt/vector_times_scalar_float.spvasm64 new file mode 100644 index 00000000..e450102f --- /dev/null +++ b/test_conformance/spirv_new/spirv_txt/vector_times_scalar_float.spvasm64 @@ -0,0 +1,45 @@ + OpCapability Addresses + OpCapability Linkage + OpCapability Kernel + OpCapability Int16 + OpCapability Int64 + OpMemoryModel Physical64 OpenCL + OpEntryPoint Kernel %func "vector_times_scalar" + OpName %res "res" + OpName %lhs "lhs" + OpName %rhs "rhs" + OpDecorate %attr FuncParamAttr NoCapture +%attr = OpDecorationGroup + OpDecorate %global_id BuiltIn GlobalInvocationId + OpDecorate %global_id Constant + OpDecorate %global_id LinkageAttributes "__spirv_GlobalInvocationId" Import + OpGroupDecorate %attr %res %lhs %rhs +%idx_t = OpTypeInt 64 0 +%idx3_t = OpTypeVector %idx_t 3 +%idx3_ptr_t = OpTypePointer UniformConstant %idx3_t +%shift_val = OpConstant %idx_t 32 +%void_t = OpTypeVoid +%float_t = OpTypeFloat 32 +%float_ptr_t = OpTypePointer CrossWorkgroup %float_t +%float4_t = OpTypeVector %float_t 4 +%float4_ptr_t = OpTypePointer CrossWorkgroup %float4_t +%func_t = OpTypeFunction %void_t %float4_ptr_t %float4_ptr_t %float_ptr_t +%global_id = OpVariable %idx3_ptr_t UniformConstant +%func = OpFunction %void_t None %func_t +%res = OpFunctionParameter %float4_ptr_t +%lhs = OpFunctionParameter %float4_ptr_t +%rhs = OpFunctionParameter %float_ptr_t +%entry = OpLabel +%idx3 = OpLoad %idx3_t %global_id Aligned 0 +%idx_tmp = OpCompositeExtract %idx_t %idx3 0 +%idx_shift = OpShiftLeftLogical %idx_t %idx_tmp %shift_val +%idx = OpShiftRightArithmetic %idx_t %idx_shift %shift_val +%lhs_ptr = OpInBoundsPtrAccessChain %float4_ptr_t %lhs %idx +%lhs_val = OpLoad %float4_t %lhs_ptr Aligned 16 +%rhs_ptr = OpInBoundsPtrAccessChain %float_ptr_t %rhs %idx +%rhs_val = OpLoad %float_t %rhs_ptr Aligned 4 +%res_val = OpVectorTimesScalar %float4_t %lhs_val %rhs_val +%res_ptr = OpInBoundsPtrAccessChain %float4_ptr_t %res %idx + OpStore %res_ptr %res_val Aligned 16 + OpReturn + OpFunctionEnd diff --git a/test_conformance/spirv_new/testBase.h b/test_conformance/spirv_new/testBase.h new file mode 100644 index 00000000..098e896c --- /dev/null +++ b/test_conformance/spirv_new/testBase.h @@ -0,0 +1,37 @@ +/****************************************************************** +Copyright (c) 2016 The Khronos Group Inc. All Rights Reserved. + +This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc. +This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed in whole or in part to +third parties, and may not be reproduced, republished, distributed, transmitted, displayed, +broadcast or otherwise exploited in any manner without the express prior written permission +of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce, +disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe, +in whole or in part other than under the terms of the Khronos Adopters Agreement +or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient. +******************************************************************/ +#pragma once + +#ifndef _testBase_h +#define _testBase_h + +#include "../../test_common/harness/compat.h" +#include "../../test_common/harness/rounding_mode.h" + +#include +#include +#include +#include + +#include "procs.h" + +// Ensure max min macros are undefined - compilation issues when using min max from numeric_limits template class +#if defined( max ) + #undef max +#endif + +#if defined( min ) + #undef min +#endif + +#endif // _testBase_h diff --git a/test_conformance/spirv_new/test_decorate.cpp b/test_conformance/spirv_new/test_decorate.cpp new file mode 100644 index 00000000..80d3b2ba --- /dev/null +++ b/test_conformance/spirv_new/test_decorate.cpp @@ -0,0 +1,602 @@ +/****************************************************************** +Copyright (c) 2016 The Khronos Group Inc. All Rights Reserved. + +This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc. +This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed h_in whole or h_in part to +third parties, and may not be reproduced, republished, distributed, transmitted, displayed, +broadcast or otherwise exploited h_in any manner without the express prior written permission +of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce, +disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe, +h_in whole or h_in part other than under the terms of the Khronos Adopters Agreement +or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient. +******************************************************************/ + +#include "testBase.h" +#include "types.hpp" +#include +#include +#include +#include +#include + +#ifndef isnan +// Ensure isnan is always present as a macro +#define isnan std::isnan +#endif + +long double reference_remainderl(long double x, long double y); +int gIsInRTZMode = 0; +int gDeviceILogb0 = 1; +int gDeviceILogbNaN = 1; +int gCheckTininessBeforeRounding = 1; + + +static int verify_results(cl_device_id deviceID, + cl_context context, + cl_command_queue queue, + const char *kname, + const clProgramWrapper &prog) +{ + const int num = 1 << 20; + std::vector h_lhs(num); + std::vector h_rhs(num); + + cl_int err = 0; + + RandomSeed seed(gRandomSeed); + for (int i = 0; i < num; i++) { + h_lhs[i] = genrand(seed); + h_rhs[i] = genrand(seed); + } + + clKernelWrapper kernel = clCreateKernel(prog, kname, &err); + SPIRV_CHECK_ERROR(err, "Failed to create spv kernel"); + + size_t bytes = sizeof(cl_int) * num; + + clMemWrapper lhs = clCreateBuffer(context, CL_MEM_READ_ONLY, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create in buffer"); + + err = clEnqueueWriteBuffer(queue, lhs, CL_TRUE, 0, bytes, &h_lhs[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy to in buffer"); + + clMemWrapper rhs = clCreateBuffer(context, CL_MEM_READ_ONLY, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create in buffer"); + + err = clEnqueueWriteBuffer(queue, rhs, CL_TRUE, 0, bytes, &h_rhs[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy to in buffer"); + + clMemWrapper res = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create in buffer"); + + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &res); + SPIRV_CHECK_ERROR(err, "Failed to set arg 1"); + + err = clSetKernelArg(kernel, 1, sizeof(cl_mem), &lhs); + SPIRV_CHECK_ERROR(err, "Failed to set arg 2"); + + err = clSetKernelArg(kernel, 2, sizeof(cl_mem), &rhs); + SPIRV_CHECK_ERROR(err, "Failed to set arg 3"); + + size_t global = num; + err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to enqueue cl kernel"); + + std::vector h_res(num); + err = clEnqueueReadBuffer(queue, res, CL_TRUE, 0, bytes, &h_res[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to read to output"); + + for (int i = 0; i < num; i++) { + if (h_res[i] != (h_lhs[i] + h_rhs[i])) { + log_error("Values do not match at location %d\n", i); + return -1; + } + } + return 0; +} + +int test_decorate_full(cl_device_id deviceID, + cl_context context, + cl_command_queue queue, + const char *name) +{ + clProgramWrapper prog; + cl_int err = 0; + err = get_program_with_il(prog, deviceID, context, name); + SPIRV_CHECK_ERROR(err, "Failed to build program"); + + return verify_results(deviceID, context, queue, name, prog); +} + +TEST_SPIRV_FUNC(decorate_restrict) +{ + return test_decorate_full(deviceID, context, queue, "decorate_restrict"); +} + +TEST_SPIRV_FUNC(decorate_aliased) +{ + return test_decorate_full(deviceID, context, queue, "decorate_aliased"); +} + +TEST_SPIRV_FUNC(decorate_alignment) +{ + //TODO: Check for results ? How to ensure buffers are aligned + clProgramWrapper prog; + return get_program_with_il(prog, deviceID, context, "decorate_alignment"); +} + +TEST_SPIRV_FUNC(decorate_constant) +{ + return test_decorate_full(deviceID, context, queue, "decorate_constant"); +} + +TEST_SPIRV_FUNC(decorate_cpacked) +{ + PACKED( + struct packed_struct_t { + cl_int ival; + cl_char cval; + } + ); + + typedef struct packed_struct_t packed_t; + + const int num = 1 << 20; + + std::vector packed(num); + clProgramWrapper prog; + cl_int err = get_program_with_il(prog, deviceID, context, "decorate_cpacked"); + + clKernelWrapper kernel = clCreateKernel(prog, "decorate_cpacked", &err); + SPIRV_CHECK_ERROR(err, "Failed to create spv kernel"); + + size_t bytes = sizeof(packed_t) * num; + + clMemWrapper res = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create in buffer"); + + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &res); + SPIRV_CHECK_ERROR(err, "Failed to set arg 3"); + + size_t global = num; + err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to enqueue cl kernel"); + + std::vector h_res(num); + err = clEnqueueReadBuffer(queue, res, CL_TRUE, 0, bytes, &h_res[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to read to output"); + + for (int i = 0; i < num; i++) { + if (h_res[i].ival != 2100483600 || + h_res[i].cval != 127) { + log_error("Values do not match at location %d\n", i); + return -1; + } + } + + return 0; +} + +template +int verify_saturated_results(cl_device_id deviceID, + cl_context context, + cl_command_queue queue, + const char *kname, + const clProgramWrapper &prog) +{ + if(std::string(kname).find("double") != std::string::npos) { + if(!is_extension_available(deviceID, "cl_khr_fp64")) { + log_info("Extension cl_khr_fp64 not supported; skipping double tests.\n"); + return 0; + } + } + + cl_int err = 0; + + const int num = 1 << 20; + + clKernelWrapper kernel = clCreateKernel(prog, kname, &err); + SPIRV_CHECK_ERROR(err, "Failed to create spv kernel"); + + size_t in_bytes = sizeof(Ti) * num; + size_t out_bytes = sizeof(To) * num; + + std::vector h_lhs(num); + std::vector h_rhs(num); + + To loVal = std::numeric_limits::min(); + To hiVal = std::numeric_limits::max(); + + Tl range = (Tl)(hiVal) - (Tl)(loVal); + + RandomSeed seed(gRandomSeed); + for (int i = 0; i < num; i++) { + h_lhs[i] = genrand(seed) * range; + Tl val = (genrand(seed) % hiVal); + // randomly set some values on rhs to NaN + if (val * 20 < hiVal) { + h_rhs[i] = NAN; + } else { + h_rhs[i] = (Ti)(val); + } + } + + clMemWrapper lhs = clCreateBuffer(context, CL_MEM_READ_ONLY, in_bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create in buffer"); + + err = clEnqueueWriteBuffer(queue, lhs, CL_TRUE, 0, in_bytes, &h_lhs[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy to in buffer"); + + clMemWrapper rhs = clCreateBuffer(context, CL_MEM_READ_ONLY, in_bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create in buffer"); + + err = clEnqueueWriteBuffer(queue, rhs, CL_TRUE, 0, in_bytes, &h_rhs[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy to in buffer"); + + clMemWrapper res = clCreateBuffer(context, CL_MEM_READ_WRITE, out_bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create in buffer"); + + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &res); + SPIRV_CHECK_ERROR(err, "Failed to set arg 1"); + + err = clSetKernelArg(kernel, 1, sizeof(cl_mem), &lhs); + SPIRV_CHECK_ERROR(err, "Failed to set arg 2"); + + err = clSetKernelArg(kernel, 2, sizeof(cl_mem), &rhs); + SPIRV_CHECK_ERROR(err, "Failed to set arg 3"); + + size_t global = num; + err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to enqueue cl kernel"); + + std::vector h_res(num); + err = clEnqueueReadBuffer(queue, res, CL_TRUE, 0, out_bytes, &h_res[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to read to output"); + + for (int i = 0; i < num; i++) { + Tl ival = (Tl)(h_lhs[i] * h_rhs[i]); + To val = (To)std::min(std::max(ival, loVal), hiVal); + + if (isnan(h_rhs[i])) { + val = 0; + } + + if (val != h_res[i]) { + log_error("Value error at %d\n", i); + return -1; + } + } + + return 0; +} + + +template +int test_saturate_full(cl_device_id deviceID, + cl_context context, + cl_command_queue queue, + const char *name, + const char *types) +{ + if(std::string(types).find("double") != std::string::npos) { + if(!is_extension_available(deviceID, "cl_khr_fp64")) { + log_info("Extension cl_khr_fp64 not supported; skipping double tests.\n"); + return 0; + } + } + clProgramWrapper prog; + cl_int err = 0; + err = get_program_with_il(prog, deviceID, context, name); + SPIRV_CHECK_ERROR(err, "Failed to build program"); + return verify_saturated_results(deviceID, context, queue, name, prog); +} + +#define TEST_SATURATED_CONVERSION(Ti, Tl, To) \ + TEST_SPIRV_FUNC(decorate_saturated_conversion_##To) \ + { \ + typedef cl_##Ti cl_Ti; \ + typedef cl_##Tl cl_Tl; \ + typedef cl_##To cl_To; \ + return test_saturate_full \ + (deviceID, context, queue, \ + "decorate_saturated_conversion_" #To, \ + #Ti #Tl #To); \ + } \ + +TEST_SATURATED_CONVERSION(float, int, char) +TEST_SATURATED_CONVERSION(float, uint, uchar) +TEST_SATURATED_CONVERSION(float, int, short) +TEST_SATURATED_CONVERSION(float, uint, ushort) +TEST_SATURATED_CONVERSION(double, long, int) +TEST_SATURATED_CONVERSION(double, ulong, uint) + +int test_image_decorate(cl_device_id deviceID, + cl_context context, + cl_command_queue queue, + const char *name) +{ + const int width = 4096; + const int height = 4096; + + std::vector src(width * height); + RandomSeed seed(gRandomSeed); + + for (auto &val : src) { + val = genrand(seed); + } + + cl_image_format imageFormat; + imageFormat.image_channel_data_type = CL_UNSIGNED_INT32; + imageFormat.image_channel_order = CL_RGBA; + + cl_image_desc desc; + desc.image_type = CL_MEM_OBJECT_IMAGE2D; + desc.image_width = width; + desc.image_height = height; + desc.image_depth = 0; + desc.image_array_size = 0; + desc.image_row_pitch = 0; // Automatically calculate the pitch + desc.image_slice_pitch = 0; // Not needed for 2D + desc.num_mip_levels = 0; + desc.num_samples = 0; + desc.mem_object = NULL; + + cl_int err = CL_SUCCESS; + + clMemWrapper srcImage = clCreateImage(context, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR, + &imageFormat, &desc, + &src[0], &err); + SPIRV_CHECK_ERROR(err, "Failed to create image object"); + + size_t bytes = src.size() * sizeof(cl_uint4); + clMemWrapper dstBuffer = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create image object"); + + clProgramWrapper prog; + err = get_program_with_il(prog, deviceID, context, name); + SPIRV_CHECK_ERROR(err, "Failed to build program"); + + clKernelWrapper kernel = clCreateKernel(prog, name, &err); + SPIRV_CHECK_ERROR(err, "Failed to create spv kernel"); + + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &dstBuffer); + SPIRV_CHECK_ERROR(err, "Failed to set arg 2 of the kernel"); + + err = clSetKernelArg(kernel, 1, sizeof(cl_mem), &srcImage); + SPIRV_CHECK_ERROR(err, "Failed to set arg 1 of the kernel"); + + size_t global[] = {width, height}; + err = clEnqueueNDRangeKernel(queue, kernel, 2, NULL, global, NULL, 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to enqueue kernel"); + + std::vector dst(src.size()); + err = clEnqueueReadBuffer(queue, dstBuffer, CL_TRUE, 0, bytes, &dst[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy data back to host"); + + for (int j = 0; j < height; j++) { + for (int i = 0; i < width; i++) { + int srcIdx = j * width + i; + int dstIdx = i * height + j; + if (dst[dstIdx] != src[srcIdx]) { + log_error("Values do not match at location (%d, %d) of src\n", i, j); + } + } + } + + return 0; +} + +#define TEST_SPIRV_IMAGE_DECORATE(type) \ + TEST_SPIRV_FUNC(decorate_##type) \ + { \ + return test_image_decorate(deviceID, context, queue, \ + "decorate_" #type); \ + } \ + +TEST_SPIRV_IMAGE_DECORATE(volatile) +TEST_SPIRV_IMAGE_DECORATE(coherent) +TEST_SPIRV_IMAGE_DECORATE(nonwritable) + +TEST_SPIRV_FUNC(decorate_nonreadable) +{ + const char *name = "decorate_nonreadable"; + const int width = 4096; + const int height = 4096; + cl_int err = CL_SUCCESS; + + std::vector src(width * height); + RandomSeed seed(gRandomSeed); + + for (auto &val : src) { + val = genrand(seed); + } + + size_t bytes = src.size() * sizeof(cl_uint4); + clMemWrapper srcBuffer = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create image object"); + + err = clEnqueueWriteBuffer(queue, srcBuffer, CL_TRUE, 0, bytes, &src[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy data back to host"); + + cl_image_format imageFormat; + imageFormat.image_channel_data_type = CL_UNSIGNED_INT32; + imageFormat.image_channel_order = CL_RGBA; + + cl_image_desc desc; + desc.image_type = CL_MEM_OBJECT_IMAGE2D; + desc.image_width = height; + desc.image_height = width; + desc.image_depth = 0; + desc.image_array_size = 0; + desc.image_row_pitch = 0; // Automatically calculate the pitch + desc.image_slice_pitch = 0; // Not needed for 2D + desc.num_mip_levels = 0; + desc.num_samples = 0; + desc.mem_object = NULL; + + + clMemWrapper dstImage = clCreateImage(context, CL_MEM_WRITE_ONLY, + &imageFormat, &desc, + NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create image object"); + + clProgramWrapper prog; + err = get_program_with_il(prog, deviceID, context, name); + SPIRV_CHECK_ERROR(err, "Failed to build program"); + + clKernelWrapper kernel = clCreateKernel(prog, name, &err); + SPIRV_CHECK_ERROR(err, "Failed to create spv kernel"); + + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &dstImage); + SPIRV_CHECK_ERROR(err, "Failed to set arg 2 of the kernel"); + + err = clSetKernelArg(kernel, 1, sizeof(cl_mem), &srcBuffer); + SPIRV_CHECK_ERROR(err, "Failed to set arg 1 of the kernel"); + + size_t global[] = {width, height}; + err = clEnqueueNDRangeKernel(queue, kernel, 2, NULL, global, NULL, 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to enqueue kernel"); + + std::vector dst(src.size()); + size_t origin[] = {0, 0, 0}; + size_t region[] = {height, width, 1}; + err = clEnqueueReadImage(queue, dstImage, CL_TRUE, origin, region, 0, 0, &dst[0], 0, NULL, NULL); + + + for (int j = 0; j < height; j++) { + for (int i = 0; i < width; i++) { + int srcIdx = j * width + i; + int dstIdx = i * height + j; + if (dst[dstIdx] != src[srcIdx]) { + log_error("Values do not match at location (%d, %d) of src\n", i, j); + } + } + } + + return 0; +} + +template +int test_fp_rounding(cl_device_id deviceID, + cl_context context, + cl_command_queue queue, + const char *name, + std::vector &h_in, + std::vector &h_out) +{ + if(std::string(name).find("double") != std::string::npos) { + if(!is_extension_available(deviceID, "cl_khr_fp64")) { + log_info("Extension cl_khr_fp64 not supported; skipping double tests.\n"); + return 0; + } + } + + const int num = h_in.size(); + const size_t in_bytes = num * sizeof(Ti); + const size_t out_bytes = num * sizeof(To); + cl_int err = 0; + + clMemWrapper in = clCreateBuffer(context, CL_MEM_READ_ONLY, in_bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create input buffer"); + + clMemWrapper out = clCreateBuffer(context, CL_MEM_READ_ONLY, out_bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create output buffer"); + + err = clEnqueueWriteBuffer(queue, in, CL_TRUE, 0, in_bytes, &h_in[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to write to input"); + + clProgramWrapper prog; + err = get_program_with_il(prog, deviceID, context, name); + SPIRV_CHECK_ERROR(err, "Failed to build program"); + + clKernelWrapper kernel = clCreateKernel(prog, name, &err); + SPIRV_CHECK_ERROR(err, "Failed to create spv kernel"); + + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &out); + SPIRV_CHECK_ERROR(err, "Failed to set arg 2"); + + err = clSetKernelArg(kernel, 1, sizeof(cl_mem), &in); + SPIRV_CHECK_ERROR(err, "Failed to set arg 1"); + + size_t global = num; + err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL); + + std::vector h_res(num); + err = clEnqueueReadBuffer(queue, out, CL_TRUE, 0, out_bytes, &h_res[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to read from output"); + + for (int i = 0; i < num; i++) { + if (h_res[i] != h_out[i]) { + log_error("Values do not match at location %d. Original :%lf, Expected: %ld, Found %ld\n", + i, h_in[i], h_out[i], h_res[i]); + return -1; + } + } + + return 0; +} + +template +inline To round_to_zero(Ti in) +{ + To out = (To)(in); + return out; +} + +template +int sign(T val) +{ + if (val < 0) return -1; + if (val > 0) return 1; + return 0; +} + +template +inline To round_to_even(Ti in) +{ + // https://en.wikipedia.org/wiki/Rounding#Round_half_to_even + return std::floor(in + 0.5) - 1 + std::abs(sign(reference_remainderl((long double)in, 2) - 0.5)); +} + +template +inline To round_to_posinf(Ti in) +{ + To out = std::ceil(in); + return out; +} + +template +inline To round_to_neginf(Ti in) +{ + To out = std::floor(in); + return out; +} + +#define TEST_SPIRV_FP_ROUNDING_DECORATE(name, func, Ti, To) \ + TEST_SPIRV_FUNC(decorate_fp_rounding_mode_##name##_##Ti##_##To) \ + { \ + typedef cl_##Ti clTi; \ + typedef cl_##To clTo; \ + const int num = 1 << 16; \ + std::vector in(num); \ + std::vector out(num); \ + RandomSeed seed(gRandomSeed); \ + \ + for (int i = 0; i < num; i++) { \ + in[i] = num * genrand(seed) - num/2; \ + out[i] = func(in[i]); \ + } \ + const char *name = "decorate_rounding_" #name "_" #Ti "_" #To; \ + return test_fp_rounding(deviceID, context, queue, \ + name, in, out); \ + } \ + +TEST_SPIRV_FP_ROUNDING_DECORATE(rte, round_to_even, float, int); +TEST_SPIRV_FP_ROUNDING_DECORATE(rtz, round_to_zero, float, int); +TEST_SPIRV_FP_ROUNDING_DECORATE(rtp, round_to_posinf, float, int); +TEST_SPIRV_FP_ROUNDING_DECORATE(rtn, round_to_neginf, float, int); + +TEST_SPIRV_FP_ROUNDING_DECORATE(rte, round_to_even, double, long); +TEST_SPIRV_FP_ROUNDING_DECORATE(rtz, round_to_zero, double, long); +TEST_SPIRV_FP_ROUNDING_DECORATE(rtp, round_to_posinf, double, long); +TEST_SPIRV_FP_ROUNDING_DECORATE(rtn, round_to_neginf, double, long); diff --git a/test_conformance/spirv_new/test_linkage.cpp b/test_conformance/spirv_new/test_linkage.cpp new file mode 100644 index 00000000..93972c93 --- /dev/null +++ b/test_conformance/spirv_new/test_linkage.cpp @@ -0,0 +1,117 @@ +/****************************************************************** +Copyright (c) 2016 The Khronos Group Inc. All Rights Reserved. + +This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc. +This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed h_in whole or h_in part to +third parties, and may not be reproduced, republished, distributed, transmitted, displayed, +broadcast or otherwise exploited h_in any manner without the express prior written permission +of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce, +disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe, +h_in whole or h_in part other than under the terms of the Khronos Adopters Agreement +or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient. +******************************************************************/ + +#include "testBase.h" +#include "types.hpp" + +#include +#include + +static int test_linkage_compile(cl_device_id deviceID, + cl_context context, + cl_command_queue queue, + const char *fname, + clProgramWrapper &prog) +{ + cl_int err = CL_SUCCESS; + std::vector buffer_vec = readSPIRV(fname); + + int file_bytes = buffer_vec.size(); + if (file_bytes == 0) { + log_error("File not found\n"); + return -1; + } + unsigned char *buffer = &buffer_vec[0]; + + prog = clCreateProgramWithIL(context, buffer, file_bytes, &err); + SPIRV_CHECK_ERROR(err, "Failed to create program with clCreateProgramWithIL"); + + err = clCompileProgram(prog, 1, &deviceID, + NULL, // options + 0, // num headers + NULL, // input headers + NULL, // header include names + NULL, // callback + NULL // User data + ); + SPIRV_CHECK_ERROR(err, "Failed to compile spv program"); + return 0; +} + +TEST_SPIRV_FUNC(linkage_export_function_compile) +{ + clProgramWrapper prog; + return test_linkage_compile(deviceID, context, queue, "linkage_export", prog); +} + +TEST_SPIRV_FUNC(linkage_import_function_compile) +{ + clProgramWrapper prog; + return test_linkage_compile(deviceID, context, queue, "linkage_import", prog); +} + +TEST_SPIRV_FUNC(linkage_import_function_link) +{ + int err = 0; + + clProgramWrapper prog_export; + err = test_linkage_compile(deviceID, context, queue, "linkage_export", prog_export); + SPIRV_CHECK_ERROR(err, "Failed to compile export program"); + + clProgramWrapper prog_import; + err = test_linkage_compile(deviceID, context, queue, "linkage_import", prog_import); + SPIRV_CHECK_ERROR(err, "Failed to compile import program"); + + cl_program progs[] = {prog_export, prog_import}; + + clProgramWrapper prog = clLinkProgram(context, 1, &deviceID, NULL, 2, progs, NULL, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to link programs"); + + clKernelWrapper kernel = clCreateKernel(prog, "test_linkage", &err); + SPIRV_CHECK_ERROR(err, "Failed to create spv kernel"); + + const int num = 1 << 20; + std::vector h_in(num); + RandomSeed seed(gRandomSeed); + for (int i = 0; i < num; i++) { + h_in[i] = genrand(seed); + } + + size_t bytes = sizeof(cl_float) * num; + clMemWrapper in = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create in buffer"); + + err = clEnqueueWriteBuffer(queue, in, CL_TRUE, 0, bytes, &h_in[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy to in buffer"); + + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &in); + SPIRV_CHECK_ERROR(err, "Failed to set arg 1"); + + + size_t global = num; + err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to enqueue cl kernel"); + + std::vector h_out(num); + err = clEnqueueReadBuffer(queue, in, CL_TRUE, 0, bytes, &h_out[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to read to output"); + + for (int i = 0; i < num; i++) { + if (h_out[i] != -h_in[i]) { + log_error("Values do not match at location %d\n", i); + return -1; + } + } + + return 0; +} diff --git a/test_conformance/spirv_new/test_op_atomic.cpp b/test_conformance/spirv_new/test_op_atomic.cpp new file mode 100644 index 00000000..e4b6feb1 --- /dev/null +++ b/test_conformance/spirv_new/test_op_atomic.cpp @@ -0,0 +1,99 @@ +/****************************************************************** +Copyright (c) 2016 The Khronos Group Inc. All Rights Reserved. + +This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc. +This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed in whole or in part to +third parties, and may not be reproduced, republished, distributed, transmitted, displayed, +broadcast or otherwise exploited in any manner without the express prior written permission +of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce, +disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe, +in whole or in part other than under the terms of the Khronos Adopters Agreement +or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient. +******************************************************************/ + +#include "testBase.h" +#include "types.hpp" + +template +int test_atomic(cl_device_id deviceID, cl_context context, + cl_command_queue queue, const char *name, + const int num, + bool is_inc) +{ + clProgramWrapper prog; + cl_int err = get_program_with_il(prog, deviceID, context, name); + SPIRV_CHECK_ERROR(err, "Failed to build program"); + + clKernelWrapper kernel = clCreateKernel(prog, name, &err); + SPIRV_CHECK_ERROR(err, "Failed to create kernel"); + + size_t bytes = num * sizeof(T); + clMemWrapper ctr_mem = clCreateBuffer(context, CL_MEM_READ_WRITE, sizeof(T), NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create buffer"); + + T initial, result; + + if (is_inc) { + initial = 0; + result = num; + } else { + initial = num; + result = 0; + } + + err = clEnqueueWriteBuffer(queue, ctr_mem, CL_TRUE, 0, sizeof(T), &initial, 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy to lhs buffer"); + + clMemWrapper val_mem = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create buffer"); + + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &val_mem); + SPIRV_CHECK_ERROR(err, "Failed to set kernel argument"); + + err = clSetKernelArg(kernel, 1, sizeof(cl_mem), &ctr_mem); + SPIRV_CHECK_ERROR(err, "Failed to set kernel argument"); + + size_t global = num; + err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to enqueue kernel"); + + T count = 0; + err = clEnqueueReadBuffer(queue, ctr_mem, CL_TRUE, 0, sizeof(T), &count, 0, NULL, NULL); + + if (count != result) { + log_error("Counter value does not match. Expected: %d, Found: %d\n", result, (int)count); + return -1; + } + + std::vector flags(num, 0); + std::vector locs(num, -1); + std::vector host(num); + err = clEnqueueReadBuffer(queue, val_mem, CL_TRUE, 0, bytes, &host[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy from cl_buffer"); + + for (int i = 0; i < num; i++) { + T idx = host[i] - (is_inc ? 0 : 1); + if (flags[idx] == 1) { + log_error("Atomic inc value is repeated at %d and %d\n", locs[idx], i); + return -1; + } else { + flags[idx] = 1; + locs[idx] = i; + } + } + return 0; +} + +TEST_SPIRV_FUNC(op_atomic_inc_global) +{ + int num = 1 << 16; + return test_atomic(deviceID, context, queue, + "atomic_inc_global", num, true); +} + +TEST_SPIRV_FUNC(op_atomic_dec_global) +{ + int num = 1 << 16; + return test_atomic(deviceID, context, queue, + "atomic_dec_global", num, false); +} diff --git a/test_conformance/spirv_new/test_op_branch.cpp b/test_conformance/spirv_new/test_op_branch.cpp new file mode 100644 index 00000000..ec61afd9 --- /dev/null +++ b/test_conformance/spirv_new/test_op_branch.cpp @@ -0,0 +1,82 @@ +/****************************************************************** +Copyright (c) 2016 The Khronos Group Inc. All Rights Reserved. + +This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc. +This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed in whole or in part to +third parties, and may not be reproduced, republished, distributed, transmitted, displayed, +broadcast or otherwise exploited in any manner without the express prior written permission +of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce, +disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe, +in whole or in part other than under the terms of the Khronos Adopters Agreement +or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient. +******************************************************************/ + +#include "testBase.h" +#include "types.hpp" + +template +int test_branch_simple(cl_device_id deviceID, cl_context context, + cl_command_queue queue, const char *name, + std::vector &results, + bool (*notEqual)(const T&, const T&) = isNotEqual) +{ + clProgramWrapper prog; + cl_int err = get_program_with_il(prog, deviceID, context, name); + SPIRV_CHECK_ERROR(err, "Failed to build program"); + + clKernelWrapper kernel = clCreateKernel(prog, name, &err); + SPIRV_CHECK_ERROR(err, "Failed to create kernel"); + + int num = (int)results.size(); + + size_t bytes = num * sizeof(T); + clMemWrapper in_mem = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create buffer"); + + err = clEnqueueWriteBuffer(queue, in_mem, CL_TRUE, 0, bytes, &results[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy to lhs buffer"); + + clMemWrapper out_mem = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create buffer"); + + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &in_mem); + SPIRV_CHECK_ERROR(err, "Failed to set kernel argument"); + + err = clSetKernelArg(kernel, 1, sizeof(cl_mem), &out_mem); + SPIRV_CHECK_ERROR(err, "Failed to set kernel argument"); + + size_t global = num; + err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to enqueue kernel"); + + std::vector host(num); + err = clEnqueueReadBuffer(queue, out_mem, CL_TRUE, 0, bytes, &host[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy from cl_buffer"); + + for (int i = 0; i < num; i++) { + if (notEqual(host[i], results[i])) { + log_error("Values do not match at location %d\n", i); + return -1; + } + } + return 0; +} + +#define TEST_BRANCH_SIMPLE(NAME) \ + TEST_SPIRV_FUNC(op_##NAME##_simple) \ + { \ + RandomSeed seed(gRandomSeed); \ + int num = 1 << 10; \ + std::vector results(num); \ + for (int i = 0; i < num; i++) { \ + results[i] = genrand(seed); \ + } \ + return test_branch_simple(deviceID, context, queue, \ + #NAME "_simple", \ + results); \ + } \ + + +TEST_BRANCH_SIMPLE(label) +TEST_BRANCH_SIMPLE(branch) +TEST_BRANCH_SIMPLE(unreachable) diff --git a/test_conformance/spirv_new/test_op_branch_conditional.cpp b/test_conformance/spirv_new/test_op_branch_conditional.cpp new file mode 100644 index 00000000..ad94b824 --- /dev/null +++ b/test_conformance/spirv_new/test_op_branch_conditional.cpp @@ -0,0 +1,106 @@ +/****************************************************************** +Copyright (c) 2016 The Khronos Group Inc. All Rights Reserved. + +This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc. +This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed in whole or in part to +third parties, and may not be reproduced, republished, distributed, transmitted, displayed, +broadcast or otherwise exploited in any manner without the express prior written permission +of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce, +disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe, +in whole or in part other than under the terms of the Khronos Adopters Agreement +or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient. +******************************************************************/ + +#include "testBase.h" +#include "types.hpp" + +#include +#include + + +template +int test_branch_conditional(cl_device_id deviceID, + cl_context context, + cl_command_queue queue, + const char *name, + const std::vector &h_lhs, + const std::vector &h_rhs, + const std::vector &h_ref) +{ + + cl_int err = CL_SUCCESS; + int num = (int)h_lhs.size(); + size_t bytes = num * sizeof(T); + + clMemWrapper lhs = clCreateBuffer(context, CL_MEM_READ_ONLY, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create lhs buffer"); + + err = clEnqueueWriteBuffer(queue, lhs, CL_TRUE, 0, bytes, &h_lhs[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy to lhs buffer"); + + clMemWrapper rhs = clCreateBuffer(context, CL_MEM_READ_ONLY, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create rhs buffer"); + + err = clEnqueueWriteBuffer(queue, rhs, CL_TRUE, 0, bytes, &h_rhs[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy to rhs buffer"); + + clProgramWrapper prog; + err = get_program_with_il(prog, deviceID, context, name); + SPIRV_CHECK_ERROR(err, "Failed to build spv program"); + + clKernelWrapper kernel = clCreateKernel(prog, name, &err); + SPIRV_CHECK_ERROR(err, "Failed to create spv kernel"); + + clMemWrapper res = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create res buffer"); + + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &res); + SPIRV_CHECK_ERROR(err, "Failed to set arg 0"); + + err = clSetKernelArg(kernel, 1, sizeof(cl_mem), &lhs); + SPIRV_CHECK_ERROR(err, "Failed to set arg 1"); + + err = clSetKernelArg(kernel, 2, sizeof(cl_mem), &rhs); + SPIRV_CHECK_ERROR(err, "Failed to set arg 2"); + + size_t global = num; + err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to enqueue cl kernel"); + + std::vector h_res(num); + err = clEnqueueReadBuffer(queue, res, CL_TRUE, 0, bytes, &h_res[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to read from ref"); + + for (int i = 0; i < num; i++) { + if (h_res[i] != h_ref[i]) { + log_error("Values do not match at location %d\n", i); + return -1; + } + } + return 0; +} + +#define TEST_BRANCH_CONDITIONAL(name) \ + TEST_SPIRV_FUNC(op_##name) \ + { \ + const int num = 1 << 10; \ + RandomSeed seed(gRandomSeed); \ + \ + std::vector lhs(num); \ + std::vector rhs(num); \ + std::vector out(num); \ + \ + for (int i = 0; i < num; i++) { \ + lhs[i] = genrand(seed); \ + rhs[i] = genrand(seed); \ + out[i] = lhs[i] < rhs[i] ? \ + (rhs[i] - lhs[i]) : (lhs[i] - rhs[i]); \ + } \ + \ + return test_branch_conditional(deviceID, context, queue, \ + #name, \ + lhs, rhs, out); \ + } \ + +TEST_BRANCH_CONDITIONAL(branch_conditional) +TEST_BRANCH_CONDITIONAL(branch_conditional_weighted) diff --git a/test_conformance/spirv_new/test_op_composite_construct.cpp b/test_conformance/spirv_new/test_op_composite_construct.cpp new file mode 100644 index 00000000..d07ebd3f --- /dev/null +++ b/test_conformance/spirv_new/test_op_composite_construct.cpp @@ -0,0 +1,74 @@ +/****************************************************************** +Copyright (c) 2016 The Khronos Group Inc. All Rights Reserved. + +This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc. +This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed in whole or in part to +third parties, and may not be reproduced, republished, distributed, transmitted, displayed, +broadcast or otherwise exploited in any manner without the express prior written permission +of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce, +disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe, +in whole or in part other than under the terms of the Khronos Adopters Agreement +or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient. +******************************************************************/ + +#include "testBase.h" +#include "types.hpp" + +template +int test_composite_construct(cl_device_id deviceID, cl_context context, + cl_command_queue queue, const char *name, + std::vector &results, + bool (*notEqual)(const T&, const T&) = isNotEqual) +{ + clProgramWrapper prog; + cl_int err = get_program_with_il(prog, deviceID, context, name); + SPIRV_CHECK_ERROR(err, "Failed to build program"); + + clKernelWrapper kernel = clCreateKernel(prog, name, &err); + SPIRV_CHECK_ERROR(err, "Failed to create kernel"); + + int num = (int)results.size(); + + size_t bytes = num * sizeof(T); + clMemWrapper mem = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create buffer"); + + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &mem); + SPIRV_CHECK_ERROR(err, "Failed to set kernel argument"); + + size_t global = num; + err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to enqueue kernel"); + + std::vector host(num); + err = clEnqueueReadBuffer(queue, mem, CL_TRUE, 0, bytes, &host[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy from cl_buffer"); + + for (int i = 0; i < num; i++) { + if (notEqual(host[i], results[i])) { + log_error("Values do not match at location %d\n", i); + return -1; + } + } + return 0; +} + +TEST_SPIRV_FUNC(op_composite_construct_int4) +{ + cl_int4 value = {123, 122, 121, 119}; + std::vector results(256, value); + return test_composite_construct(deviceID, context, queue, "composite_construct_int4", results); +} + +TEST_SPIRV_FUNC(op_composite_construct_struct) +{ + typedef AbstractStruct2 CustomType1; + typedef AbstractStruct2 CustomType2; + + CustomType1 value1 = {2100483600, 128}; + cl_int2 intvals = {2100480000, 2100480000}; + CustomType2 value2 = {intvals, value1}; + + std::vector results(256, value2); + return test_composite_construct(deviceID, context, queue, "composite_construct_struct", results); +} diff --git a/test_conformance/spirv_new/test_op_constant.cpp b/test_conformance/spirv_new/test_op_constant.cpp new file mode 100644 index 00000000..afffdc35 --- /dev/null +++ b/test_conformance/spirv_new/test_op_constant.cpp @@ -0,0 +1,147 @@ +/****************************************************************** +Copyright (c) 2016 The Khronos Group Inc. All Rights Reserved. + +This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc. +This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed in whole or in part to +third parties, and may not be reproduced, republished, distributed, transmitted, displayed, +broadcast or otherwise exploited in any manner without the express prior written permission +of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce, +disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe, +in whole or in part other than under the terms of the Khronos Adopters Agreement +or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient. +******************************************************************/ + +#include "testBase.h" +#include "types.hpp" + + + +template +int test_constant(cl_device_id deviceID, cl_context context, + cl_command_queue queue, const char *name, + std::vector &results, + bool (*notEqual)(const T&, const T&) = isNotEqual) +{ + if(std::string(name).find("double") != std::string::npos) { + if(!is_extension_available(deviceID, "cl_khr_fp64")) { + log_info("Extension cl_khr_fp64 not supported; skipping double tests.\n"); + return 0; + } + } + clProgramWrapper prog; + cl_int err = get_program_with_il(prog, deviceID, context, name); + SPIRV_CHECK_ERROR(err, "Failed to build program"); + + clKernelWrapper kernel = clCreateKernel(prog, name, &err); + SPIRV_CHECK_ERROR(err, "Failed to create kernel"); + + int num = (int)results.size(); + + size_t bytes = num * sizeof(T); + clMemWrapper mem = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create buffer"); + + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &mem); + SPIRV_CHECK_ERROR(err, "Failed to set kernel argument"); + + size_t global = num; + err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to enqueue kernel"); + + std::vector host(num); + err = clEnqueueReadBuffer(queue, mem, CL_TRUE, 0, bytes, &host[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy from cl_buffer"); + + for (int i = 0; i < num; i++) { + if (notEqual(host[i], results[i])) { + log_error("Values do not match at location %d\n", i); + return -1; + } + } + return 0; +} + +#define TEST_CONSTANT(NAME, type, value) \ + TEST_SPIRV_FUNC(op_constant_##NAME##_simple) \ + { \ + std::vector results(1024, (type)value); \ + return test_constant(deviceID, context, queue, \ + "constant_" #NAME "_simple", \ + results); \ + } \ + +// Boolean tests +TEST_CONSTANT(true , cl_int , 1 ) +TEST_CONSTANT(false , cl_int , 0 ) + +// Integer tests +TEST_CONSTANT(int , cl_int , 123 ) +TEST_CONSTANT(uint , cl_uint , 54321 ) +TEST_CONSTANT(char , cl_char , 20 ) +TEST_CONSTANT(uchar , cl_uchar , 19 ) +TEST_CONSTANT(ushort, cl_ushort, 65000 ) +TEST_CONSTANT(long , cl_long , 34359738368L ) +TEST_CONSTANT(ulong , cl_ulong , 9223372036854775810UL) + +#ifdef __GNUC__ +// std::vector is causing compilation errors on GCC 5.3 (works on gcc 4.8) +// Needs further investigation + TEST_CONSTANT(short , int16_t , 32000 ) +#else +TEST_CONSTANT(short , cl_short , 32000 ) +#endif + +// Float tests +TEST_CONSTANT(float , cl_float , 3.1415927 ) +TEST_CONSTANT(double , cl_double , 3.141592653589793) + +TEST_SPIRV_FUNC(op_constant_int4_simple) +{ + cl_int4 value = {123, 122, 121, 119}; + std::vector results(256, value); + return test_constant(deviceID, context, queue, "constant_int4_simple", results); +} + +TEST_SPIRV_FUNC(op_constant_int3_simple) +{ + cl_int3 value = {123, 122, 121, 0}; + std::vector results(256, value); + return test_constant(deviceID, context, queue, "constant_int3_simple", + results, isVectorNotEqual); +} + +TEST_SPIRV_FUNC(op_constant_struct_int_float_simple) +{ + AbstractStruct2 value = {1024, 3.1415}; + std::vector > results(256, value); + return test_constant(deviceID, context, queue, "constant_struct_int_float_simple", results); +} + +TEST_SPIRV_FUNC(op_constant_struct_int_char_simple) +{ + AbstractStruct2 value = {2100483600, 128}; + std::vector > results(256, value); + return test_constant(deviceID, context, queue, "constant_struct_int_char_simple", results); +} + +TEST_SPIRV_FUNC(op_constant_struct_struct_simple) +{ + typedef AbstractStruct2 CustomType1; + typedef AbstractStruct2 CustomType2; + + CustomType1 value1 = {2100483600, 128}; + cl_int2 intvals = {2100480000, 2100480000}; + CustomType2 value2 = {intvals, value1}; + + std::vector results(256, value2); + return test_constant(deviceID, context, queue, "constant_struct_struct_simple", results); +} + +TEST_SPIRV_FUNC(op_constant_half_simple) +{ + PASSIVE_REQUIRE_FP16_SUPPORT(deviceID); + std::vector results(1024, 3.25); + return test_constant(deviceID, context, queue, + "constant_half_simple", + results); +} diff --git a/test_conformance/spirv_new/test_op_copy_object.cpp b/test_conformance/spirv_new/test_op_copy_object.cpp new file mode 100644 index 00000000..b2b99955 --- /dev/null +++ b/test_conformance/spirv_new/test_op_copy_object.cpp @@ -0,0 +1,143 @@ +/****************************************************************** +Copyright (c) 2016 The Khronos Group Inc. All Rights Reserved. + +This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc. +This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed in whole or in part to +third parties, and may not be reproduced, republished, distributed, transmitted, displayed, +broadcast or otherwise exploited in any manner without the express prior written permission +of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce, +disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe, +in whole or in part other than under the terms of the Khronos Adopters Agreement +or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient. +******************************************************************/ + +#include "testBase.h" +#include "types.hpp" + + + +template +int test_copy(cl_device_id deviceID, cl_context context, + cl_command_queue queue, const char *name, + std::vector &results, + bool (*notEqual)(const T&, const T&) = isNotEqual) +{ + if(std::string(name).find("double") != std::string::npos) { + if(!is_extension_available(deviceID, "cl_khr_fp64")) { + log_info("Extension cl_khr_fp64 not supported; skipping double tests.\n"); + return 0; + } + } + clProgramWrapper prog; + cl_int err = get_program_with_il(prog, deviceID, context, name); + SPIRV_CHECK_ERROR(err, "Failed to build program"); + + clKernelWrapper kernel = clCreateKernel(prog, name, &err); + SPIRV_CHECK_ERROR(err, "Failed to create kernel"); + + int num = (int)results.size(); + + size_t bytes = num * sizeof(T); + clMemWrapper mem = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create buffer"); + + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &mem); + SPIRV_CHECK_ERROR(err, "Failed to set kernel argument"); + + size_t global = num; + err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to enqueue kernel"); + + std::vector host(num); + err = clEnqueueReadBuffer(queue, mem, CL_TRUE, 0, bytes, &host[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy from cl_buffer"); + + for (int i = 0; i < num; i++) { + if (notEqual(host[i], results[i])) { + log_error("Values do not match at location %d\n", i); + return -1; + } + } + return 0; +} + +#define TEST_COPY(NAME, type, value) \ + TEST_SPIRV_FUNC(op_copy_##NAME##_simple) \ + { \ + std::vector results(1024, (type)value); \ + return test_copy(deviceID, context, queue, \ + "copy_" #NAME "_simple", \ + results); \ + } \ + +// Integer tests +TEST_COPY(int , cl_int , 123 ) +TEST_COPY(uint , cl_uint , 54321 ) +TEST_COPY(char , cl_char , 20 ) +TEST_COPY(uchar , cl_uchar , 19 ) +TEST_COPY(ushort, cl_ushort, 65000 ) +TEST_COPY(long , cl_long , 34359738368L ) +TEST_COPY(ulong , cl_ulong , 9223372036854775810UL) + +#ifdef __GNUC__ +// std::vector is causing compilation errors on GCC 5.3 (works on gcc 4.8) +// Needs further investigation +TEST_COPY(short , int16_t , 32000 ) +#else +TEST_COPY(short , cl_short , 32000 ) +#endif + +// Float tests +TEST_COPY(float , cl_float , 3.1415927 ) +TEST_COPY(double , cl_double , 3.141592653589793) + +TEST_SPIRV_FUNC(op_copy_int4_simple) +{ + cl_int4 value = {123, 122, 121, 119}; + std::vector results(256, value); + return test_copy(deviceID, context, queue, "copy_int4_simple", results); +} + +TEST_SPIRV_FUNC(op_copy_int3_simple) +{ + cl_int3 value = {123, 122, 121, 0}; + std::vector results(256, value); + return test_copy(deviceID, context, queue, "copy_int3_simple", + results, isVectorNotEqual); +} + +TEST_SPIRV_FUNC(op_copy_struct_int_float_simple) +{ + AbstractStruct2 value = {1024, 3.1415}; + std::vector > results(256, value); + return test_copy(deviceID, context, queue, "copy_struct_int_float_simple", results); +} + +TEST_SPIRV_FUNC(op_copy_struct_int_char_simple) +{ + AbstractStruct2 value = {2100483600, 128}; + std::vector > results(256, value); + return test_copy(deviceID, context, queue, "copy_struct_int_char_simple", results); +} + +TEST_SPIRV_FUNC(op_copy_struct_struct_simple) +{ + typedef AbstractStruct2 CustomType1; + typedef AbstractStruct2 CustomType2; + + CustomType1 value1 = {2100483600, 128}; + cl_int2 intvals = {2100480000, 2100480000}; + CustomType2 value2 = {intvals, value1}; + + std::vector results(256, value2); + return test_copy(deviceID, context, queue, "copy_struct_struct_simple", results); +} + +TEST_SPIRV_FUNC(op_copy_half_simple) +{ + PASSIVE_REQUIRE_FP16_SUPPORT(deviceID); + std::vector results(1024, 3.25); + return test_copy(deviceID, context, queue, + "copy_half_simple", + results); +} diff --git a/test_conformance/spirv_new/test_op_fmath.cpp b/test_conformance/spirv_new/test_op_fmath.cpp new file mode 100644 index 00000000..7250eb15 --- /dev/null +++ b/test_conformance/spirv_new/test_op_fmath.cpp @@ -0,0 +1,201 @@ +/****************************************************************** +Copyright (c) 2016 The Khronos Group Inc. All Rights Reserved. + +This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc. +This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed in whole or in part to +third parties, and may not be reproduced, republished, distributed, transmitted, displayed, +broadcast or otherwise exploited in any manner without the express prior written permission +of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce, +disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe, +in whole or in part other than under the terms of the Khronos Adopters Agreement +or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient. +******************************************************************/ + +#include "testBase.h" +#include "types.hpp" + +#include +#include + +template +int test_fmath(cl_device_id deviceID, + cl_context context, + cl_command_queue queue, + const char *spvName, + const char *funcName, + const char *Tname, + bool fast_math, + std::vector &h_lhs, + std::vector &h_rhs) +{ + + if(std::string(Tname).find("double") != std::string::npos) { + if(!is_extension_available(deviceID, "cl_khr_fp64")) { + log_info("Extension cl_khr_fp64 not supported; skipping double tests.\n"); + return 0; + } + } + cl_int err = CL_SUCCESS; + int num = (int)h_lhs.size(); + size_t bytes = num * sizeof(T); + + clMemWrapper lhs = clCreateBuffer(context, CL_MEM_READ_ONLY, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create lhs buffer"); + + err = clEnqueueWriteBuffer(queue, lhs, CL_TRUE, 0, bytes, &h_lhs[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy to lhs buffer"); + + clMemWrapper rhs = clCreateBuffer(context, CL_MEM_READ_ONLY, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create rhs buffer"); + + err = clEnqueueWriteBuffer(queue, rhs, CL_TRUE, 0, bytes, &h_rhs[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy to rhs buffer"); + + std::string kernelStr; + + { + std::stringstream kernelStream; + + if (is_double::value) { + kernelStream << "#pragma OPENCL EXTENSION cl_khr_fp64 : enable\n"; + } else if (sizeof(T) == sizeof(cl_half)) { + kernelStream << "#pragma OPENCL EXTENSION cl_khr_fp16 : enable\n"; + } + + kernelStream << "#define spirv_fadd(a, b) (a) + (b) \n"; + kernelStream << "#define spirv_fsub(a, b) (a) - (b) \n"; + kernelStream << "#define spirv_fmul(a, b) (a) * (b) \n"; + kernelStream << "#define spirv_fdiv(a, b) (a) / (b) \n"; + kernelStream << "#define spirv_frem(a, b) fmod(a, b) \n"; + kernelStream << "#define spirv_fmod(a, b) copysign(fmod(a,b),b) \n"; + kernelStream << "#define T " << Tname << "\n"; + kernelStream << "#define FUNC spirv_" << funcName << "\n"; + kernelStream << "__kernel void fmath_cl(__global T *out, \n"; + kernelStream << "const __global T *lhs, const __global T *rhs) \n"; + kernelStream << "{ \n"; + kernelStream << " int id = get_global_id(0); \n"; + kernelStream << " out[id] = FUNC(lhs[id], rhs[id]); \n"; + kernelStream << "} \n"; + kernelStr = kernelStream.str(); + } + + size_t kernelLen = kernelStr.size(); + const char *kernelBuf = kernelStr.c_str(); + + const char *options = fast_math ? "-cl-fast-relaxed-math" : NULL; + + std::vector h_ref(num); + + { + // Run the cl kernel for reference results + clProgramWrapper prog; + err = create_single_kernel_helper_create_program(context, &prog, 1, &kernelBuf, NULL); + SPIRV_CHECK_ERROR(err, "Failed to create cl program"); + + err = clBuildProgram(prog, 1, &deviceID, NULL, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to build program"); + + clKernelWrapper kernel = clCreateKernel(prog, "fmath_cl", &err); + SPIRV_CHECK_ERROR(err, "Failed to create cl kernel"); + + clMemWrapper ref = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create ref buffer"); + + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &ref); + SPIRV_CHECK_ERROR(err, "Failed to set arg 0"); + + err = clSetKernelArg(kernel, 1, sizeof(cl_mem), &lhs); + SPIRV_CHECK_ERROR(err, "Failed to set arg 1"); + + err = clSetKernelArg(kernel, 2, sizeof(cl_mem), &rhs); + SPIRV_CHECK_ERROR(err, "Failed to set arg 2"); + + size_t global = num; + err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to enqueue cl kernel"); + + err = clEnqueueReadBuffer(queue, ref, CL_TRUE, 0, bytes, &h_ref[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to read from ref"); + } + + clProgramWrapper prog; + err = get_program_with_il(prog, deviceID, context, spvName); + SPIRV_CHECK_ERROR(err, "Failed to build program"); + + clKernelWrapper kernel = clCreateKernel(prog, "fmath_spv", &err); + SPIRV_CHECK_ERROR(err, "Failed to create spv kernel"); + + clMemWrapper res = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create res buffer"); + + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &res); + SPIRV_CHECK_ERROR(err, "Failed to set arg 0"); + + err = clSetKernelArg(kernel, 1, sizeof(cl_mem), &lhs); + SPIRV_CHECK_ERROR(err, "Failed to set arg 1"); + + err = clSetKernelArg(kernel, 2, sizeof(cl_mem), &rhs); + SPIRV_CHECK_ERROR(err, "Failed to set arg 2"); + + size_t global = num; + err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to enqueue cl kernel"); + + std::vector h_res(num); + err = clEnqueueReadBuffer(queue, res, CL_TRUE, 0, bytes, &h_res[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to read from ref"); + + for (int i = 0; i < num; i++) { + if (h_res[i] != h_ref[i]) { + log_error("Values do not match at location %d\n", i); + return -1; + } + } + return 0; +} + +#define TEST_FMATH_FUNC(TYPE, FUNC, MODE) \ + TEST_SPIRV_FUNC(op_##FUNC##_##TYPE##_##MODE) \ + { \ + if (sizeof(cl_##TYPE) == 2) { \ + PASSIVE_REQUIRE_FP16_SUPPORT(deviceID); \ + } \ + const int num = 1 << 20; \ + std::vector lhs(num); \ + std::vector rhs(num); \ + \ + RandomSeed seed(gRandomSeed); \ + \ + for (int i = 0; i < num; i++) { \ + lhs[i] = genrandReal(seed); \ + rhs[i] = genrandReal(seed); \ + } \ + \ + const char *mode = #MODE; \ + return test_fmath(deviceID, context, queue, \ + #FUNC "_" #TYPE, \ + #FUNC, \ + #TYPE, \ + mode[0] == 'f', \ + lhs, rhs); \ + } + +#define TEST_FMATH_MODE(TYPE, MODE) \ + TEST_FMATH_FUNC(TYPE, fadd, MODE) \ + TEST_FMATH_FUNC(TYPE, fsub, MODE) \ + TEST_FMATH_FUNC(TYPE, fmul, MODE) \ + TEST_FMATH_FUNC(TYPE, fdiv, MODE) \ + TEST_FMATH_FUNC(TYPE, frem, MODE) \ + TEST_FMATH_FUNC(TYPE, fmod, MODE) \ + +#define TEST_FMATH_TYPE(TYPE) \ + TEST_FMATH_MODE(TYPE, regular) \ + TEST_FMATH_MODE(TYPE, fast) \ + +TEST_FMATH_TYPE(float) +TEST_FMATH_TYPE(double) + +TEST_FMATH_TYPE(float4) +TEST_FMATH_TYPE(double2) + +TEST_FMATH_TYPE(half) diff --git a/test_conformance/spirv_new/test_op_function.cpp b/test_conformance/spirv_new/test_op_function.cpp new file mode 100644 index 00000000..caa3e0d3 --- /dev/null +++ b/test_conformance/spirv_new/test_op_function.cpp @@ -0,0 +1,89 @@ +/****************************************************************** +Copyright (c) 2016 The Khronos Group Inc. All Rights Reserved. + +This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc. +This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed in whole or in part to +third parties, and may not be reproduced, republished, distributed, transmitted, displayed, +broadcast or otherwise exploited in any manner without the express prior written permission +of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce, +disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe, +in whole or in part other than under the terms of the Khronos Adopters Agreement +or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient. +******************************************************************/ + +#include "testBase.h" +#include "types.hpp" + +#include +#include + +int test_function(cl_device_id deviceID, + cl_context context, + cl_command_queue queue, + const char *funcType, + const std::vector &h_in) +{ + cl_int err = CL_SUCCESS; + int num = (int)h_in.size(); + size_t bytes = sizeof(float) * num; + + clMemWrapper in = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create in buffer"); + + err = clEnqueueWriteBuffer(queue, in, CL_TRUE, 0, bytes, &h_in[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy to in buffer"); + + cl_uint bits = sizeof(void *) * 8; + std::string spvStr = std::string("op_function") + "_" + std::string(funcType); + const char *spvName = spvStr.c_str(); + + clProgramWrapper prog; + err = get_program_with_il(prog, deviceID, context, spvName); + SPIRV_CHECK_ERROR(err, "Failed to build program"); + + clKernelWrapper kernel = clCreateKernel(prog, spvName, &err); + SPIRV_CHECK_ERROR(err, "Failed to create spv kernel"); + + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &in); + SPIRV_CHECK_ERROR(err, "Failed to set arg 1"); + + size_t global = num; + err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to enqueue cl kernel"); + + std::vector h_out(num); + err = clEnqueueReadBuffer(queue, in, CL_TRUE, 0, bytes, &h_out[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to read from ref"); + + for (int i = 0; i < num; i++) { + if (h_out[i] != -h_in[i]) { + log_error("Values do not match at location %d\n", i); + return -1; + } + } + return 0; +} + + +#define TEST_FUNCTION(TYPE) \ + TEST_SPIRV_FUNC(function_##TYPE) \ + { \ + int num = 1 << 20; \ + std::vector in(num); \ + RandomSeed seed(gRandomSeed); \ + for (int i = 0; i < num; i++) { \ + in[i] = genrand(seed); \ + } \ + return test_function(deviceID, \ + context, \ + queue, \ + #TYPE, \ + in); \ + } \ + +TEST_FUNCTION(none) +TEST_FUNCTION(inline) +TEST_FUNCTION(noinline) +TEST_FUNCTION(pure) +TEST_FUNCTION(const) +TEST_FUNCTION(pure_ptr) diff --git a/test_conformance/spirv_new/test_op_lifetime.cpp b/test_conformance/spirv_new/test_op_lifetime.cpp new file mode 100644 index 00000000..b60e14d6 --- /dev/null +++ b/test_conformance/spirv_new/test_op_lifetime.cpp @@ -0,0 +1,104 @@ +/****************************************************************** +Copyright (c) 2016 The Khronos Group Inc. All Rights Reserved. + +This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc. +This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed in whole or in part to +third parties, and may not be reproduced, republished, distributed, transmitted, displayed, +broadcast or otherwise exploited in any manner without the express prior written permission +of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce, +disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe, +in whole or in part other than under the terms of the Khronos Adopters Agreement +or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient. +******************************************************************/ + +#include "testBase.h" +#include "types.hpp" + +#include +#include + + +template +int test_op_lifetime(cl_device_id deviceID, + cl_context context, + cl_command_queue queue, + const char *name, + const std::vector &h_lhs, + const std::vector &h_rhs, + const std::vector &h_ref) +{ + + cl_int err = CL_SUCCESS; + int num = (int)h_lhs.size(); + size_t bytes = num * sizeof(T); + + clMemWrapper lhs = clCreateBuffer(context, CL_MEM_READ_ONLY, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create lhs buffer"); + + err = clEnqueueWriteBuffer(queue, lhs, CL_TRUE, 0, bytes, &h_lhs[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy to lhs buffer"); + + clMemWrapper rhs = clCreateBuffer(context, CL_MEM_READ_ONLY, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create rhs buffer"); + + err = clEnqueueWriteBuffer(queue, rhs, CL_TRUE, 0, bytes, &h_rhs[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy to rhs buffer"); + + clProgramWrapper prog; + err = get_program_with_il(prog, deviceID, context, name); + SPIRV_CHECK_ERROR(err, "Failed to build program"); + + clKernelWrapper kernel = clCreateKernel(prog, name, &err); + SPIRV_CHECK_ERROR(err, "Failed to create spv kernel"); + + clMemWrapper res = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create res buffer"); + + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &res); + SPIRV_CHECK_ERROR(err, "Failed to set arg 0"); + + err = clSetKernelArg(kernel, 1, sizeof(cl_mem), &lhs); + SPIRV_CHECK_ERROR(err, "Failed to set arg 1"); + + err = clSetKernelArg(kernel, 2, sizeof(cl_mem), &rhs); + SPIRV_CHECK_ERROR(err, "Failed to set arg 2"); + + size_t global = num; + err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to enqueue cl kernel"); + + std::vector h_res(num); + err = clEnqueueReadBuffer(queue, res, CL_TRUE, 0, bytes, &h_res[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to read from ref"); + + for (int i = 0; i < num; i++) { + if (h_res[i] != h_ref[i]) { + log_error("Values do not match at location %d\n", i); + return -1; + } + } + return 0; +} + +#define TEST_LIFETIME(name) \ + TEST_SPIRV_FUNC(op_##name) \ + { \ + const int num = 1 << 10; \ + RandomSeed seed(gRandomSeed); \ + \ + std::vector lhs(num); \ + std::vector rhs(num); \ + std::vector out(num); \ + \ + for (int i = 0; i < num; i++) { \ + lhs[i] = genrand(seed); \ + rhs[i] = genrand(seed); \ + out[i] = lhs[i] - rhs[i]; \ + } \ + \ + return test_op_lifetime(deviceID, context, queue, \ + #name, \ + lhs, rhs, out); \ + } \ + +TEST_LIFETIME(lifetime_simple) diff --git a/test_conformance/spirv_new/test_op_loop_merge.cpp b/test_conformance/spirv_new/test_op_loop_merge.cpp new file mode 100644 index 00000000..23d257d9 --- /dev/null +++ b/test_conformance/spirv_new/test_op_loop_merge.cpp @@ -0,0 +1,113 @@ +/****************************************************************** +Copyright (c) 2016 The Khronos Group Inc. All Rights Reserved. + +This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc. +This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed in whole or in part to +third parties, and may not be reproduced, republished, distributed, transmitted, displayed, +broadcast or otherwise exploited in any manner without the express prior written permission +of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce, +disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe, +in whole or in part other than under the terms of the Khronos Adopters Agreement +or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient. +******************************************************************/ + +#include "testBase.h" +#include "types.hpp" + +#include +#include + + +template +int test_selection_merge(cl_device_id deviceID, + cl_context context, + cl_command_queue queue, + const char *name, + const std::vector &h_in, + const std::vector &h_ref, + const int rep) +{ + + cl_int err = CL_SUCCESS; + int num = (int)h_ref.size(); + size_t bytes = num * sizeof(T); + size_t in_bytes = rep * bytes; + + clMemWrapper in = clCreateBuffer(context, CL_MEM_READ_ONLY, in_bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create in buffer"); + + err = clEnqueueWriteBuffer(queue, in, CL_TRUE, 0, in_bytes, &h_in[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy to in buffer"); + + clProgramWrapper prog; + err = get_program_with_il(prog, deviceID, context, name); + SPIRV_CHECK_ERROR(err, "Failed to build program"); + + clKernelWrapper kernel = clCreateKernel(prog, name, &err); + SPIRV_CHECK_ERROR(err, "Failed to create spv kernel"); + + clMemWrapper out = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create out buffer"); + + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &out); + SPIRV_CHECK_ERROR(err, "Failed to set arg 0"); + + err = clSetKernelArg(kernel, 1, sizeof(cl_mem), &in); + SPIRV_CHECK_ERROR(err, "Failed to set arg 1"); + + err = clSetKernelArg(kernel, 2, sizeof(int), &rep); + SPIRV_CHECK_ERROR(err, "Failed to set arg 2"); + + err = clSetKernelArg(kernel, 3, sizeof(int), &num); + SPIRV_CHECK_ERROR(err, "Failed to set arg 3"); + + size_t global = num; + err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to enqueue cl kernel"); + + std::vector h_out(num); + err = clEnqueueReadBuffer(queue, out, CL_TRUE, 0, bytes, &h_out[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to read from ref"); + + for (int i = 0; i < num; i++) { + if (h_out[i] != h_ref[i]) { + log_error("Values do not match at location %d\n", i); + return -1; + } + } + return 0; +} + +#define TEST_LOOP_BRANCH(control) \ + TEST_SPIRV_FUNC(op_loop_merge_branch_##control) \ + { \ + const int num = 1 << 10; \ + RandomSeed seed(gRandomSeed); \ + \ + int rep = 4; \ + std::vector in(rep * num); \ + std::vector out(num); \ + \ + for (int i = 0; i < num; i++) { \ + int res = 0; \ + for (int j = 0; j < rep; j++) { \ + cl_int val = genrand(seed) % 1024; \ + res += val; \ + in[j * num + i] = val; \ + } \ + out[i] = res; \ + } \ + \ + return test_selection_merge(deviceID, context, queue, \ + "loop_merge_branch_" #control, \ + in, out, rep); \ + } \ + +TEST_LOOP_BRANCH(none) +TEST_LOOP_BRANCH(unroll) +TEST_LOOP_BRANCH(dont_unroll) + + +TEST_LOOP_BRANCH(conditional_none) +TEST_LOOP_BRANCH(conditional_unroll) +TEST_LOOP_BRANCH(conditional_dont_unroll) diff --git a/test_conformance/spirv_new/test_op_negate.cpp b/test_conformance/spirv_new/test_op_negate.cpp new file mode 100644 index 00000000..1891c9bb --- /dev/null +++ b/test_conformance/spirv_new/test_op_negate.cpp @@ -0,0 +1,119 @@ +/****************************************************************** +Copyright (c) 2016 The Khronos Group Inc. All Rights Reserved. + +This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc. +This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed in whole or in part to +third parties, and may not be reproduced, republished, distributed, transmitted, displayed, +broadcast or otherwise exploited in any manner without the express prior written permission +of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce, +disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe, +in whole or in part other than under the terms of the Khronos Adopters Agreement +or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient. +******************************************************************/ + +#include "testBase.h" +#include "types.hpp" + +#include +#include + +template +int test_negation(cl_device_id deviceID, + cl_context context, + cl_command_queue queue, + const char *Tname, + const char *funcName, + const std::vector &h_in, + Tv (*negate)(Tv) = negOp) +{ + if(std::string(Tname).find("double") != std::string::npos) { + if(!is_extension_available(deviceID, "cl_khr_fp64")) { + log_info("Extension cl_khr_fp64 not supported; skipping double tests.\n"); + return 0; + } + } + + cl_int err = CL_SUCCESS; + int num = (int)h_in.size(); + size_t bytes = sizeof(Tv) * num; + + clMemWrapper in = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create in buffer"); + + err = clEnqueueWriteBuffer(queue, in, CL_TRUE, 0, bytes, &h_in[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy to in buffer"); + + cl_uint bits = sizeof(void *) * 8; + std::string spvStr = std::string(funcName) + "_" + std::string(Tname); + const char *spvName = spvStr.c_str(); + + clProgramWrapper prog; + err = get_program_with_il(prog, deviceID, context, spvName); + SPIRV_CHECK_ERROR(err, "Failed to build program"); + + clKernelWrapper kernel = clCreateKernel(prog, spvName, &err); + SPIRV_CHECK_ERROR(err, "Failed to create spv kernel"); + + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &in); + SPIRV_CHECK_ERROR(err, "Failed to set arg 1"); + + size_t global = num; + err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to enqueue cl kernel"); + + std::vector h_out(num); + err = clEnqueueReadBuffer(queue, in, CL_TRUE, 0, bytes, &h_out[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to read from ref"); + + for (int i = 0; i < num; i++) { + if (h_out[i] != negate(h_in[i])) { + log_error("Values do not match at location %d\n", i); + return -1; + } + } + return 0; +} + +#define TEST_NEGATION(TYPE, Tv, OP, FUNC) \ + TEST_SPIRV_FUNC(OP##_##TYPE) \ + { \ + int num = 1 << 20; \ + std::vector in(num); \ + RandomSeed seed(gRandomSeed); \ + for (int i = 0; i < num; i++) { \ + in[i] = genrand(seed); \ + } \ + return test_negation(deviceID, \ + context, \ + queue, \ + #TYPE, \ + #OP, \ + in, FUNC); \ + } \ + + +#define TEST_NEG(TYPE) TEST_NEGATION(TYPE, cl_##TYPE, op_neg, negOp) +#define TEST_NOT(TYPE) TEST_NEGATION(TYPE, cl_##TYPE, op_not, notOp) +#define TEST_NEG_VEC(TYPE, N) TEST_NEGATION(TYPE##N, cl_##TYPE##N, op_neg, (negOpVec)) +#define TEST_NOT_VEC(TYPE, N) TEST_NEGATION(TYPE##N, cl_##TYPE##N, op_not, (notOpVec)) + +TEST_NEG(float) +TEST_NEG(double) +TEST_NEG(int) +TEST_NEG(long) +TEST_NOT(int) +TEST_NOT(long) + +#ifdef __GNUC__ +// std::vector is causing compilation errors on GCC 5.3 (works on gcc 4.8) +// Needs further investigation +TEST_NEGATION(short, short, op_neg, negOp) +TEST_NEGATION(short, short, op_not, notOp) +#else +TEST_NEG(short) +TEST_NOT(short) +#endif + +TEST_NEG_VEC(float , 4) +TEST_NEG_VEC(int , 4) +TEST_NOT_VEC(int , 4) diff --git a/test_conformance/spirv_new/test_op_opaque.cpp b/test_conformance/spirv_new/test_op_opaque.cpp new file mode 100644 index 00000000..930e26dc --- /dev/null +++ b/test_conformance/spirv_new/test_op_opaque.cpp @@ -0,0 +1,44 @@ +/****************************************************************** +Copyright (c) 2016 The Khronos Group Inc. All Rights Reserved. + +This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc. +This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed in whole or in part to +third parties, and may not be reproduced, republished, distributed, transmitted, displayed, +broadcast or otherwise exploited in any manner without the express prior written permission +of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce, +disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe, +in whole or in part other than under the terms of the Khronos Adopters Agreement +or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient. +******************************************************************/ + +#include "testBase.h" +#include "types.hpp" + +TEST_SPIRV_FUNC(op_type_opaque_simple) +{ + const char *name = "opaque"; + int num = (int)(1 << 10); + cl_int err = CL_SUCCESS; + std::vector buffer_vec = readSPIRV(name); + + int file_bytes = buffer_vec.size(); + if (file_bytes == 0) { + log_error("File not found\n"); + return -1; + } + unsigned char *buffer = &buffer_vec[0]; + + clProgramWrapper prog = clCreateProgramWithIL(context, buffer, file_bytes, &err); + SPIRV_CHECK_ERROR(err, "Failed to create program with clCreateProgramWithIL"); + + err = clCompileProgram(prog, 1, &deviceID, + NULL, // options + 0, // num headers + NULL, // input headers + NULL, // header include names + NULL, // callback + NULL // User data + ); + SPIRV_CHECK_ERROR(err, "Failed to compile spv program"); + return 0; +} diff --git a/test_conformance/spirv_new/test_op_phi.cpp b/test_conformance/spirv_new/test_op_phi.cpp new file mode 100644 index 00000000..f9c69d79 --- /dev/null +++ b/test_conformance/spirv_new/test_op_phi.cpp @@ -0,0 +1,143 @@ +/****************************************************************** +Copyright (c) 2016 The Khronos Group Inc. All Rights Reserved. + +This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc. +This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed in whole or in part to +third parties, and may not be reproduced, republished, distributed, transmitted, displayed, +broadcast or otherwise exploited in any manner without the express prior written permission +of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce, +disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe, +in whole or in part other than under the terms of the Khronos Adopters Agreement +or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient. +******************************************************************/ + +#include "testBase.h" +#include "types.hpp" + +#include +#include + + +template +int test_phi(cl_device_id deviceID, + cl_context context, + cl_command_queue queue, + const char *name, + const std::vector &h_lhs, + const std::vector &h_rhs, + const std::vector &h_ref) +{ + + cl_int err = CL_SUCCESS; + int num = (int)h_lhs.size(); + size_t bytes = num * sizeof(T); + + clMemWrapper lhs = clCreateBuffer(context, CL_MEM_READ_ONLY, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create lhs buffer"); + + err = clEnqueueWriteBuffer(queue, lhs, CL_TRUE, 0, bytes, &h_lhs[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy to lhs buffer"); + + clMemWrapper rhs = clCreateBuffer(context, CL_MEM_READ_ONLY, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create rhs buffer"); + + err = clEnqueueWriteBuffer(queue, rhs, CL_TRUE, 0, bytes, &h_rhs[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy to rhs buffer"); + + clProgramWrapper prog; + err = get_program_with_il(prog, deviceID, context, name); + SPIRV_CHECK_ERROR(err, "Failed to build program"); + + clKernelWrapper kernel = clCreateKernel(prog, name, &err); + SPIRV_CHECK_ERROR(err, "Failed to create spv kernel"); + + clMemWrapper res = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create res buffer"); + + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &res); + SPIRV_CHECK_ERROR(err, "Failed to set arg 0"); + + err = clSetKernelArg(kernel, 1, sizeof(cl_mem), &lhs); + SPIRV_CHECK_ERROR(err, "Failed to set arg 1"); + + err = clSetKernelArg(kernel, 2, sizeof(cl_mem), &rhs); + SPIRV_CHECK_ERROR(err, "Failed to set arg 2"); + + size_t global = num; + err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to enqueue cl kernel"); + + std::vector h_res(num); + err = clEnqueueReadBuffer(queue, res, CL_TRUE, 0, bytes, &h_res[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to read from ref"); + + for (int i = 0; i < num; i++) { + if (h_res[i] != h_ref[i]) { + log_error("Values do not match at location %d\n", i); + return -1; + } + } + return 0; +} + +TEST_SPIRV_FUNC(op_phi_2_blocks) +{ + const int num = 1 << 10; + RandomSeed seed(gRandomSeed); + + std::vector lhs(num); + std::vector rhs(num); + std::vector out(num); + + for (int i = 0; i < num; i++) { + lhs[i] = genrand(seed); + rhs[i] = genrand(seed); + out[i] = lhs[i] < rhs[i] ? (rhs[i] - lhs[i]) : (lhs[i] - rhs[i]); + } + + return test_phi(deviceID, context, queue, "phi_2", lhs, rhs, out); +} + +TEST_SPIRV_FUNC(op_phi_3_blocks) +{ + const int num = 1 << 10; + RandomSeed seed(gRandomSeed); + + std::vector lhs(num); + std::vector rhs(num); + std::vector out(num); + + for (int i = 0; i < num; i++) { + lhs[i] = genrand(seed); + rhs[i] = genrand(seed); + if (lhs[i] < rhs[i]) { + out[i] = lhs[i] < 0 ? -lhs[i] : lhs[i]; + } else { + out[i] = lhs[i] - rhs[i]; + } + } + + return test_phi(deviceID, context, queue, "phi_3", lhs, rhs, out); +} + +TEST_SPIRV_FUNC(op_phi_4_blocks) +{ + const int num = 1 << 10; + RandomSeed seed(gRandomSeed); + + std::vector lhs(num); + std::vector rhs(num); + std::vector out(num); + + for (int i = 0; i < num; i++) { + lhs[i] = genrand(seed); + rhs[i] = genrand(seed); + if (lhs[i] < rhs[i]) { + out[i] = lhs[i] < 0 ? -lhs[i] : lhs[i]; + } else { + out[i] = rhs[i] < 0 ? -rhs[i] : rhs[i]; + } + } + + return test_phi(deviceID, context, queue, "phi_4", lhs, rhs, out); +} diff --git a/test_conformance/spirv_new/test_op_selection_merge.cpp b/test_conformance/spirv_new/test_op_selection_merge.cpp new file mode 100644 index 00000000..6ea47f35 --- /dev/null +++ b/test_conformance/spirv_new/test_op_selection_merge.cpp @@ -0,0 +1,132 @@ +/****************************************************************** +Copyright (c) 2016 The Khronos Group Inc. All Rights Reserved. + +This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc. +This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed in whole or in part to +third parties, and may not be reproduced, republished, distributed, transmitted, displayed, +broadcast or otherwise exploited in any manner without the express prior written permission +of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce, +disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe, +in whole or in part other than under the terms of the Khronos Adopters Agreement +or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient. +******************************************************************/ + +#include "testBase.h" +#include "types.hpp" + +#include +#include + + +template +int test_selection_merge(cl_device_id deviceID, + cl_context context, + cl_command_queue queue, + const char *name, + const std::vector &h_lhs, + const std::vector &h_rhs, + const std::vector &h_ref) +{ + + cl_int err = CL_SUCCESS; + int num = (int)h_lhs.size(); + size_t bytes = num * sizeof(T); + + clMemWrapper lhs = clCreateBuffer(context, CL_MEM_READ_ONLY, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create lhs buffer"); + + err = clEnqueueWriteBuffer(queue, lhs, CL_TRUE, 0, bytes, &h_lhs[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy to lhs buffer"); + + clMemWrapper rhs = clCreateBuffer(context, CL_MEM_READ_ONLY, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create rhs buffer"); + + err = clEnqueueWriteBuffer(queue, rhs, CL_TRUE, 0, bytes, &h_rhs[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy to rhs buffer"); + + clProgramWrapper prog; + err = get_program_with_il(prog, deviceID, context, name); + SPIRV_CHECK_ERROR(err, "Failed to build program"); + + clKernelWrapper kernel = clCreateKernel(prog, name, &err); + SPIRV_CHECK_ERROR(err, "Failed to create spv kernel"); + + clMemWrapper res = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create res buffer"); + + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &res); + SPIRV_CHECK_ERROR(err, "Failed to set arg 0"); + + err = clSetKernelArg(kernel, 1, sizeof(cl_mem), &lhs); + SPIRV_CHECK_ERROR(err, "Failed to set arg 1"); + + err = clSetKernelArg(kernel, 2, sizeof(cl_mem), &rhs); + SPIRV_CHECK_ERROR(err, "Failed to set arg 2"); + + size_t global = num; + err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to enqueue cl kernel"); + + std::vector h_res(num); + err = clEnqueueReadBuffer(queue, res, CL_TRUE, 0, bytes, &h_res[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to read from ref"); + + for (int i = 0; i < num; i++) { + if (h_res[i] != h_ref[i]) { + log_error("Values do not match at location %d\n", i); + return -1; + } + } + return 0; +} + +#define TEST_SELECT_IF(control) \ + TEST_SPIRV_FUNC(op_selection_merge_if_##control) \ + { \ + const int num = 1 << 10; \ + RandomSeed seed(gRandomSeed); \ + \ + std::vector lhs(num); \ + std::vector rhs(num); \ + std::vector out(num); \ + \ + for (int i = 0; i < num; i++) { \ + lhs[i] = genrand(seed); \ + rhs[i] = genrand(seed); \ + out[i] = lhs[i] < rhs[i] ? \ + (rhs[i] - lhs[i]) : (lhs[i] - rhs[i]); \ + } \ + \ + return test_selection_merge(deviceID, context, queue, \ + "select_if_" #control, \ + lhs, rhs, out); \ + } \ + +TEST_SELECT_IF(none) +TEST_SELECT_IF(flatten) +TEST_SELECT_IF(dont_flatten) + +#define TEST_SELECT_SWITCH(control) \ + TEST_SPIRV_FUNC(op_selection_merge_swith_##control) \ + { \ + const int num = 1 << 10; \ + RandomSeed seed(gRandomSeed); \ + \ + std::vector lhs(num); \ + std::vector rhs(num); \ + std::vector out(num); \ + \ + for (int i = 0; i < num; i++) { \ + lhs[i] = genrand(seed); \ + rhs[i] = genrand(seed); \ + out[i] = (lhs[i] + rhs[i]) % 4; \ + } \ + \ + return test_selection_merge(deviceID, context, queue, \ + "select_switch_" #control, \ + lhs, rhs, out); \ + } \ + +TEST_SELECT_SWITCH(none) +TEST_SELECT_SWITCH(flatten) +TEST_SELECT_SWITCH(dont_flatten) diff --git a/test_conformance/spirv_new/test_op_undef.cpp b/test_conformance/spirv_new/test_op_undef.cpp new file mode 100644 index 00000000..659ab1a9 --- /dev/null +++ b/test_conformance/spirv_new/test_op_undef.cpp @@ -0,0 +1,116 @@ +/****************************************************************** +Copyright (c) 2016 The Khronos Group Inc. All Rights Reserved. + +This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc. +This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed in whole or in part to +third parties, and may not be reproduced, republished, distributed, transmitted, displayed, +broadcast or otherwise exploited in any manner without the express prior written permission +of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce, +disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe, +in whole or in part other than under the terms of the Khronos Adopters Agreement +or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient. +******************************************************************/ + +#include "testBase.h" +#include "types.hpp" + + + +template +int test_undef(cl_device_id deviceID, cl_context context, + cl_command_queue queue, const char *name) +{ + if(std::string(name).find("double") != std::string::npos) { + if(!is_extension_available(deviceID, "cl_khr_fp64")) { + log_info("Extension cl_khr_fp64 not supported; skipping double tests.\n"); + return 0; + } + } + int num = (int)(1 << 10); + cl_int err = CL_SUCCESS; + + clProgramWrapper prog; + err = get_program_with_il(prog, deviceID, context, name); + SPIRV_CHECK_ERROR(err, "Failed to build program"); + + clKernelWrapper kernel = clCreateKernel(prog, name, &err); + SPIRV_CHECK_ERROR(err, "Failed to create kernel"); + + size_t bytes = num * sizeof(T); + clMemWrapper mem = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create buffer"); + + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &mem); + SPIRV_CHECK_ERROR(err, "Failed to set kernel argument"); + + size_t global = num; + err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to enqueue kernel"); + + std::vector host(num); + err = clEnqueueReadBuffer(queue, mem, CL_TRUE, 0, bytes, &host[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy from cl_buffer"); + + return 0; +} + +#define TEST_UNDEF(NAME, TYPE) \ + TEST_SPIRV_FUNC(op_undef_##NAME##_simple) \ + { \ + return test_undef(deviceID, context, queue, \ + "undef_" #NAME "_simple"); \ + } \ + +// Boolean tests +TEST_UNDEF(true , cl_int ) +TEST_UNDEF(false , cl_int ) + +// Integer tests +TEST_UNDEF(int , cl_int ) +TEST_UNDEF(uint , cl_uint ) +TEST_UNDEF(char , cl_char ) +TEST_UNDEF(uchar , cl_uchar) +TEST_UNDEF(ushort, cl_ushort) +TEST_UNDEF(long , cl_long ) +TEST_UNDEF(ulong , cl_ulong) + +#ifdef __GNUC__ +// std::vector is causing compilation errors on GCC 5.3 (works on gcc 4.8) +// Needs further investigation +TEST_UNDEF(short , int16_t ) +#else +TEST_UNDEF(short , cl_short) +#endif + +// Float tests +TEST_UNDEF(float , cl_float) +TEST_UNDEF(double, cl_double) +TEST_UNDEF(int4 , cl_int4) +TEST_UNDEF(int3 , cl_int3) + + +TEST_SPIRV_FUNC(op_undef_struct_int_float_simple) +{ + typedef AbstractStruct2 CustomType; + return test_undef(deviceID, context, queue, "undef_struct_int_float_simple"); +} + +TEST_SPIRV_FUNC(op_undef_struct_int_char_simple) +{ + typedef AbstractStruct2 CustomType; + return test_undef(deviceID, context, queue, "undef_struct_int_char_simple"); +} + +TEST_SPIRV_FUNC(op_undef_struct_struct_simple) +{ + typedef AbstractStruct2 CustomType1; + typedef AbstractStruct2 CustomType2; + return test_undef(deviceID, context, queue, "undef_struct_struct_simple"); +} + +TEST_SPIRV_FUNC(op_undef_half_simple) +{ + PASSIVE_REQUIRE_FP16_SUPPORT(deviceID); + return test_undef(deviceID, context, queue, + "undef_half_simple"); +} diff --git a/test_conformance/spirv_new/test_op_vector_extract.cpp b/test_conformance/spirv_new/test_op_vector_extract.cpp new file mode 100644 index 00000000..fe1f8253 --- /dev/null +++ b/test_conformance/spirv_new/test_op_vector_extract.cpp @@ -0,0 +1,104 @@ +/****************************************************************** +Copyright (c) 2016 The Khronos Group Inc. All Rights Reserved. + +This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc. +This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed in whole or in part to +third parties, and may not be reproduced, republished, distributed, transmitted, displayed, +broadcast or otherwise exploited in any manner without the express prior written permission +of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce, +disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe, +in whole or in part other than under the terms of the Khronos Adopters Agreement +or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient. +******************************************************************/ + +#include "testBase.h" +#include "types.hpp" + +template +int test_extract(cl_device_id deviceID, cl_context context, + cl_command_queue queue, const char *name, + const std::vector &h_in, const int n) +{ + if(std::string(name).find("double") != std::string::npos) { + if(!is_extension_available(deviceID, "cl_khr_fp64")) { + log_info("Extension cl_khr_fp64 not supported; skipping double tests.\n"); + return 0; + } + } + cl_int err = CL_SUCCESS; + + clProgramWrapper prog; + err = get_program_with_il(prog, deviceID, context, name); + SPIRV_CHECK_ERROR(err, "Failed to build program"); + + clKernelWrapper kernel = clCreateKernel(prog, name, &err); + SPIRV_CHECK_ERROR(err, "Failed to create kernel"); + + int num = (int)h_in.size(); + std::vector h_out(num); + + size_t in_bytes = num * sizeof(Tv); + clMemWrapper in = clCreateBuffer(context, CL_MEM_READ_WRITE, in_bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create buffer"); + + err = clEnqueueWriteBuffer(queue, in, CL_TRUE, 0, in_bytes, &h_in[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy to rhs buffer"); + + size_t out_bytes = num * sizeof(Ts); + clMemWrapper out = clCreateBuffer(context, CL_MEM_READ_WRITE, out_bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create buffer"); + + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &in); + SPIRV_CHECK_ERROR(err, "Failed to set kernel argument"); + + err = clSetKernelArg(kernel, 1, sizeof(cl_mem), &out); + SPIRV_CHECK_ERROR(err, "Failed to set kernel argument"); + + for (int k = 0; k < n; k++) { + + err = clSetKernelArg(kernel, 2, sizeof(int), &k); + SPIRV_CHECK_ERROR(err, "Failed to set kernel argument"); + + size_t global = num; + err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to enqueue kernel"); + + err = clEnqueueReadBuffer(queue, out, CL_TRUE, 0, out_bytes, &h_out[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy from cl_buffer"); + + for (int i = 0; i < num; i++) { + if (h_out[i] != h_in[i].s[k]) { + log_error("Values do not match at location %d for vector position %d\n", i, k); + return -1; + } + } + } + return 0; +} + +#define TEST_VECTOR_EXTRACT(TYPE, N) \ + TEST_SPIRV_FUNC(op_vector_##TYPE##N##_extract) \ + { \ + typedef cl_##TYPE##N Tv; \ + typedef cl_##TYPE Ts; \ + const int num = 1 << 20; \ + std::vector in(num); \ + const char *name = "vector_" #TYPE #N "_extract"; \ + \ + RandomSeed seed(gRandomSeed); \ + \ + for (int i = 0; i < num; i++) { \ + in[i] = genrand(seed); \ + } \ + \ + return test_extract(deviceID, \ + context, queue, \ + name, \ + in, N); \ + } + +TEST_VECTOR_EXTRACT(int, 4) +TEST_VECTOR_EXTRACT(float, 4) +TEST_VECTOR_EXTRACT(long, 2) +TEST_VECTOR_EXTRACT(double, 2) +TEST_VECTOR_EXTRACT(char, 16) diff --git a/test_conformance/spirv_new/test_op_vector_insert.cpp b/test_conformance/spirv_new/test_op_vector_insert.cpp new file mode 100644 index 00000000..0749c14a --- /dev/null +++ b/test_conformance/spirv_new/test_op_vector_insert.cpp @@ -0,0 +1,122 @@ +/****************************************************************** +Copyright (c) 2016 The Khronos Group Inc. All Rights Reserved. + +This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc. +This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed in whole or in part to +third parties, and may not be reproduced, republished, distributed, transmitted, displayed, +broadcast or otherwise exploited in any manner without the express prior written permission +of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce, +disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe, +in whole or in part other than under the terms of the Khronos Adopters Agreement +or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient. +******************************************************************/ + +#include "testBase.h" +#include "types.hpp" + +template +int test_insert(cl_device_id deviceID, cl_context context, + cl_command_queue queue, const char *name, + const std::vector &h_in, const int n) +{ + if(std::string(name).find("double") != std::string::npos) { + if(!is_extension_available(deviceID, "cl_khr_fp64")) { + log_info("Extension cl_khr_fp64 not supported; skipping double tests.\n"); + return 0; + } + } + cl_int err = CL_SUCCESS; + clProgramWrapper prog; + err = get_program_with_il(prog, deviceID, context, name); + SPIRV_CHECK_ERROR(err, "Failed to build program"); + + clKernelWrapper kernel = clCreateKernel(prog, name, &err); + SPIRV_CHECK_ERROR(err, "Failed to create kernel"); + + int num = (int)h_in.size(); + std::vector h_ref(num); + std::vector h_out(num); + + RandomSeed seed(gRandomSeed); + for (int i = 0; i < num; i++) { + for (int j = 0; j < n; j++) { + h_ref[i].s[j] = h_in[i] + genrand(seed); + } + } + + size_t in_bytes = num * sizeof(Ts); + clMemWrapper in = clCreateBuffer(context, CL_MEM_READ_WRITE, in_bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create buffer"); + + err = clEnqueueWriteBuffer(queue, in, CL_TRUE, 0, in_bytes, &h_in[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy to rhs buffer"); + + size_t out_bytes = num * sizeof(Tv); + clMemWrapper out = clCreateBuffer(context, CL_MEM_READ_WRITE, out_bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create buffer"); + + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &in); + SPIRV_CHECK_ERROR(err, "Failed to set kernel argument"); + + err = clSetKernelArg(kernel, 1, sizeof(cl_mem), &out); + SPIRV_CHECK_ERROR(err, "Failed to set kernel argument"); + + for (int k = 0; k < n; k++) { + + // Reset the values in h_out + err = clEnqueueWriteBuffer(queue, out, CL_TRUE, 0, out_bytes, &h_ref[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy to cl_buffer"); + + err = clSetKernelArg(kernel, 2, sizeof(int), &k); + SPIRV_CHECK_ERROR(err, "Failed to set kernel argument"); + + size_t global = num; + // Kernel should the k'th value of the vector in h_out with h_in + err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to enqueue kernel"); + + err = clEnqueueReadBuffer(queue, out, CL_TRUE, 0, out_bytes, &h_out[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy from cl_buffer"); + + for (int i = 0; i < num; i++) { + // Kernel should have replaced k'th value of the vector in h_out with h_in + // The remaining values should be unchanged. + Tv refVec = h_ref[i]; + refVec.s[k] = h_in[i]; + for (int j = 0; j < n; j++) { + if (h_out[i].s[j] != refVec.s[j]) { + log_error("Values do not match at location %d for vector position %d\n", i, k); + return -1; + } + } + } + } + return 0; +} + +#define TEST_VECTOR_INSERT(TYPE, N) \ + TEST_SPIRV_FUNC(op_vector_##TYPE##N##_insert) \ + { \ + typedef cl_##TYPE##N Tv; \ + typedef cl_##TYPE Ts; \ + const int num = 1 << 20; \ + std::vector in(num); \ + const char *name = "vector_" #TYPE #N "_insert"; \ + \ + RandomSeed seed(gRandomSeed); \ + \ + for (int i = 0; i < num; i++) { \ + in[i] = genrand(seed); \ + } \ + \ + return test_insert(deviceID, \ + context, queue, \ + name, \ + in, N); \ + } + +TEST_VECTOR_INSERT(int, 4) +TEST_VECTOR_INSERT(float, 4) +TEST_VECTOR_INSERT(long, 2) +TEST_VECTOR_INSERT(double, 2) +TEST_VECTOR_INSERT(char, 16) diff --git a/test_conformance/spirv_new/test_op_vector_times_scalar.cpp b/test_conformance/spirv_new/test_op_vector_times_scalar.cpp new file mode 100644 index 00000000..99d71f72 --- /dev/null +++ b/test_conformance/spirv_new/test_op_vector_times_scalar.cpp @@ -0,0 +1,181 @@ +/****************************************************************** +Copyright (c) 2016 The Khronos Group Inc. All Rights Reserved. + +This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc. +This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed in whole or in part to +third parties, and may not be reproduced, republished, distributed, transmitted, displayed, +broadcast or otherwise exploited in any manner without the express prior written permission +of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce, +disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe, +in whole or in part other than under the terms of the Khronos Adopters Agreement +or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient. +******************************************************************/ + +#include "testBase.h" +#include "types.hpp" + +#include +#include + +template +int test_vector_times_scalar(cl_device_id deviceID, + cl_context context, + cl_command_queue queue, + const char *Tname, + std::vector &h_lhs, + std::vector &h_rhs) +{ + if(std::string(Tname).find("double") != std::string::npos) { + if(!is_extension_available(deviceID, "cl_khr_fp64")) { + log_info("Extension cl_khr_fp64 not supported; skipping double tests.\n"); + return 0; + } + } + + cl_int err = CL_SUCCESS; + int num = (int)h_lhs.size(); + size_t lhs_bytes = num * sizeof(Tv); + size_t rhs_bytes = num * sizeof(Ts); + size_t res_bytes = lhs_bytes; + int vec_size = sizeof(Tv) / sizeof(Ts); + + clMemWrapper lhs = clCreateBuffer(context, CL_MEM_READ_ONLY, lhs_bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create lhs buffer"); + + err = clEnqueueWriteBuffer(queue, lhs, CL_TRUE, 0, lhs_bytes, &h_lhs[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy to lhs buffer"); + + clMemWrapper rhs = clCreateBuffer(context, CL_MEM_READ_ONLY, rhs_bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create rhs buffer"); + + err = clEnqueueWriteBuffer(queue, rhs, CL_TRUE, 0, rhs_bytes, &h_rhs[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to copy to rhs buffer"); + + std::string kernelStr; + + { + std::stringstream kernelStream; + + if (is_double::value) { + kernelStream << "#pragma OPENCL EXTENSION cl_khr_fp64 : enable\n"; + } else if (sizeof(Ts) == sizeof(cl_half)) { + kernelStream << "#pragma OPENCL EXTENSION cl_khr_fp16 : enable\n"; + } + + kernelStream << "#define Ts " << Tname << "\n"; + kernelStream << "#define Tv " << Tname << vec_size << "\n"; + kernelStream << "__kernel void vector_times_scalar( \n"; + kernelStream << " __global Tv *out, \n"; + kernelStream << " const __global Tv *lhs,\n"; + kernelStream << " const __global Ts *rhs)\n"; + kernelStream << "{ \n"; + kernelStream << " int id = get_global_id(0); \n"; + kernelStream << " out[id] = lhs[id] * rhs[id]; \n"; + kernelStream << "} \n"; + kernelStr = kernelStream.str(); + } + + size_t kernelLen = kernelStr.size(); + const char *kernelBuf = kernelStr.c_str(); + + std::vector h_ref(num); + { + // Run the cl kernel for reference results + clProgramWrapper prog; + err = create_single_kernel_helper_create_program(context, &prog, 1, &kernelBuf, NULL); + SPIRV_CHECK_ERROR(err, "Failed to create cl program"); + + err = clBuildProgram(prog, 1, &deviceID, NULL, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to build program"); + + clKernelWrapper kernel = clCreateKernel(prog, "vector_times_scalar", &err); + SPIRV_CHECK_ERROR(err, "Failed to create cl kernel"); + + clMemWrapper ref = clCreateBuffer(context, CL_MEM_READ_WRITE, res_bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create ref buffer"); + + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &ref); + SPIRV_CHECK_ERROR(err, "Failed to set arg 0"); + + err = clSetKernelArg(kernel, 1, sizeof(cl_mem), &lhs); + SPIRV_CHECK_ERROR(err, "Failed to set arg 1"); + + err = clSetKernelArg(kernel, 2, sizeof(cl_mem), &rhs); + SPIRV_CHECK_ERROR(err, "Failed to set arg 2"); + + size_t global = num; + err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to enqueue cl kernel"); + + err = clEnqueueReadBuffer(queue, ref, CL_TRUE, 0, res_bytes, &h_ref[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to read from ref"); + } + + cl_uint bits = sizeof(void *) * 8; + std::string ref = "vector_times_scalar_"; + ref += Tname; + const char *spvName = ref.c_str(); + + clProgramWrapper prog; + err = get_program_with_il(prog, deviceID, context, spvName); + SPIRV_CHECK_ERROR(err, "Failed to build program"); + + clKernelWrapper kernel = clCreateKernel(prog, "vector_times_scalar", &err); + SPIRV_CHECK_ERROR(err, "Failed to create spv kernel"); + + clMemWrapper res = clCreateBuffer(context, CL_MEM_READ_WRITE, res_bytes, NULL, &err); + SPIRV_CHECK_ERROR(err, "Failed to create res buffer"); + + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &res); + SPIRV_CHECK_ERROR(err, "Failed to set arg 0"); + + err = clSetKernelArg(kernel, 1, sizeof(cl_mem), &lhs); + SPIRV_CHECK_ERROR(err, "Failed to set arg 1"); + + err = clSetKernelArg(kernel, 2, sizeof(cl_mem), &rhs); + SPIRV_CHECK_ERROR(err, "Failed to set arg 2"); + + size_t global = num; + err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to enqueue cl kernel"); + + std::vector h_res(num); + err = clEnqueueReadBuffer(queue, res, CL_TRUE, 0, res_bytes, &h_res[0], 0, NULL, NULL); + SPIRV_CHECK_ERROR(err, "Failed to read from ref"); + + for (int i = 0; i < num; i++) { + if (h_res[i] != h_ref[i]) { + log_error("Values do not match at location %d\n", i); + return -1; + } + } + return 0; +} + +#define TEST_VECTOR_TIMES_SCALAR(TYPE, N) \ + TEST_SPIRV_FUNC(op_vector_times_scalar_##TYPE) \ + { \ + if (sizeof(cl_##TYPE) == 2) { \ + PASSIVE_REQUIRE_FP16_SUPPORT(deviceID); \ + } \ + typedef cl_##TYPE##N Tv; \ + typedef cl_##TYPE Ts; \ + const int num = 1 << 20; \ + std::vector lhs(num); \ + std::vector rhs(num); \ + \ + RandomSeed seed(gRandomSeed); \ + \ + for (int i = 0; i < num; i++) { \ + lhs[i] = genrandReal(seed); \ + rhs[i] = genrandReal(seed); \ + } \ + \ + return test_vector_times_scalar(deviceID, \ + context, queue, \ + #TYPE, \ + lhs, rhs); \ + } + +TEST_VECTOR_TIMES_SCALAR(float, 4) +TEST_VECTOR_TIMES_SCALAR(double, 4) diff --git a/test_conformance/spirv_new/types.hpp b/test_conformance/spirv_new/types.hpp new file mode 100644 index 00000000..e7fceba0 --- /dev/null +++ b/test_conformance/spirv_new/types.hpp @@ -0,0 +1,184 @@ +/****************************************************************** +Copyright (c) 2016 The Khronos Group Inc. All Rights Reserved. + +This code is protected by copyright laws and contains material proprietary to the Khronos Group, Inc. +This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not be disclosed in whole or in part to +third parties, and may not be reproduced, republished, distributed, transmitted, displayed, +broadcast or otherwise exploited in any manner without the express prior written permission +of Khronos Group. The receipt or possession of this code does not convey any rights to reproduce, +disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe, +in whole or in part other than under the terms of the Khronos Adopters Agreement +or Khronos Conformance Test Source License Agreement as executed between Khronos and the recipient. +******************************************************************/ + +#pragma once +#include + +#if defined(_MSC_VER) || defined(_WIN32) +#define PACKED(__STRUCT__) __pragma(pack(push, 1)) __STRUCT__ __pragma(pack(pop)) +#elif defined(__GNUC__) || defined(__clang__) +#define PACKED(__STRUCT__) __STRUCT__ __attribute__((packed)) +#endif + +template +inline bool isVectorNotEqual(const T &lhs, const T &rhs) +{ + bool result = false; + for (int i = 0; !result && i < n; i++) { + result |= lhs.s[i] != rhs.s[i]; + } + return result; +} + +#define VEC_NOT_EQ_FUNC(TYPE, N) \ + inline bool operator!=(const TYPE##N &lhs, const TYPE##N &rhs) \ + { \ + return isVectorNotEqual(lhs, rhs); \ + } \ + +VEC_NOT_EQ_FUNC(cl_int, 2) +VEC_NOT_EQ_FUNC(cl_int, 4) +VEC_NOT_EQ_FUNC(cl_uint, 4) +VEC_NOT_EQ_FUNC(cl_float, 2) +VEC_NOT_EQ_FUNC(cl_float, 4) +VEC_NOT_EQ_FUNC(cl_double, 2) +VEC_NOT_EQ_FUNC(cl_double, 4) + +template +bool isNotEqual(const T &lhs, const T &rhs) +{ + return lhs != rhs; +} + +// Can replace the following with tuples if c++11 can be used +template +struct AbstractStruct1 +{ + T val; +}; + +template +inline bool operator != (const AbstractStruct1 &lhs, const AbstractStruct1 &rhs) +{ + return lhs.val != rhs.val; +} + +template +struct AbstractStruct2 +{ + T0 val0; + T1 val1; +}; + + +template +inline bool operator != (const AbstractStruct2 &lhs, + const AbstractStruct2 &rhs) +{ + return lhs.val0 != rhs.val0 || lhs.val1 != rhs.val1; +} + + +template struct is_double { static const bool value = false; }; +template<> struct is_double { static const bool value = true; }; +template<> struct is_double { static const bool value = true; }; + +template +T genrandReal(RandomSeed &seed) +{ + return genrand_real1(seed); +} + +template +T genrandRealVec(RandomSeed &seed) +{ + T res; + for (int i = 0; i < N; i++) { + res.s[i] = genrand_real1(seed); + } + return res; +} + +#define GENRAND_REAL_FUNC(TYPE, N) \ + template<> inline TYPE##N genrandReal(RandomSeed &seed) \ + { \ + return genrandRealVec(seed); \ + } \ + +GENRAND_REAL_FUNC(cl_float, 2) +GENRAND_REAL_FUNC(cl_float, 4) +GENRAND_REAL_FUNC(cl_double, 2) +GENRAND_REAL_FUNC(cl_double, 4) + +template<> inline cl_half genrandReal(RandomSeed &seed) +{ + return (cl_half)(genrand_int32(seed) % 2048); +} + +template +T genrand(RandomSeed &seed) +{ + return genrandReal(seed); +} + +template<> inline cl_int genrand(RandomSeed &seed) +{ + return genrand_int32(seed); +} + +template<> inline cl_long genrand(RandomSeed &seed) +{ + return genrand_int32(seed); +} + +template<> inline cl_short genrand(RandomSeed &seed) +{ + return genrand_int32(seed); +} + +#define GENRAND_INT_VEC(T, N) \ + template<> inline T##N genrand(RandomSeed &seed) \ + { \ + T##N res; \ + for (int i = 0; i < N; i++) { \ + res.s[i] = (T)genrand_int32(seed); \ + } \ + return res; \ + } \ + +GENRAND_INT_VEC(cl_int, 4) +GENRAND_INT_VEC(cl_uint, 4) +GENRAND_INT_VEC(cl_long, 2) +GENRAND_INT_VEC(cl_char, 16) + +template +Tv negOp(Tv in) +{ + return -in; +} + +template +Tv notOp(Tv in) +{ + return ~in; +} + +template +Tv negOpVec(Tv in) +{ + Tv out; + for (int i = 0; i < N; i++) { + out.s[i] = -in.s[i]; + } + return out; +} + +template +Tv notOpVec(Tv in) +{ + Tv out; + for (int i = 0; i < N; i++) { + out.s[i] = ~in.s[i]; + } + return out; +} diff --git a/test_conformance/subgroups/main.cpp b/test_conformance/subgroups/main.cpp index 5a289126..efb7fe8e 100644 --- a/test_conformance/subgroups/main.cpp +++ b/test_conformance/subgroups/main.cpp @@ -40,15 +40,15 @@ ct_assert((sizeof(basefn_names) / sizeof(basefn_names[0])) == (sizeof(basefn_lis static const int num_fns = sizeof(basefn_names) / sizeof(char *); -static int +static test_status checkSubGroupsExtension(cl_device_id device) { if (!is_extension_available(device, "cl_khr_subgroups")) { - log_info("Device does not support 'cl_khr_subgroups'. Skipping the test.\n"); - return CL_INVALID_DEVICE; + log_error("'cl_khr_subgroups' is a required extension, failing.\n"); + return TEST_FAIL; } - return CL_SUCCESS; + return TEST_PASS; } int