1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4 2# RUN: llc -mtriple=riscv32 -run-pass=instruction-select \ 3# RUN: -simplify-mir -verify-machineinstrs %s -o - | FileCheck %s 4 5# This 32-bit version doesn't have tests for zext, because there is no legal type to zext from. 6--- 7name: shl 8legalized: true 9regBankSelected: true 10tracksRegLiveness: true 11body: | 12 bb.0: 13 liveins: $x10, $x11 14 15 ; CHECK-LABEL: name: shl 16 ; CHECK: liveins: $x10, $x11 17 ; CHECK-NEXT: {{ $}} 18 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 19 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 20 ; CHECK-NEXT: [[SLL:%[0-9]+]]:gpr = SLL [[COPY]], [[COPY1]] 21 ; CHECK-NEXT: $x10 = COPY [[SLL]] 22 ; CHECK-NEXT: PseudoRET implicit $x10 23 %0:gprb(s32) = COPY $x10 24 %1:gprb(s32) = COPY $x11 25 %3:gprb(s32) = G_SHL %0, %1 26 $x10 = COPY %3(s32) 27 PseudoRET implicit $x10 28... 29 30--- 31name: shl_and 32legalized: true 33regBankSelected: true 34tracksRegLiveness: true 35body: | 36 bb.0: 37 liveins: $x10, $x11 38 39 ; CHECK-LABEL: name: shl_and 40 ; CHECK: liveins: $x10, $x11 41 ; CHECK-NEXT: {{ $}} 42 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 43 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 44 ; CHECK-NEXT: [[SLL:%[0-9]+]]:gpr = SLL [[COPY]], [[COPY1]] 45 ; CHECK-NEXT: $x10 = COPY [[SLL]] 46 ; CHECK-NEXT: PseudoRET implicit $x10 47 %0:gprb(s32) = COPY $x10 48 %1:gprb(s32) = COPY $x11 49 %2:gprb(s32) = G_CONSTANT i32 31 50 %3:gprb(s32) = G_AND %1, %2 51 %4:gprb(s32) = G_SHL %0, %3(s32) 52 $x10 = COPY %4(s32) 53 PseudoRET implicit $x10 54... 55 56--- 57name: shl_and_with_simplified_mask 58legalized: true 59regBankSelected: true 60tracksRegLiveness: true 61body: | 62 bb.0: 63 liveins: $x10, $x11 64 65 ; CHECK-LABEL: name: shl_and_with_simplified_mask 66 ; CHECK: liveins: $x10, $x11 67 ; CHECK-NEXT: {{ $}} 68 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 69 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 70 ; CHECK-NEXT: [[ANDI:%[0-9]+]]:gpr = ANDI [[COPY1]], 31 71 ; CHECK-NEXT: [[SLL:%[0-9]+]]:gpr = SLL [[COPY]], [[ANDI]] 72 ; CHECK-NEXT: $x10 = COPY [[SLL]] 73 ; CHECK-NEXT: PseudoRET implicit $x10 74 %0:gprb(s32) = COPY $x10 75 %1:gprb(s32) = COPY $x11 76 %2:gprb(s32) = G_CONSTANT i32 31 77 %3:gprb(s32) = G_AND %1, %2 78 %4:gprb(s32) = G_CONSTANT i32 31 79 %5:gprb(s32) = G_AND %3, %4 80 %6:gprb(s32) = G_SHL %0, %5(s32) 81 $x10 = COPY %6(s32) 82 PseudoRET implicit $x10 83... 84 85--- 86name: shl_add 87legalized: true 88regBankSelected: true 89tracksRegLiveness: true 90body: | 91 bb.0: 92 liveins: $x10, $x11 93 94 ; CHECK-LABEL: name: shl_add 95 ; CHECK: liveins: $x10, $x11 96 ; CHECK-NEXT: {{ $}} 97 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 98 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 99 ; CHECK-NEXT: [[SLL:%[0-9]+]]:gpr = SLL [[COPY]], [[COPY1]] 100 ; CHECK-NEXT: $x10 = COPY [[SLL]] 101 ; CHECK-NEXT: PseudoRET implicit $x10 102 %0:gprb(s32) = COPY $x10 103 %1:gprb(s32) = COPY $x11 104 %2:gprb(s32) = G_CONSTANT i32 32 105 %3:gprb(s32) = G_ADD %1, %2 106 %4:gprb(s32) = G_SHL %0, %3(s32) 107 $x10 = COPY %4(s32) 108 PseudoRET implicit $x10 109... 110 111--- 112name: shl_sub 113legalized: true 114regBankSelected: true 115tracksRegLiveness: true 116body: | 117 bb.0: 118 liveins: $x10, $x11 119 120 ; CHECK-LABEL: name: shl_sub 121 ; CHECK: liveins: $x10, $x11 122 ; CHECK-NEXT: {{ $}} 123 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 124 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 125 ; CHECK-NEXT: [[SUB:%[0-9]+]]:gpr = SUB $x0, [[COPY1]] 126 ; CHECK-NEXT: [[SLL:%[0-9]+]]:gpr = SLL [[COPY]], [[SUB]] 127 ; CHECK-NEXT: $x10 = COPY [[SLL]] 128 ; CHECK-NEXT: PseudoRET implicit $x10 129 %0:gprb(s32) = COPY $x10 130 %1:gprb(s32) = COPY $x11 131 %2:gprb(s32) = G_CONSTANT i32 32 132 %3:gprb(s32) = G_SUB %2, %1 133 %4:gprb(s32) = G_SHL %0, %3(s32) 134 $x10 = COPY %4(s32) 135 PseudoRET implicit $x10 136... 137 138--- 139name: shl_bitwise_not 140legalized: true 141regBankSelected: true 142tracksRegLiveness: true 143body: | 144 bb.0: 145 liveins: $x10, $x11 146 147 ; CHECK-LABEL: name: shl_bitwise_not 148 ; CHECK: liveins: $x10, $x11 149 ; CHECK-NEXT: {{ $}} 150 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 151 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 152 ; CHECK-NEXT: [[XORI:%[0-9]+]]:gpr = XORI [[COPY1]], -1 153 ; CHECK-NEXT: [[SLL:%[0-9]+]]:gpr = SLL [[COPY]], [[XORI]] 154 ; CHECK-NEXT: $x10 = COPY [[SLL]] 155 ; CHECK-NEXT: PseudoRET implicit $x10 156 %0:gprb(s32) = COPY $x10 157 %1:gprb(s32) = COPY $x11 158 %2:gprb(s32) = G_CONSTANT i32 -1 159 %3:gprb(s32) = G_SUB %2, %1 160 %4:gprb(s32) = G_SHL %0, %3(s32) 161 $x10 = COPY %4(s32) 162 PseudoRET implicit $x10 163... 164 165--- 166name: shl_bitwise_not_2 167legalized: true 168regBankSelected: true 169tracksRegLiveness: true 170body: | 171 bb.0: 172 liveins: $x10, $x11 173 174 ; CHECK-LABEL: name: shl_bitwise_not_2 175 ; CHECK: liveins: $x10, $x11 176 ; CHECK-NEXT: {{ $}} 177 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 178 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 179 ; CHECK-NEXT: [[XORI:%[0-9]+]]:gpr = XORI [[COPY1]], -1 180 ; CHECK-NEXT: [[SLL:%[0-9]+]]:gpr = SLL [[COPY]], [[XORI]] 181 ; CHECK-NEXT: $x10 = COPY [[SLL]] 182 ; CHECK-NEXT: PseudoRET implicit $x10 183 %0:gprb(s32) = COPY $x10 184 %1:gprb(s32) = COPY $x11 185 %2:gprb(s32) = G_CONSTANT i32 31 186 %3:gprb(s32) = G_SUB %2, %1 187 %4:gprb(s32) = G_SHL %0, %3(s32) 188 $x10 = COPY %4(s32) 189 PseudoRET implicit $x10 190... 191 192--- 193name: srl_and_needed 194legalized: true 195regBankSelected: true 196tracksRegLiveness: true 197body: | 198 bb.1.entry: 199 liveins: $x10, $x11 200 201 ; CHECK-LABEL: name: srl_and_needed 202 ; CHECK: liveins: $x10, $x11 203 ; CHECK-NEXT: {{ $}} 204 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 205 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 206 ; CHECK-NEXT: [[ANDI:%[0-9]+]]:gpr = ANDI [[COPY]], 15 207 ; CHECK-NEXT: [[SRL:%[0-9]+]]:gpr = SRL [[COPY1]], [[ANDI]] 208 ; CHECK-NEXT: $x10 = COPY [[SRL]] 209 ; CHECK-NEXT: PseudoRET implicit $x10 210 %0:gprb(s32) = COPY $x10 211 %1:gprb(s32) = COPY $x11 212 %2:gprb(s32) = G_CONSTANT i32 15 213 %3:gprb(s32) = G_AND %0, %2 214 %4:gprb(s32) = G_LSHR %1, %3(s32) 215 $x10 = COPY %4(s32) 216 PseudoRET implicit $x10 217... 218 219--- 220name: srl_and_eliminated 221legalized: true 222regBankSelected: true 223tracksRegLiveness: true 224body: | 225 bb.1.entry: 226 liveins: $x10, $x11 227 228 ; CHECK-LABEL: name: srl_and_eliminated 229 ; CHECK: liveins: $x10, $x11 230 ; CHECK-NEXT: {{ $}} 231 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 232 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 233 ; CHECK-NEXT: [[ANDI:%[0-9]+]]:gpr = ANDI [[COPY]], 47 234 ; CHECK-NEXT: [[SRL:%[0-9]+]]:gpr = SRL [[COPY1]], [[ANDI]] 235 ; CHECK-NEXT: $x10 = COPY [[SRL]] 236 ; CHECK-NEXT: PseudoRET implicit $x10 237 %0:gprb(s32) = COPY $x10 238 %1:gprb(s32) = COPY $x11 239 %2:gprb(s32) = G_CONSTANT i32 15 240 %3:gprb(s32) = G_CONSTANT i32 47 241 %4:gprb(s32) = G_AND %0, %3 242 %5:gprb(s32) = G_AND %4, %2 243 %6:gprb(s32) = G_LSHR %1, %5(s32) 244 $x10 = COPY %6(s32) 245 PseudoRET implicit $x10 246... 247