Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / AArch64 / dont-shrink-wrap-stack-mayloadorstore.mir
blob1c4447bffd8729937c383bd8c8fad59eddd1fe2d
1 --- |
2  ; pr37472
3  ; These test verify that shrink-wrap does not set the restore point
4  ; to a position where the stack might still be accessed by a load or store
5  
6  ; RUN: llc -x=mir -simplify-mir -run-pass=shrink-wrap -o - %s | FileCheck %s
7  ; CHECK:      name:            compiler_pop_stack
8  ; CHECK:      frameInfo:
9  ; CHECK:      savePoint:       '%bb.1'
10  ; CHECK:      restorePoint:    '%bb.7'
11  ; CHECK:      name:            compiler_pop_stack_no_memoperands
12  ; CHECK:      frameInfo:
13  ; CHECK:      savePoint:       '%bb.1'
14  ; CHECK:      restorePoint:    '%bb.7'
15  ; CHECK:      name:            f
16  ; CHECK:      frameInfo:
17  ; CHECK:      savePoint:       '%bb.2'
18  ; CHECK-NEXT: restorePoint:    '%bb.4'
19  ; CHECK-NEXT: stack:
21   target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
22   target triple = "aarch64"
24   %struct.S = type { i32, i32 }
26  ; Test from: https://bugs.llvm.org/show_bug.cgi?id=42136
27   define void @compiler_pop_stack(i32 %num, i32 %dec) {
28   entry:
29     %rstack = alloca [16 x i32], align 4
30     %idxprom = zext i32 %dec to i64
31     %arrayidx2 = getelementptr inbounds [16 x i32], ptr %rstack, i64 0, i64 %idxprom
32     %sunkaddr = mul i64 %idxprom, 4
33     %sunkaddr2 = getelementptr inbounds i8, ptr %rstack, i64 %sunkaddr
34     ret void
35   }
37  define void @compiler_pop_stack_no_memoperands(i32 %num, i32 %dec) {
38   entry:
39     %rstack = alloca [16 x i32], align 4
40     %idxprom = zext i32 %dec to i64
41     %arrayidx2 = getelementptr inbounds [16 x i32], ptr %rstack, i64 0, i64 %idxprom
42     %sunkaddr = mul i64 %idxprom, 4
43     %sunkaddr2 = getelementptr inbounds i8, ptr %rstack, i64 %sunkaddr
44     ret void
45   }
48  ; Test from: https://bugs.llvm.org/show_bug.cgi?id=37472
49   define i32 @f(ptr nocapture %arg, i32 %arg1) {
50   bb:
51     %tmp = alloca [4 x i8], align 1
52     %tmp6 = getelementptr inbounds [4 x i8], ptr %tmp, i64 0, i64 3
53     %sunkaddr = getelementptr inbounds i8, ptr %tmp, i64 3
54     %tmp14 = getelementptr inbounds %struct.S, ptr %arg, i64 0, i32 1
55     ret i32 0
56   }
58 ...
59 ---
60 name:            compiler_pop_stack
61 alignment:       4
62 tracksRegLiveness: true
63 liveins:
64   - { reg: '$w0' }
65 frameInfo:
66   maxAlignment:    4
67   maxCallFrameSize: 0
68   localFrameSize:  64
69 stack:
70   - { id: 0, name: rstack, size: 64, alignment: 4, stack-id: default, local-offset: -64 }
71 machineFunctionInfo: {}
72 body:             |
73   bb.0:
74     liveins: $w0
76     dead $wzr = SUBSWri renamable $w0, 2, 0, implicit-def $nzcv
77     Bcc 3, %bb.6, implicit killed $nzcv
78     B %bb.1
80   bb.1:
81     liveins: $w0
83     STRWui killed renamable $w0, %stack.0.rstack, 0 :: (volatile store (s32) into %ir.rstack)
84     renamable $w9 = MOVi32imm 1
85     renamable $x8 = ADDXri %stack.0.rstack, 0, 0
87   bb.2:
88     successors: %bb.3(0x30000000), %bb.4(0x50000000)
89     liveins: $w9, $x8
91     renamable $w10 = SUBWri renamable $w9, 1, 0, implicit-def $x10
92     renamable $w11 = LDRWroW renamable $x8, renamable $w10, 0, 1 :: (volatile load (s32) from %ir.arrayidx2)
93     CBNZW renamable $w11, %bb.4
95   bb.3:
96     liveins: $x8, $x10
98     renamable $w9 = COPY renamable $w10, implicit killed $x10
99     B %bb.5
101   bb.4:
102     liveins: $w9, $w11, $x8, $x10
104     STRWroX killed renamable $w11, renamable $x8, killed renamable $x10, 0, 1 :: (volatile store (s32) into %ir.sunkaddr2)
106   bb.5:
107     successors: %bb.6(0x04000000), %bb.2(0x7c000000)
108     liveins: $w9, $x8
110     CBNZW renamable $w9, %bb.2
111     B %bb.6
113   bb.6:
114     RET_ReallyLR
117 # Like compiler_pop_stack, but with the memory operands dropped from the
118 # machine instructions.
120 name:            compiler_pop_stack_no_memoperands
121 alignment:       4
122 tracksRegLiveness: true
123 liveins:
124   - { reg: '$w0' }
125 frameInfo:
126   maxAlignment:    4
127   maxCallFrameSize: 0
128   localFrameSize:  64
129 stack:
130   - { id: 0, name: rstack, size: 64, alignment: 4, stack-id: default, local-offset: -64 }
131 machineFunctionInfo: {}
132 body:             |
133   bb.0:
134     liveins: $w0
136     dead $wzr = SUBSWri renamable $w0, 2, 0, implicit-def $nzcv
137     Bcc 3, %bb.6, implicit killed $nzcv
138     B %bb.1
140   bb.1:
141     liveins: $w0
143     STRWui killed renamable $w0, %stack.0.rstack, 0
144     renamable $w9 = MOVi32imm 1
145     renamable $x8 = ADDXri %stack.0.rstack, 0, 0
147   bb.2:
148     successors: %bb.3(0x30000000), %bb.4(0x50000000)
149     liveins: $w9, $x8
151     renamable $w10 = SUBWri renamable $w9, 1, 0, implicit-def $x10
152     renamable $w11 = LDRWroW renamable $x8, renamable $w10, 0, 1
153     CBNZW renamable $w11, %bb.4
155   bb.3:
156     liveins: $x8, $x10
158     renamable $w9 = COPY renamable $w10, implicit killed $x10
159     B %bb.5
161   bb.4:
162     liveins: $w9, $w11, $x8, $x10
164     STRWroX killed renamable $w11, renamable $x8, killed renamable $x10, 0, 1
166   bb.5:
167     successors: %bb.6(0x04000000), %bb.2(0x7c000000)
168     liveins: $w9, $x8
170     CBNZW renamable $w9, %bb.2
171     B %bb.6
173   bb.6:
174     RET_ReallyLR
179 name:            f
180 alignment:       4
181 tracksRegLiveness: true
182 liveins:
183   - { reg: '$x0' }
184   - { reg: '$w1' }
185 frameInfo:
186   maxAlignment:    4
187   maxCallFrameSize: 0
188   localFrameSize:  4
189 stack:
190   - { id: 0, name: tmp, size: 4, alignment: 4, stack-id: default, local-offset: -4 }
191 machineFunctionInfo: {}
192 body:             |
193   bb.0:
194     successors: %bb.1, %bb.2
195     liveins: $w1, $x0
197     dead $wzr = SUBSWri renamable $w1, 4, 0, implicit-def $nzcv
198     Bcc 9, %bb.2, implicit killed $nzcv
200   bb.1:
201     renamable $w0 = MOVi32imm 1
202     B %bb.5
204   bb.2:
205     successors: %bb.3, %bb.4
206     liveins: $w1, $x0
208     renamable $w9 = MOVi32imm 67305985
209     renamable $w8 = ORRWrs $wzr, renamable $w1, 0, implicit-def $x8
210     STRWui killed renamable $w9, %stack.0.tmp, 0 :: (volatile store (s32) into %ir.tmp)
211     renamable $x9 = ADDXri %stack.0.tmp, 0, 0
212     renamable $w10 = LDRBBroX renamable $x9, renamable $x8, 0, 0 :: (volatile load (s8) from %ir.arg)
213     dead $wzr = SUBSWri killed renamable $w1, 2, 0, implicit-def $nzcv
214     STRWui killed renamable $w10, renamable $x0, 0 :: (store (s32) into %ir.arg)
215     Bcc 8, %bb.4, implicit killed $nzcv
216     B %bb.3
218   bb.3:
219     liveins: $x0, $x8, $x9
221     renamable $w8 = LDRBBroX killed renamable $x9, killed renamable $x8, 0, 0 :: (volatile load (s8) from %ir.sunkaddr)
222     STRWui killed renamable $w8, killed renamable $x0, 1 :: (store (s32) into %ir.tmp14)
224   bb.4:
225     renamable $w0 = COPY $wzr
227   bb.5:
228     liveins: $w0
230     RET_ReallyLR implicit $w0