[RISCV] Rename a lambda to have plural nouns to reflect that it contains a loop. NFC
[llvm-project.git] / llvm / test / CodeGen / PowerPC / fold-rlwinm.mir
blob729895efb11bb3239e643bd2952545a3bf16cd5a
1 # RUN: llc -ppc-asm-full-reg-names -mtriple=powerpc64le-unknown-linux-gnu \
2 # RUN:   -run-pass ppc-mi-peepholes %s -o - -verify-machineinstrs | FileCheck %s
4 ---
5 name: testFoldRLWINM
6 #CHECK: name: testFoldRLWINM
7 tracksRegLiveness: true
8 body: |
9   bb.0.entry:
10     liveins: $x3
11     %0:g8rc = COPY $x3
12     %1:gprc = COPY %0.sub_32:g8rc
13     %2:gprc = RLWINM %1:gprc, 27, 5, 31
14     ; CHECK-NOT: %2:gprc = RLWINM %1, 27, 5, 31
15     %3:gprc = RLWINM %2:gprc, 19, 0, 12
16     ; CHECK: %3:gprc = RLWINM killed %1, 14, 0, 12
17     BLR8 implicit $lr8, implicit $rm
18 ...
19 ---
20 name: testFoldRLWINMSrcFullMask1
21 #CHECK: name: testFoldRLWINMSrcFullMask1
22 tracksRegLiveness: true
23 body: |
24   bb.0.entry:
25     liveins: $x3
26     %0:g8rc = COPY $x3
27     %1:gprc = COPY %0.sub_32:g8rc
28     %2:gprc = RLWINM %1:gprc, 27, 0, 31
29     ; CHECK-NOT: %2:gprc = RLWINM %1, 27, 0, 31
30     %3:gprc = RLWINM %2:gprc, 19, 0, 12
31     ; CHECK: %3:gprc = RLWINM killed %1, 14, 0, 12
32     BLR8 implicit $lr8, implicit $rm
33 ...
34 ---
35 name: testFoldRLWINMSrcFullMask2
36 #CHECK: name: testFoldRLWINMSrcFullMask2
37 tracksRegLiveness: true
38 body: |
39   bb.0.entry:
40     liveins: $x3
41     %0:g8rc = COPY $x3
42     %1:gprc = COPY %0.sub_32:g8rc
43     %2:gprc = RLWINM %1:gprc, 27, 10, 9 
44     ; CHECK-NOT: %2:gprc = RLWINM %1, 27, 10, 9
45     %3:gprc = RLWINM %2:gprc, 19, 10, 1
46     ; CHECK: %3:gprc = RLWINM killed %1, 14, 10, 1
47     BLR8 implicit $lr8, implicit $rm
48 ...
49 ---
50 name: testFoldRLWINMSrcWrapped
51 #CHECK: name: testFoldRLWINMSrcWrapped
52 tracksRegLiveness: true
53 body: |
54   bb.0.entry:
55     liveins: $x3
56     %0:g8rc = COPY $x3
57     %1:gprc = COPY %0.sub_32:g8rc
58     %2:gprc = RLWINM %1:gprc, 27, 30, 10
59     ; CHECK-NOT: %2:gprc = RLWINM %1, 27, 30, 10 
60     %3:gprc = RLWINM %2:gprc, 19, 0, 12
61     ; CHECK: %3:gprc = RLWINM killed %1, 14, 11, 12
62     BLR8 implicit $lr8, implicit $rm
63 ...
64 ---
65 name: testFoldRLWINMUserWrapped
66 #CHECK: name: testFoldRLWINMUserWrapped
67 tracksRegLiveness: true
68 body: |
69   bb.0.entry:
70     liveins: $x3
71     %0:g8rc = COPY $x3
72     %1:gprc = COPY %0.sub_32:g8rc
73     %2:gprc = RLWINM %1:gprc, 10, 5, 31
74     ; CHECK: %2:gprc = RLWINM killed %1, 10, 5, 31
75     %3:gprc = RLWINM %2:gprc, 10, 30, 5
76     ; CHECK: %3:gprc = RLWINM killed %2, 10, 30, 5
77     BLR8 implicit $lr8, implicit $rm
78 ...
79 ---
80 name: testFoldRLWINMResultWrapped
81 #CHECK: name: testFoldRLWINMResultWrapped
82 tracksRegLiveness: true
83 body: |
84   bb.0.entry:
85     liveins: $x3
86     %0:g8rc = COPY $x3
87     %1:gprc = COPY %0.sub_32:g8rc
88     %2:gprc = RLWINM killed %1:gprc, 10, 20, 10
89     ; CHECK: %2:gprc = RLWINM killed %1, 10, 20, 10
90     %3:gprc = RLWINM killed %2:gprc, 10, 0, 31
91     ; CHECK: %3:gprc = RLWINM killed %2, 10, 0, 31
92     BLR8 implicit $lr8, implicit $rm
93 ...
94 ---
95 name: testFoldRLWINMMultipleUses
96 #CHECK: name: testFoldRLWINMMultipleUses
97 tracksRegLiveness: true
98 body: |
99   bb.0.entry:
100     liveins: $x3
101     %0:g8rc = COPY $x3
102     %1:gprc = COPY %0.sub_32:g8rc
103     %2:gprc = RLWINM killed %1:gprc, 27, 5, 31
104     ; CHECK: %2:gprc = RLWINM %1, 27, 5, 31
105     %3:gprc = RLWINM %2:gprc, 19, 0, 12
106     ; CHECK: %3:gprc = RLWINM killed %1, 14, 0, 12
107     STW %3:gprc, %2:gprc, 100 
108     ; CHECK: STW killed %3, killed %2, 100
109     BLR8 implicit $lr8, implicit $rm
112 name: testFoldRLWINMToZero
113 #CHECK: name: testFoldRLWINMToZero
114 tracksRegLiveness: true
115 body: |
116   bb.0.entry:
117     liveins: $x3
118     %0:g8rc = COPY $x3
119     %1:gprc = COPY %0.sub_32:g8rc
120     %2:gprc = RLWINM %1:gprc, 27, 5, 10
121     ; CHECK-NOT: RLWINM %1,
122     %3:gprc = RLWINM %2:gprc, 8, 5, 10
123     ; CHECK: %3:gprc = LI 0
124     BLR8 implicit $lr8, implicit $rm
127 name: testFoldRLWINM_recToZero
128 #CHECK: name: testFoldRLWINM_recToZero
129 tracksRegLiveness: true
130 body: |
131   bb.0.entry:
132     liveins: $x3
133     %0:g8rc = COPY $x3
134     %1:gprc = COPY %0.sub_32:g8rc
135     %2:gprc = RLWINM %1:gprc, 27, 5, 10
136     ; CHECK-NOT: RLWINM %1,
137     %3:gprc = RLWINM_rec %2:gprc, 8, 5, 10, implicit-def $cr0
138     ; CHECK: %3:gprc = ANDI_rec killed %1, 0, implicit-def dead $cr0
139     BLR8 implicit $lr8, implicit $rm
142 name: testFoldRLWINMoToZeroSrcCanNotBeDeleted
143 #CHECK: name: testFoldRLWINMoToZeroSrcCanNotBeDeleted
144 tracksRegLiveness: true
145 body: |
146   bb.0.entry:
147     liveins: $x3
148     %0:g8rc = COPY $x3
149     %1:gprc = COPY %0.sub_32:g8rc
150     %2:gprc = RLWINM_rec killed %1:gprc, 27, 5, 10, implicit-def $cr0
151     ; CHECK: %2:gprc = RLWINM_rec %1, 27, 5, 10, implicit-def dead $cr0
152     %3:gprc = RLWINM_rec killed %2:gprc, 8, 5, 10, implicit-def $cr0
153     ; CHECK: %3:gprc = ANDI_rec killed %1, 0, implicit-def dead $cr0
154     BLR8 implicit $lr8, implicit $rm
157 name: testFoldRLWINMInvalidMask
158 #CHECK: name: testFoldRLWINMInvalidMask
159 tracksRegLiveness: true
160 body: |
161   bb.0.entry:
162     liveins: $x3
163     %0:g8rc = COPY $x3
164     %1:gprc = COPY %0.sub_32:g8rc
165     %2:gprc = RLWINM %1:gprc, 20, 5, 31
166     ; CHECK: %2:gprc = RLWINM killed %1, 20, 5, 31
167     %3:gprc = RLWINM %2:gprc, 19, 10, 20
168     ; CHECK: %3:gprc = RLWINM killed %2, 19, 10, 20
169     BLR8 implicit $lr8, implicit $rm
172 name: testFoldRLWINMLIWrapMask
173 #CHECK: name: testFoldRLWINMLIWrapMask
174 tracksRegLiveness: true
175 body: |
176   bb.0.entry:
177     liveins: $x3
178     %0:gprc = COPY $x3
179     %1:gprc = LI 100
180     ; CHECK: %2:gprc = LI 200
181     %2:gprc = RLWINM %1:gprc, 1, 3, 2
182     STW %2:gprc, %0:gprc, 100
183     BLR8 implicit $lr8, implicit $rm
186 name: testFoldRLWINMAndANDI
187 tracksRegLiveness: true
188 body: |
189   bb.0.entry:
190     liveins: $x3
191     ; CHECK-LABEL: name: testFoldRLWINMAndANDI
192     ; CHECK: liveins: $x3
193     ; CHECK: [[COPY:%[0-9]+]]:g8rc = COPY killed $x3
194     ; CHECK: [[COPY1:%[0-9]+]]:gprc = COPY killed [[COPY]].sub_32
195     ; CHECK: [[RLWINM:%[0-9]+]]:gprc = RLWINM killed [[COPY1]], 4, 28, 31
196     ; CHECK: [[ANDI_rec:%[0-9]+]]:gprc = ANDI_rec killed [[RLWINM]], 4, implicit-def dead $cr0
197     ; CHECK: BLR8 implicit $lr8, implicit $rm
198     %0:g8rc = COPY $x3
199     %1:gprc = COPY %0.sub_32:g8rc
200     %2:gprc = RLWINM %1:gprc, 4, 28, 31
201     %3:gprc = ANDI_rec %2:gprc, 4, implicit-def $cr0
202     BLR8 implicit $lr8, implicit $rm