| 
17 | 17 | ; CHECK-EXP-DAG: %[[#twentyfour:]] = OpConstant %[[#int_8]] 24  | 
18 | 18 | 
 
  | 
19 | 19 | ; CHECK-LABEL: Begin function test_dot  | 
20 |  | -define noundef i32 @test_dot(i32 noundef %a, i32 noundef %b, i32 noundef %c) {  | 
 | 20 | +define noundef i32 @test_dot(i32 noundef %acc, i32 noundef %x, i32 noundef %y) {  | 
21 | 21 | entry:  | 
22 |  | -; CHECK: %[[#A:]] = OpFunctionParameter %[[#int_32]]  | 
23 |  | -; CHECK: %[[#B:]] = OpFunctionParameter %[[#int_32]]  | 
24 |  | -; CHECK: %[[#C:]] = OpFunctionParameter %[[#int_32]]  | 
 | 22 | +; CHECK: %[[#ACC:]] = OpFunctionParameter %[[#int_32]]  | 
 | 23 | +; CHECK: %[[#X:]] = OpFunctionParameter %[[#int_32]]  | 
 | 24 | +; CHECK: %[[#Y:]] = OpFunctionParameter %[[#int_32]]  | 
25 | 25 | 
 
  | 
26 | 26 | ; Test that we use the dot product op when capabilities allow  | 
27 | 27 | 
 
  | 
28 |  | -; CHECK-DOT: %[[#DOT:]] = OpSDot %[[#int_32]] %[[#A]] %[[#B]]  | 
29 |  | -; CHECK-DOT: %[[#RES:]] = OpIAdd %[[#int_32]] %[[#DOT]] %[[#C]]  | 
 | 28 | +; CHECK-DOT: %[[#DOT:]] = OpSDot %[[#int_32]] %[[#X]] %[[#Y]]  | 
 | 29 | +; CHECK-DOT: %[[#RES:]] = OpIAdd %[[#int_32]] %[[#DOT]] %[[#ACC]]  | 
30 | 30 | 
 
  | 
31 | 31 | ; Test expansion is used when spirv dot product capabilities aren't available:  | 
32 | 32 | 
 
  | 
33 | 33 | ; First element of the packed vector  | 
34 |  | -; CHECK-EXP: %[[#A0:]] = OpBitFieldSExtract %[[#int_32]] %[[#A]] %[[#zero]] %[[#eight]]  | 
35 |  | -; CHECK-EXP: %[[#B0:]] = OpBitFieldSExtract %[[#int_32]] %[[#B]] %[[#zero]] %[[#eight]]  | 
36 |  | -; CHECK-EXP: %[[#MUL0:]] = OpIMul %[[#int_32]] %[[#A0]] %[[#B0]]  | 
 | 34 | +; CHECK-EXP: %[[#X0:]] = OpBitFieldSExtract %[[#int_32]] %[[#X]] %[[#zero]] %[[#eight]]  | 
 | 35 | +; CHECK-EXP: %[[#Y0:]] = OpBitFieldSExtract %[[#int_32]] %[[#Y]] %[[#zero]] %[[#eight]]  | 
 | 36 | +; CHECK-EXP: %[[#MUL0:]] = OpIMul %[[#int_32]] %[[#X0]] %[[#Y0]]  | 
37 | 37 | ; CHECK-EXP: %[[#MASK0:]] = OpBitFieldSExtract %[[#int_32]] %[[#MUL0]] %[[#zero]] %[[#eight]]  | 
38 |  | -; CHECK-EXP: %[[#ACC0:]] = OpIAdd %[[#int_32]] %[[#C]] %[[#MASK0]]  | 
 | 38 | +; CHECK-EXP: %[[#ACC0:]] = OpIAdd %[[#int_32]] %[[#ACC]] %[[#MASK0]]  | 
39 | 39 | 
 
  | 
40 | 40 | ; Second element of the packed vector  | 
41 |  | -; CHECK-EXP: %[[#A1:]] = OpBitFieldSExtract %[[#int_32]] %[[#A]] %[[#eight]] %[[#eight]]  | 
42 |  | -; CHECK-EXP: %[[#B1:]] = OpBitFieldSExtract %[[#int_32]] %[[#B]] %[[#eight]] %[[#eight]]  | 
43 |  | -; CHECK-EXP: %[[#MUL1:]] = OpIMul %[[#int_32]] %[[#A1]] %[[#B1]]  | 
 | 41 | +; CHECK-EXP: %[[#X1:]] = OpBitFieldSExtract %[[#int_32]] %[[#X]] %[[#eight]] %[[#eight]]  | 
 | 42 | +; CHECK-EXP: %[[#Y1:]] = OpBitFieldSExtract %[[#int_32]] %[[#Y]] %[[#eight]] %[[#eight]]  | 
 | 43 | +; CHECK-EXP: %[[#MUL1:]] = OpIMul %[[#int_32]] %[[#X1]] %[[#Y1]]  | 
44 | 44 | ; CHECK-EXP: %[[#MASK1:]] = OpBitFieldSExtract %[[#int_32]] %[[#MUL1]] %[[#zero]] %[[#eight]]  | 
45 | 45 | ; CHECK-EXP: %[[#ACC1:]] = OpIAdd %[[#int_32]] %[[#ACC0]] %[[#MASK1]]  | 
46 | 46 | 
 
  | 
47 | 47 | ; Third element of the packed vector  | 
48 |  | -; CHECK-EXP: %[[#A2:]] = OpBitFieldSExtract %[[#int_32]] %[[#A]] %[[#sixteen]] %[[#eight]]  | 
49 |  | -; CHECK-EXP: %[[#B2:]] = OpBitFieldSExtract %[[#int_32]] %[[#B]] %[[#sixteen]] %[[#eight]]  | 
50 |  | -; CHECK-EXP: %[[#MUL2:]] = OpIMul %[[#int_32]] %[[#A2]] %[[#B2]]  | 
 | 48 | +; CHECK-EXP: %[[#X2:]] = OpBitFieldSExtract %[[#int_32]] %[[#X]] %[[#sixteen]] %[[#eight]]  | 
 | 49 | +; CHECK-EXP: %[[#Y2:]] = OpBitFieldSExtract %[[#int_32]] %[[#Y]] %[[#sixteen]] %[[#eight]]  | 
 | 50 | +; CHECK-EXP: %[[#MUL2:]] = OpIMul %[[#int_32]] %[[#X2]] %[[#Y2]]  | 
51 | 51 | ; CHECK-EXP: %[[#MASK2:]] = OpBitFieldSExtract %[[#int_32]] %[[#MUL2]] %[[#zero]] %[[#eight]]  | 
52 | 52 | ; CHECK-EXP: %[[#ACC2:]] = OpIAdd %[[#int_32]] %[[#ACC1]] %[[#MASK2]]  | 
53 | 53 | 
 
  | 
54 | 54 | ; Fourth element of the packed vector  | 
55 |  | -; CHECK-EXP: %[[#A3:]] = OpBitFieldSExtract %[[#int_32]] %[[#A]] %[[#twentyfour]] %[[#eight]]  | 
56 |  | -; CHECK-EXP: %[[#B3:]] = OpBitFieldSExtract %[[#int_32]] %[[#B]] %[[#twentyfour]] %[[#eight]]  | 
57 |  | -; CHECK-EXP: %[[#MUL3:]] = OpIMul %[[#int_32]] %[[#A3]] %[[#B3]]  | 
 | 55 | +; CHECK-EXP: %[[#X3:]] = OpBitFieldSExtract %[[#int_32]] %[[#X]] %[[#twentyfour]] %[[#eight]]  | 
 | 56 | +; CHECK-EXP: %[[#Y3:]] = OpBitFieldSExtract %[[#int_32]] %[[#Y]] %[[#twentyfour]] %[[#eight]]  | 
 | 57 | +; CHECK-EXP: %[[#MUL3:]] = OpIMul %[[#int_32]] %[[#X3]] %[[#Y3]]  | 
58 | 58 | ; CHECK-EXP: %[[#MASK3:]] = OpBitFieldSExtract %[[#int_32]] %[[#MUL3]] %[[#zero]] %[[#eight]]  | 
59 | 59 | 
 
  | 
60 | 60 | ; CHECK-EXP: %[[#RES:]] = OpIAdd %[[#int_32]] %[[#ACC2]] %[[#MASK3]]  | 
61 | 61 | ; CHECK: OpReturnValue %[[#RES]]  | 
62 |  | -  %spv.dot = call i32 @llvm.spv.dot4add.i8packed(i32 %a, i32 %b, i32 %c)  | 
 | 62 | +  %spv.dot = call i32 @llvm.spv.dot4add.i8packed(i32 %acc, i32 %x, i32 %y)  | 
63 | 63 | 
 
  | 
64 | 64 |   ret i32 %spv.dot  | 
65 | 65 | }  | 
0 commit comments