Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / SPIRV / instructions / scalar-integer-arithmetic.ll
blobda32feecc6d6db125d6bf33d008e4388dd99b2f9
1 ; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s
3 ; CHECK-DAG: OpName [[SCALAR_ADD:%.+]] "scalar_add"
4 ; CHECK-DAG: OpName [[SCALAR_SUB:%.+]] "scalar_sub"
5 ; CHECK-DAG: OpName [[SCALAR_MUL:%.+]] "scalar_mul"
6 ; CHECK-DAG: OpName [[SCALAR_UDIV:%.+]] "scalar_udiv"
7 ; CHECK-DAG: OpName [[SCALAR_SDIV:%.+]] "scalar_sdiv"
8 ;; TODO: add tests for urem + srem
9 ;; TODO: add test for OpSNegate
11 ; CHECK-NOT: DAG-FENCE
13 ; CHECK-DAG: [[SCALAR:%.+]] = OpTypeInt 32
14 ; CHECK-DAG: [[SCALAR_FN:%.+]] = OpTypeFunction [[SCALAR]] [[SCALAR]] [[SCALAR]]
16 ; CHECK-NOT: DAG-FENCE
19 ;; Test add on scalar:
20 define i32 @scalar_add(i32 %a, i32 %b) {
21     %c = add i32 %a, %b
22     ret i32 %c
25 ; CHECK:      [[SCALAR_ADD]] = OpFunction [[SCALAR]] None [[SCALAR_FN]]
26 ; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[SCALAR]]
27 ; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[SCALAR]]
28 ; CHECK:      OpLabel
29 ; CHECK:      [[C:%.+]] = OpIAdd [[SCALAR]] [[A]] [[B]]
30 ; CHECK:      OpReturnValue [[C]]
31 ; CHECK-NEXT: OpFunctionEnd
34 ;; Test sub on scalar:
35 define i32 @scalar_sub(i32 %a, i32 %b) {
36     %c = sub i32 %a, %b
37     ret i32 %c
40 ; CHECK:      [[SCALAR_SUB]] = OpFunction [[SCALAR]] None [[SCALAR_FN]]
41 ; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[SCALAR]]
42 ; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[SCALAR]]
43 ; CHECK:      OpLabel
44 ; CHECK:      [[C:%.+]] = OpISub [[SCALAR]] [[A]] [[B]]
45 ; CHECK:      OpReturnValue [[C]]
46 ; CHECK-NEXT: OpFunctionEnd
49 ;; Test mul on scalar:
50 define i32 @scalar_mul(i32 %a, i32 %b) {
51     %c = mul i32 %a, %b
52     ret i32 %c
55 ; CHECK:      [[SCALAR_MUL]] = OpFunction [[SCALAR]] None [[SCALAR_FN]]
56 ; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[SCALAR]]
57 ; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[SCALAR]]
58 ; CHECK:      OpLabel
59 ; CHECK:      [[C:%.+]] = OpIMul [[SCALAR]] [[A]] [[B]]
60 ; CHECK:      OpReturnValue [[C]]
61 ; CHECK-NEXT: OpFunctionEnd
64 ;; Test udiv on scalar:
65 define i32 @scalar_udiv(i32 %a, i32 %b) {
66     %c = udiv i32 %a, %b
67     ret i32 %c
70 ; CHECK:      [[SCALAR_UDIV]] = OpFunction [[SCALAR]] None [[SCALAR_FN]]
71 ; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[SCALAR]]
72 ; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[SCALAR]]
73 ; CHECK:      OpLabel
74 ; CHECK:      [[C:%.+]] = OpUDiv [[SCALAR]] [[A]] [[B]]
75 ; CHECK:      OpReturnValue [[C]]
76 ; CHECK-NEXT: OpFunctionEnd
79 ;; Test sdiv on scalar:
80 define i32 @scalar_sdiv(i32 %a, i32 %b) {
81     %c = sdiv i32 %a, %b
82     ret i32 %c
85 ; CHECK:      [[SCALAR_SDIV]] = OpFunction [[SCALAR]] None [[SCALAR_FN]]
86 ; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[SCALAR]]
87 ; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[SCALAR]]
88 ; CHECK:      OpLabel
89 ; CHECK:      [[C:%.+]] = OpSDiv [[SCALAR]] [[A]] [[B]]
90 ; CHECK:      OpReturnValue [[C]]
91 ; CHECK-NEXT: OpFunctionEnd