@@ -1000,3 +1000,69 @@ func.func @unpack_half_2x16_scalar_out(%arg0 : i32) -> () {
10001000 %0 = spirv.GL.UnpackHalf2x16 %arg0 : i32 -> f32
10011001 return
10021002}
1003+
1004+ // -----
1005+
1006+ //===----------------------------------------------------------------------===//
1007+ // spirv.GL.Length
1008+ //===----------------------------------------------------------------------===//
1009+
1010+ func.func @length (%arg0 : f32 ) -> () {
1011+ // CHECK: spirv.GL.Length {{%.*}} : f32 -> f32
1012+ %0 = spirv.GL.Length %arg0 : f32 -> f32
1013+ return
1014+ }
1015+
1016+ func.func @lengthvec (%arg0 : vector <3 xf32 >) -> () {
1017+ // CHECK: spirv.GL.Length {{%.*}} : vector<3xf32> -> f32
1018+ %0 = spirv.GL.Length %arg0 : vector <3 xf32 > -> f32
1019+ return
1020+ }
1021+
1022+ // -----
1023+
1024+ func.func @length_i32_in (%arg0 : i32 ) -> () {
1025+ // expected-error @+1 {{op operand #0 must be 16/32/64-bit float or vector of 16/32/64-bit float values of length 2/3/4/8/16, but got 'i32'}}
1026+ %0 = spirv.GL.Length %arg0 : i32 -> f32
1027+ return
1028+ }
1029+
1030+ // -----
1031+
1032+ func.func @length_f16_in (%arg0 : f16 ) -> () {
1033+ // expected-error @+1 {{op failed to verify that result type must match operand element type}}
1034+ %0 = spirv.GL.Length %arg0 : f16 -> f32
1035+ return
1036+ }
1037+
1038+ // -----
1039+
1040+ func.func @length_i32vec_in (%arg0 : vector <3 xi32 >) -> () {
1041+ // expected-error @+1 {{op operand #0 must be 16/32/64-bit float or vector of 16/32/64-bit float values of length 2/3/4/8/16, but got 'vector<3xi32>'}}
1042+ %0 = spirv.GL.Length %arg0 : vector <3 xi32 > -> f32
1043+ return
1044+ }
1045+
1046+ // -----
1047+
1048+ func.func @length_f16vec_in (%arg0 : vector <3 xf16 >) -> () {
1049+ // expected-error @+1 {{op failed to verify that result type must match operand element type}}
1050+ %0 = spirv.GL.Length %arg0 : vector <3 xf16 > -> f32
1051+ return
1052+ }
1053+
1054+ // -----
1055+
1056+ func.func @length_i32_out (%arg0 : vector <3 xf32 >) -> () {
1057+ // expected-error @+1 {{op result #0 must be 16/32/64-bit float, but got 'i32'}}
1058+ %0 = spirv.GL.Length %arg0 : vector <3 xf32 > -> i32
1059+ return
1060+ }
1061+
1062+ // -----
1063+
1064+ func.func @length_vec_out (%arg0 : vector <3 xf32 >) -> () {
1065+ // expected-error @+1 {{op result #0 must be 16/32/64-bit float, but got 'vector<3xf32>'}}
1066+ %0 = spirv.GL.Length %arg0 : vector <3 xf32 > -> vector <3 xf32 >
1067+ return
1068+ }
0 commit comments