Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / LoongArch / inline-asm-constraint-ZC.ll
blob9c053c4d24857eb5a271df346c8888ef02ada09a
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc --mtriple=loongarch32 --verify-machineinstrs < %s | FileCheck %s --check-prefix=LA32
3 ; RUN: llc --mtriple=loongarch64 --verify-machineinstrs < %s | FileCheck %s --check-prefix=LA64
5 define i32 @ZC_offset_neg_32769(ptr %p) nounwind {
6 ; LA32-LABEL: ZC_offset_neg_32769:
7 ; LA32:       # %bb.0:
8 ; LA32-NEXT:    lu12i.w $a1, -9
9 ; LA32-NEXT:    ori $a1, $a1, 4095
10 ; LA32-NEXT:    add.w $a0, $a0, $a1
11 ; LA32-NEXT:    #APP
12 ; LA32-NEXT:    ll.w $a0, $a0, 0
13 ; LA32-NEXT:    #NO_APP
14 ; LA32-NEXT:    ret
16 ; LA64-LABEL: ZC_offset_neg_32769:
17 ; LA64:       # %bb.0:
18 ; LA64-NEXT:    lu12i.w $a1, -9
19 ; LA64-NEXT:    ori $a1, $a1, 4095
20 ; LA64-NEXT:    add.d $a0, $a0, $a1
21 ; LA64-NEXT:    #APP
22 ; LA64-NEXT:    ll.w $a0, $a0, 0
23 ; LA64-NEXT:    #NO_APP
24 ; LA64-NEXT:    ret
25   %1 = getelementptr inbounds i8, ptr %p, i32 -32769
26   %2 = call i32 asm "ll.w $0, $1", "=r,*^ZC"(ptr elementtype(i32) %1)
27   ret i32 %2
30 define i32 @ZC_offset_neg_32768(ptr %p) nounwind {
31 ; LA32-LABEL: ZC_offset_neg_32768:
32 ; LA32:       # %bb.0:
33 ; LA32-NEXT:    #APP
34 ; LA32-NEXT:    ll.w $a0, $a0, -32768
35 ; LA32-NEXT:    #NO_APP
36 ; LA32-NEXT:    ret
38 ; LA64-LABEL: ZC_offset_neg_32768:
39 ; LA64:       # %bb.0:
40 ; LA64-NEXT:    #APP
41 ; LA64-NEXT:    ll.w $a0, $a0, -32768
42 ; LA64-NEXT:    #NO_APP
43 ; LA64-NEXT:    ret
44   %1 = getelementptr inbounds i8, ptr %p, i32 -32768
45   %2 = call i32 asm "ll.w $0, $1", "=r,*^ZC"(ptr elementtype(i32) %1)
46   ret i32 %2
49 define i32 @ZC_offset_neg_4(ptr %p) nounwind {
50 ; LA32-LABEL: ZC_offset_neg_4:
51 ; LA32:       # %bb.0:
52 ; LA32-NEXT:    #APP
53 ; LA32-NEXT:    ll.w $a0, $a0, -4
54 ; LA32-NEXT:    #NO_APP
55 ; LA32-NEXT:    ret
57 ; LA64-LABEL: ZC_offset_neg_4:
58 ; LA64:       # %bb.0:
59 ; LA64-NEXT:    #APP
60 ; LA64-NEXT:    ll.w $a0, $a0, -4
61 ; LA64-NEXT:    #NO_APP
62 ; LA64-NEXT:    ret
63   %1 = getelementptr inbounds i8, ptr %p, i32 -4
64   %2 = call i32 asm "ll.w $0, $1", "=r,*^ZC"(ptr elementtype(i32) %1)
65   ret i32 %2
68 define i32 @ZC_offset_neg_1(ptr %p) nounwind {
69 ; LA32-LABEL: ZC_offset_neg_1:
70 ; LA32:       # %bb.0:
71 ; LA32-NEXT:    addi.w $a0, $a0, -1
72 ; LA32-NEXT:    #APP
73 ; LA32-NEXT:    ll.w $a0, $a0, 0
74 ; LA32-NEXT:    #NO_APP
75 ; LA32-NEXT:    ret
77 ; LA64-LABEL: ZC_offset_neg_1:
78 ; LA64:       # %bb.0:
79 ; LA64-NEXT:    addi.d $a0, $a0, -1
80 ; LA64-NEXT:    #APP
81 ; LA64-NEXT:    ll.w $a0, $a0, 0
82 ; LA64-NEXT:    #NO_APP
83 ; LA64-NEXT:    ret
84   %1 = getelementptr inbounds i8, ptr %p, i32 -1
85   %2 = call i32 asm "ll.w $0, $1", "=r,*^ZC"(ptr elementtype(i32) %1)
86   ret i32 %2
89 define i32 @ZC_offset_0(ptr %p) nounwind {
90 ; LA32-LABEL: ZC_offset_0:
91 ; LA32:       # %bb.0:
92 ; LA32-NEXT:    #APP
93 ; LA32-NEXT:    ll.w $a0, $a0, 0
94 ; LA32-NEXT:    #NO_APP
95 ; LA32-NEXT:    ret
97 ; LA64-LABEL: ZC_offset_0:
98 ; LA64:       # %bb.0:
99 ; LA64-NEXT:    #APP
100 ; LA64-NEXT:    ll.w $a0, $a0, 0
101 ; LA64-NEXT:    #NO_APP
102 ; LA64-NEXT:    ret
103   %1 = call i32 asm "ll.w $0, $1", "=r,*^ZC"(ptr elementtype(i32) %p)
104   ret i32 %1
107 define i32 @ZC_offset_1(ptr %p) nounwind {
108 ; LA32-LABEL: ZC_offset_1:
109 ; LA32:       # %bb.0:
110 ; LA32-NEXT:    addi.w $a0, $a0, 1
111 ; LA32-NEXT:    #APP
112 ; LA32-NEXT:    ll.w $a0, $a0, 0
113 ; LA32-NEXT:    #NO_APP
114 ; LA32-NEXT:    ret
116 ; LA64-LABEL: ZC_offset_1:
117 ; LA64:       # %bb.0:
118 ; LA64-NEXT:    addi.d $a0, $a0, 1
119 ; LA64-NEXT:    #APP
120 ; LA64-NEXT:    ll.w $a0, $a0, 0
121 ; LA64-NEXT:    #NO_APP
122 ; LA64-NEXT:    ret
123   %1 = getelementptr inbounds i8, ptr %p, i32 1
124   %2 = call i32 asm "ll.w $0, $1", "=r,*^ZC"(ptr elementtype(i32) %1)
125   ret i32 %2
128 define i32 @ZC_offset_32764(ptr %p) nounwind {
129 ; LA32-LABEL: ZC_offset_32764:
130 ; LA32:       # %bb.0:
131 ; LA32-NEXT:    #APP
132 ; LA32-NEXT:    ll.w $a0, $a0, 32764
133 ; LA32-NEXT:    #NO_APP
134 ; LA32-NEXT:    ret
136 ; LA64-LABEL: ZC_offset_32764:
137 ; LA64:       # %bb.0:
138 ; LA64-NEXT:    #APP
139 ; LA64-NEXT:    ll.w $a0, $a0, 32764
140 ; LA64-NEXT:    #NO_APP
141 ; LA64-NEXT:    ret
142   %1 = getelementptr inbounds i8, ptr %p, i32 32764
143   %2 = call i32 asm "ll.w $0, $1", "=r,*^ZC"(ptr elementtype(i32) %1)
144   ret i32 %2
147 define i32 @ZC_offset_32767(ptr %p) nounwind {
148 ; LA32-LABEL: ZC_offset_32767:
149 ; LA32:       # %bb.0:
150 ; LA32-NEXT:    lu12i.w $a1, 7
151 ; LA32-NEXT:    ori $a1, $a1, 4095
152 ; LA32-NEXT:    add.w $a0, $a0, $a1
153 ; LA32-NEXT:    #APP
154 ; LA32-NEXT:    ll.w $a0, $a0, 0
155 ; LA32-NEXT:    #NO_APP
156 ; LA32-NEXT:    ret
158 ; LA64-LABEL: ZC_offset_32767:
159 ; LA64:       # %bb.0:
160 ; LA64-NEXT:    lu12i.w $a1, 7
161 ; LA64-NEXT:    ori $a1, $a1, 4095
162 ; LA64-NEXT:    add.d $a0, $a0, $a1
163 ; LA64-NEXT:    #APP
164 ; LA64-NEXT:    ll.w $a0, $a0, 0
165 ; LA64-NEXT:    #NO_APP
166 ; LA64-NEXT:    ret
167   %1 = getelementptr inbounds i8, ptr %p, i32 32767
168   %2 = call i32 asm "ll.w $0, $1", "=r,*^ZC"(ptr elementtype(i32) %1)
169   ret i32 %2