Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / LoongArch / ir-instruction / shl.ll
blob2be777cc8db016af120929b5e968b2035aa12de9
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc --mtriple=loongarch32 -mattr=+d < %s | FileCheck %s --check-prefix=LA32
3 ; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefix=LA64
5 ;; Exercise the 'shl' LLVM IR: https://llvm.org/docs/LangRef.html#shl-instruction
7 define i1 @shl_i1(i1 %x, i1 %y) {
8 ; LA32-LABEL: shl_i1:
9 ; LA32:       # %bb.0:
10 ; LA32-NEXT:    ret
12 ; LA64-LABEL: shl_i1:
13 ; LA64:       # %bb.0:
14 ; LA64-NEXT:    ret
15   %shl = shl i1 %x, %y
16   ret i1 %shl
19 define i8 @shl_i8(i8 %x, i8 %y) {
20 ; LA32-LABEL: shl_i8:
21 ; LA32:       # %bb.0:
22 ; LA32-NEXT:    sll.w $a0, $a0, $a1
23 ; LA32-NEXT:    ret
25 ; LA64-LABEL: shl_i8:
26 ; LA64:       # %bb.0:
27 ; LA64-NEXT:    sll.d $a0, $a0, $a1
28 ; LA64-NEXT:    ret
29   %shl = shl i8 %x, %y
30   ret i8 %shl
33 define i16 @shl_i16(i16 %x, i16 %y) {
34 ; LA32-LABEL: shl_i16:
35 ; LA32:       # %bb.0:
36 ; LA32-NEXT:    sll.w $a0, $a0, $a1
37 ; LA32-NEXT:    ret
39 ; LA64-LABEL: shl_i16:
40 ; LA64:       # %bb.0:
41 ; LA64-NEXT:    sll.d $a0, $a0, $a1
42 ; LA64-NEXT:    ret
43   %shl = shl i16 %x, %y
44   ret i16 %shl
47 define i32 @shl_i32(i32 %x, i32 %y) {
48 ; LA32-LABEL: shl_i32:
49 ; LA32:       # %bb.0:
50 ; LA32-NEXT:    sll.w $a0, $a0, $a1
51 ; LA32-NEXT:    ret
53 ; LA64-LABEL: shl_i32:
54 ; LA64:       # %bb.0:
55 ; LA64-NEXT:    sll.w $a0, $a0, $a1
56 ; LA64-NEXT:    ret
57   %shl = shl i32 %x, %y
58   ret i32 %shl
61 define i64 @shl_i64(i64 %x, i64 %y) {
62 ; LA32-LABEL: shl_i64:
63 ; LA32:       # %bb.0:
64 ; LA32-NEXT:    sll.w $a1, $a1, $a2
65 ; LA32-NEXT:    xori $a3, $a2, 31
66 ; LA32-NEXT:    srli.w $a4, $a0, 1
67 ; LA32-NEXT:    srl.w $a3, $a4, $a3
68 ; LA32-NEXT:    or $a1, $a1, $a3
69 ; LA32-NEXT:    addi.w $a3, $a2, -32
70 ; LA32-NEXT:    slti $a4, $a3, 0
71 ; LA32-NEXT:    maskeqz $a1, $a1, $a4
72 ; LA32-NEXT:    sll.w $a5, $a0, $a3
73 ; LA32-NEXT:    masknez $a4, $a5, $a4
74 ; LA32-NEXT:    or $a1, $a1, $a4
75 ; LA32-NEXT:    sll.w $a0, $a0, $a2
76 ; LA32-NEXT:    srai.w $a2, $a3, 31
77 ; LA32-NEXT:    and $a0, $a2, $a0
78 ; LA32-NEXT:    ret
80 ; LA64-LABEL: shl_i64:
81 ; LA64:       # %bb.0:
82 ; LA64-NEXT:    sll.d $a0, $a0, $a1
83 ; LA64-NEXT:    ret
84   %shl = shl i64 %x, %y
85   ret i64 %shl
88 define i1 @shl_i1_3(i1 %x) {
89 ; LA32-LABEL: shl_i1_3:
90 ; LA32:       # %bb.0:
91 ; LA32-NEXT:    ret
93 ; LA64-LABEL: shl_i1_3:
94 ; LA64:       # %bb.0:
95 ; LA64-NEXT:    ret
96   %shl = shl i1 %x, 3
97   ret i1 %shl
100 define i8 @shl_i8_3(i8 %x) {
101 ; LA32-LABEL: shl_i8_3:
102 ; LA32:       # %bb.0:
103 ; LA32-NEXT:    slli.w $a0, $a0, 3
104 ; LA32-NEXT:    ret
106 ; LA64-LABEL: shl_i8_3:
107 ; LA64:       # %bb.0:
108 ; LA64-NEXT:    slli.d $a0, $a0, 3
109 ; LA64-NEXT:    ret
110   %shl = shl i8 %x, 3
111   ret i8 %shl
114 define i16 @shl_i16_3(i16 %x) {
115 ; LA32-LABEL: shl_i16_3:
116 ; LA32:       # %bb.0:
117 ; LA32-NEXT:    slli.w $a0, $a0, 3
118 ; LA32-NEXT:    ret
120 ; LA64-LABEL: shl_i16_3:
121 ; LA64:       # %bb.0:
122 ; LA64-NEXT:    slli.d $a0, $a0, 3
123 ; LA64-NEXT:    ret
124   %shl = shl i16 %x, 3
125   ret i16 %shl
128 define i32 @shl_i32_3(i32 %x) {
129 ; LA32-LABEL: shl_i32_3:
130 ; LA32:       # %bb.0:
131 ; LA32-NEXT:    slli.w $a0, $a0, 3
132 ; LA32-NEXT:    ret
134 ; LA64-LABEL: shl_i32_3:
135 ; LA64:       # %bb.0:
136 ; LA64-NEXT:    slli.d $a0, $a0, 3
137 ; LA64-NEXT:    ret
138   %shl = shl i32 %x, 3
139   ret i32 %shl
142 define i64 @shl_i64_3(i64 %x) {
143 ; LA32-LABEL: shl_i64_3:
144 ; LA32:       # %bb.0:
145 ; LA32-NEXT:    srli.w $a2, $a0, 29
146 ; LA32-NEXT:    slli.w $a1, $a1, 3
147 ; LA32-NEXT:    or $a1, $a1, $a2
148 ; LA32-NEXT:    slli.w $a0, $a0, 3
149 ; LA32-NEXT:    ret
151 ; LA64-LABEL: shl_i64_3:
152 ; LA64:       # %bb.0:
153 ; LA64-NEXT:    slli.d $a0, $a0, 3
154 ; LA64-NEXT:    ret
155   %shl = shl i64 %x, 3
156   ret i64 %shl