; SPIR-V
; Version: 1.0
; Generator: Khronos Glslang Reference Front End; 1
; Bound: 30
; Schema: 0
               OpCapability Shader
          %1 = OpExtInstImport "GLSL.std.450"
               OpMemoryModel Logical GLSL450
               OpEntryPoint GLCompute %func "main"
               OpExecutionMode %func LocalSize 1 1 1
               OpSource ESSL 310
               OpSourceExtension "GL_GOOGLE_cpp_style_line_directive"
               OpSourceExtension "GL_GOOGLE_include_directive"
               OpMemberDecorate %input_struct 0 Offset 0
               OpMemberDecorate %input_struct 1 Offset 16
               OpMemberDecorate %output_struct 0 Offset 0
               OpMemberDecorate %output_struct 1 Offset 16
               OpDecorate %input_struct BufferBlock
               OpDecorate %inputs DescriptorSet 0
               OpDecorate %inputs Binding 0
               OpDecorate %output_struct BufferBlock
               OpDecorate %outputs DescriptorSet 0
               OpDecorate %outputs Binding 1

          %void = OpTypeVoid
          %main_func = OpTypeFunction %void

          %uint = OpTypeInt 32 0
          %uvec4 = OpTypeVector %uint 4

         %int = OpTypeInt 32 1
         %ivec4 = OpTypeVector %int 4

         %ivec4_ptr = OpTypePointer Uniform %ivec4
         %uvec4_ptr = OpTypePointer Uniform %uvec4

		 %zero = OpConstant %int 0
		 %one = OpConstant %int 1

         %input_struct = OpTypeStruct %ivec4 %uvec4
         %input_struct_ptr = OpTypePointer Uniform %input_struct
         %inputs = OpVariable %input_struct_ptr Uniform
         %output_struct = OpTypeStruct %uvec4 %ivec4
         %output_struct_ptr = OpTypePointer Uniform %output_struct
         %outputs = OpVariable %output_struct_ptr Uniform

          %func = OpFunction %void None %main_func
          %block = OpLabel

         %input1_ptr = OpAccessChain %ivec4_ptr %inputs %zero
         %input0_ptr = OpAccessChain %uvec4_ptr %inputs %one
         %input1 = OpLoad %ivec4 %input1_ptr
         %input0 = OpLoad %uvec4 %input0_ptr

         %output_ptr_uvec4 = OpAccessChain %uvec4_ptr %outputs %zero
         %output_ptr_ivec4 = OpAccessChain %ivec4_ptr %outputs %one

; Test all variants of SDiv
         %result_iadd_0 = OpSDiv %uvec4 %input0 %input1
         %result_iadd_1 = OpSDiv %uvec4 %input1 %input0
         %result_iadd_2 = OpSDiv %uvec4 %input0 %input0
         %result_iadd_3 = OpSDiv %uvec4 %input1 %input1
         %result_iadd_4 = OpSDiv %ivec4 %input0 %input0
         %result_iadd_5 = OpSDiv %ivec4 %input1 %input1
         %result_iadd_6 = OpSDiv %ivec4 %input0 %input1
         %result_iadd_7 = OpSDiv %ivec4 %input1 %input0
			   OpStore %output_ptr_uvec4 %result_iadd_0
			   OpStore %output_ptr_uvec4 %result_iadd_1
			   OpStore %output_ptr_uvec4 %result_iadd_2
			   OpStore %output_ptr_uvec4 %result_iadd_3
			   OpStore %output_ptr_ivec4 %result_iadd_4
			   OpStore %output_ptr_ivec4 %result_iadd_5
			   OpStore %output_ptr_ivec4 %result_iadd_6
			   OpStore %output_ptr_ivec4 %result_iadd_7

               OpReturn
               OpFunctionEnd
