Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / SystemZ / foldmemop-imm-02.mir
blob653bb42e1cad20949ef9174eec9f56727a256c92
1 # RUN: llc -mtriple=s390x-linux-gnu -mcpu=z14 -start-before=greedy %s -o - \
2 # RUN:   | FileCheck %s
4 # Test folding of a memory operand into logical compare with an immediate.
6 --- |
7   define i32 @fun0(ptr %src, i32 %arg) { ret i32 0 }
8   define i64 @fun1(ptr %src, i64 %arg) { ret i64 0 }
9   define i32 @fun2(ptr %src, i32 %arg) { ret i32 0 }
10   define i64 @fun3(ptr %src, i64 %arg) { ret i64 0 }
11 ...
14 # CHECK-LABEL: fun0:
15 # CHECK:        mvhi    160(%r15), 0            # 4-byte Folded Spill
16 # CHECK:        mvc     160(4,%r15), 0(%r2)     # 4-byte Folded Spill
17 # CHECK-LABEL: .LBB0_2:
18 # CHECK:        clfhsi  160(%r15), 2            # 4-byte Folded Reload
19 ---
20 name:            fun0
21 alignment:       16
22 tracksRegLiveness: true
23 registers:
24   - { id: 0, class: grx32bit }
25   - { id: 1, class: grx32bit }
26   - { id: 2, class: addr64bit }
27   - { id: 3, class: gr32bit }
28   - { id: 4, class: grx32bit }
29   - { id: 5, class: grx32bit }
30   - { id: 6, class: gr32bit }
31   - { id: 7, class: gr32bit }
32   - { id: 8, class: grx32bit }
33 liveins:
34   - { reg: '$r2d', virtual-reg: '%2' }
35   - { reg: '$r3l', virtual-reg: '%3' }
36 frameInfo:
37   maxAlignment:    1
38   hasOpaqueSPAdjustment: true
39 machineFunctionInfo: {}
40 body:             |
41   bb.0:
42     successors: %bb.1(0x30000000), %bb.2(0x50000000)
43     liveins: $r2d, $r3l
44   
45     %3:gr32bit = COPY $r3l
46     %2:addr64bit = COPY $r2d
47     %6:gr32bit = LHIMux 0
48     CHIMux %3, 0, implicit-def $cc
49     %8:grx32bit = LHIMux 0
50     BRC 14, 6, %bb.2, implicit killed $cc
51     J %bb.1
52   
53   bb.1:
54     %8:grx32bit = LMux %2, 0, $noreg :: (load (s32) from %ir.src)
55     INLINEASM &"", 1, 12, implicit-def dead early-clobber $r0d, 12, implicit-def dead early-clobber $r1d, 12, implicit-def dead early-clobber $r2d, 12, implicit-def dead early-clobber $r3d, 12, implicit-def dead early-clobber $r4d, 12, implicit-def dead early-clobber $r5d, 12, implicit-def dead early-clobber $r6d, 12, implicit-def dead early-clobber $r7d, 12, implicit-def dead early-clobber $r8d, 12, implicit-def dead early-clobber $r9d, 12, implicit-def dead early-clobber $r10d, 12, implicit-def dead early-clobber $r11d, 12, implicit-def dead early-clobber $r12d, 12, implicit-def dead early-clobber $r13d, 12, implicit-def dead early-clobber $r14d, 12, implicit-def early-clobber $r15d
56   
57   bb.2:
58     INLINEASM &"", 1, 12, implicit-def dead early-clobber $r0d, 12, implicit-def dead early-clobber $r1d, 12, implicit-def dead early-clobber $r2d, 12, implicit-def dead early-clobber $r3d, 12, implicit-def dead early-clobber $r4d, 12, implicit-def dead early-clobber $r5d, 12, implicit-def dead early-clobber $r6d, 12, implicit-def dead early-clobber $r7d, 12, implicit-def dead early-clobber $r8d, 12, implicit-def dead early-clobber $r9d, 12, implicit-def dead early-clobber $r10d, 12, implicit-def dead early-clobber $r11d, 12, implicit-def dead early-clobber $r12d, 12, implicit-def dead early-clobber $r13d, 12, implicit-def dead early-clobber $r14d, 12, implicit-def early-clobber $r15d
59     CLFIMux %8, 2, implicit-def $cc
60     %6:gr32bit = LOCHIMux %6, 1, 14, 6, implicit killed $cc
61     %7:gr32bit = NRK %3, %6, implicit-def dead $cc
62     $r2l = COPY %7
63     Return implicit $r2l
65 ...
68 # CHECK-LABEL: fun1:
69 # CHECK:        mvghi   160(%r15), 0            # 8-byte Folded Spill
70 # CHECK:        mvc     160(8,%r15), 0(%r2)     # 8-byte Folded Spill
71 # CHECK-LABEL: .LBB1_2:
72 # CHECK:        clghsi  160(%r15), 2            # 8-byte Folded Reload
73 ---
74 name:            fun1
75 alignment:       16
76 tracksRegLiveness: true
77 registers:
78   - { id: 0, class: gr64bit }
79   - { id: 1, class: gr64bit }
80   - { id: 2, class: addr64bit }
81   - { id: 3, class: gr64bit }
82   - { id: 4, class: gr64bit }
83   - { id: 5, class: gr64bit }
84   - { id: 6, class: gr64bit }
85   - { id: 7, class: gr64bit }
86   - { id: 8, class: gr64bit }
87 liveins:
88   - { reg: '$r2d', virtual-reg: '%2' }
89   - { reg: '$r3d', virtual-reg: '%3' }
90 frameInfo:
91   maxAlignment:    1
92   hasOpaqueSPAdjustment: true
93 machineFunctionInfo: {}
94 body:             |
95   bb.0:
96     successors: %bb.1(0x30000000), %bb.2(0x50000000)
97     liveins: $r2d, $r3d
98   
99     %3:gr64bit = COPY $r3d
100     %2:addr64bit = COPY $r2d
101     %6:gr64bit = LGHI 0
102     CGHI %3, 0, implicit-def $cc
103     %8:gr64bit = LGHI 0
104     BRC 14, 6, %bb.2, implicit killed $cc
105     J %bb.1
106   
107   bb.1:
108     %8:gr64bit = LG %2, 0, $noreg :: (load (s64) from %ir.src)
109     INLINEASM &"", 1, 12, implicit-def dead early-clobber $r0d, 12, implicit-def dead early-clobber $r1d, 12, implicit-def dead early-clobber $r2d, 12, implicit-def dead early-clobber $r3d, 12, implicit-def dead early-clobber $r4d, 12, implicit-def dead early-clobber $r5d, 12, implicit-def dead early-clobber $r6d, 12, implicit-def dead early-clobber $r7d, 12, implicit-def dead early-clobber $r8d, 12, implicit-def dead early-clobber $r9d, 12, implicit-def dead early-clobber $r10d, 12, implicit-def dead early-clobber $r11d, 12, implicit-def dead early-clobber $r12d, 12, implicit-def dead early-clobber $r13d, 12, implicit-def dead early-clobber $r14d, 12, implicit-def early-clobber $r15d
110   
111   bb.2:
112     INLINEASM &"", 1, 12, implicit-def dead early-clobber $r0d, 12, implicit-def dead early-clobber $r1d, 12, implicit-def dead early-clobber $r2d, 12, implicit-def dead early-clobber $r3d, 12, implicit-def dead early-clobber $r4d, 12, implicit-def dead early-clobber $r5d, 12, implicit-def dead early-clobber $r6d, 12, implicit-def dead early-clobber $r7d, 12, implicit-def dead early-clobber $r8d, 12, implicit-def dead early-clobber $r9d, 12, implicit-def dead early-clobber $r10d, 12, implicit-def dead early-clobber $r11d, 12, implicit-def dead early-clobber $r12d, 12, implicit-def dead early-clobber $r13d, 12, implicit-def dead early-clobber $r14d, 12, implicit-def early-clobber $r15d
113     CLGFI %8, 2, implicit-def $cc
114     %6:gr64bit = LOCGHI %6, 1, 14, 6, implicit killed $cc
115     %7:gr64bit = NGRK %3, %6, implicit-def dead $cc
116     $r2d = COPY %7
117     Return implicit $r2d
122 # 17-bit immediate can not be folded
124 # CHECK-LABEL: fun2:
125 # CHECK:        mvhi    160(%r15), 0            # 4-byte Folded Spill
126 # CHECK:        mvc     160(4,%r15), 0(%r2)     # 4-byte Folded Spill
127 # CHECK-LABEL: .LBB2_2:
128 # CHECK:        l       %r0, 160(%r15)          # 4-byte Folded Reload
129 # CHECK:        clfi    %r0, 65536
131 name:            fun2
132 alignment:       16
133 tracksRegLiveness: true
134 registers:
135   - { id: 0, class: grx32bit }
136   - { id: 1, class: grx32bit }
137   - { id: 2, class: addr64bit }
138   - { id: 3, class: gr32bit }
139   - { id: 4, class: grx32bit }
140   - { id: 5, class: grx32bit }
141   - { id: 6, class: gr32bit }
142   - { id: 7, class: gr32bit }
143   - { id: 8, class: grx32bit }
144 liveins:
145   - { reg: '$r2d', virtual-reg: '%2' }
146   - { reg: '$r3l', virtual-reg: '%3' }
147 frameInfo:
148   maxAlignment:    1
149   hasOpaqueSPAdjustment: true
150 machineFunctionInfo: {}
151 body:             |
152   bb.0:
153     successors: %bb.1(0x30000000), %bb.2(0x50000000)
154     liveins: $r2d, $r3l
155   
156     %3:gr32bit = COPY $r3l
157     %2:addr64bit = COPY $r2d
158     %6:gr32bit = LHIMux 0
159     CHIMux %3, 0, implicit-def $cc
160     %8:grx32bit = LHIMux 0
161     BRC 14, 6, %bb.2, implicit killed $cc
162     J %bb.1
163   
164   bb.1:
165     %8:grx32bit = LMux %2, 0, $noreg :: (load (s32) from %ir.src)
166     INLINEASM &"", 1, 12, implicit-def dead early-clobber $r0d, 12, implicit-def dead early-clobber $r1d, 12, implicit-def dead early-clobber $r2d, 12, implicit-def dead early-clobber $r3d, 12, implicit-def dead early-clobber $r4d, 12, implicit-def dead early-clobber $r5d, 12, implicit-def dead early-clobber $r6d, 12, implicit-def dead early-clobber $r7d, 12, implicit-def dead early-clobber $r8d, 12, implicit-def dead early-clobber $r9d, 12, implicit-def dead early-clobber $r10d, 12, implicit-def dead early-clobber $r11d, 12, implicit-def dead early-clobber $r12d, 12, implicit-def dead early-clobber $r13d, 12, implicit-def dead early-clobber $r14d, 12, implicit-def early-clobber $r15d
167   
168   bb.2:
169     INLINEASM &"", 1, 12, implicit-def dead early-clobber $r0d, 12, implicit-def dead early-clobber $r1d, 12, implicit-def dead early-clobber $r2d, 12, implicit-def dead early-clobber $r3d, 12, implicit-def dead early-clobber $r4d, 12, implicit-def dead early-clobber $r5d, 12, implicit-def dead early-clobber $r6d, 12, implicit-def dead early-clobber $r7d, 12, implicit-def dead early-clobber $r8d, 12, implicit-def dead early-clobber $r9d, 12, implicit-def dead early-clobber $r10d, 12, implicit-def dead early-clobber $r11d, 12, implicit-def dead early-clobber $r12d, 12, implicit-def dead early-clobber $r13d, 12, implicit-def dead early-clobber $r14d, 12, implicit-def early-clobber $r15d
170     CLFIMux %8, 65536, implicit-def $cc
171     %6:gr32bit = LOCHIMux %6, 1, 14, 6, implicit killed $cc
172     %7:gr32bit = NRK %3, %6, implicit-def dead $cc
173     $r2l = COPY %7
174     Return implicit $r2l
179 # 17-bit immediate can not be folded
181 # CHECK-LABEL: fun3:
182 # CHECK:        mvghi   160(%r15), 0            # 8-byte Folded Spill
183 # CHECK:        mvc     160(8,%r15), 0(%r2)     # 8-byte Folded Spill
184 # CHECK-LABEL: .LBB3_2:
185 # CHECK:        lg      %r0, 160(%r15)          # 8-byte Folded Reload
186 # CHECK:        clgfi   %r0, 65536
188 name:            fun3
189 alignment:       16
190 tracksRegLiveness: true
191 registers:
192   - { id: 0, class: gr64bit }
193   - { id: 1, class: gr64bit }
194   - { id: 2, class: addr64bit }
195   - { id: 3, class: gr64bit }
196   - { id: 4, class: gr64bit }
197   - { id: 5, class: gr64bit }
198   - { id: 6, class: gr64bit }
199   - { id: 7, class: gr64bit }
200   - { id: 8, class: gr64bit }
201 liveins:
202   - { reg: '$r2d', virtual-reg: '%2' }
203   - { reg: '$r3d', virtual-reg: '%3' }
204 frameInfo:
205   maxAlignment:    1
206   hasOpaqueSPAdjustment: true
207 machineFunctionInfo: {}
208 body:             |
209   bb.0:
210     successors: %bb.1(0x30000000), %bb.2(0x50000000)
211     liveins: $r2d, $r3d
212   
213     %3:gr64bit = COPY $r3d
214     %2:addr64bit = COPY $r2d
215     %6:gr64bit = LGHI 0
216     CGHI %3, 0, implicit-def $cc
217     %8:gr64bit = LGHI 0
218     BRC 14, 6, %bb.2, implicit killed $cc
219     J %bb.1
220   
221   bb.1:
222     %8:gr64bit = LG %2, 0, $noreg :: (load (s64) from %ir.src)
223     INLINEASM &"", 1, 12, implicit-def dead early-clobber $r0d, 12, implicit-def dead early-clobber $r1d, 12, implicit-def dead early-clobber $r2d, 12, implicit-def dead early-clobber $r3d, 12, implicit-def dead early-clobber $r4d, 12, implicit-def dead early-clobber $r5d, 12, implicit-def dead early-clobber $r6d, 12, implicit-def dead early-clobber $r7d, 12, implicit-def dead early-clobber $r8d, 12, implicit-def dead early-clobber $r9d, 12, implicit-def dead early-clobber $r10d, 12, implicit-def dead early-clobber $r11d, 12, implicit-def dead early-clobber $r12d, 12, implicit-def dead early-clobber $r13d, 12, implicit-def dead early-clobber $r14d, 12, implicit-def early-clobber $r15d
224   
225   bb.2:
226     INLINEASM &"", 1, 12, implicit-def dead early-clobber $r0d, 12, implicit-def dead early-clobber $r1d, 12, implicit-def dead early-clobber $r2d, 12, implicit-def dead early-clobber $r3d, 12, implicit-def dead early-clobber $r4d, 12, implicit-def dead early-clobber $r5d, 12, implicit-def dead early-clobber $r6d, 12, implicit-def dead early-clobber $r7d, 12, implicit-def dead early-clobber $r8d, 12, implicit-def dead early-clobber $r9d, 12, implicit-def dead early-clobber $r10d, 12, implicit-def dead early-clobber $r11d, 12, implicit-def dead early-clobber $r12d, 12, implicit-def dead early-clobber $r13d, 12, implicit-def dead early-clobber $r14d, 12, implicit-def early-clobber $r15d
227     CLGFI %8, 65536, implicit-def $cc
228     %6:gr64bit = LOCGHI %6, 1, 14, 6, implicit killed $cc
229     %7:gr64bit = NGRK %3, %6, implicit-def dead $cc
230     $r2d = COPY %7
231     Return implicit $r2d