1*b8e1544bSIlia Diachkov; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s 2*b8e1544bSIlia Diachkov 3*b8e1544bSIlia Diachkov; CHECK-DAG: OpName [[VECTOR_ADD:%.+]] "vector_add" 4*b8e1544bSIlia Diachkov; CHECK-DAG: OpName [[VECTOR_SUB:%.+]] "vector_sub" 5*b8e1544bSIlia Diachkov; CHECK-DAG: OpName [[VECTOR_MUL:%.+]] "vector_mul" 6*b8e1544bSIlia Diachkov; CHECK-DAG: OpName [[VECTOR_UDIV:%.+]] "vector_udiv" 7*b8e1544bSIlia Diachkov; CHECK-DAG: OpName [[VECTOR_SDIV:%.+]] "vector_sdiv" 8*b8e1544bSIlia Diachkov; TODO: add tests for urem + srem 9*b8e1544bSIlia Diachkov; TODO: add test for OpSNegate 10*b8e1544bSIlia Diachkov 11*b8e1544bSIlia Diachkov; CHECK-NOT: DAG-FENCE 12*b8e1544bSIlia Diachkov 13*b8e1544bSIlia Diachkov; CHECK-DAG: [[I16:%.+]] = OpTypeInt 16 14*b8e1544bSIlia Diachkov; CHECK-DAG: [[VECTOR:%.+]] = OpTypeVector [[I16]] 15*b8e1544bSIlia Diachkov; CHECK-DAG: [[VECTOR_FN:%.+]] = OpTypeFunction [[VECTOR]] [[VECTOR]] [[VECTOR]] 16*b8e1544bSIlia Diachkov 17*b8e1544bSIlia Diachkov; CHECK-NOT: DAG-FENCE 18*b8e1544bSIlia Diachkov 19*b8e1544bSIlia Diachkov 20*b8e1544bSIlia Diachkov; Test add on vector: 21*b8e1544bSIlia Diachkovdefine <2 x i16> @vector_add(<2 x i16> %a, <2 x i16> %b) { 22*b8e1544bSIlia Diachkov %c = add <2 x i16> %a, %b 23*b8e1544bSIlia Diachkov ret <2 x i16> %c 24*b8e1544bSIlia Diachkov} 25*b8e1544bSIlia Diachkov 26*b8e1544bSIlia Diachkov; CHECK: [[VECTOR_ADD]] = OpFunction [[VECTOR]] None [[VECTOR_FN]] 27*b8e1544bSIlia Diachkov; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[VECTOR]] 28*b8e1544bSIlia Diachkov; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[VECTOR]] 29*b8e1544bSIlia Diachkov; CHECK: OpLabel 30*b8e1544bSIlia Diachkov; CHECK: [[C:%.+]] = OpIAdd [[VECTOR]] [[A]] [[B]] 31*b8e1544bSIlia Diachkov; CHECK: OpReturnValue [[C]] 32*b8e1544bSIlia Diachkov; CHECK-NEXT: OpFunctionEnd 33*b8e1544bSIlia Diachkov 34*b8e1544bSIlia Diachkov 35*b8e1544bSIlia Diachkov; Test sub on vector: 36*b8e1544bSIlia Diachkovdefine <2 x i16> @vector_sub(<2 x i16> %a, <2 x i16> %b) { 37*b8e1544bSIlia Diachkov %c = sub <2 x i16> %a, %b 38*b8e1544bSIlia Diachkov ret <2 x i16> %c 39*b8e1544bSIlia Diachkov} 40*b8e1544bSIlia Diachkov 41*b8e1544bSIlia Diachkov; CHECK: [[VECTOR_SUB]] = OpFunction [[VECTOR]] None [[VECTOR_FN]] 42*b8e1544bSIlia Diachkov; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[VECTOR]] 43*b8e1544bSIlia Diachkov; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[VECTOR]] 44*b8e1544bSIlia Diachkov; CHECK: OpLabel 45*b8e1544bSIlia Diachkov; CHECK: [[C:%.+]] = OpISub [[VECTOR]] [[A]] [[B]] 46*b8e1544bSIlia Diachkov; CHECK: OpReturnValue [[C]] 47*b8e1544bSIlia Diachkov; CHECK-NEXT: OpFunctionEnd 48*b8e1544bSIlia Diachkov 49*b8e1544bSIlia Diachkov 50*b8e1544bSIlia Diachkov; Test mul on vector: 51*b8e1544bSIlia Diachkovdefine <2 x i16> @vector_mul(<2 x i16> %a, <2 x i16> %b) { 52*b8e1544bSIlia Diachkov %c = mul <2 x i16> %a, %b 53*b8e1544bSIlia Diachkov ret <2 x i16> %c 54*b8e1544bSIlia Diachkov} 55*b8e1544bSIlia Diachkov 56*b8e1544bSIlia Diachkov; CHECK: [[VECTOR_MUL]] = OpFunction [[VECTOR]] None [[VECTOR_FN]] 57*b8e1544bSIlia Diachkov; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[VECTOR]] 58*b8e1544bSIlia Diachkov; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[VECTOR]] 59*b8e1544bSIlia Diachkov; CHECK: OpLabel 60*b8e1544bSIlia Diachkov; CHECK: [[C:%.+]] = OpIMul [[VECTOR]] [[A]] [[B]] 61*b8e1544bSIlia Diachkov; CHECK: OpReturnValue [[C]] 62*b8e1544bSIlia Diachkov; CHECK-NEXT: OpFunctionEnd 63*b8e1544bSIlia Diachkov 64*b8e1544bSIlia Diachkov 65*b8e1544bSIlia Diachkov; Test udiv on vector: 66*b8e1544bSIlia Diachkovdefine <2 x i16> @vector_udiv(<2 x i16> %a, <2 x i16> %b) { 67*b8e1544bSIlia Diachkov %c = udiv <2 x i16> %a, %b 68*b8e1544bSIlia Diachkov ret <2 x i16> %c 69*b8e1544bSIlia Diachkov} 70*b8e1544bSIlia Diachkov 71*b8e1544bSIlia Diachkov; CHECK: [[VECTOR_UDIV]] = OpFunction [[VECTOR]] None [[VECTOR_FN]] 72*b8e1544bSIlia Diachkov; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[VECTOR]] 73*b8e1544bSIlia Diachkov; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[VECTOR]] 74*b8e1544bSIlia Diachkov; CHECK: OpLabel 75*b8e1544bSIlia Diachkov; CHECK: [[C:%.+]] = OpUDiv [[VECTOR]] [[A]] [[B]] 76*b8e1544bSIlia Diachkov; CHECK: OpReturnValue [[C]] 77*b8e1544bSIlia Diachkov; CHECK-NEXT: OpFunctionEnd 78*b8e1544bSIlia Diachkov 79*b8e1544bSIlia Diachkov 80*b8e1544bSIlia Diachkov; Test sdiv on vector: 81*b8e1544bSIlia Diachkovdefine <2 x i16> @vector_sdiv(<2 x i16> %a, <2 x i16> %b) { 82*b8e1544bSIlia Diachkov %c = sdiv <2 x i16> %a, %b 83*b8e1544bSIlia Diachkov ret <2 x i16> %c 84*b8e1544bSIlia Diachkov} 85*b8e1544bSIlia Diachkov 86*b8e1544bSIlia Diachkov; CHECK: [[VECTOR_SDIV]] = OpFunction [[VECTOR]] None [[VECTOR_FN]] 87*b8e1544bSIlia Diachkov; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[VECTOR]] 88*b8e1544bSIlia Diachkov; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[VECTOR]] 89*b8e1544bSIlia Diachkov; CHECK: OpLabel 90*b8e1544bSIlia Diachkov; CHECK: [[C:%.+]] = OpSDiv [[VECTOR]] [[A]] [[B]] 91*b8e1544bSIlia Diachkov; CHECK: OpReturnValue [[C]] 92*b8e1544bSIlia Diachkov; CHECK-NEXT: OpFunctionEnd 93