Skip to content

Commit 69c8756

Browse files
authored
[NFC][PowerPC] Pre-commit adding test case: use millicode for memmove (llvm#166961)
add test case to test lib call are used for the memmove milicode
1 parent 94a7006 commit 69c8756

File tree

2 files changed

+135
-0
lines changed

2 files changed

+135
-0
lines changed

llvm/test/CodeGen/PowerPC/milicode32.ll

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,59 @@ entry:
6969
}
7070

7171
declare i32 @strlen(ptr noundef) nounwind
72+
73+
define ptr @test_memmove(ptr noundef %destination, ptr noundef %source, i32 noundef %num) #0 {
74+
; CHECK-AIX-32-P9-LABEL: test_memmove:
75+
; CHECK-AIX-32-P9: # %bb.0: # %entry
76+
; CHECK-AIX-32-P9-NEXT: mflr r0
77+
; CHECK-AIX-32-P9-NEXT: stwu r1, -80(r1)
78+
; CHECK-AIX-32-P9-NEXT: stw r0, 88(r1)
79+
; CHECK-AIX-32-P9-NEXT: stw r31, 76(r1) # 4-byte Folded Spill
80+
; CHECK-AIX-32-P9-NEXT: mr r31, r3
81+
; CHECK-AIX-32-P9-NEXT: stw r3, 72(r1)
82+
; CHECK-AIX-32-P9-NEXT: stw r4, 68(r1)
83+
; CHECK-AIX-32-P9-NEXT: stw r5, 64(r1)
84+
; CHECK-AIX-32-P9-NEXT: bl .___memmove[PR]
85+
; CHECK-AIX-32-P9-NEXT: nop
86+
; CHECK-AIX-32-P9-NEXT: mr r3, r31
87+
; CHECK-AIX-32-P9-NEXT: lwz r31, 76(r1) # 4-byte Folded Reload
88+
; CHECK-AIX-32-P9-NEXT: addi r1, r1, 80
89+
; CHECK-AIX-32-P9-NEXT: lwz r0, 8(r1)
90+
; CHECK-AIX-32-P9-NEXT: mtlr r0
91+
; CHECK-AIX-32-P9-NEXT: blr
92+
;
93+
; CHECK-LINUX32-P9-LABEL: test_memmove:
94+
; CHECK-LINUX32-P9: # %bb.0: # %entry
95+
; CHECK-LINUX32-P9-NEXT: mflr r0
96+
; CHECK-LINUX32-P9-NEXT: stwu r1, -32(r1)
97+
; CHECK-LINUX32-P9-NEXT: stw r0, 36(r1)
98+
; CHECK-LINUX32-P9-NEXT: .cfi_def_cfa_offset 32
99+
; CHECK-LINUX32-P9-NEXT: .cfi_offset lr, 4
100+
; CHECK-LINUX32-P9-NEXT: .cfi_offset r30, -8
101+
; CHECK-LINUX32-P9-NEXT: stw r30, 24(r1) # 4-byte Folded Spill
102+
; CHECK-LINUX32-P9-NEXT: mr r30, r3
103+
; CHECK-LINUX32-P9-NEXT: stw r3, 20(r1)
104+
; CHECK-LINUX32-P9-NEXT: stw r4, 16(r1)
105+
; CHECK-LINUX32-P9-NEXT: stw r5, 12(r1)
106+
; CHECK-LINUX32-P9-NEXT: bl memmove
107+
; CHECK-LINUX32-P9-NEXT: mr r3, r30
108+
; CHECK-LINUX32-P9-NEXT: lwz r30, 24(r1) # 4-byte Folded Reload
109+
; CHECK-LINUX32-P9-NEXT: lwz r0, 36(r1)
110+
; CHECK-LINUX32-P9-NEXT: addi r1, r1, 32
111+
; CHECK-LINUX32-P9-NEXT: mtlr r0
112+
; CHECK-LINUX32-P9-NEXT: blr
113+
entry:
114+
%destination.addr = alloca ptr, align 4
115+
%source.addr = alloca ptr, align 4
116+
%num.addr = alloca i32, align 4
117+
store ptr %destination, ptr %destination.addr, align 4
118+
store ptr %source, ptr %source.addr, align 4
119+
store i32 %num, ptr %num.addr, align 4
120+
%0 = load ptr, ptr %destination.addr, align 4
121+
%1 = load ptr, ptr %source.addr, align 4
122+
%2 = load i32, ptr %num.addr, align 4
123+
call void @llvm.memmove.p0.p0.i32(ptr align 1 %0, ptr align 1 %1, i32 %2, i1 false)
124+
ret ptr %0
125+
}
126+
127+
declare void @llvm.memmove.p0.p0.i32(ptr writeonly captures(none), ptr readonly captures(none), i32, i1 immarg)

llvm/test/CodeGen/PowerPC/milicode64.ll

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,3 +100,82 @@ entry:
100100
}
101101

