1; RUN: llc --mtriple=loongarch64 < %s | FileCheck %s 2 3define i64 @imm0() { 4; CHECK-LABEL: imm0: 5; CHECK: # %bb.0: 6; CHECK-NEXT: move $a0, $zero 7; CHECK-NEXT: jirl $zero, $ra, 0 8 ret i64 0 9} 10 11define i64 @imm7ff0000000000000() { 12; CHECK-LABEL: imm7ff0000000000000: 13; CHECK: # %bb.0: 14; CHECK-NEXT: lu52i.d $a0, $zero, 2047 15; CHECK-NEXT: jirl $zero, $ra, 0 16 ret i64 9218868437227405312 17} 18 19define i64 @imm0000000000000fff() { 20; CHECK-LABEL: imm0000000000000fff: 21; CHECK: # %bb.0: 22; CHECK-NEXT: ori $a0, $zero, 4095 23; CHECK-NEXT: jirl $zero, $ra, 0 24 ret i64 4095 25} 26 27define i64 @imm0007ffff00000800() { 28; CHECK-LABEL: imm0007ffff00000800: 29; CHECK: # %bb.0: 30; CHECK-NEXT: ori $a0, $zero, 2048 31; CHECK-NEXT: lu32i.d $a0, 524287 32; CHECK-NEXT: jirl $zero, $ra, 0 33 ret i64 2251795518720000 34} 35 36define i64 @immfff0000000000fff() { 37; CHECK-LABEL: immfff0000000000fff: 38; CHECK: # %bb.0: 39; CHECK-NEXT: ori $a0, $zero, 4095 40; CHECK-NEXT: lu52i.d $a0, $a0, -1 41; CHECK-NEXT: jirl $zero, $ra, 0 42 ret i64 -4503599627366401 43} 44 45define i64 @imm0008000000000fff() { 46; CHECK-LABEL: imm0008000000000fff: 47; CHECK: # %bb.0: 48; CHECK-NEXT: ori $a0, $zero, 4095 49; CHECK-NEXT: lu32i.d $a0, -524288 50; CHECK-NEXT: lu52i.d $a0, $a0, 0 51; CHECK-NEXT: jirl $zero, $ra, 0 52 ret i64 2251799813689343 53} 54 55define i64 @immfffffffffffff800() { 56; CHECK-LABEL: immfffffffffffff800: 57; CHECK: # %bb.0: 58; CHECK-NEXT: addi.w $a0, $zero, -2048 59; CHECK-NEXT: jirl $zero, $ra, 0 60 ret i64 -2048 61} 62 63define i64 @imm00000000fffff800() { 64; CHECK-LABEL: imm00000000fffff800: 65; CHECK: # %bb.0: 66; CHECK-NEXT: addi.w $a0, $zero, -2048 67; CHECK-NEXT: lu32i.d $a0, 0 68; CHECK-NEXT: jirl $zero, $ra, 0 69 ret i64 4294965248 70} 71 72define i64 @imm000ffffffffff800() { 73; CHECK-LABEL: imm000ffffffffff800: 74; CHECK: # %bb.0: 75; CHECK-NEXT: addi.w $a0, $zero, -2048 76; CHECK-NEXT: lu52i.d $a0, $a0, 0 77; CHECK-NEXT: jirl $zero, $ra, 0 78 ret i64 4503599627368448 79} 80 81define i64 @imm00080000fffff800() { 82; CHECK-LABEL: imm00080000fffff800: 83; CHECK: # %bb.0: 84; CHECK-NEXT: addi.w $a0, $zero, -2048 85; CHECK-NEXT: lu32i.d $a0, -524288 86; CHECK-NEXT: lu52i.d $a0, $a0, 0 87; CHECK-NEXT: jirl $zero, $ra, 0 88 ret i64 2251804108650496 89} 90 91define i64 @imm000000007ffff000() { 92; CHECK-LABEL: imm000000007ffff000: 93; CHECK: # %bb.0: 94; CHECK-NEXT: lu12i.w $a0, 524287 95; CHECK-NEXT: jirl $zero, $ra, 0 96 ret i64 2147479552 97} 98 99define i64 @imm0000000080000000() { 100; CHECK-LABEL: imm0000000080000000: 101; CHECK: # %bb.0: 102; CHECK-NEXT: lu12i.w $a0, -524288 103; CHECK-NEXT: lu32i.d $a0, 0 104; CHECK-NEXT: jirl $zero, $ra, 0 105 ret i64 2147483648 106} 107 108define i64 @imm000ffffffffff000() { 109; CHECK-LABEL: imm000ffffffffff000: 110; CHECK: # %bb.0: 111; CHECK-NEXT: lu12i.w $a0, -1 112; CHECK-NEXT: lu52i.d $a0, $a0, 0 113; CHECK-NEXT: jirl $zero, $ra, 0 114 ret i64 4503599627366400 115} 116 117define i64 @imm7ff0000080000000() { 118; CHECK-LABEL: imm7ff0000080000000: 119; CHECK: # %bb.0: 120; CHECK-NEXT: lu12i.w $a0, -524288 121; CHECK-NEXT: lu32i.d $a0, 0 122; CHECK-NEXT: lu52i.d $a0, $a0, 2047 123; CHECK-NEXT: jirl $zero, $ra, 0 124 ret i64 9218868439374888960 125} 126 127define i64 @immffffffff80000800() { 128; CHECK-LABEL: immffffffff80000800: 129; CHECK: # %bb.0: 130; CHECK-NEXT: lu12i.w $a0, -524288 131; CHECK-NEXT: ori $a0, $a0, 2048 132; CHECK-NEXT: jirl $zero, $ra, 0 133 ret i64 -2147481600 134} 135 136define i64 @immffffffff7ffff800() { 137; CHECK-LABEL: immffffffff7ffff800: 138; CHECK: # %bb.0: 139; CHECK-NEXT: lu12i.w $a0, 524287 140; CHECK-NEXT: ori $a0, $a0, 2048 141; CHECK-NEXT: lu32i.d $a0, -1 142; CHECK-NEXT: jirl $zero, $ra, 0 143 ret i64 -2147485696 144} 145 146define i64 @imm7fffffff800007ff() { 147; CHECK-LABEL: imm7fffffff800007ff: 148; CHECK: # %bb.0: 149; CHECK-NEXT: lu12i.w $a0, -524288 150; CHECK-NEXT: ori $a0, $a0, 2047 151; CHECK-NEXT: lu52i.d $a0, $a0, 2047 152; CHECK-NEXT: jirl $zero, $ra, 0 153 ret i64 9223372034707294207 154} 155 156define i64 @imm0008000080000800() { 157; CHECK-LABEL: imm0008000080000800: 158; CHECK: # %bb.0: 159; CHECK-NEXT: lu12i.w $a0, -524288 160; CHECK-NEXT: ori $a0, $a0, 2048 161; CHECK-NEXT: lu32i.d $a0, -524288 162; CHECK-NEXT: lu52i.d $a0, $a0, 0 163; CHECK-NEXT: jirl $zero, $ra, 0 164 ret i64 2251801961170944 165} 166