1 ; RUN: llc --mtriple=loongarch64 < %s | FileCheck %s
3 define i64 @lshr40_and255(i64 %a) {
4 ; CHECK-LABEL: lshr40_and255:
6 ; CHECK-NEXT: bstrpick.d $a0, $a0, 47, 40
7 ; CHECK-NEXT: jirl $zero, $ra, 0
9 %and = and i64 %shr, 255
13 define i64 @ashr50_and511(i64 %a) {
14 ; CHECK-LABEL: ashr50_and511:
16 ; CHECK-NEXT: bstrpick.d $a0, $a0, 58, 50
17 ; CHECK-NEXT: jirl $zero, $ra, 0
18 %shr = ashr i64 %a, 50
19 %and = and i64 %shr, 511
23 define i64 @zext_i32_to_i64(i32 %a) {
24 ; CHECK-LABEL: zext_i32_to_i64:
26 ; CHECK-NEXT: bstrpick.d $a0, $a0, 31, 0
27 ; CHECK-NEXT: jirl $zero, $ra, 0
28 %res = zext i32 %a to i64
32 define i64 @and8191(i64 %a) {
33 ; CHECK-LABEL: and8191:
35 ; CHECK-NEXT: bstrpick.d $a0, $a0, 12, 0
36 ; CHECK-NEXT: jirl $zero, $ra, 0
37 %and = and i64 %a, 8191
41 ;; Check that andi but not bstrpick.d is generated.
42 define i64 @and4095(i64 %a) {
43 ; CHECK-LABEL: and4095:
45 ; CHECK-NEXT: andi $a0, $a0, 4095
46 ; CHECK-NEXT: jirl $zero, $ra, 0
47 %and = and i64 %a, 4095