102102
declare i64 @strlen(ptr noundef) nounwind
103+
104+
define ptr @test_memmove(ptr noundef %destination, ptr noundef %source, i64 noundef %num) #0 {
105+
; CHECK-LE-P9-LABEL: test_memmove:
106+
; CHECK-LE-P9: # %bb.0: # %entry
107+
; CHECK-LE-P9-NEXT: mflr r0
108+
; CHECK-LE-P9-NEXT: .cfi_def_cfa_offset 80
109+
; CHECK-LE-P9-NEXT: .cfi_offset lr, 16
110+
; CHECK-LE-P9-NEXT: .cfi_offset r30, -16
111+
; CHECK-LE-P9-NEXT: std r30, -16(r1) # 8-byte Folded Spill
112+
; CHECK-LE-P9-NEXT: stdu r1, -80(r1)
113+
; CHECK-LE-P9-NEXT: std r0, 96(r1)
114+
; CHECK-LE-P9-NEXT: mr r30, r3
115+
; CHECK-LE-P9-NEXT: std r3, 56(r1)
116+
; CHECK-LE-P9-NEXT: std r4, 48(r1)
117+
; CHECK-LE-P9-NEXT: std r5, 40(r1)
118+
; CHECK-LE-P9-NEXT: bl memmove
119+
; CHECK-LE-P9-NEXT: nop
120+
; CHECK-LE-P9-NEXT: mr r3, r30
121+
; CHECK-LE-P9-NEXT: addi r1, r1, 80
122+
; CHECK-LE-P9-NEXT: ld r0, 16(r1)
123+
; CHECK-LE-P9-NEXT: ld r30, -16(r1) # 8-byte Folded Reload
124+
; CHECK-LE-P9-NEXT: mtlr r0
125+
; CHECK-LE-P9-NEXT: blr
126+
;
127+
; CHECK-BE-P9-LABEL: test_memmove:
128+
; CHECK-BE-P9: # %bb.0: # %entry
129+
; CHECK-BE-P9-NEXT: mflr r0
130+
; CHECK-BE-P9-NEXT: stdu r1, -160(r1)
131+
; CHECK-BE-P9-NEXT: std r0, 176(r1)
132+
; CHECK-BE-P9-NEXT: .cfi_def_cfa_offset 160
133+
; CHECK-BE-P9-NEXT: .cfi_offset lr, 16
134+
; CHECK-BE-P9-NEXT: .cfi_offset r30, -16
135+
; CHECK-BE-P9-NEXT: std r30, 144(r1) # 8-byte Folded Spill
136+
; CHECK-BE-P9-NEXT: mr r30, r3
137+
; CHECK-BE-P9-NEXT: std r3, 136(r1)
138+
; CHECK-BE-P9-NEXT: std r4, 128(r1)
139+
; CHECK-BE-P9-NEXT: std r5, 120(r1)
140+
; CHECK-BE-P9-NEXT: bl memmove
141+
; CHECK-BE-P9-NEXT: nop
142+
; CHECK-BE-P9-NEXT: mr r3, r30
143+
; CHECK-BE-P9-NEXT: ld r30, 144(r1) # 8-byte Folded Reload
144+
; CHECK-BE-P9-NEXT: addi r1, r1, 160
145+
; CHECK-BE-P9-NEXT: ld r0, 16(r1)
146+
; CHECK-BE-P9-NEXT: mtlr r0
147+
; CHECK-BE-P9-NEXT: blr
148+
;
149+
; CHECK-AIX-64-P9-LABEL: test_memmove:
150+
; CHECK-AIX-64-P9: # %bb.0: # %entry
151+
; CHECK-AIX-64-P9-NEXT: mflr r0
152+
; CHECK-AIX-64-P9-NEXT: stdu r1, -144(r1)
153+
; CHECK-AIX-64-P9-NEXT: std r0, 160(r1)
154+
; CHECK-AIX-64-P9-NEXT: std r31, 136(r1) # 8-byte Folded Spill
155+
; CHECK-AIX-64-P9-NEXT: mr r31, r3
156+
; CHECK-AIX-64-P9-NEXT: std r3, 128(r1)
157+
; CHECK-AIX-64-P9-NEXT: std r4, 120(r1)
158+
; CHECK-AIX-64-P9-NEXT: std r5, 112(r1)
159+
; CHECK-AIX-64-P9-NEXT: bl .memmove[PR]
160+
; CHECK-AIX-64-P9-NEXT: nop
161+
; CHECK-AIX-64-P9-NEXT: mr r3, r31
162+
; CHECK-AIX-64-P9-NEXT: ld r31, 136(r1) # 8-byte Folded Reload
163+
; CHECK-AIX-64-P9-NEXT: addi r1, r1, 144
164+
; CHECK-AIX-64-P9-NEXT: ld r0, 16(r1)
165+
; CHECK-AIX-64-P9-NEXT: mtlr r0
166+
; CHECK-AIX-64-P9-NEXT: blr
167+
entry:
168+
%destination.addr = alloca ptr, align 8
169+
%source.addr = alloca ptr, align 8
170+
%num.addr = alloca i64, align 8
171+
store ptr %destination, ptr %destination.addr, align 8
172+
store ptr %source, ptr %source.addr, align 8
173+
store i64 %num, ptr %num.addr, align 8
174+
%0 = load ptr, ptr %destination.addr, align 8
175+
%1 = load ptr, ptr %source.addr, align 8
176+
%2 = load i64, ptr %num.addr, align 8
177+
call void @llvm.memmove.p0.p0.i64(ptr align 1 %0, ptr align 1 %1, i64 %2, i1 false)
178+
ret ptr %0
179+
}
180+
181+
declare void @llvm.memmove.p0.p0.i32(ptr writeonly captures(none), ptr readonly captures(none), i32, i1 immarg)

0 commit comments

Comments
 (0)