@@ -100,3 +100,82 @@ entry:
100100}
101101
102102declare 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