Place OpVariable at the beginning of the block
authorAlexander Galazin <alexander.galazin@arm.com>
Mon, 15 Oct 2018 15:36:38 +0000 (17:36 +0200)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Tue, 16 Oct 2018 09:17:13 +0000 (05:17 -0400)
SPIR-V requires that all OpVariable instructions in a function
must be in the first block in the function.

VK-GL-CTS issue: 1382

Components: Vulkan, Framework

Affects:
dEQP-VK.spirv_assembly.instruction.compute.loop_control.*
dEQP-VK.spirv_assembly.instruction.compute.8bit_storage.*
dEQP-VK.spirv_assembly.instruction.compute.16bit_storage.*
dEQP-VK.spirv_assembly.instruction.compute.pointer_parameter.*

Change-Id: Ib012eec83ccd130a7d6d586e3fdb529b908c21b3
(cherry picked from commit 7273686be36aeb14f7f86077782c4141a74931e3)

external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsm16bitStorageTests.cpp
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsm8bitStorageTests.cpp
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmLoopDepInfTests.cpp
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmLoopDepLenTests.cpp
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmPointerParameterTests.cpp

index 2fb78fe..299ff9f 100644 (file)
@@ -3272,10 +3272,10 @@ void addCompute16bitStructMixedTypesGroup (tcu::TestCaseGroup* group)
                "%id      = OpVariable %uvec3ptr Input\n"
                "%main    = OpFunction %void None %voidf\n"
                "%label   = OpLabel\n"
+               "%ndxArrz = OpVariable %fp_i32  Function\n"
                "%idval   = OpLoad %uvec3 %id\n"
                "%x       = OpCompositeExtract %u32 %idval 0\n"
                "%y       = OpCompositeExtract %u32 %idval 1\n"
-               "%ndxArrz = OpVariable %fp_i32  Function\n"
                "\n"//strutOut.b16 = strutIn.b16
                "%inP1  = OpAccessChain %i16${inPtr} %ssboIN %zero %x %zero\n"
                "%inV1  = OpLoad %i16 %inP1\n"
index 961554f..2e95eb8 100644 (file)
@@ -2663,10 +2663,10 @@ void addCompute8bitStorage8bitStructMixedTypesGroup (tcu::TestCaseGroup* group)
                "%id                = OpVariable %uvec3ptr Input\n"
                "%main              = OpFunction %void None %voidf\n"
                "%label             = OpLabel\n"
+               "%ndxArrz           = OpVariable %fp_i32  Function\n"
                "%idval             = OpLoad %uvec3 %id\n"
                "%x                 = OpCompositeExtract %u32 %idval 0\n"
                "%y                 = OpCompositeExtract %u32 %idval 1\n"
-               "%ndxArrz                       = OpVariable %fp_i32  Function\n"
                "\n"//strutOut.b8 = strutIn.b8
                "%inP1  = OpAccessChain %i8${inPtr} %ssboIN %zero %x %zero\n"
                "%inV1  = OpLoad %i8 %inP1\n"
index 581a3eb..939bc0e 100644 (file)
@@ -91,8 +91,8 @@ static void getComputeSourceCode (std::string& computeSourceCode)
                "%f32arr12      = OpVariable %f32arr12ptr_t Function\n"
 
                "%i1            = OpVariable %u32ptr Function\n"
-               "                 OpStore %i1 %uzero\n"
                "%i2            = OpVariable %u32ptr Function\n"
+               "                 OpStore %i1 %uzero\n"
                "                 OpStore %i2 %uzero\n"
 
                "%idval         = OpLoad %uvec3 %id\n"
index b4a6049..6126831 100644 (file)
@@ -98,8 +98,8 @@ static void getComputeSourceCode (std::string& computeSourceCode)
                "%f32arr12      = OpVariable %f32arr12ptr_t Function\n"
 
                "%i1            = OpVariable %u32ptr Function\n"
-               "                 OpStore %i1 %uzero\n"
                "%i2            = OpVariable %u32ptr Function\n"
+               "                 OpStore %i1 %uzero\n"
                "                 OpStore %i2 %six\n"
 
                "%idval         = OpLoad %uvec3 %id\n"
index 50a25c8..af80b97 100644 (file)
@@ -339,9 +339,9 @@ void addComputePointerBufferMemoryTest (tcu::TestCaseGroup* group)
                        "          %_ptr_sb_vec4 = OpTypePointer StorageBuffer %vec4\n"
                        "                  %main = OpFunction %void None %void_func\n"
                        "                 %entry = OpLabel\n"
+                       "                   %idx = OpVariable %_ptr_Function_uint Function\n"
                        "            %inv_id_ptr = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %uint_0\n"
                        "                %inv_id = OpLoad %uint %inv_id_ptr\n"
-                       "                   %idx = OpVariable %_ptr_Function_uint Function\n"
                        "                          OpStore %idx %inv_id\n"
                        "                  %ptr0 = OpAccessChain %arr_vec4_16_ptr %dataOutput %int_0\n"
                        "                  %ptr1 = OpAccessChain %arr_vec4_rt_ptr %dataOutput %int_1\n"
@@ -464,9 +464,9 @@ void addComputePointerBufferMemoryVariablePointersTest (tcu::TestCaseGroup* grou
                        "          %_ptr_sb_vec4 = OpTypePointer StorageBuffer %vec4\n"
                        "                  %main = OpFunction %void None %void_func\n"
                        "                 %entry = OpLabel\n"
+                       "                   %idx = OpVariable %_ptr_Function_uint Function\n"
                        "            %inv_id_ptr = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %uint_0\n"
                        "                %inv_id = OpLoad %uint %inv_id_ptr\n"
-                       "                   %idx = OpVariable %_ptr_Function_uint Function\n"
                        "                          OpStore %idx %inv_id\n"
                        "                  %ptr0 = OpAccessChain %arr_vec4_16_ptr %dataOutput %int_0\n"
                        "                  %ptr1 = OpAccessChain %arr_vec4_rt_ptr %dataOutput %int_1\n"
@@ -609,9 +609,9 @@ void addComputePointerWorkgroupMemoryVariablePointersTest (tcu::TestCaseGroup* g
                        "          %_ptr_wg_vec4 = OpTypePointer Workgroup %vec4\n"
                        "                  %main = OpFunction %void None %void_func\n"
                        "                 %entry = OpLabel\n"
+                       "                   %idx = OpVariable %_ptr_Function_uint Function\n"
                        "            %inv_id_ptr = OpAccessChain %_ptr_Input_uint %gl_LocalInvocationID %uint_0\n"
                        "                %inv_id = OpLoad %uint %inv_id_ptr\n"
-                       "                   %idx = OpVariable %_ptr_Function_uint Function\n"
                        "                          OpStore %idx %inv_id\n"
                        "                  %ptr0 = OpAccessChain %arr_vec4_16_wg_ptr %sharedData %int_0\n"
                        "                  %ptr1 = OpAccessChain %arr_vec4_16_wg_ptr %sharedData %int_1\n"