• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; Test memcpy using MVC.
2;
3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
4
5declare void @llvm.memcpy.p0i8.p0i8.i32(i8 *nocapture, i8 *nocapture, i32, i32, i1) nounwind
6declare void @llvm.memcpy.p0i8.p0i8.i64(i8 *nocapture, i8 *nocapture, i64, i32, i1) nounwind
7
8define void @f1(i8 *%dest, i8 *%src) {
9; CHECK-LABEL: f1:
10; CHECK-NOT: %r2
11; CHECK-NOT: %r3
12; CHECK: br %r14
13  call void @llvm.memcpy.p0i8.p0i8.i32(i8 *%dest, i8 *%src, i32 0, i32 1,
14                                       i1 false)
15  ret void
16}
17
18define void @f2(i8 *%dest, i8 *%src) {
19; CHECK-LABEL: f2:
20; CHECK-NOT: %r2
21; CHECK-NOT: %r3
22; CHECK: br %r14
23  call void @llvm.memcpy.p0i8.p0i8.i64(i8 *%dest, i8 *%src, i64 0, i32 1,
24                                       i1 false)
25  ret void
26}
27
28define void @f3(i8 *%dest, i8 *%src) {
29; CHECK-LABEL: f3:
30; CHECK: mvc 0(1,%r2), 0(%r3)
31; CHECK: br %r14
32  call void @llvm.memcpy.p0i8.p0i8.i32(i8 *%dest, i8 *%src, i32 1, i32 1,
33                                       i1 false)
34  ret void
35}
36
37define void @f4(i8 *%dest, i8 *%src) {
38; CHECK-LABEL: f4:
39; CHECK: mvc 0(1,%r2), 0(%r3)
40; CHECK: br %r14
41  call void @llvm.memcpy.p0i8.p0i8.i64(i8 *%dest, i8 *%src, i64 1, i32 1,
42                                       i1 false)
43  ret void
44}
45
46define void @f5(i8 *%dest, i8 *%src) {
47; CHECK-LABEL: f5:
48; CHECK: mvc 0(256,%r2), 0(%r3)
49; CHECK: br %r14
50  call void @llvm.memcpy.p0i8.p0i8.i32(i8 *%dest, i8 *%src, i32 256, i32 1,
51                                       i1 false)
52  ret void
53}
54
55define void @f6(i8 *%dest, i8 *%src) {
56; CHECK-LABEL: f6:
57; CHECK: mvc 0(256,%r2), 0(%r3)
58; CHECK: br %r14
59  call void @llvm.memcpy.p0i8.p0i8.i64(i8 *%dest, i8 *%src, i64 256, i32 1,
60                                       i1 false)
61  ret void
62}
63
64; 257 bytes is too big for a single MVC.  For now expect none, so that
65; the test fails and gets updated when large copies are implemented.
66define void @f7(i8 *%dest, i8 *%src) {
67; CHECK-LABEL: f7:
68; CHECK-NOT: mvc
69; CHECK: br %r14
70  call void @llvm.memcpy.p0i8.p0i8.i32(i8 *%dest, i8 *%src, i32 257, i32 1,
71                                       i1 false)
72  ret void
73}
74
75define void @f8(i8 *%dest, i8 *%src) {
76; CHECK-LABEL: f8:
77; CHECK-NOT: mvc
78; CHECK: br %r14
79  call void @llvm.memcpy.p0i8.p0i8.i64(i8 *%dest, i8 *%src, i64 257, i32 1,
80                                       i1 false)
81  ret void
82}
83