1 ; RUN: llc --mtriple=loongarch64 < %s | FileCheck %s
6 ; CHECK-NEXT: move $a0, $zero
7 ; CHECK-NEXT: jirl $zero, $ra, 0
11 define i64 @imm7ff0000000000000() {
12 ; CHECK-LABEL: imm7ff0000000000000:
14 ; CHECK-NEXT: lu52i.d $a0, $zero, 2047
15 ; CHECK-NEXT: jirl $zero, $ra, 0
16 ret i64 9218868437227405312
19 define i64 @imm0000000000000fff() {
20 ; CHECK-LABEL: imm0000000000000fff:
22 ; CHECK-NEXT: ori $a0, $zero, 4095
23 ; CHECK-NEXT: jirl $zero, $ra, 0
27 define i64 @imm0007ffff00000800() {
28 ; CHECK-LABEL: imm0007ffff00000800:
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
36 define i64 @immfff0000000000fff() {
37 ; CHECK-LABEL: immfff0000000000fff:
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
45 define i64 @imm0008000000000fff() {
46 ; CHECK-LABEL: imm0008000000000fff:
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
55 define i64 @immfffffffffffff800() {
56 ; CHECK-LABEL: immfffffffffffff800:
58 ; CHECK-NEXT: addi.w $a0, $zero, -2048
59 ; CHECK-NEXT: jirl $zero, $ra, 0
63 define i64 @imm00000000fffff800() {
64 ; CHECK-LABEL: imm00000000fffff800:
66 ; CHECK-NEXT: addi.w $a0, $zero, -2048
67 ; CHECK-NEXT: lu32i.d $a0, 0
68 ; CHECK-NEXT: jirl $zero, $ra, 0
72 define i64 @imm000ffffffffff800() {
73 ; CHECK-LABEL: imm000ffffffffff800:
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
81 define i64 @imm00080000fffff800() {
82 ; CHECK-LABEL: imm00080000fffff800:
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
91 define i64 @imm000000007ffff000() {
92 ; CHECK-LABEL: imm000000007ffff000:
94 ; CHECK-NEXT: lu12i.w $a0, 524287
95 ; CHECK-NEXT: jirl $zero, $ra, 0
99 define i64 @imm0000000080000000() {
100 ; CHECK-LABEL: imm0000000080000000:
102 ; CHECK-NEXT: lu12i.w $a0, -524288
103 ; CHECK-NEXT: lu32i.d $a0, 0
104 ; CHECK-NEXT: jirl $zero, $ra, 0
108 define i64 @imm000ffffffffff000() {
109 ; CHECK-LABEL: imm000ffffffffff000:
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
117 define i64 @imm7ff0000080000000() {
118 ; CHECK-LABEL: imm7ff0000080000000:
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
127 define i64 @immffffffff80000800() {
128 ; CHECK-LABEL: immffffffff80000800:
130 ; CHECK-NEXT: lu12i.w $a0, -524288
131 ; CHECK-NEXT: ori $a0, $a0, 2048
132 ; CHECK-NEXT: jirl $zero, $ra, 0
136 define i64 @immffffffff7ffff800() {
137 ; CHECK-LABEL: immffffffff7ffff800:
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
146 define i64 @imm7fffffff800007ff() {
147 ; CHECK-LABEL: imm7fffffff800007ff:
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
156 define i64 @imm0008000080000800() {
157 ; CHECK-LABEL: imm0008000080000800:
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