Skip to content

Commit 9fbb060

Browse files
author
Esme-Yi
committed
[NFC][PowerPC]Add tests for folding RLWINM before and after RA.
1 parent bed02fa commit 9fbb060

File tree

2 files changed

+53
-0
lines changed

2 files changed

+53
-0
lines changed

llvm/test/CodeGen/PowerPC/fold-rlwinm.mir

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,3 +182,22 @@ body: |
182182
STW %2:gprc, %0:gprc, 100
183183
BLR8 implicit $lr8, implicit $rm
184184
...
185+
---
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 $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+
...

llvm/test/CodeGen/PowerPC/vsx_builtins.ll

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,3 +106,37 @@ define i32 @test_vec_test_swsqrts(<4 x float> %a) {
106106
ret i32 %0
107107
}
108108
declare i32 @llvm.ppc.vsx.xvtsqrtsp(<4 x float>)
109+
110+
define i32 @xvtdivdp_andi(<2 x double> %a, <2 x double> %b) {
111+
; CHECK-LABEL: xvtdivdp_andi:
112+
; CHECK: # %bb.0: # %entry
113+
; CHECK-NEXT: xvtdivdp cr0, v2, v3
114+
; CHECK-NEXT: li r4, 222
115+
; CHECK-NEXT: mfocrf r3, 128
116+
; CHECK-NEXT: srwi r3, r3, 28
117+
; CHECK-NEXT: andi. r3, r3, 2
118+
; CHECK-NEXT: li r3, 22
119+
; CHECK-NEXT: iseleq r3, r4, r3
120+
; CHECK-NEXT: blr
121+
entry:
122+
%0 = tail call i32 @llvm.ppc.vsx.xvtdivdp(<2 x double> %a, <2 x double> %b)
123+
%1 = and i32 %0, 2
124+
%cmp.not = icmp eq i32 %1, 0
125+
%retval.0 = select i1 %cmp.not, i32 222, i32 22
126+
ret i32 %retval.0
127+
}
128+
129+
define i32 @xvtdivdp_shift(<2 x double> %a, <2 x double> %b) {
130+
; CHECK-LABEL: xvtdivdp_shift:
131+
; CHECK: # %bb.0: # %entry
132+
; CHECK-NEXT: xvtdivdp cr0, v2, v3
133+
; CHECK-NEXT: mfocrf r3, 128
134+
; CHECK-NEXT: srwi r3, r3, 28
135+
; CHECK-NEXT: rlwinm r3, r3, 28, 31, 31
136+
; CHECK-NEXT: blr
137+
entry:
138+
%0 = tail call i32 @llvm.ppc.vsx.xvtdivdp(<2 x double> %a, <2 x double> %b)
139+
%1 = lshr i32 %0, 4
140+
%.lobit = and i32 %1, 1
141+
ret i32 %.lobit
142+
}

0 commit comments

Comments
 (0)