• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3
4---
5name: testFoldRLWINM
6#CHECK: name: testFoldRLWINM
7tracksRegLiveness: true
8body: |
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 %1, 14, 0, 12
17    BLR8 implicit $lr8, implicit $rm
18...
19---
20name: testFoldRLWINMSrcFullMask1
21#CHECK: name: testFoldRLWINMSrcFullMask1
22tracksRegLiveness: true
23body: |
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 %1, 14, 0, 12
32    BLR8 implicit $lr8, implicit $rm
33...
34---
35name: testFoldRLWINMSrcFullMask2
36#CHECK: name: testFoldRLWINMSrcFullMask2
37tracksRegLiveness: true
38body: |
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 %1, 14, 10, 1
47    BLR8 implicit $lr8, implicit $rm
48...
49---
50name: testFoldRLWINMSrcWrapped
51#CHECK: name: testFoldRLWINMSrcWrapped
52tracksRegLiveness: true
53body: |
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 %1, 14, 11, 12
62    BLR8 implicit $lr8, implicit $rm
63...
64---
65name: testFoldRLWINMUserWrapped
66#CHECK: name: testFoldRLWINMUserWrapped
67tracksRegLiveness: true
68body: |
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 %1, 10, 5, 31
75    %3:gprc = RLWINM %2:gprc, 10, 30, 5
76    ; CHECK: %3:gprc = RLWINM %2, 10, 30, 5
77    BLR8 implicit $lr8, implicit $rm
78...
79---
80name: testFoldRLWINMResultWrapped
81#CHECK: name: testFoldRLWINMResultWrapped
82tracksRegLiveness: true
83body: |
84  bb.0.entry:
85    liveins: $x3
86    %0:g8rc = COPY $x3
87    %1:gprc = COPY %0.sub_32:g8rc
88    %2:gprc = RLWINM %1:gprc, 10, 20, 10
89    ; CHECK: %2:gprc = RLWINM %1, 10, 20, 10
90    %3:gprc = RLWINM %2:gprc, 10, 0, 31
91    ; CHECK: %3:gprc = RLWINM %2, 10, 0, 31
92    BLR8 implicit $lr8, implicit $rm
93...
94---
95name: testFoldRLWINMMultipleUses
96#CHECK: name: testFoldRLWINMMultipleUses
97tracksRegLiveness: true
98body: |
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 %3, %2, 100
109    BLR8 implicit $lr8, implicit $rm
110...
111---
112name: testFoldRLWINMToZero
113#CHECK: name: testFoldRLWINMToZero
114tracksRegLiveness: true
115body: |
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
125...
126---
127name: testFoldRLWINM_recToZero
128#CHECK: name: testFoldRLWINM_recToZero
129tracksRegLiveness: true
130body: |
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 %1, 0, implicit-def $cr0
139    BLR8 implicit $lr8, implicit $rm
140...
141---
142name: testFoldRLWINMoToZeroSrcCanNotBeDeleted
143#CHECK: name: testFoldRLWINMoToZeroSrcCanNotBeDeleted
144tracksRegLiveness: true
145body: |
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 %1:gprc, 27, 5, 10, implicit-def $cr0
151    ; CHECK: %2:gprc = RLWINM_rec %1, 27, 5, 10, implicit-def $cr0
152    %3:gprc = RLWINM_rec %2:gprc, 8, 5, 10, implicit-def $cr0
153    ; CHECK: %3:gprc = ANDI_rec %1, 0, implicit-def $cr0
154    BLR8 implicit $lr8, implicit $rm
155...
156---
157name: testFoldRLWINMInvalidMask
158#CHECK: name: testFoldRLWINMInvalidMask
159tracksRegLiveness: true
160body: |
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 %1, 20, 5, 31
167    %3:gprc = RLWINM %2:gprc, 19, 10, 20
168    ; CHECK: %3:gprc = RLWINM %2, 19, 10, 20
169    BLR8 implicit $lr8, implicit $rm
170...
171---
172name: testFoldRLWINMLIWrapMask
173#CHECK: name: testFoldRLWINMLIWrapMask
174tracksRegLiveness: true
175body: |
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
184...
185---
186name: testFoldRLWINMAndANDI
187tracksRegLiveness: true
188body: |
189  bb.0.entry:
190    liveins: $x3
191    ; CHECK-LABEL: name: testFoldRLWINMAndANDI
192    ; CHECK: liveins: $x3
193    ; CHECK: [[COPY:%[0-9]+]]:g8rc = COPY $x3
194    ; CHECK: [[COPY1:%[0-9]+]]:gprc = COPY [[COPY]].sub_32
195    ; CHECK: [[RLWINM:%[0-9]+]]:gprc = RLWINM [[COPY1]], 4, 28, 31
196    ; CHECK: [[ANDI_rec:%[0-9]+]]:gprc = ANDI_rec [[RLWINM]], 4, implicit-def $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
203...
204