1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips2 | FileCheck %s \ 3 ; RUN: -check-prefix=MIPS 4 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32 | FileCheck %s \ 5 ; RUN: -check-prefix=MIPS 6 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r2 | FileCheck %s \ 7 ; RUN: -check-prefix=MIPS32R2 8 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r3 | FileCheck %s \ 9 ; RUN: -check-prefix=MIPS32R2 10 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r5 | FileCheck %s \ 11 ; RUN: -check-prefix=MIPS32R2 12 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r6 | FileCheck %s \ 13 ; RUN: -check-prefix=MIPS32R6 14 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips3 | FileCheck %s \ 15 ; RUN: -check-prefix=MIPS64 16 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips4 | FileCheck %s \ 17 ; RUN: -check-prefix=MIPS64 18 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64 | FileCheck %s \ 19 ; RUN: -check-prefix=MIPS64 20 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r2 | FileCheck %s \ 21 ; RUN: -check-prefix=MIPS64R2 22 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r3 | FileCheck %s \ 23 ; RUN: -check-prefix=MIPS64R2 24 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r5 | FileCheck %s \ 25 ; RUN: -check-prefix=MIPS64R2 26 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r6 | FileCheck %s \ 27 ; RUN: -check-prefix=MIPS64R6 28 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r3 -mattr=+micromips | FileCheck %s \ 29 ; RUN: -check-prefix=MM32R3 30 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r6 -mattr=+micromips | FileCheck %s \ 31 ; RUN: -check-prefix=MM32R6 32 33 define signext i1 @and_i1(i1 signext %a, i1 signext %b) { 34 ; MIPS-LABEL: and_i1: 35 ; MIPS: # %bb.0: # %entry 36 ; MIPS-NEXT: jr $ra 37 ; MIPS-NEXT: and $2, $4, $5 38 ; 39 ; MIPS32R2-LABEL: and_i1: 40 ; MIPS32R2: # %bb.0: # %entry 41 ; MIPS32R2-NEXT: jr $ra 42 ; MIPS32R2-NEXT: and $2, $4, $5 43 ; 44 ; MIPS32R6-LABEL: and_i1: 45 ; MIPS32R6: # %bb.0: # %entry 46 ; MIPS32R6-NEXT: jr $ra 47 ; MIPS32R6-NEXT: and $2, $4, $5 48 ; 49 ; MIPS64-LABEL: and_i1: 50 ; MIPS64: # %bb.0: # %entry 51 ; MIPS64-NEXT: and $1, $4, $5 52 ; MIPS64-NEXT: jr $ra 53 ; MIPS64-NEXT: sll $2, $1, 0 54 ; 55 ; MIPS64R2-LABEL: and_i1: 56 ; MIPS64R2: # %bb.0: # %entry 57 ; MIPS64R2-NEXT: and $1, $4, $5 58 ; MIPS64R2-NEXT: jr $ra 59 ; MIPS64R2-NEXT: sll $2, $1, 0 60 ; 61 ; MIPS64R6-LABEL: and_i1: 62 ; MIPS64R6: # %bb.0: # %entry 63 ; MIPS64R6-NEXT: and $1, $4, $5 64 ; MIPS64R6-NEXT: jr $ra 65 ; MIPS64R6-NEXT: sll $2, $1, 0 66 ; 67 ; MM32R3-LABEL: and_i1: 68 ; MM32R3: # %bb.0: # %entry 69 ; MM32R3-NEXT: and16 $4, $5 70 ; MM32R3-NEXT: move $2, $4 71 ; MM32R3-NEXT: jrc $ra 72 ; 73 ; MM32R6-LABEL: and_i1: 74 ; MM32R6: # %bb.0: # %entry 75 ; MM32R6-NEXT: and $2, $4, $5 76 ; MM32R6-NEXT: jrc $ra 77 entry: 78 %r = and i1 %a, %b 79 ret i1 %r 80 } 81 82 define signext i8 @and_i8(i8 signext %a, i8 signext %b) { 83 ; MIPS-LABEL: and_i8: 84 ; MIPS: # %bb.0: # %entry 85 ; MIPS-NEXT: jr $ra 86 ; MIPS-NEXT: and $2, $4, $5 87 ; 88 ; MIPS32R2-LABEL: and_i8: 89 ; MIPS32R2: # %bb.0: # %entry 90 ; MIPS32R2-NEXT: jr $ra 91 ; MIPS32R2-NEXT: and $2, $4, $5 92 ; 93 ; MIPS32R6-LABEL: and_i8: 94 ; MIPS32R6: # %bb.0: # %entry 95 ; MIPS32R6-NEXT: jr $ra 96 ; MIPS32R6-NEXT: and $2, $4, $5 97 ; 98 ; MIPS64-LABEL: and_i8: 99 ; MIPS64: # %bb.0: # %entry 100 ; MIPS64-NEXT: and $1, $4, $5 101 ; MIPS64-NEXT: jr $ra 102 ; MIPS64-NEXT: sll $2, $1, 0 103 ; 104 ; MIPS64R2-LABEL: and_i8: 105 ; MIPS64R2: # %bb.0: # %entry 106 ; MIPS64R2-NEXT: and $1, $4, $5 107 ; MIPS64R2-NEXT: jr $ra 108 ; MIPS64R2-NEXT: sll $2, $1, 0 109 ; 110 ; MIPS64R6-LABEL: and_i8: 111 ; MIPS64R6: # %bb.0: # %entry 112 ; MIPS64R6-NEXT: and $1, $4, $5 113 ; MIPS64R6-NEXT: jr $ra 114 ; MIPS64R6-NEXT: sll $2, $1, 0 115 ; 116 ; MM32R3-LABEL: and_i8: 117 ; MM32R3: # %bb.0: # %entry 118 ; MM32R3-NEXT: and16 $4, $5 119 ; MM32R3-NEXT: move $2, $4 120 ; MM32R3-NEXT: jrc $ra 121 ; 122 ; MM32R6-LABEL: and_i8: 123 ; MM32R6: # %bb.0: # %entry 124 ; MM32R6-NEXT: and $2, $4, $5 125 ; MM32R6-NEXT: jrc $ra 126 entry: 127 %r = and i8 %a, %b 128 ret i8 %r 129 } 130 131 define signext i16 @and_i16(i16 signext %a, i16 signext %b) { 132 ; MIPS-LABEL: and_i16: 133 ; MIPS: # %bb.0: # %entry 134 ; MIPS-NEXT: jr $ra 135 ; MIPS-NEXT: and $2, $4, $5 136 ; 137 ; MIPS32R2-LABEL: and_i16: 138 ; MIPS32R2: # %bb.0: # %entry 139 ; MIPS32R2-NEXT: jr $ra 140 ; MIPS32R2-NEXT: and $2, $4, $5 141 ; 142 ; MIPS32R6-LABEL: and_i16: 143 ; MIPS32R6: # %bb.0: # %entry 144 ; MIPS32R6-NEXT: jr $ra 145 ; MIPS32R6-NEXT: and $2, $4, $5 146 ; 147 ; MIPS64-LABEL: and_i16: 148 ; MIPS64: # %bb.0: # %entry 149 ; MIPS64-NEXT: and $1, $4, $5 150 ; MIPS64-NEXT: jr $ra 151 ; MIPS64-NEXT: sll $2, $1, 0 152 ; 153 ; MIPS64R2-LABEL: and_i16: 154 ; MIPS64R2: # %bb.0: # %entry 155 ; MIPS64R2-NEXT: and $1, $4, $5 156 ; MIPS64R2-NEXT: jr $ra 157 ; MIPS64R2-NEXT: sll $2, $1, 0 158 ; 159 ; MIPS64R6-LABEL: and_i16: 160 ; MIPS64R6: # %bb.0: # %entry 161 ; MIPS64R6-NEXT: and $1, $4, $5 162 ; MIPS64R6-NEXT: jr $ra 163 ; MIPS64R6-NEXT: sll $2, $1, 0 164 ; 165 ; MM32R3-LABEL: and_i16: 166 ; MM32R3: # %bb.0: # %entry 167 ; MM32R3-NEXT: and16 $4, $5 168 ; MM32R3-NEXT: move $2, $4 169 ; MM32R3-NEXT: jrc $ra 170 ; 171 ; MM32R6-LABEL: and_i16: 172 ; MM32R6: # %bb.0: # %entry 173 ; MM32R6-NEXT: and $2, $4, $5 174 ; MM32R6-NEXT: jrc $ra 175 entry: 176 %r = and i16 %a, %b 177 ret i16 %r 178 } 179 180 define signext i32 @and_i32(i32 signext %a, i32 signext %b) { 181 ; MIPS-LABEL: and_i32: 182 ; MIPS: # %bb.0: # %entry 183 ; MIPS-NEXT: jr $ra 184 ; MIPS-NEXT: and $2, $4, $5 185 ; 186 ; MIPS32R2-LABEL: and_i32: 187 ; MIPS32R2: # %bb.0: # %entry 188 ; MIPS32R2-NEXT: jr $ra 189 ; MIPS32R2-NEXT: and $2, $4, $5 190 ; 191 ; MIPS32R6-LABEL: and_i32: 192 ; MIPS32R6: # %bb.0: # %entry 193 ; MIPS32R6-NEXT: jr $ra 194 ; MIPS32R6-NEXT: and $2, $4, $5 195 ; 196 ; MIPS64-LABEL: and_i32: 197 ; MIPS64: # %bb.0: # %entry 198 ; MIPS64-NEXT: jr $ra 199 ; MIPS64-NEXT: and $2, $4, $5 200 ; 201 ; MIPS64R2-LABEL: and_i32: 202 ; MIPS64R2: # %bb.0: # %entry 203 ; MIPS64R2-NEXT: jr $ra 204 ; MIPS64R2-NEXT: and $2, $4, $5 205 ; 206 ; MIPS64R6-LABEL: and_i32: 207 ; MIPS64R6: # %bb.0: # %entry 208 ; MIPS64R6-NEXT: jr $ra 209 ; MIPS64R6-NEXT: and $2, $4, $5 210 ; 211 ; MM32R3-LABEL: and_i32: 212 ; MM32R3: # %bb.0: # %entry 213 ; MM32R3-NEXT: and16 $4, $5 214 ; MM32R3-NEXT: move $2, $4 215 ; MM32R3-NEXT: jrc $ra 216 ; 217 ; MM32R6-LABEL: and_i32: 218 ; MM32R6: # %bb.0: # %entry 219 ; MM32R6-NEXT: and $2, $4, $5 220 ; MM32R6-NEXT: jrc $ra 221 entry: 222 %r = and i32 %a, %b 223 ret i32 %r 224 } 225 226 define signext i64 @and_i64(i64 signext %a, i64 signext %b) { 227 ; MIPS-LABEL: and_i64: 228 ; MIPS: # %bb.0: # %entry 229 ; MIPS-NEXT: and $2, $4, $6 230 ; MIPS-NEXT: jr $ra 231 ; MIPS-NEXT: and $3, $5, $7 232 ; 233 ; MIPS32R2-LABEL: and_i64: 234 ; MIPS32R2: # %bb.0: # %entry 235 ; MIPS32R2-NEXT: and $2, $4, $6 236 ; MIPS32R2-NEXT: jr $ra 237 ; MIPS32R2-NEXT: and $3, $5, $7 238 ; 239 ; MIPS32R6-LABEL: and_i64: 240 ; MIPS32R6: # %bb.0: # %entry 241 ; MIPS32R6-NEXT: and $2, $4, $6 242 ; MIPS32R6-NEXT: jr $ra 243 ; MIPS32R6-NEXT: and $3, $5, $7 244 ; 245 ; MIPS64-LABEL: and_i64: 246 ; MIPS64: # %bb.0: # %entry 247 ; MIPS64-NEXT: jr $ra 248 ; MIPS64-NEXT: and $2, $4, $5 249 ; 250 ; MIPS64R2-LABEL: and_i64: 251 ; MIPS64R2: # %bb.0: # %entry 252 ; MIPS64R2-NEXT: jr $ra 253 ; MIPS64R2-NEXT: and $2, $4, $5 254 ; 255 ; MIPS64R6-LABEL: and_i64: 256 ; MIPS64R6: # %bb.0: # %entry 257 ; MIPS64R6-NEXT: jr $ra 258 ; MIPS64R6-NEXT: and $2, $4, $5 259 ; 260 ; MM32R3-LABEL: and_i64: 261 ; MM32R3: # %bb.0: # %entry 262 ; MM32R3-NEXT: and16 $4, $6 263 ; MM32R3-NEXT: and16 $5, $7 264 ; MM32R3-NEXT: move $2, $4 265 ; MM32R3-NEXT: move $3, $5 266 ; MM32R3-NEXT: jrc $ra 267 ; 268 ; MM32R6-LABEL: and_i64: 269 ; MM32R6: # %bb.0: # %entry 270 ; MM32R6-NEXT: and $2, $4, $6 271 ; MM32R6-NEXT: and $3, $5, $7 272 ; MM32R6-NEXT: jrc $ra 273 entry: 274 %r = and i64 %a, %b 275 ret i64 %r 276 } 277 278 define signext i128 @and_i128(i128 signext %a, i128 signext %b) { 279 ; MIPS-LABEL: and_i128: 280 ; MIPS: # %bb.0: # %entry 281 ; MIPS-NEXT: lw $1, 20($sp) 282 ; MIPS-NEXT: lw $2, 16($sp) 283 ; MIPS-NEXT: and $2, $4, $2 284 ; MIPS-NEXT: and $3, $5, $1 285 ; MIPS-NEXT: lw $1, 24($sp) 286 ; MIPS-NEXT: and $4, $6, $1 287 ; MIPS-NEXT: lw $1, 28($sp) 288 ; MIPS-NEXT: jr $ra 289 ; MIPS-NEXT: and $5, $7, $1 290 ; 291 ; MIPS32R2-LABEL: and_i128: 292 ; MIPS32R2: # %bb.0: # %entry 293 ; MIPS32R2-NEXT: lw $1, 20($sp) 294 ; MIPS32R2-NEXT: lw $2, 16($sp) 295 ; MIPS32R2-NEXT: and $2, $4, $2 296 ; MIPS32R2-NEXT: and $3, $5, $1 297 ; MIPS32R2-NEXT: lw $1, 24($sp) 298 ; MIPS32R2-NEXT: and $4, $6, $1 299 ; MIPS32R2-NEXT: lw $1, 28($sp) 300 ; MIPS32R2-NEXT: jr $ra 301 ; MIPS32R2-NEXT: and $5, $7, $1 302 ; 303 ; MIPS32R6-LABEL: and_i128: 304 ; MIPS32R6: # %bb.0: # %entry 305 ; MIPS32R6-NEXT: lw $1, 20($sp) 306 ; MIPS32R6-NEXT: lw $2, 16($sp) 307 ; MIPS32R6-NEXT: and $2, $4, $2 308 ; MIPS32R6-NEXT: and $3, $5, $1 309 ; MIPS32R6-NEXT: lw $1, 24($sp) 310 ; MIPS32R6-NEXT: and $4, $6, $1 311 ; MIPS32R6-NEXT: lw $1, 28($sp) 312 ; MIPS32R6-NEXT: jr $ra 313 ; MIPS32R6-NEXT: and $5, $7, $1 314 ; 315 ; MIPS64-LABEL: and_i128: 316 ; MIPS64: # %bb.0: # %entry 317 ; MIPS64-NEXT: and $2, $4, $6 318 ; MIPS64-NEXT: jr $ra 319 ; MIPS64-NEXT: and $3, $5, $7 320 ; 321 ; MIPS64R2-LABEL: and_i128: 322 ; MIPS64R2: # %bb.0: # %entry 323 ; MIPS64R2-NEXT: and $2, $4, $6 324 ; MIPS64R2-NEXT: jr $ra 325 ; MIPS64R2-NEXT: and $3, $5, $7 326 ; 327 ; MIPS64R6-LABEL: and_i128: 328 ; MIPS64R6: # %bb.0: # %entry 329 ; MIPS64R6-NEXT: and $2, $4, $6 330 ; MIPS64R6-NEXT: jr $ra 331 ; MIPS64R6-NEXT: and $3, $5, $7 332 ; 333 ; MM32R3-LABEL: and_i128: 334 ; MM32R3: # %bb.0: # %entry 335 ; MM32R3-NEXT: lwp $2, 16($sp) 336 ; MM32R3-NEXT: and16 $2, $4 337 ; MM32R3-NEXT: and16 $3, $5 338 ; MM32R3-NEXT: lw $4, 24($sp) 339 ; MM32R3-NEXT: and16 $4, $6 340 ; MM32R3-NEXT: lw $5, 28($sp) 341 ; MM32R3-NEXT: and16 $5, $7 342 ; MM32R3-NEXT: jrc $ra 343 ; 344 ; MM32R6-LABEL: and_i128: 345 ; MM32R6: # %bb.0: # %entry 346 ; MM32R6-NEXT: lw $1, 20($sp) 347 ; MM32R6-NEXT: lw $2, 16($sp) 348 ; MM32R6-NEXT: and $2, $4, $2 349 ; MM32R6-NEXT: and $3, $5, $1 350 ; MM32R6-NEXT: lw $1, 24($sp) 351 ; MM32R6-NEXT: and $4, $6, $1 352 ; MM32R6-NEXT: lw $1, 28($sp) 353 ; MM32R6-NEXT: and $5, $7, $1 354 ; MM32R6-NEXT: jrc $ra 355 entry: 356 %r = and i128 %a, %b 357 ret i128 %r 358 } 359 360 define signext i1 @and_i1_4(i1 signext %b) { 361 ; MIPS-LABEL: and_i1_4: 362 ; MIPS: # %bb.0: # %entry 363 ; MIPS-NEXT: jr $ra 364 ; MIPS-NEXT: addiu $2, $zero, 0 365 ; 366 ; MIPS32R2-LABEL: and_i1_4: 367 ; MIPS32R2: # %bb.0: # %entry 368 ; MIPS32R2-NEXT: jr $ra 369 ; MIPS32R2-NEXT: addiu $2, $zero, 0 370 ; 371 ; MIPS32R6-LABEL: and_i1_4: 372 ; MIPS32R6: # %bb.0: # %entry 373 ; MIPS32R6-NEXT: jr $ra 374 ; MIPS32R6-NEXT: addiu $2, $zero, 0 375 ; 376 ; MIPS64-LABEL: and_i1_4: 377 ; MIPS64: # %bb.0: # %entry 378 ; MIPS64-NEXT: jr $ra 379 ; MIPS64-NEXT: addiu $2, $zero, 0 380 ; 381 ; MIPS64R2-LABEL: and_i1_4: 382 ; MIPS64R2: # %bb.0: # %entry 383 ; MIPS64R2-NEXT: jr $ra 384 ; MIPS64R2-NEXT: addiu $2, $zero, 0 385 ; 386 ; MIPS64R6-LABEL: and_i1_4: 387 ; MIPS64R6: # %bb.0: # %entry 388 ; MIPS64R6-NEXT: jr $ra 389 ; MIPS64R6-NEXT: addiu $2, $zero, 0 390 ; 391 ; MM32R3-LABEL: and_i1_4: 392 ; MM32R3: # %bb.0: # %entry 393 ; MM32R3-NEXT: li16 $2, 0 394 ; MM32R3-NEXT: jrc $ra 395 ; 396 ; MM32R6-LABEL: and_i1_4: 397 ; MM32R6: # %bb.0: # %entry 398 ; MM32R6-NEXT: li16 $2, 0 399 ; MM32R6-NEXT: jrc $ra 400 entry: 401 %r = and i1 4, %b 402 ret i1 %r 403 } 404 405 define signext i8 @and_i8_4(i8 signext %b) { 406 ; MIPS-LABEL: and_i8_4: 407 ; MIPS: # %bb.0: # %entry 408 ; MIPS-NEXT: jr $ra 409 ; MIPS-NEXT: andi $2, $4, 4 410 ; 411 ; MIPS32R2-LABEL: and_i8_4: 412 ; MIPS32R2: # %bb.0: # %entry 413 ; MIPS32R2-NEXT: jr $ra 414 ; MIPS32R2-NEXT: andi $2, $4, 4 415 ; 416 ; MIPS32R6-LABEL: and_i8_4: 417 ; MIPS32R6: # %bb.0: # %entry 418 ; MIPS32R6-NEXT: jr $ra 419 ; MIPS32R6-NEXT: andi $2, $4, 4 420 ; 421 ; MIPS64-LABEL: and_i8_4: 422 ; MIPS64: # %bb.0: # %entry 423 ; MIPS64-NEXT: jr $ra 424 ; MIPS64-NEXT: andi $2, $4, 4 425 ; 426 ; MIPS64R2-LABEL: and_i8_4: 427 ; MIPS64R2: # %bb.0: # %entry 428 ; MIPS64R2-NEXT: jr $ra 429 ; MIPS64R2-NEXT: andi $2, $4, 4 430 ; 431 ; MIPS64R6-LABEL: and_i8_4: 432 ; MIPS64R6: # %bb.0: # %entry 433 ; MIPS64R6-NEXT: jr $ra 434 ; MIPS64R6-NEXT: andi $2, $4, 4 435 ; 436 ; MM32R3-LABEL: and_i8_4: 437 ; MM32R3: # %bb.0: # %entry 438 ; MM32R3-NEXT: andi16 $2, $4, 4 439 ; MM32R3-NEXT: jrc $ra 440 ; 441 ; MM32R6-LABEL: and_i8_4: 442 ; MM32R6: # %bb.0: # %entry 443 ; MM32R6-NEXT: andi16 $2, $4, 4 444 ; MM32R6-NEXT: jrc $ra 445 entry: 446 %r = and i8 4, %b 447 ret i8 %r 448 } 449 450 define signext i16 @and_i16_4(i16 signext %b) { 451 ; MIPS-LABEL: and_i16_4: 452 ; MIPS: # %bb.0: # %entry 453 ; MIPS-NEXT: jr $ra 454 ; MIPS-NEXT: andi $2, $4, 4 455 ; 456 ; MIPS32R2-LABEL: and_i16_4: 457 ; MIPS32R2: # %bb.0: # %entry 458 ; MIPS32R2-NEXT: jr $ra 459 ; MIPS32R2-NEXT: andi $2, $4, 4 460 ; 461 ; MIPS32R6-LABEL: and_i16_4: 462 ; MIPS32R6: # %bb.0: # %entry 463 ; MIPS32R6-NEXT: jr $ra 464 ; MIPS32R6-NEXT: andi $2, $4, 4 465 ; 466 ; MIPS64-LABEL: and_i16_4: 467 ; MIPS64: # %bb.0: # %entry 468 ; MIPS64-NEXT: jr $ra 469 ; MIPS64-NEXT: andi $2, $4, 4 470 ; 471 ; MIPS64R2-LABEL: and_i16_4: 472 ; MIPS64R2: # %bb.0: # %entry 473 ; MIPS64R2-NEXT: jr $ra 474 ; MIPS64R2-NEXT: andi $2, $4, 4 475 ; 476 ; MIPS64R6-LABEL: and_i16_4: 477 ; MIPS64R6: # %bb.0: # %entry 478 ; MIPS64R6-NEXT: jr $ra 479 ; MIPS64R6-NEXT: andi $2, $4, 4 480 ; 481 ; MM32R3-LABEL: and_i16_4: 482 ; MM32R3: # %bb.0: # %entry 483 ; MM32R3-NEXT: andi16 $2, $4, 4 484 ; MM32R3-NEXT: jrc $ra 485 ; 486 ; MM32R6-LABEL: and_i16_4: 487 ; MM32R6: # %bb.0: # %entry 488 ; MM32R6-NEXT: andi16 $2, $4, 4 489 ; MM32R6-NEXT: jrc $ra 490 entry: 491 %r = and i16 4, %b 492 ret i16 %r 493 } 494 495 define signext i32 @and_i32_4(i32 signext %b) { 496 ; MIPS-LABEL: and_i32_4: 497 ; MIPS: # %bb.0: # %entry 498 ; MIPS-NEXT: jr $ra 499 ; MIPS-NEXT: andi $2, $4, 4 500 ; 501 ; MIPS32R2-LABEL: and_i32_4: 502 ; MIPS32R2: # %bb.0: # %entry 503 ; MIPS32R2-NEXT: jr $ra 504 ; MIPS32R2-NEXT: andi $2, $4, 4 505 ; 506 ; MIPS32R6-LABEL: and_i32_4: 507 ; MIPS32R6: # %bb.0: # %entry 508 ; MIPS32R6-NEXT: jr $ra 509 ; MIPS32R6-NEXT: andi $2, $4, 4 510 ; 511 ; MIPS64-LABEL: and_i32_4: 512 ; MIPS64: # %bb.0: # %entry 513 ; MIPS64-NEXT: jr $ra 514 ; MIPS64-NEXT: andi $2, $4, 4 515 ; 516 ; MIPS64R2-LABEL: and_i32_4: 517 ; MIPS64R2: # %bb.0: # %entry 518 ; MIPS64R2-NEXT: jr $ra 519 ; MIPS64R2-NEXT: andi $2, $4, 4 520 ; 521 ; MIPS64R6-LABEL: and_i32_4: 522 ; MIPS64R6: # %bb.0: # %entry 523 ; MIPS64R6-NEXT: jr $ra 524 ; MIPS64R6-NEXT: andi $2, $4, 4 525 ; 526 ; MM32R3-LABEL: and_i32_4: 527 ; MM32R3: # %bb.0: # %entry 528 ; MM32R3-NEXT: andi16 $2, $4, 4 529 ; MM32R3-NEXT: jrc $ra 530 ; 531 ; MM32R6-LABEL: and_i32_4: 532 ; MM32R6: # %bb.0: # %entry 533 ; MM32R6-NEXT: andi16 $2, $4, 4 534 ; MM32R6-NEXT: jrc $ra 535 entry: 536 %r = and i32 4, %b 537 ret i32 %r 538 } 539 540 define signext i64 @and_i64_4(i64 signext %b) { 541 ; MIPS-LABEL: and_i64_4: 542 ; MIPS: # %bb.0: # %entry 543 ; MIPS-NEXT: andi $3, $5, 4 544 ; MIPS-NEXT: jr $ra 545 ; MIPS-NEXT: addiu $2, $zero, 0 546 ; 547 ; MIPS32R2-LABEL: and_i64_4: 548 ; MIPS32R2: # %bb.0: # %entry 549 ; MIPS32R2-NEXT: andi $3, $5, 4 550 ; MIPS32R2-NEXT: jr $ra 551 ; MIPS32R2-NEXT: addiu $2, $zero, 0 552 ; 553 ; MIPS32R6-LABEL: and_i64_4: 554 ; MIPS32R6: # %bb.0: # %entry 555 ; MIPS32R6-NEXT: andi $3, $5, 4 556 ; MIPS32R6-NEXT: jr $ra 557 ; MIPS32R6-NEXT: addiu $2, $zero, 0 558 ; 559 ; MIPS64-LABEL: and_i64_4: 560 ; MIPS64: # %bb.0: # %entry 561 ; MIPS64-NEXT: jr $ra 562 ; MIPS64-NEXT: andi $2, $4, 4 563 ; 564 ; MIPS64R2-LABEL: and_i64_4: 565 ; MIPS64R2: # %bb.0: # %entry 566 ; MIPS64R2-NEXT: jr $ra 567 ; MIPS64R2-NEXT: andi $2, $4, 4 568 ; 569 ; MIPS64R6-LABEL: and_i64_4: 570 ; MIPS64R6: # %bb.0: # %entry 571 ; MIPS64R6-NEXT: jr $ra 572 ; MIPS64R6-NEXT: andi $2, $4, 4 573 ; 574 ; MM32R3-LABEL: and_i64_4: 575 ; MM32R3: # %bb.0: # %entry 576 ; MM32R3-NEXT: andi16 $3, $5, 4 577 ; MM32R3-NEXT: li16 $2, 0 578 ; MM32R3-NEXT: jrc $ra 579 ; 580 ; MM32R6-LABEL: and_i64_4: 581 ; MM32R6: # %bb.0: # %entry 582 ; MM32R6-NEXT: andi16 $3, $5, 4 583 ; MM32R6-NEXT: li16 $2, 0 584 ; MM32R6-NEXT: jrc $ra 585 entry: 586 %r = and i64 4, %b 587 ret i64 %r 588 } 589 590 define signext i128 @and_i128_4(i128 signext %b) { 591 ; MIPS-LABEL: and_i128_4: 592 ; MIPS: # %bb.0: # %entry 593 ; MIPS-NEXT: andi $5, $7, 4 594 ; MIPS-NEXT: addiu $2, $zero, 0 595 ; MIPS-NEXT: addiu $3, $zero, 0 596 ; MIPS-NEXT: jr $ra 597 ; MIPS-NEXT: addiu $4, $zero, 0 598 ; 599 ; MIPS32R2-LABEL: and_i128_4: 600 ; MIPS32R2: # %bb.0: # %entry 601 ; MIPS32R2-NEXT: andi $5, $7, 4 602 ; MIPS32R2-NEXT: addiu $2, $zero, 0 603 ; MIPS32R2-NEXT: addiu $3, $zero, 0 604 ; MIPS32R2-NEXT: jr $ra 605 ; MIPS32R2-NEXT: addiu $4, $zero, 0 606 ; 607 ; MIPS32R6-LABEL: and_i128_4: 608 ; MIPS32R6: # %bb.0: # %entry 609 ; MIPS32R6-NEXT: andi $5, $7, 4 610 ; MIPS32R6-NEXT: addiu $2, $zero, 0 611 ; MIPS32R6-NEXT: addiu $3, $zero, 0 612 ; MIPS32R6-NEXT: jr $ra 613 ; MIPS32R6-NEXT: addiu $4, $zero, 0 614 ; 615 ; MIPS64-LABEL: and_i128_4: 616 ; MIPS64: # %bb.0: # %entry 617 ; MIPS64-NEXT: andi $3, $5, 4 618 ; MIPS64-NEXT: jr $ra 619 ; MIPS64-NEXT: daddiu $2, $zero, 0 620 ; 621 ; MIPS64R2-LABEL: and_i128_4: 622 ; MIPS64R2: # %bb.0: # %entry 623 ; MIPS64R2-NEXT: andi $3, $5, 4 624 ; MIPS64R2-NEXT: jr $ra 625 ; MIPS64R2-NEXT: daddiu $2, $zero, 0 626 ; 627 ; MIPS64R6-LABEL: and_i128_4: 628 ; MIPS64R6: # %bb.0: # %entry 629 ; MIPS64R6-NEXT: andi $3, $5, 4 630 ; MIPS64R6-NEXT: jr $ra 631 ; MIPS64R6-NEXT: daddiu $2, $zero, 0 632 ; 633 ; MM32R3-LABEL: and_i128_4: 634 ; MM32R3: # %bb.0: # %entry 635 ; MM32R3-NEXT: andi16 $5, $7, 4 636 ; MM32R3-NEXT: li16 $2, 0 637 ; MM32R3-NEXT: li16 $3, 0 638 ; MM32R3-NEXT: li16 $4, 0 639 ; MM32R3-NEXT: jrc $ra 640 ; 641 ; MM32R6-LABEL: and_i128_4: 642 ; MM32R6: # %bb.0: # %entry 643 ; MM32R6-NEXT: andi16 $5, $7, 4 644 ; MM32R6-NEXT: li16 $2, 0 645 ; MM32R6-NEXT: li16 $3, 0 646 ; MM32R6-NEXT: li16 $4, 0 647 ; MM32R6-NEXT: jrc $ra 648 entry: 649 %r = and i128 4, %b 650 ret i128 %r 651 } 652 653 define signext i1 @and_i1_31(i1 signext %b) { 654 ; MIPS-LABEL: and_i1_31: 655 ; MIPS: # %bb.0: # %entry 656 ; MIPS-NEXT: jr $ra 657 ; MIPS-NEXT: move $2, $4 658 ; 659 ; MIPS32R2-LABEL: and_i1_31: 660 ; MIPS32R2: # %bb.0: # %entry 661 ; MIPS32R2-NEXT: jr $ra 662 ; MIPS32R2-NEXT: move $2, $4 663 ; 664 ; MIPS32R6-LABEL: and_i1_31: 665 ; MIPS32R6: # %bb.0: # %entry 666 ; MIPS32R6-NEXT: jr $ra 667 ; MIPS32R6-NEXT: move $2, $4 668 ; 669 ; MIPS64-LABEL: and_i1_31: 670 ; MIPS64: # %bb.0: # %entry 671 ; MIPS64-NEXT: jr $ra 672 ; MIPS64-NEXT: move $2, $4 673 ; 674 ; MIPS64R2-LABEL: and_i1_31: 675 ; MIPS64R2: # %bb.0: # %entry 676 ; MIPS64R2-NEXT: jr $ra 677 ; MIPS64R2-NEXT: move $2, $4 678 ; 679 ; MIPS64R6-LABEL: and_i1_31: 680 ; MIPS64R6: # %bb.0: # %entry 681 ; MIPS64R6-NEXT: jr $ra 682 ; MIPS64R6-NEXT: move $2, $4 683 ; 684 ; MM32R3-LABEL: and_i1_31: 685 ; MM32R3: # %bb.0: # %entry 686 ; MM32R3-NEXT: move $2, $4 687 ; MM32R3-NEXT: jrc $ra 688 ; 689 ; MM32R6-LABEL: and_i1_31: 690 ; MM32R6: # %bb.0: # %entry 691 ; MM32R6-NEXT: move $2, $4 692 ; MM32R6-NEXT: jrc $ra 693 entry: 694 %r = and i1 31, %b 695 ret i1 %r 696 } 697 698 define signext i8 @and_i8_31(i8 signext %b) { 699 ; MIPS-LABEL: and_i8_31: 700 ; MIPS: # %bb.0: # %entry 701 ; MIPS-NEXT: jr $ra 702 ; MIPS-NEXT: andi $2, $4, 31 703 ; 704 ; MIPS32R2-LABEL: and_i8_31: 705 ; MIPS32R2: # %bb.0: # %entry 706 ; MIPS32R2-NEXT: jr $ra 707 ; MIPS32R2-NEXT: andi $2, $4, 31 708 ; 709 ; MIPS32R6-LABEL: and_i8_31: 710 ; MIPS32R6: # %bb.0: # %entry 711 ; MIPS32R6-NEXT: jr $ra 712 ; MIPS32R6-NEXT: andi $2, $4, 31 713 ; 714 ; MIPS64-LABEL: and_i8_31: 715 ; MIPS64: # %bb.0: # %entry 716 ; MIPS64-NEXT: jr $ra 717 ; MIPS64-NEXT: andi $2, $4, 31 718 ; 719 ; MIPS64R2-LABEL: and_i8_31: 720 ; MIPS64R2: # %bb.0: # %entry 721 ; MIPS64R2-NEXT: jr $ra 722 ; MIPS64R2-NEXT: andi $2, $4, 31 723 ; 724 ; MIPS64R6-LABEL: and_i8_31: 725 ; MIPS64R6: # %bb.0: # %entry 726 ; MIPS64R6-NEXT: jr $ra 727 ; MIPS64R6-NEXT: andi $2, $4, 31 728 ; 729 ; MM32R3-LABEL: and_i8_31: 730 ; MM32R3: # %bb.0: # %entry 731 ; MM32R3-NEXT: andi16 $2, $4, 31 732 ; MM32R3-NEXT: jrc $ra 733 ; 734 ; MM32R6-LABEL: and_i8_31: 735 ; MM32R6: # %bb.0: # %entry 736 ; MM32R6-NEXT: andi16 $2, $4, 31 737 ; MM32R6-NEXT: jrc $ra 738 entry: 739 %r = and i8 31, %b 740 ret i8 %r 741 } 742 743 define signext i16 @and_i16_31(i16 signext %b) { 744 ; MIPS-LABEL: and_i16_31: 745 ; MIPS: # %bb.0: # %entry 746 ; MIPS-NEXT: jr $ra 747 ; MIPS-NEXT: andi $2, $4, 31 748 ; 749 ; MIPS32R2-LABEL: and_i16_31: 750 ; MIPS32R2: # %bb.0: # %entry 751 ; MIPS32R2-NEXT: jr $ra 752 ; MIPS32R2-NEXT: andi $2, $4, 31 753 ; 754 ; MIPS32R6-LABEL: and_i16_31: 755 ; MIPS32R6: # %bb.0: # %entry 756 ; MIPS32R6-NEXT: jr $ra 757 ; MIPS32R6-NEXT: andi $2, $4, 31 758 ; 759 ; MIPS64-LABEL: and_i16_31: 760 ; MIPS64: # %bb.0: # %entry 761 ; MIPS64-NEXT: jr $ra 762 ; MIPS64-NEXT: andi $2, $4, 31 763 ; 764 ; MIPS64R2-LABEL: and_i16_31: 765 ; MIPS64R2: # %bb.0: # %entry 766 ; MIPS64R2-NEXT: jr $ra 767 ; MIPS64R2-NEXT: andi $2, $4, 31 768 ; 769 ; MIPS64R6-LABEL: and_i16_31: 770 ; MIPS64R6: # %bb.0: # %entry 771 ; MIPS64R6-NEXT: jr $ra 772 ; MIPS64R6-NEXT: andi $2, $4, 31 773 ; 774 ; MM32R3-LABEL: and_i16_31: 775 ; MM32R3: # %bb.0: # %entry 776 ; MM32R3-NEXT: andi16 $2, $4, 31 777 ; MM32R3-NEXT: jrc $ra 778 ; 779 ; MM32R6-LABEL: and_i16_31: 780 ; MM32R6: # %bb.0: # %entry 781 ; MM32R6-NEXT: andi16 $2, $4, 31 782 ; MM32R6-NEXT: jrc $ra 783 entry: 784 %r = and i16 31, %b 785 ret i16 %r 786 } 787 788 define signext i32 @and_i32_31(i32 signext %b) { 789 ; MIPS-LABEL: and_i32_31: 790 ; MIPS: # %bb.0: # %entry 791 ; MIPS-NEXT: jr $ra 792 ; MIPS-NEXT: andi $2, $4, 31 793 ; 794 ; MIPS32R2-LABEL: and_i32_31: 795 ; MIPS32R2: # %bb.0: # %entry 796 ; MIPS32R2-NEXT: jr $ra 797 ; MIPS32R2-NEXT: andi $2, $4, 31 798 ; 799 ; MIPS32R6-LABEL: and_i32_31: 800 ; MIPS32R6: # %bb.0: # %entry 801 ; MIPS32R6-NEXT: jr $ra 802 ; MIPS32R6-NEXT: andi $2, $4, 31 803 ; 804 ; MIPS64-LABEL: and_i32_31: 805 ; MIPS64: # %bb.0: # %entry 806 ; MIPS64-NEXT: jr $ra 807 ; MIPS64-NEXT: andi $2, $4, 31 808 ; 809 ; MIPS64R2-LABEL: and_i32_31: 810 ; MIPS64R2: # %bb.0: # %entry 811 ; MIPS64R2-NEXT: jr $ra 812 ; MIPS64R2-NEXT: andi $2, $4, 31 813 ; 814 ; MIPS64R6-LABEL: and_i32_31: 815 ; MIPS64R6: # %bb.0: # %entry 816 ; MIPS64R6-NEXT: jr $ra 817 ; MIPS64R6-NEXT: andi $2, $4, 31 818 ; 819 ; MM32R3-LABEL: and_i32_31: 820 ; MM32R3: # %bb.0: # %entry 821 ; MM32R3-NEXT: andi16 $2, $4, 31 822 ; MM32R3-NEXT: jrc $ra 823 ; 824 ; MM32R6-LABEL: and_i32_31: 825 ; MM32R6: # %bb.0: # %entry 826 ; MM32R6-NEXT: andi16 $2, $4, 31 827 ; MM32R6-NEXT: jrc $ra 828 entry: 829 %r = and i32 31, %b 830 ret i32 %r 831 } 832 833 define signext i64 @and_i64_31(i64 signext %b) { 834 ; MIPS-LABEL: and_i64_31: 835 ; MIPS: # %bb.0: # %entry 836 ; MIPS-NEXT: andi $3, $5, 31 837 ; MIPS-NEXT: jr $ra 838 ; MIPS-NEXT: addiu $2, $zero, 0 839 ; 840 ; MIPS32R2-LABEL: and_i64_31: 841 ; MIPS32R2: # %bb.0: # %entry 842 ; MIPS32R2-NEXT: andi $3, $5, 31 843 ; MIPS32R2-NEXT: jr $ra 844 ; MIPS32R2-NEXT: addiu $2, $zero, 0 845 ; 846 ; MIPS32R6-LABEL: and_i64_31: 847 ; MIPS32R6: # %bb.0: # %entry 848 ; MIPS32R6-NEXT: andi $3, $5, 31 849 ; MIPS32R6-NEXT: jr $ra 850 ; MIPS32R6-NEXT: addiu $2, $zero, 0 851 ; 852 ; MIPS64-LABEL: and_i64_31: 853 ; MIPS64: # %bb.0: # %entry 854 ; MIPS64-NEXT: jr $ra 855 ; MIPS64-NEXT: andi $2, $4, 31 856 ; 857 ; MIPS64R2-LABEL: and_i64_31: 858 ; MIPS64R2: # %bb.0: # %entry 859 ; MIPS64R2-NEXT: jr $ra 860 ; MIPS64R2-NEXT: andi $2, $4, 31 861 ; 862 ; MIPS64R6-LABEL: and_i64_31: 863 ; MIPS64R6: # %bb.0: # %entry 864 ; MIPS64R6-NEXT: jr $ra 865 ; MIPS64R6-NEXT: andi $2, $4, 31 866 ; 867 ; MM32R3-LABEL: and_i64_31: 868 ; MM32R3: # %bb.0: # %entry 869 ; MM32R3-NEXT: andi16 $3, $5, 31 870 ; MM32R3-NEXT: li16 $2, 0 871 ; MM32R3-NEXT: jrc $ra 872 ; 873 ; MM32R6-LABEL: and_i64_31: 874 ; MM32R6: # %bb.0: # %entry 875 ; MM32R6-NEXT: andi16 $3, $5, 31 876 ; MM32R6-NEXT: li16 $2, 0 877 ; MM32R6-NEXT: jrc $ra 878 entry: 879 %r = and i64 31, %b 880 ret i64 %r 881 } 882 883 define signext i128 @and_i128_31(i128 signext %b) { 884 ; MIPS-LABEL: and_i128_31: 885 ; MIPS: # %bb.0: # %entry 886 ; MIPS-NEXT: andi $5, $7, 31 887 ; MIPS-NEXT: addiu $2, $zero, 0 888 ; MIPS-NEXT: addiu $3, $zero, 0 889 ; MIPS-NEXT: jr $ra 890 ; MIPS-NEXT: addiu $4, $zero, 0 891 ; 892 ; MIPS32R2-LABEL: and_i128_31: 893 ; MIPS32R2: # %bb.0: # %entry 894 ; MIPS32R2-NEXT: andi $5, $7, 31 895 ; MIPS32R2-NEXT: addiu $2, $zero, 0 896 ; MIPS32R2-NEXT: addiu $3, $zero, 0 897 ; MIPS32R2-NEXT: jr $ra 898 ; MIPS32R2-NEXT: addiu $4, $zero, 0 899 ; 900 ; MIPS32R6-LABEL: and_i128_31: 901 ; MIPS32R6: # %bb.0: # %entry 902 ; MIPS32R6-NEXT: andi $5, $7, 31 903 ; MIPS32R6-NEXT: addiu $2, $zero, 0 904 ; MIPS32R6-NEXT: addiu $3, $zero, 0 905 ; MIPS32R6-NEXT: jr $ra 906 ; MIPS32R6-NEXT: addiu $4, $zero, 0 907 ; 908 ; MIPS64-LABEL: and_i128_31: 909 ; MIPS64: # %bb.0: # %entry 910 ; MIPS64-NEXT: andi $3, $5, 31 911 ; MIPS64-NEXT: jr $ra 912 ; MIPS64-NEXT: daddiu $2, $zero, 0 913 ; 914 ; MIPS64R2-LABEL: and_i128_31: 915 ; MIPS64R2: # %bb.0: # %entry 916 ; MIPS64R2-NEXT: andi $3, $5, 31 917 ; MIPS64R2-NEXT: jr $ra 918 ; MIPS64R2-NEXT: daddiu $2, $zero, 0 919 ; 920 ; MIPS64R6-LABEL: and_i128_31: 921 ; MIPS64R6: # %bb.0: # %entry 922 ; MIPS64R6-NEXT: andi $3, $5, 31 923 ; MIPS64R6-NEXT: jr $ra 924 ; MIPS64R6-NEXT: daddiu $2, $zero, 0 925 ; 926 ; MM32R3-LABEL: and_i128_31: 927 ; MM32R3: # %bb.0: # %entry 928 ; MM32R3-NEXT: andi16 $5, $7, 31 929 ; MM32R3-NEXT: li16 $2, 0 930 ; MM32R3-NEXT: li16 $3, 0 931 ; MM32R3-NEXT: li16 $4, 0 932 ; MM32R3-NEXT: jrc $ra 933 ; 934 ; MM32R6-LABEL: and_i128_31: 935 ; MM32R6: # %bb.0: # %entry 936 ; MM32R6-NEXT: andi16 $5, $7, 31 937 ; MM32R6-NEXT: li16 $2, 0 938 ; MM32R6-NEXT: li16 $3, 0 939 ; MM32R6-NEXT: li16 $4, 0 940 ; MM32R6-NEXT: jrc $ra 941 entry: 942 %r = and i128 31, %b 943 ret i128 %r 944 } 945 946 define signext i1 @and_i1_255(i1 signext %b) { 947 ; MIPS-LABEL: and_i1_255: 948 ; MIPS: # %bb.0: # %entry 949 ; MIPS-NEXT: jr $ra 950 ; MIPS-NEXT: move $2, $4 951 ; 952 ; MIPS32R2-LABEL: and_i1_255: 953 ; MIPS32R2: # %bb.0: # %entry 954 ; MIPS32R2-NEXT: jr $ra 955 ; MIPS32R2-NEXT: move $2, $4 956 ; 957 ; MIPS32R6-LABEL: and_i1_255: 958 ; MIPS32R6: # %bb.0: # %entry 959 ; MIPS32R6-NEXT: jr $ra 960 ; MIPS32R6-NEXT: move $2, $4 961 ; 962 ; MIPS64-LABEL: and_i1_255: 963 ; MIPS64: # %bb.0: # %entry 964 ; MIPS64-NEXT: jr $ra 965 ; MIPS64-NEXT: move $2, $4 966 ; 967 ; MIPS64R2-LABEL: and_i1_255: 968 ; MIPS64R2: # %bb.0: # %entry 969 ; MIPS64R2-NEXT: jr $ra 970 ; MIPS64R2-NEXT: move $2, $4 971 ; 972 ; MIPS64R6-LABEL: and_i1_255: 973 ; MIPS64R6: # %bb.0: # %entry 974 ; MIPS64R6-NEXT: jr $ra 975 ; MIPS64R6-NEXT: move $2, $4 976 ; 977 ; MM32R3-LABEL: and_i1_255: 978 ; MM32R3: # %bb.0: # %entry 979 ; MM32R3-NEXT: move $2, $4 980 ; MM32R3-NEXT: jrc $ra 981 ; 982 ; MM32R6-LABEL: and_i1_255: 983 ; MM32R6: # %bb.0: # %entry 984 ; MM32R6-NEXT: move $2, $4 985 ; MM32R6-NEXT: jrc $ra 986 entry: 987 %r = and i1 255, %b 988 ret i1 %r 989 } 990 991 define signext i8 @and_i8_255(i8 signext %b) { 992 ; MIPS-LABEL: and_i8_255: 993 ; MIPS: # %bb.0: # %entry 994 ; MIPS-NEXT: jr $ra 995 ; MIPS-NEXT: move $2, $4 996 ; 997 ; MIPS32R2-LABEL: and_i8_255: 998 ; MIPS32R2: # %bb.0: # %entry 999 ; MIPS32R2-NEXT: jr $ra 1000 ; MIPS32R2-NEXT: move $2, $4 1001 ; 1002 ; MIPS32R6-LABEL: and_i8_255: 1003 ; MIPS32R6: # %bb.0: # %entry 1004 ; MIPS32R6-NEXT: jr $ra 1005 ; MIPS32R6-NEXT: move $2, $4 1006 ; 1007 ; MIPS64-LABEL: and_i8_255: 1008 ; MIPS64: # %bb.0: # %entry 1009 ; MIPS64-NEXT: jr $ra 1010 ; MIPS64-NEXT: move $2, $4 1011 ; 1012 ; MIPS64R2-LABEL: and_i8_255: 1013 ; MIPS64R2: # %bb.0: # %entry 1014 ; MIPS64R2-NEXT: jr $ra 1015 ; MIPS64R2-NEXT: move $2, $4 1016 ; 1017 ; MIPS64R6-LABEL: and_i8_255: 1018 ; MIPS64R6: # %bb.0: # %entry 1019 ; MIPS64R6-NEXT: jr $ra 1020 ; MIPS64R6-NEXT: move $2, $4 1021 ; 1022 ; MM32R3-LABEL: and_i8_255: 1023 ; MM32R3: # %bb.0: # %entry 1024 ; MM32R3-NEXT: move $2, $4 1025 ; MM32R3-NEXT: jrc $ra 1026 ; 1027 ; MM32R6-LABEL: and_i8_255: 1028 ; MM32R6: # %bb.0: # %entry 1029 ; MM32R6-NEXT: move $2, $4 1030 ; MM32R6-NEXT: jrc $ra 1031 entry: 1032 %r = and i8 255, %b 1033 ret i8 %r 1034 } 1035 1036 define signext i16 @and_i16_255(i16 signext %b) { 1037 ; MIPS-LABEL: and_i16_255: 1038 ; MIPS: # %bb.0: # %entry 1039 ; MIPS-NEXT: jr $ra 1040 ; MIPS-NEXT: andi $2, $4, 255 1041 ; 1042 ; MIPS32R2-LABEL: and_i16_255: 1043 ; MIPS32R2: # %bb.0: # %entry 1044 ; MIPS32R2-NEXT: jr $ra 1045 ; MIPS32R2-NEXT: andi $2, $4, 255 1046 ; 1047 ; MIPS32R6-LABEL: and_i16_255: 1048 ; MIPS32R6: # %bb.0: # %entry 1049 ; MIPS32R6-NEXT: jr $ra 1050 ; MIPS32R6-NEXT: andi $2, $4, 255 1051 ; 1052 ; MIPS64-LABEL: and_i16_255: 1053 ; MIPS64: # %bb.0: # %entry 1054 ; MIPS64-NEXT: jr $ra 1055 ; MIPS64-NEXT: andi $2, $4, 255 1056 ; 1057 ; MIPS64R2-LABEL: and_i16_255: 1058 ; MIPS64R2: # %bb.0: # %entry 1059 ; MIPS64R2-NEXT: jr $ra 1060 ; MIPS64R2-NEXT: andi $2, $4, 255 1061 ; 1062 ; MIPS64R6-LABEL: and_i16_255: 1063 ; MIPS64R6: # %bb.0: # %entry 1064 ; MIPS64R6-NEXT: jr $ra 1065 ; MIPS64R6-NEXT: andi $2, $4, 255 1066 ; 1067 ; MM32R3-LABEL: and_i16_255: 1068 ; MM32R3: # %bb.0: # %entry 1069 ; MM32R3-NEXT: andi16 $2, $4, 255 1070 ; MM32R3-NEXT: jrc $ra 1071 ; 1072 ; MM32R6-LABEL: and_i16_255: 1073 ; MM32R6: # %bb.0: # %entry 1074 ; MM32R6-NEXT: andi16 $2, $4, 255 1075 ; MM32R6-NEXT: jrc $ra 1076 entry: 1077 %r = and i16 255, %b 1078 ret i16 %r 1079 } 1080 1081 define signext i32 @and_i32_255(i32 signext %b) { 1082 ; MIPS-LABEL: and_i32_255: 1083 ; MIPS: # %bb.0: # %entry 1084 ; MIPS-NEXT: jr $ra 1085 ; MIPS-NEXT: andi $2, $4, 255 1086 ; 1087 ; MIPS32R2-LABEL: and_i32_255: 1088 ; MIPS32R2: # %bb.0: # %entry 1089 ; MIPS32R2-NEXT: jr $ra 1090 ; MIPS32R2-NEXT: andi $2, $4, 255 1091 ; 1092 ; MIPS32R6-LABEL: and_i32_255: 1093 ; MIPS32R6: # %bb.0: # %entry 1094 ; MIPS32R6-NEXT: jr $ra 1095 ; MIPS32R6-NEXT: andi $2, $4, 255 1096 ; 1097 ; MIPS64-LABEL: and_i32_255: 1098 ; MIPS64: # %bb.0: # %entry 1099 ; MIPS64-NEXT: jr $ra 1100 ; MIPS64-NEXT: andi $2, $4, 255 1101 ; 1102 ; MIPS64R2-LABEL: and_i32_255: 1103 ; MIPS64R2: # %bb.0: # %entry 1104 ; MIPS64R2-NEXT: jr $ra 1105 ; MIPS64R2-NEXT: andi $2, $4, 255 1106 ; 1107 ; MIPS64R6-LABEL: and_i32_255: 1108 ; MIPS64R6: # %bb.0: # %entry 1109 ; MIPS64R6-NEXT: jr $ra 1110 ; MIPS64R6-NEXT: andi $2, $4, 255 1111 ; 1112 ; MM32R3-LABEL: and_i32_255: 1113 ; MM32R3: # %bb.0: # %entry 1114 ; MM32R3-NEXT: andi16 $2, $4, 255 1115 ; MM32R3-NEXT: jrc $ra 1116 ; 1117 ; MM32R6-LABEL: and_i32_255: 1118 ; MM32R6: # %bb.0: # %entry 1119 ; MM32R6-NEXT: andi16 $2, $4, 255 1120 ; MM32R6-NEXT: jrc $ra 1121 entry: 1122 %r = and i32 255, %b 1123 ret i32 %r 1124 } 1125 1126 define signext i64 @and_i64_255(i64 signext %b) { 1127 ; MIPS-LABEL: and_i64_255: 1128 ; MIPS: # %bb.0: # %entry 1129 ; MIPS-NEXT: andi $3, $5, 255 1130 ; MIPS-NEXT: jr $ra 1131 ; MIPS-NEXT: addiu $2, $zero, 0 1132 ; 1133 ; MIPS32R2-LABEL: and_i64_255: 1134 ; MIPS32R2: # %bb.0: # %entry 1135 ; MIPS32R2-NEXT: andi $3, $5, 255 1136 ; MIPS32R2-NEXT: jr $ra 1137 ; MIPS32R2-NEXT: addiu $2, $zero, 0 1138 ; 1139 ; MIPS32R6-LABEL: and_i64_255: 1140 ; MIPS32R6: # %bb.0: # %entry 1141 ; MIPS32R6-NEXT: andi $3, $5, 255 1142 ; MIPS32R6-NEXT: jr $ra 1143 ; MIPS32R6-NEXT: addiu $2, $zero, 0 1144 ; 1145 ; MIPS64-LABEL: and_i64_255: 1146 ; MIPS64: # %bb.0: # %entry 1147 ; MIPS64-NEXT: jr $ra 1148 ; MIPS64-NEXT: andi $2, $4, 255 1149 ; 1150 ; MIPS64R2-LABEL: and_i64_255: 1151 ; MIPS64R2: # %bb.0: # %entry 1152 ; MIPS64R2-NEXT: jr $ra 1153 ; MIPS64R2-NEXT: andi $2, $4, 255 1154 ; 1155 ; MIPS64R6-LABEL: and_i64_255: 1156 ; MIPS64R6: # %bb.0: # %entry 1157 ; MIPS64R6-NEXT: jr $ra 1158 ; MIPS64R6-NEXT: andi $2, $4, 255 1159 ; 1160 ; MM32R3-LABEL: and_i64_255: 1161 ; MM32R3: # %bb.0: # %entry 1162 ; MM32R3-NEXT: andi16 $3, $5, 255 1163 ; MM32R3-NEXT: li16 $2, 0 1164 ; MM32R3-NEXT: jrc $ra 1165 ; 1166 ; MM32R6-LABEL: and_i64_255: 1167 ; MM32R6: # %bb.0: # %entry 1168 ; MM32R6-NEXT: andi16 $3, $5, 255 1169 ; MM32R6-NEXT: li16 $2, 0 1170 ; MM32R6-NEXT: jrc $ra 1171 entry: 1172 %r = and i64 255, %b 1173 ret i64 %r 1174 } 1175 1176 define signext i128 @and_i128_255(i128 signext %b) { 1177 ; MIPS-LABEL: and_i128_255: 1178 ; MIPS: # %bb.0: # %entry 1179 ; MIPS-NEXT: andi $5, $7, 255 1180 ; MIPS-NEXT: addiu $2, $zero, 0 1181 ; MIPS-NEXT: addiu $3, $zero, 0 1182 ; MIPS-NEXT: jr $ra 1183 ; MIPS-NEXT: addiu $4, $zero, 0 1184 ; 1185 ; MIPS32R2-LABEL: and_i128_255: 1186 ; MIPS32R2: # %bb.0: # %entry 1187 ; MIPS32R2-NEXT: andi $5, $7, 255 1188 ; MIPS32R2-NEXT: addiu $2, $zero, 0 1189 ; MIPS32R2-NEXT: addiu $3, $zero, 0 1190 ; MIPS32R2-NEXT: jr $ra 1191 ; MIPS32R2-NEXT: addiu $4, $zero, 0 1192 ; 1193 ; MIPS32R6-LABEL: and_i128_255: 1194 ; MIPS32R6: # %bb.0: # %entry 1195 ; MIPS32R6-NEXT: andi $5, $7, 255 1196 ; MIPS32R6-NEXT: addiu $2, $zero, 0 1197 ; MIPS32R6-NEXT: addiu $3, $zero, 0 1198 ; MIPS32R6-NEXT: jr $ra 1199 ; MIPS32R6-NEXT: addiu $4, $zero, 0 1200 ; 1201 ; MIPS64-LABEL: and_i128_255: 1202 ; MIPS64: # %bb.0: # %entry 1203 ; MIPS64-NEXT: andi $3, $5, 255 1204 ; MIPS64-NEXT: jr $ra 1205 ; MIPS64-NEXT: daddiu $2, $zero, 0 1206 ; 1207 ; MIPS64R2-LABEL: and_i128_255: 1208 ; MIPS64R2: # %bb.0: # %entry 1209 ; MIPS64R2-NEXT: andi $3, $5, 255 1210 ; MIPS64R2-NEXT: jr $ra 1211 ; MIPS64R2-NEXT: daddiu $2, $zero, 0 1212 ; 1213 ; MIPS64R6-LABEL: and_i128_255: 1214 ; MIPS64R6: # %bb.0: # %entry 1215 ; MIPS64R6-NEXT: andi $3, $5, 255 1216 ; MIPS64R6-NEXT: jr $ra 1217 ; MIPS64R6-NEXT: daddiu $2, $zero, 0 1218 ; 1219 ; MM32R3-LABEL: and_i128_255: 1220 ; MM32R3: # %bb.0: # %entry 1221 ; MM32R3-NEXT: andi16 $5, $7, 255 1222 ; MM32R3-NEXT: li16 $2, 0 1223 ; MM32R3-NEXT: li16 $3, 0 1224 ; MM32R3-NEXT: li16 $4, 0 1225 ; MM32R3-NEXT: jrc $ra 1226 ; 1227 ; MM32R6-LABEL: and_i128_255: 1228 ; MM32R6: # %bb.0: # %entry 1229 ; MM32R6-NEXT: andi16 $5, $7, 255 1230 ; MM32R6-NEXT: li16 $2, 0 1231 ; MM32R6-NEXT: li16 $3, 0 1232 ; MM32R6-NEXT: li16 $4, 0 1233 ; MM32R6-NEXT: jrc $ra 1234 entry: 1235 %r = and i128 255, %b 1236 ret i128 %r 1237 } 1238 1239 define signext i1 @and_i1_32768(i1 signext %b) { 1240 ; MIPS-LABEL: and_i1_32768: 1241 ; MIPS: # %bb.0: # %entry 1242 ; MIPS-NEXT: jr $ra 1243 ; MIPS-NEXT: addiu $2, $zero, 0 1244 ; 1245 ; MIPS32R2-LABEL: and_i1_32768: 1246 ; MIPS32R2: # %bb.0: # %entry 1247 ; MIPS32R2-NEXT: jr $ra 1248 ; MIPS32R2-NEXT: addiu $2, $zero, 0 1249 ; 1250 ; MIPS32R6-LABEL: and_i1_32768: 1251 ; MIPS32R6: # %bb.0: # %entry 1252 ; MIPS32R6-NEXT: jr $ra 1253 ; MIPS32R6-NEXT: addiu $2, $zero, 0 1254 ; 1255 ; MIPS64-LABEL: and_i1_32768: 1256 ; MIPS64: # %bb.0: # %entry 1257 ; MIPS64-NEXT: jr $ra 1258 ; MIPS64-NEXT: addiu $2, $zero, 0 1259 ; 1260 ; MIPS64R2-LABEL: and_i1_32768: 1261 ; MIPS64R2: # %bb.0: # %entry 1262 ; MIPS64R2-NEXT: jr $ra 1263 ; MIPS64R2-NEXT: addiu $2, $zero, 0 1264 ; 1265 ; MIPS64R6-LABEL: and_i1_32768: 1266 ; MIPS64R6: # %bb.0: # %entry 1267 ; MIPS64R6-NEXT: jr $ra 1268 ; MIPS64R6-NEXT: addiu $2, $zero, 0 1269 ; 1270 ; MM32R3-LABEL: and_i1_32768: 1271 ; MM32R3: # %bb.0: # %entry 1272 ; MM32R3-NEXT: li16 $2, 0 1273 ; MM32R3-NEXT: jrc $ra 1274 ; 1275 ; MM32R6-LABEL: and_i1_32768: 1276 ; MM32R6: # %bb.0: # %entry 1277 ; MM32R6-NEXT: li16 $2, 0 1278 ; MM32R6-NEXT: jrc $ra 1279 entry: 1280 %r = and i1 32768, %b 1281 ret i1 %r 1282 } 1283 1284 define signext i8 @and_i8_32768(i8 signext %b) { 1285 ; MIPS-LABEL: and_i8_32768: 1286 ; MIPS: # %bb.0: # %entry 1287 ; MIPS-NEXT: jr $ra 1288 ; MIPS-NEXT: addiu $2, $zero, 0 1289 ; 1290 ; MIPS32R2-LABEL: and_i8_32768: 1291 ; MIPS32R2: # %bb.0: # %entry 1292 ; MIPS32R2-NEXT: jr $ra 1293 ; MIPS32R2-NEXT: addiu $2, $zero, 0 1294 ; 1295 ; MIPS32R6-LABEL: and_i8_32768: 1296 ; MIPS32R6: # %bb.0: # %entry 1297 ; MIPS32R6-NEXT: jr $ra 1298 ; MIPS32R6-NEXT: addiu $2, $zero, 0 1299 ; 1300 ; MIPS64-LABEL: and_i8_32768: 1301 ; MIPS64: # %bb.0: # %entry 1302 ; MIPS64-NEXT: jr $ra 1303 ; MIPS64-NEXT: addiu $2, $zero, 0 1304 ; 1305 ; MIPS64R2-LABEL: and_i8_32768: 1306 ; MIPS64R2: # %bb.0: # %entry 1307 ; MIPS64R2-NEXT: jr $ra 1308 ; MIPS64R2-NEXT: addiu $2, $zero, 0 1309 ; 1310 ; MIPS64R6-LABEL: and_i8_32768: 1311 ; MIPS64R6: # %bb.0: # %entry 1312 ; MIPS64R6-NEXT: jr $ra 1313 ; MIPS64R6-NEXT: addiu $2, $zero, 0 1314 ; 1315 ; MM32R3-LABEL: and_i8_32768: 1316 ; MM32R3: # %bb.0: # %entry 1317 ; MM32R3-NEXT: li16 $2, 0 1318 ; MM32R3-NEXT: jrc $ra 1319 ; 1320 ; MM32R6-LABEL: and_i8_32768: 1321 ; MM32R6: # %bb.0: # %entry 1322 ; MM32R6-NEXT: li16 $2, 0 1323 ; MM32R6-NEXT: jrc $ra 1324 entry: 1325 %r = and i8 32768, %b 1326 ret i8 %r 1327 } 1328 1329 define signext i16 @and_i16_32768(i16 signext %b) { 1330 ; MIPS-LABEL: and_i16_32768: 1331 ; MIPS: # %bb.0: # %entry 1332 ; MIPS-NEXT: addiu $1, $zero, -32768 1333 ; MIPS-NEXT: jr $ra 1334 ; MIPS-NEXT: and $2, $4, $1 1335 ; 1336 ; MIPS32R2-LABEL: and_i16_32768: 1337 ; MIPS32R2: # %bb.0: # %entry 1338 ; MIPS32R2-NEXT: addiu $1, $zero, -32768 1339 ; MIPS32R2-NEXT: jr $ra 1340 ; MIPS32R2-NEXT: and $2, $4, $1 1341 ; 1342 ; MIPS32R6-LABEL: and_i16_32768: 1343 ; MIPS32R6: # %bb.0: # %entry 1344 ; MIPS32R6-NEXT: addiu $1, $zero, -32768 1345 ; MIPS32R6-NEXT: jr $ra 1346 ; MIPS32R6-NEXT: and $2, $4, $1 1347 ; 1348 ; MIPS64-LABEL: and_i16_32768: 1349 ; MIPS64: # %bb.0: # %entry 1350 ; MIPS64-NEXT: addiu $1, $zero, -32768 1351 ; MIPS64-NEXT: jr $ra 1352 ; MIPS64-NEXT: and $2, $4, $1 1353 ; 1354 ; MIPS64R2-LABEL: and_i16_32768: 1355 ; MIPS64R2: # %bb.0: # %entry 1356 ; MIPS64R2-NEXT: addiu $1, $zero, -32768 1357 ; MIPS64R2-NEXT: jr $ra 1358 ; MIPS64R2-NEXT: and $2, $4, $1 1359 ; 1360 ; MIPS64R6-LABEL: and_i16_32768: 1361 ; MIPS64R6: # %bb.0: # %entry 1362 ; MIPS64R6-NEXT: addiu $1, $zero, -32768 1363 ; MIPS64R6-NEXT: jr $ra 1364 ; MIPS64R6-NEXT: and $2, $4, $1 1365 ; 1366 ; MM32R3-LABEL: and_i16_32768: 1367 ; MM32R3: # %bb.0: # %entry 1368 ; MM32R3-NEXT: addiu $2, $zero, -32768 1369 ; MM32R3-NEXT: and16 $2, $4 1370 ; MM32R3-NEXT: jrc $ra 1371 ; 1372 ; MM32R6-LABEL: and_i16_32768: 1373 ; MM32R6: # %bb.0: # %entry 1374 ; MM32R6-NEXT: addiu $1, $zero, -32768 1375 ; MM32R6-NEXT: and $2, $4, $1 1376 ; MM32R6-NEXT: jrc $ra 1377 entry: 1378 1379 %r = and i16 32768, %b 1380 ret i16 %r 1381 } 1382 1383 define signext i32 @and_i32_32768(i32 signext %b) { 1384 ; MIPS-LABEL: and_i32_32768: 1385 ; MIPS: # %bb.0: # %entry 1386 ; MIPS-NEXT: jr $ra 1387 ; MIPS-NEXT: andi $2, $4, 32768 1388 ; 1389 ; MIPS32R2-LABEL: and_i32_32768: 1390 ; MIPS32R2: # %bb.0: # %entry 1391 ; MIPS32R2-NEXT: jr $ra 1392 ; MIPS32R2-NEXT: andi $2, $4, 32768 1393 ; 1394 ; MIPS32R6-LABEL: and_i32_32768: 1395 ; MIPS32R6: # %bb.0: # %entry 1396 ; MIPS32R6-NEXT: jr $ra 1397 ; MIPS32R6-NEXT: andi $2, $4, 32768 1398 ; 1399 ; MIPS64-LABEL: and_i32_32768: 1400 ; MIPS64: # %bb.0: # %entry 1401 ; MIPS64-NEXT: jr $ra 1402 ; MIPS64-NEXT: andi $2, $4, 32768 1403 ; 1404 ; MIPS64R2-LABEL: and_i32_32768: 1405 ; MIPS64R2: # %bb.0: # %entry 1406 ; MIPS64R2-NEXT: jr $ra 1407 ; MIPS64R2-NEXT: andi $2, $4, 32768 1408 ; 1409 ; MIPS64R6-LABEL: and_i32_32768: 1410 ; MIPS64R6: # %bb.0: # %entry 1411 ; MIPS64R6-NEXT: jr $ra 1412 ; MIPS64R6-NEXT: andi $2, $4, 32768 1413 ; 1414 ; MM32R3-LABEL: and_i32_32768: 1415 ; MM32R3: # %bb.0: # %entry 1416 ; MM32R3-NEXT: andi16 $2, $4, 32768 1417 ; MM32R3-NEXT: jrc $ra 1418 ; 1419 ; MM32R6-LABEL: and_i32_32768: 1420 ; MM32R6: # %bb.0: # %entry 1421 ; MM32R6-NEXT: andi16 $2, $4, 32768 1422 ; MM32R6-NEXT: jrc $ra 1423 entry: 1424 %r = and i32 32768, %b 1425 ret i32 %r 1426 } 1427 1428 define signext i64 @and_i64_32768(i64 signext %b) { 1429 ; MIPS-LABEL: and_i64_32768: 1430 ; MIPS: # %bb.0: # %entry 1431 ; MIPS-NEXT: andi $3, $5, 32768 1432 ; MIPS-NEXT: jr $ra 1433 ; MIPS-NEXT: addiu $2, $zero, 0 1434 ; 1435 ; MIPS32R2-LABEL: and_i64_32768: 1436 ; MIPS32R2: # %bb.0: # %entry 1437 ; MIPS32R2-NEXT: andi $3, $5, 32768 1438 ; MIPS32R2-NEXT: jr $ra 1439 ; MIPS32R2-NEXT: addiu $2, $zero, 0 1440 ; 1441 ; MIPS32R6-LABEL: and_i64_32768: 1442 ; MIPS32R6: # %bb.0: # %entry 1443 ; MIPS32R6-NEXT: andi $3, $5, 32768 1444 ; MIPS32R6-NEXT: jr $ra 1445 ; MIPS32R6-NEXT: addiu $2, $zero, 0 1446 ; 1447 ; MIPS64-LABEL: and_i64_32768: 1448 ; MIPS64: # %bb.0: # %entry 1449 ; MIPS64-NEXT: jr $ra 1450 ; MIPS64-NEXT: andi $2, $4, 32768 1451 ; 1452 ; MIPS64R2-LABEL: and_i64_32768: 1453 ; MIPS64R2: # %bb.0: # %entry 1454 ; MIPS64R2-NEXT: jr $ra 1455 ; MIPS64R2-NEXT: andi $2, $4, 32768 1456 ; 1457 ; MIPS64R6-LABEL: and_i64_32768: 1458 ; MIPS64R6: # %bb.0: # %entry 1459 ; MIPS64R6-NEXT: jr $ra 1460 ; MIPS64R6-NEXT: andi $2, $4, 32768 1461 ; 1462 ; MM32R3-LABEL: and_i64_32768: 1463 ; MM32R3: # %bb.0: # %entry 1464 ; MM32R3-NEXT: andi16 $3, $5, 32768 1465 ; MM32R3-NEXT: li16 $2, 0 1466 ; MM32R3-NEXT: jrc $ra 1467 ; 1468 ; MM32R6-LABEL: and_i64_32768: 1469 ; MM32R6: # %bb.0: # %entry 1470 ; MM32R6-NEXT: andi16 $3, $5, 32768 1471 ; MM32R6-NEXT: li16 $2, 0 1472 ; MM32R6-NEXT: jrc $ra 1473 entry: 1474 %r = and i64 32768, %b 1475 ret i64 %r 1476 } 1477 1478 define signext i128 @and_i128_32768(i128 signext %b) { 1479 ; MIPS-LABEL: and_i128_32768: 1480 ; MIPS: # %bb.0: # %entry 1481 ; MIPS-NEXT: andi $5, $7, 32768 1482 ; MIPS-NEXT: addiu $2, $zero, 0 1483 ; MIPS-NEXT: addiu $3, $zero, 0 1484 ; MIPS-NEXT: jr $ra 1485 ; MIPS-NEXT: addiu $4, $zero, 0 1486 ; 1487 ; MIPS32R2-LABEL: and_i128_32768: 1488 ; MIPS32R2: # %bb.0: # %entry 1489 ; MIPS32R2-NEXT: andi $5, $7, 32768 1490 ; MIPS32R2-NEXT: addiu $2, $zero, 0 1491 ; MIPS32R2-NEXT: addiu $3, $zero, 0 1492 ; MIPS32R2-NEXT: jr $ra 1493 ; MIPS32R2-NEXT: addiu $4, $zero, 0 1494 ; 1495 ; MIPS32R6-LABEL: and_i128_32768: 1496 ; MIPS32R6: # %bb.0: # %entry 1497 ; MIPS32R6-NEXT: andi $5, $7, 32768 1498 ; MIPS32R6-NEXT: addiu $2, $zero, 0 1499 ; MIPS32R6-NEXT: addiu $3, $zero, 0 1500 ; MIPS32R6-NEXT: jr $ra 1501 ; MIPS32R6-NEXT: addiu $4, $zero, 0 1502 ; 1503 ; MIPS64-LABEL: and_i128_32768: 1504 ; MIPS64: # %bb.0: # %entry 1505 ; MIPS64-NEXT: andi $3, $5, 32768 1506 ; MIPS64-NEXT: jr $ra 1507 ; MIPS64-NEXT: daddiu $2, $zero, 0 1508 ; 1509 ; MIPS64R2-LABEL: and_i128_32768: 1510 ; MIPS64R2: # %bb.0: # %entry 1511 ; MIPS64R2-NEXT: andi $3, $5, 32768 1512 ; MIPS64R2-NEXT: jr $ra 1513 ; MIPS64R2-NEXT: daddiu $2, $zero, 0 1514 ; 1515 ; MIPS64R6-LABEL: and_i128_32768: 1516 ; MIPS64R6: # %bb.0: # %entry 1517 ; MIPS64R6-NEXT: andi $3, $5, 32768 1518 ; MIPS64R6-NEXT: jr $ra 1519 ; MIPS64R6-NEXT: daddiu $2, $zero, 0 1520 ; 1521 ; MM32R3-LABEL: and_i128_32768: 1522 ; MM32R3: # %bb.0: # %entry 1523 ; MM32R3-NEXT: andi16 $5, $7, 32768 1524 ; MM32R3-NEXT: li16 $2, 0 1525 ; MM32R3-NEXT: li16 $3, 0 1526 ; MM32R3-NEXT: li16 $4, 0 1527 ; MM32R3-NEXT: jrc $ra 1528 ; 1529 ; MM32R6-LABEL: and_i128_32768: 1530 ; MM32R6: # %bb.0: # %entry 1531 ; MM32R6-NEXT: andi16 $5, $7, 32768 1532 ; MM32R6-NEXT: li16 $2, 0 1533 ; MM32R6-NEXT: li16 $3, 0 1534 ; MM32R6-NEXT: li16 $4, 0 1535 ; MM32R6-NEXT: jrc $ra 1536 entry: 1537 %r = and i128 32768, %b 1538 ret i128 %r 1539 } 1540 1541 define signext i1 @and_i1_65(i1 signext %b) { 1542 ; MIPS-LABEL: and_i1_65: 1543 ; MIPS: # %bb.0: # %entry 1544 ; MIPS-NEXT: jr $ra 1545 ; MIPS-NEXT: move $2, $4 1546 ; 1547 ; MIPS32R2-LABEL: and_i1_65: 1548 ; MIPS32R2: # %bb.0: # %entry 1549 ; MIPS32R2-NEXT: jr $ra 1550 ; MIPS32R2-NEXT: move $2, $4 1551 ; 1552 ; MIPS32R6-LABEL: and_i1_65: 1553 ; MIPS32R6: # %bb.0: # %entry 1554 ; MIPS32R6-NEXT: jr $ra 1555 ; MIPS32R6-NEXT: move $2, $4 1556 ; 1557 ; MIPS64-LABEL: and_i1_65: 1558 ; MIPS64: # %bb.0: # %entry 1559 ; MIPS64-NEXT: jr $ra 1560 ; MIPS64-NEXT: move $2, $4 1561 ; 1562 ; MIPS64R2-LABEL: and_i1_65: 1563 ; MIPS64R2: # %bb.0: # %entry 1564 ; MIPS64R2-NEXT: jr $ra 1565 ; MIPS64R2-NEXT: move $2, $4 1566 ; 1567 ; MIPS64R6-LABEL: and_i1_65: 1568 ; MIPS64R6: # %bb.0: # %entry 1569 ; MIPS64R6-NEXT: jr $ra 1570 ; MIPS64R6-NEXT: move $2, $4 1571 ; 1572 ; MM32R3-LABEL: and_i1_65: 1573 ; MM32R3: # %bb.0: # %entry 1574 ; MM32R3-NEXT: move $2, $4 1575 ; MM32R3-NEXT: jrc $ra 1576 ; 1577 ; MM32R6-LABEL: and_i1_65: 1578 ; MM32R6: # %bb.0: # %entry 1579 ; MM32R6-NEXT: move $2, $4 1580 ; MM32R6-NEXT: jrc $ra 1581 entry: 1582 %r = and i1 65, %b 1583 ret i1 %r 1584 } 1585 1586 define signext i8 @and_i8_65(i8 signext %b) { 1587 ; MIPS-LABEL: and_i8_65: 1588 ; MIPS: # %bb.0: # %entry 1589 ; MIPS-NEXT: jr $ra 1590 ; MIPS-NEXT: andi $2, $4, 65 1591 ; 1592 ; MIPS32R2-LABEL: and_i8_65: 1593 ; MIPS32R2: # %bb.0: # %entry 1594 ; MIPS32R2-NEXT: jr $ra 1595 ; MIPS32R2-NEXT: andi $2, $4, 65 1596 ; 1597 ; MIPS32R6-LABEL: and_i8_65: 1598 ; MIPS32R6: # %bb.0: # %entry 1599 ; MIPS32R6-NEXT: jr $ra 1600 ; MIPS32R6-NEXT: andi $2, $4, 65 1601 ; 1602 ; MIPS64-LABEL: and_i8_65: 1603 ; MIPS64: # %bb.0: # %entry 1604 ; MIPS64-NEXT: jr $ra 1605 ; MIPS64-NEXT: andi $2, $4, 65 1606 ; 1607 ; MIPS64R2-LABEL: and_i8_65: 1608 ; MIPS64R2: # %bb.0: # %entry 1609 ; MIPS64R2-NEXT: jr $ra 1610 ; MIPS64R2-NEXT: andi $2, $4, 65 1611 ; 1612 ; MIPS64R6-LABEL: and_i8_65: 1613 ; MIPS64R6: # %bb.0: # %entry 1614 ; MIPS64R6-NEXT: jr $ra 1615 ; MIPS64R6-NEXT: andi $2, $4, 65 1616 ; 1617 ; MM32R3-LABEL: and_i8_65: 1618 ; MM32R3: # %bb.0: # %entry 1619 ; MM32R3-NEXT: jr $ra 1620 ; MM32R3-NEXT: andi $2, $4, 65 1621 ; 1622 ; MM32R6-LABEL: and_i8_65: 1623 ; MM32R6: # %bb.0: # %entry 1624 ; MM32R6-NEXT: andi $2, $4, 65 1625 ; MM32R6-NEXT: jrc $ra 1626 entry: 1627 %r = and i8 65, %b 1628 ret i8 %r 1629 } 1630 1631 define signext i16 @and_i16_65(i16 signext %b) { 1632 ; MIPS-LABEL: and_i16_65: 1633 ; MIPS: # %bb.0: # %entry 1634 ; MIPS-NEXT: jr $ra 1635 ; MIPS-NEXT: andi $2, $4, 65 1636 ; 1637 ; MIPS32R2-LABEL: and_i16_65: 1638 ; MIPS32R2: # %bb.0: # %entry 1639 ; MIPS32R2-NEXT: jr $ra 1640 ; MIPS32R2-NEXT: andi $2, $4, 65 1641 ; 1642 ; MIPS32R6-LABEL: and_i16_65: 1643 ; MIPS32R6: # %bb.0: # %entry 1644 ; MIPS32R6-NEXT: jr $ra 1645 ; MIPS32R6-NEXT: andi $2, $4, 65 1646 ; 1647 ; MIPS64-LABEL: and_i16_65: 1648 ; MIPS64: # %bb.0: # %entry 1649 ; MIPS64-NEXT: jr $ra 1650 ; MIPS64-NEXT: andi $2, $4, 65 1651 ; 1652 ; MIPS64R2-LABEL: and_i16_65: 1653 ; MIPS64R2: # %bb.0: # %entry 1654 ; MIPS64R2-NEXT: jr $ra 1655 ; MIPS64R2-NEXT: andi $2, $4, 65 1656 ; 1657 ; MIPS64R6-LABEL: and_i16_65: 1658 ; MIPS64R6: # %bb.0: # %entry 1659 ; MIPS64R6-NEXT: jr $ra 1660 ; MIPS64R6-NEXT: andi $2, $4, 65 1661 ; 1662 ; MM32R3-LABEL: and_i16_65: 1663 ; MM32R3: # %bb.0: # %entry 1664 ; MM32R3-NEXT: jr $ra 1665 ; MM32R3-NEXT: andi $2, $4, 65 1666 ; 1667 ; MM32R6-LABEL: and_i16_65: 1668 ; MM32R6: # %bb.0: # %entry 1669 ; MM32R6-NEXT: andi $2, $4, 65 1670 ; MM32R6-NEXT: jrc $ra 1671 entry: 1672 %r = and i16 65, %b 1673 ret i16 %r 1674 } 1675 1676 define signext i32 @and_i32_65(i32 signext %b) { 1677 ; MIPS-LABEL: and_i32_65: 1678 ; MIPS: # %bb.0: # %entry 1679 ; MIPS-NEXT: jr $ra 1680 ; MIPS-NEXT: andi $2, $4, 65 1681 ; 1682 ; MIPS32R2-LABEL: and_i32_65: 1683 ; MIPS32R2: # %bb.0: # %entry 1684 ; MIPS32R2-NEXT: jr $ra 1685 ; MIPS32R2-NEXT: andi $2, $4, 65 1686 ; 1687 ; MIPS32R6-LABEL: and_i32_65: 1688 ; MIPS32R6: # %bb.0: # %entry 1689 ; MIPS32R6-NEXT: jr $ra 1690 ; MIPS32R6-NEXT: andi $2, $4, 65 1691 ; 1692 ; MIPS64-LABEL: and_i32_65: 1693 ; MIPS64: # %bb.0: # %entry 1694 ; MIPS64-NEXT: jr $ra 1695 ; MIPS64-NEXT: andi $2, $4, 65 1696 ; 1697 ; MIPS64R2-LABEL: and_i32_65: 1698 ; MIPS64R2: # %bb.0: # %entry 1699 ; MIPS64R2-NEXT: jr $ra 1700 ; MIPS64R2-NEXT: andi $2, $4, 65 1701 ; 1702 ; MIPS64R6-LABEL: and_i32_65: 1703 ; MIPS64R6: # %bb.0: # %entry 1704 ; MIPS64R6-NEXT: jr $ra 1705 ; MIPS64R6-NEXT: andi $2, $4, 65 1706 ; 1707 ; MM32R3-LABEL: and_i32_65: 1708 ; MM32R3: # %bb.0: # %entry 1709 ; MM32R3-NEXT: jr $ra 1710 ; MM32R3-NEXT: andi $2, $4, 65 1711 ; 1712 ; MM32R6-LABEL: and_i32_65: 1713 ; MM32R6: # %bb.0: # %entry 1714 ; MM32R6-NEXT: andi $2, $4, 65 1715 ; MM32R6-NEXT: jrc $ra 1716 entry: 1717 %r = and i32 65, %b 1718 ret i32 %r 1719 } 1720 1721 define signext i64 @and_i64_65(i64 signext %b) { 1722 ; MIPS-LABEL: and_i64_65: 1723 ; MIPS: # %bb.0: # %entry 1724 ; MIPS-NEXT: andi $3, $5, 65 1725 ; MIPS-NEXT: jr $ra 1726 ; MIPS-NEXT: addiu $2, $zero, 0 1727 ; 1728 ; MIPS32R2-LABEL: and_i64_65: 1729 ; MIPS32R2: # %bb.0: # %entry 1730 ; MIPS32R2-NEXT: andi $3, $5, 65 1731 ; MIPS32R2-NEXT: jr $ra 1732 ; MIPS32R2-NEXT: addiu $2, $zero, 0 1733 ; 1734 ; MIPS32R6-LABEL: and_i64_65: 1735 ; MIPS32R6: # %bb.0: # %entry 1736 ; MIPS32R6-NEXT: andi $3, $5, 65 1737 ; MIPS32R6-NEXT: jr $ra 1738 ; MIPS32R6-NEXT: addiu $2, $zero, 0 1739 ; 1740 ; MIPS64-LABEL: and_i64_65: 1741 ; MIPS64: # %bb.0: # %entry 1742 ; MIPS64-NEXT: jr $ra 1743 ; MIPS64-NEXT: andi $2, $4, 65 1744 ; 1745 ; MIPS64R2-LABEL: and_i64_65: 1746 ; MIPS64R2: # %bb.0: # %entry 1747 ; MIPS64R2-NEXT: jr $ra 1748 ; MIPS64R2-NEXT: andi $2, $4, 65 1749 ; 1750 ; MIPS64R6-LABEL: and_i64_65: 1751 ; MIPS64R6: # %bb.0: # %entry 1752 ; MIPS64R6-NEXT: jr $ra 1753 ; MIPS64R6-NEXT: andi $2, $4, 65 1754 ; 1755 ; MM32R3-LABEL: and_i64_65: 1756 ; MM32R3: # %bb.0: # %entry 1757 ; MM32R3-NEXT: li16 $2, 0 1758 ; MM32R3-NEXT: jr $ra 1759 ; MM32R3-NEXT: andi $3, $5, 65 1760 ; 1761 ; MM32R6-LABEL: and_i64_65: 1762 ; MM32R6: # %bb.0: # %entry 1763 ; MM32R6-NEXT: andi $3, $5, 65 1764 ; MM32R6-NEXT: li16 $2, 0 1765 ; MM32R6-NEXT: jrc $ra 1766 entry: 1767 %r = and i64 65, %b 1768 ret i64 %r 1769 } 1770 1771 define signext i128 @and_i128_65(i128 signext %b) { 1772 ; MIPS-LABEL: and_i128_65: 1773 ; MIPS: # %bb.0: # %entry 1774 ; MIPS-NEXT: andi $5, $7, 65 1775 ; MIPS-NEXT: addiu $2, $zero, 0 1776 ; MIPS-NEXT: addiu $3, $zero, 0 1777 ; MIPS-NEXT: jr $ra 1778 ; MIPS-NEXT: addiu $4, $zero, 0 1779 ; 1780 ; MIPS32R2-LABEL: and_i128_65: 1781 ; MIPS32R2: # %bb.0: # %entry 1782 ; MIPS32R2-NEXT: andi $5, $7, 65 1783 ; MIPS32R2-NEXT: addiu $2, $zero, 0 1784 ; MIPS32R2-NEXT: addiu $3, $zero, 0 1785 ; MIPS32R2-NEXT: jr $ra 1786 ; MIPS32R2-NEXT: addiu $4, $zero, 0 1787 ; 1788 ; MIPS32R6-LABEL: and_i128_65: 1789 ; MIPS32R6: # %bb.0: # %entry 1790 ; MIPS32R6-NEXT: andi $5, $7, 65 1791 ; MIPS32R6-NEXT: addiu $2, $zero, 0 1792 ; MIPS32R6-NEXT: addiu $3, $zero, 0 1793 ; MIPS32R6-NEXT: jr $ra 1794 ; MIPS32R6-NEXT: addiu $4, $zero, 0 1795 ; 1796 ; MIPS64-LABEL: and_i128_65: 1797 ; MIPS64: # %bb.0: # %entry 1798 ; MIPS64-NEXT: andi $3, $5, 65 1799 ; MIPS64-NEXT: jr $ra 1800 ; MIPS64-NEXT: daddiu $2, $zero, 0 1801 ; 1802 ; MIPS64R2-LABEL: and_i128_65: 1803 ; MIPS64R2: # %bb.0: # %entry 1804 ; MIPS64R2-NEXT: andi $3, $5, 65 1805 ; MIPS64R2-NEXT: jr $ra 1806 ; MIPS64R2-NEXT: daddiu $2, $zero, 0 1807 ; 1808 ; MIPS64R6-LABEL: and_i128_65: 1809 ; MIPS64R6: # %bb.0: # %entry 1810 ; MIPS64R6-NEXT: andi $3, $5, 65 1811 ; MIPS64R6-NEXT: jr $ra 1812 ; MIPS64R6-NEXT: daddiu $2, $zero, 0 1813 ; 1814 ; MM32R3-LABEL: and_i128_65: 1815 ; MM32R3: # %bb.0: # %entry 1816 ; MM32R3-NEXT: li16 $2, 0 1817 ; MM32R3-NEXT: li16 $3, 0 1818 ; MM32R3-NEXT: li16 $4, 0 1819 ; MM32R3-NEXT: jr $ra 1820 ; MM32R3-NEXT: andi $5, $7, 65 1821 ; 1822 ; MM32R6-LABEL: and_i128_65: 1823 ; MM32R6: # %bb.0: # %entry 1824 ; MM32R6-NEXT: andi $5, $7, 65 1825 ; MM32R6-NEXT: li16 $2, 0 1826 ; MM32R6-NEXT: li16 $3, 0 1827 ; MM32R6-NEXT: li16 $4, 0 1828 ; MM32R6-NEXT: jrc $ra 1829 entry: 1830 %r = and i128 65, %b 1831 ret i128 %r 1832 } 1833 1834 define signext i1 @and_i1_256(i1 signext %b) { 1835 ; MIPS-LABEL: and_i1_256: 1836 ; MIPS: # %bb.0: # %entry 1837 ; MIPS-NEXT: jr $ra 1838 ; MIPS-NEXT: addiu $2, $zero, 0 1839 ; 1840 ; MIPS32R2-LABEL: and_i1_256: 1841 ; MIPS32R2: # %bb.0: # %entry 1842 ; MIPS32R2-NEXT: jr $ra 1843 ; MIPS32R2-NEXT: addiu $2, $zero, 0 1844 ; 1845 ; MIPS32R6-LABEL: and_i1_256: 1846 ; MIPS32R6: # %bb.0: # %entry 1847 ; MIPS32R6-NEXT: jr $ra 1848 ; MIPS32R6-NEXT: addiu $2, $zero, 0 1849 ; 1850 ; MIPS64-LABEL: and_i1_256: 1851 ; MIPS64: # %bb.0: # %entry 1852 ; MIPS64-NEXT: jr $ra 1853 ; MIPS64-NEXT: addiu $2, $zero, 0 1854 ; 1855 ; MIPS64R2-LABEL: and_i1_256: 1856 ; MIPS64R2: # %bb.0: # %entry 1857 ; MIPS64R2-NEXT: jr $ra 1858 ; MIPS64R2-NEXT: addiu $2, $zero, 0 1859 ; 1860 ; MIPS64R6-LABEL: and_i1_256: 1861 ; MIPS64R6: # %bb.0: # %entry 1862 ; MIPS64R6-NEXT: jr $ra 1863 ; MIPS64R6-NEXT: addiu $2, $zero, 0 1864 ; 1865 ; MM32R3-LABEL: and_i1_256: 1866 ; MM32R3: # %bb.0: # %entry 1867 ; MM32R3-NEXT: li16 $2, 0 1868 ; MM32R3-NEXT: jrc $ra 1869 ; 1870 ; MM32R6-LABEL: and_i1_256: 1871 ; MM32R6: # %bb.0: # %entry 1872 ; MM32R6-NEXT: li16 $2, 0 1873 ; MM32R6-NEXT: jrc $ra 1874 entry: 1875 %r = and i1 256, %b 1876 ret i1 %r 1877 } 1878 1879 define signext i8 @and_i8_256(i8 signext %b) { 1880 ; MIPS-LABEL: and_i8_256: 1881 ; MIPS: # %bb.0: # %entry 1882 ; MIPS-NEXT: jr $ra 1883 ; MIPS-NEXT: addiu $2, $zero, 0 1884 ; 1885 ; MIPS32R2-LABEL: and_i8_256: 1886 ; MIPS32R2: # %bb.0: # %entry 1887 ; MIPS32R2-NEXT: jr $ra 1888 ; MIPS32R2-NEXT: addiu $2, $zero, 0 1889 ; 1890 ; MIPS32R6-LABEL: and_i8_256: 1891 ; MIPS32R6: # %bb.0: # %entry 1892 ; MIPS32R6-NEXT: jr $ra 1893 ; MIPS32R6-NEXT: addiu $2, $zero, 0 1894 ; 1895 ; MIPS64-LABEL: and_i8_256: 1896 ; MIPS64: # %bb.0: # %entry 1897 ; MIPS64-NEXT: jr $ra 1898 ; MIPS64-NEXT: addiu $2, $zero, 0 1899 ; 1900 ; MIPS64R2-LABEL: and_i8_256: 1901 ; MIPS64R2: # %bb.0: # %entry 1902 ; MIPS64R2-NEXT: jr $ra 1903 ; MIPS64R2-NEXT: addiu $2, $zero, 0 1904 ; 1905 ; MIPS64R6-LABEL: and_i8_256: 1906 ; MIPS64R6: # %bb.0: # %entry 1907 ; MIPS64R6-NEXT: jr $ra 1908 ; MIPS64R6-NEXT: addiu $2, $zero, 0 1909 ; 1910 ; MM32R3-LABEL: and_i8_256: 1911 ; MM32R3: # %bb.0: # %entry 1912 ; MM32R3-NEXT: li16 $2, 0 1913 ; MM32R3-NEXT: jrc $ra 1914 ; 1915 ; MM32R6-LABEL: and_i8_256: 1916 ; MM32R6: # %bb.0: # %entry 1917 ; MM32R6-NEXT: li16 $2, 0 1918 ; MM32R6-NEXT: jrc $ra 1919 entry: 1920 %r = and i8 256, %b 1921 ret i8 %r 1922 } 1923 1924 define signext i16 @and_i16_256(i16 signext %b) { 1925 ; MIPS-LABEL: and_i16_256: 1926 ; MIPS: # %bb.0: # %entry 1927 ; MIPS-NEXT: jr $ra 1928 ; MIPS-NEXT: andi $2, $4, 256 1929 ; 1930 ; MIPS32R2-LABEL: and_i16_256: 1931 ; MIPS32R2: # %bb.0: # %entry 1932 ; MIPS32R2-NEXT: jr $ra 1933 ; MIPS32R2-NEXT: andi $2, $4, 256 1934 ; 1935 ; MIPS32R6-LABEL: and_i16_256: 1936 ; MIPS32R6: # %bb.0: # %entry 1937 ; MIPS32R6-NEXT: jr $ra 1938 ; MIPS32R6-NEXT: andi $2, $4, 256 1939 ; 1940 ; MIPS64-LABEL: and_i16_256: 1941 ; MIPS64: # %bb.0: # %entry 1942 ; MIPS64-NEXT: jr $ra 1943 ; MIPS64-NEXT: andi $2, $4, 256 1944 ; 1945 ; MIPS64R2-LABEL: and_i16_256: 1946 ; MIPS64R2: # %bb.0: # %entry 1947 ; MIPS64R2-NEXT: jr $ra 1948 ; MIPS64R2-NEXT: andi $2, $4, 256 1949 ; 1950 ; MIPS64R6-LABEL: and_i16_256: 1951 ; MIPS64R6: # %bb.0: # %entry 1952 ; MIPS64R6-NEXT: jr $ra 1953 ; MIPS64R6-NEXT: andi $2, $4, 256 1954 ; 1955 ; MM32R3-LABEL: and_i16_256: 1956 ; MM32R3: # %bb.0: # %entry 1957 ; MM32R3-NEXT: jr $ra 1958 ; MM32R3-NEXT: andi $2, $4, 256 1959 ; 1960 ; MM32R6-LABEL: and_i16_256: 1961 ; MM32R6: # %bb.0: # %entry 1962 ; MM32R6-NEXT: andi $2, $4, 256 1963 ; MM32R6-NEXT: jrc $ra 1964 entry: 1965 %r = and i16 256, %b 1966 ret i16 %r 1967 } 1968 1969 define signext i32 @and_i32_256(i32 signext %b) { 1970 ; MIPS-LABEL: and_i32_256: 1971 ; MIPS: # %bb.0: # %entry 1972 ; MIPS-NEXT: jr $ra 1973 ; MIPS-NEXT: andi $2, $4, 256 1974 ; 1975 ; MIPS32R2-LABEL: and_i32_256: 1976 ; MIPS32R2: # %bb.0: # %entry 1977 ; MIPS32R2-NEXT: jr $ra 1978 ; MIPS32R2-NEXT: andi $2, $4, 256 1979 ; 1980 ; MIPS32R6-LABEL: and_i32_256: 1981 ; MIPS32R6: # %bb.0: # %entry 1982 ; MIPS32R6-NEXT: jr $ra 1983 ; MIPS32R6-NEXT: andi $2, $4, 256 1984 ; 1985 ; MIPS64-LABEL: and_i32_256: 1986 ; MIPS64: # %bb.0: # %entry 1987 ; MIPS64-NEXT: jr $ra 1988 ; MIPS64-NEXT: andi $2, $4, 256 1989 ; 1990 ; MIPS64R2-LABEL: and_i32_256: 1991 ; MIPS64R2: # %bb.0: # %entry 1992 ; MIPS64R2-NEXT: jr $ra 1993 ; MIPS64R2-NEXT: andi $2, $4, 256 1994 ; 1995 ; MIPS64R6-LABEL: and_i32_256: 1996 ; MIPS64R6: # %bb.0: # %entry 1997 ; MIPS64R6-NEXT: jr $ra 1998 ; MIPS64R6-NEXT: andi $2, $4, 256 1999 ; 2000 ; MM32R3-LABEL: and_i32_256: 2001 ; MM32R3: # %bb.0: # %entry 2002 ; MM32R3-NEXT: jr $ra 2003 ; MM32R3-NEXT: andi $2, $4, 256 2004 ; 2005 ; MM32R6-LABEL: and_i32_256: 2006 ; MM32R6: # %bb.0: # %entry 2007 ; MM32R6-NEXT: andi $2, $4, 256 2008 ; MM32R6-NEXT: jrc $ra 2009 entry: 2010 %r = and i32 256, %b 2011 ret i32 %r 2012 } 2013 2014 define signext i64 @and_i64_256(i64 signext %b) { 2015 ; MIPS-LABEL: and_i64_256: 2016 ; MIPS: # %bb.0: # %entry 2017 ; MIPS-NEXT: andi $3, $5, 256 2018 ; MIPS-NEXT: jr $ra 2019 ; MIPS-NEXT: addiu $2, $zero, 0 2020 ; 2021 ; MIPS32R2-LABEL: and_i64_256: 2022 ; MIPS32R2: # %bb.0: # %entry 2023 ; MIPS32R2-NEXT: andi $3, $5, 256 2024 ; MIPS32R2-NEXT: jr $ra 2025 ; MIPS32R2-NEXT: addiu $2, $zero, 0 2026 ; 2027 ; MIPS32R6-LABEL: and_i64_256: 2028 ; MIPS32R6: # %bb.0: # %entry 2029 ; MIPS32R6-NEXT: andi $3, $5, 256 2030 ; MIPS32R6-NEXT: jr $ra 2031 ; MIPS32R6-NEXT: addiu $2, $zero, 0 2032 ; 2033 ; MIPS64-LABEL: and_i64_256: 2034 ; MIPS64: # %bb.0: # %entry 2035 ; MIPS64-NEXT: jr $ra 2036 ; MIPS64-NEXT: andi $2, $4, 256 2037 ; 2038 ; MIPS64R2-LABEL: and_i64_256: 2039 ; MIPS64R2: # %bb.0: # %entry 2040 ; MIPS64R2-NEXT: jr $ra 2041 ; MIPS64R2-NEXT: andi $2, $4, 256 2042 ; 2043 ; MIPS64R6-LABEL: and_i64_256: 2044 ; MIPS64R6: # %bb.0: # %entry 2045 ; MIPS64R6-NEXT: jr $ra 2046 ; MIPS64R6-NEXT: andi $2, $4, 256 2047 ; 2048 ; MM32R3-LABEL: and_i64_256: 2049 ; MM32R3: # %bb.0: # %entry 2050 ; MM32R3-NEXT: li16 $2, 0 2051 ; MM32R3-NEXT: jr $ra 2052 ; MM32R3-NEXT: andi $3, $5, 256 2053 ; 2054 ; MM32R6-LABEL: and_i64_256: 2055 ; MM32R6: # %bb.0: # %entry 2056 ; MM32R6-NEXT: andi $3, $5, 256 2057 ; MM32R6-NEXT: li16 $2, 0 2058 ; MM32R6-NEXT: jrc $ra 2059 entry: 2060 %r = and i64 256, %b 2061 ret i64 %r 2062 } 2063 2064 define signext i128 @and_i128_256(i128 signext %b) { 2065 ; MIPS-LABEL: and_i128_256: 2066 ; MIPS: # %bb.0: # %entry 2067 ; MIPS-NEXT: andi $5, $7, 256 2068 ; MIPS-NEXT: addiu $2, $zero, 0 2069 ; MIPS-NEXT: addiu $3, $zero, 0 2070 ; MIPS-NEXT: jr $ra 2071 ; MIPS-NEXT: addiu $4, $zero, 0 2072 ; 2073 ; MIPS32R2-LABEL: and_i128_256: 2074 ; MIPS32R2: # %bb.0: # %entry 2075 ; MIPS32R2-NEXT: andi $5, $7, 256 2076 ; MIPS32R2-NEXT: addiu $2, $zero, 0 2077 ; MIPS32R2-NEXT: addiu $3, $zero, 0 2078 ; MIPS32R2-NEXT: jr $ra 2079 ; MIPS32R2-NEXT: addiu $4, $zero, 0 2080 ; 2081 ; MIPS32R6-LABEL: and_i128_256: 2082 ; MIPS32R6: # %bb.0: # %entry 2083 ; MIPS32R6-NEXT: andi $5, $7, 256 2084 ; MIPS32R6-NEXT: addiu $2, $zero, 0 2085 ; MIPS32R6-NEXT: addiu $3, $zero, 0 2086 ; MIPS32R6-NEXT: jr $ra 2087 ; MIPS32R6-NEXT: addiu $4, $zero, 0 2088 ; 2089 ; MIPS64-LABEL: and_i128_256: 2090 ; MIPS64: # %bb.0: # %entry 2091 ; MIPS64-NEXT: andi $3, $5, 256 2092 ; MIPS64-NEXT: jr $ra 2093 ; MIPS64-NEXT: daddiu $2, $zero, 0 2094 ; 2095 ; MIPS64R2-LABEL: and_i128_256: 2096 ; MIPS64R2: # %bb.0: # %entry 2097 ; MIPS64R2-NEXT: andi $3, $5, 256 2098 ; MIPS64R2-NEXT: jr $ra 2099 ; MIPS64R2-NEXT: daddiu $2, $zero, 0 2100 ; 2101 ; MIPS64R6-LABEL: and_i128_256: 2102 ; MIPS64R6: # %bb.0: # %entry 2103 ; MIPS64R6-NEXT: andi $3, $5, 256 2104 ; MIPS64R6-NEXT: jr $ra 2105 ; MIPS64R6-NEXT: daddiu $2, $zero, 0 2106 ; 2107 ; MM32R3-LABEL: and_i128_256: 2108 ; MM32R3: # %bb.0: # %entry 2109 ; MM32R3-NEXT: li16 $2, 0 2110 ; MM32R3-NEXT: li16 $3, 0 2111 ; MM32R3-NEXT: li16 $4, 0 2112 ; MM32R3-NEXT: jr $ra 2113 ; MM32R3-NEXT: andi $5, $7, 256 2114 ; 2115 ; MM32R6-LABEL: and_i128_256: 2116 ; MM32R6: # %bb.0: # %entry 2117 ; MM32R6-NEXT: andi $5, $7, 256 2118 ; MM32R6-NEXT: li16 $2, 0 2119 ; MM32R6-NEXT: li16 $3, 0 2120 ; MM32R6-NEXT: li16 $4, 0 2121 ; MM32R6-NEXT: jrc $ra 2122 entry: 2123 %r = and i128 256, %b 2124 ret i128 %r 2125 } 2126