1 ; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s
3 ; CHECK-DAG: OpName [[SCALAR_SHL:%.+]] "scalar_shl"
4 ; CHECK-DAG: OpName [[SCALAR_LSHR:%.+]] "scalar_lshr"
5 ; CHECK-DAG: OpName [[SCALAR_ASHR:%.+]] "scalar_ashr"
6 ; CHECK-DAG: OpName [[SCALAR_AND:%.+]] "scalar_and"
7 ; CHECK-DAG: OpName [[SCALAR_OR:%.+]] "scalar_or"
8 ; CHECK-DAG: OpName [[SCALAR_XOR:%.+]] "scalar_xor"
10 ; CHECK-NOT: DAG-FENCE
12 ; CHECK-DAG: [[SCALAR:%.+]] = OpTypeInt 32
13 ; CHECK-DAG: [[SCALAR_FN:%.+]] = OpTypeFunction [[SCALAR]] [[SCALAR]] [[SCALAR]]
15 ; CHECK-NOT: DAG-FENCE
18 ;; Test shl on scalar:
19 define i32 @scalar_shl(i32 %a, i32 %b) {
24 ; CHECK: [[SCALAR_SHL]] = OpFunction [[SCALAR]] None [[SCALAR_FN]]
25 ; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[SCALAR]]
26 ; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[SCALAR]]
28 ; CHECK: [[C:%.+]] = OpShiftLeftLogical [[SCALAR]] [[A]] [[B]]
29 ; CHECK: OpReturnValue [[C]]
30 ; CHECK-NEXT: OpFunctionEnd
33 ;; Test lshr on scalar:
34 define i32 @scalar_lshr(i32 %a, i32 %b) {
39 ; CHECK: [[SCALAR_LSHR]] = OpFunction [[SCALAR]] None [[SCALAR_FN]]
40 ; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[SCALAR]]
41 ; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[SCALAR]]
43 ; CHECK: [[C:%.+]] = OpShiftRightLogical [[SCALAR]] [[A]] [[B]]
44 ; CHECK: OpReturnValue [[C]]
45 ; CHECK-NEXT: OpFunctionEnd
48 ;; Test ashr on scalar:
49 define i32 @scalar_ashr(i32 %a, i32 %b) {
54 ; CHECK: [[SCALAR_ASHR]] = OpFunction [[SCALAR]] None [[SCALAR_FN]]
55 ; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[SCALAR]]
56 ; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[SCALAR]]
58 ; CHECK: [[C:%.+]] = OpShiftRightArithmetic [[SCALAR]] [[A]] [[B]]
59 ; CHECK: OpReturnValue [[C]]
60 ; CHECK-NEXT: OpFunctionEnd
63 ;; Test and on scalar:
64 define i32 @scalar_and(i32 %a, i32 %b) {
69 ; CHECK: [[SCALAR_AND]] = OpFunction [[SCALAR]] None [[SCALAR_FN]]
70 ; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[SCALAR]]
71 ; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[SCALAR]]
73 ; CHECK: [[C:%.+]] = OpBitwiseAnd [[SCALAR]] [[A]] [[B]]
74 ; CHECK: OpReturnValue [[C]]
75 ; CHECK-NEXT: OpFunctionEnd
79 define i32 @scalar_or(i32 %a, i32 %b) {
84 ; CHECK: [[SCALAR_OR]] = OpFunction [[SCALAR]] None [[SCALAR_FN]]
85 ; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[SCALAR]]
86 ; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[SCALAR]]
88 ; CHECK: [[C:%.+]] = OpBitwiseOr [[SCALAR]] [[A]] [[B]]
89 ; CHECK: OpReturnValue [[C]]
90 ; CHECK-NEXT: OpFunctionEnd
93 ;; Test xor on scalar:
94 define i32 @scalar_xor(i32 %a, i32 %b) {
99 ; CHECK: [[SCALAR_XOR]] = OpFunction [[SCALAR]] None [[SCALAR_FN]]
100 ; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[SCALAR]]
101 ; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[SCALAR]]
103 ; CHECK: [[C:%.+]] = OpBitwiseXor [[SCALAR]] [[A]] [[B]]
104 ; CHECK: OpReturnValue [[C]]
105 ; CHECK-NEXT: OpFunctionEnd