llvm/test/CodeGen/AArch64/tailcall_misched_graph.ll: s/REQUIRE/REQUIRES/
[oota-llvm.git] / test / CodeGen / PowerPC / memcpy-vec.ll
1 ; RUN: llc -mcpu=pwr7 < %s | FileCheck %s -check-prefix=PWR7
2 ; RUN: llc -mcpu=pwr8 < %s | FileCheck %s -check-prefix=PWR8
3 ; RUN: llc -mcpu=a2q < %s | FileCheck %s -check-prefix=A2Q
4 target datalayout = "E-m:e-i64:64-n32:64"
5 target triple = "powerpc64-unknown-linux-gnu"
6
7 ; Function Attrs: nounwind
8 define void @foo1(double* nocapture %x, double* nocapture readonly %y) #0 {
9 entry:
10   %0 = bitcast double* %x to i8*
11   %1 = bitcast double* %y to i8*
12   tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 32, i32 8, i1 false)
13   ret void
14
15 ; PWR7-LABEL: @foo1
16 ; PWR7-NOT: bl memcpy
17 ; PWR7: ld {{[0-9]+}}, {{[0-9]+}}(4)
18 ; PWR7: std {{[0-9]+}}, {{[0-9]+}}(3)
19 ; PWR7: blr
20
21 ; PWR8-LABEL: @foo1
22 ; PWR8: lxvw4x
23 ; PWR8: stxvw4x
24 ; PWR8: blr
25
26 ; A2Q-LABEL: @foo1
27 ; A2Q-NOT: bl memcpy
28 ; A2Q: ld {{[0-9]+}}, {{[0-9]+}}(4)
29 ; A2Q: std {{[0-9]+}}, {{[0-9]+}}(3)
30 ; A2Q: blr
31 }
32
33 ; Function Attrs: nounwind
34 declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #0
35
36 ; Function Attrs: nounwind
37 define void @foo2(double* nocapture %x, double* nocapture readonly %y) #0 {
38 entry:
39   %0 = bitcast double* %x to i8*
40   %1 = bitcast double* %y to i8*
41   tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 128, i32 8, i1 false)
42   ret void
43
44 ; PWR7-LABEL: @foo2
45 ; PWR7: bl memcpy
46 ; PWR7: blr
47
48 ; PWR8-LABEL: @foo2
49 ; PWR8: lxvw4x
50 ; PWR8: stxvw4x
51 ; PWR8: blr
52
53 ; A2Q-LABEL: @foo2
54 ; A2Q-NOT: bl memcpy
55 ; A2Q: ld {{[0-9]+}}, {{[0-9]+}}(4)
56 ; A2Q: std {{[0-9]+}}, {{[0-9]+}}(3)
57 ; A2Q: blr
58 }
59
60 ; Function Attrs: nounwind
61 define void @bar1(double* nocapture %x) #0 {
62 entry:
63   %0 = bitcast double* %x to i8*
64   tail call void @llvm.memset.p0i8.i64(i8* %0, i8 0, i64 128, i32 8, i1 false)
65   ret void
66
67 ; PWR7-LABEL: @bar1
68 ; PWR7-NOT: bl memset
69 ; PWR7: stxvw4x
70 ; PWR7: blr
71
72 ; PWR8-LABEL: @bar1
73 ; PWR8-NOT: bl memset
74 ; PWR8: stxvw4x
75 ; PWR8: blr
76
77 ; A2Q-LABEL: @bar1
78 ; A2Q-NOT: bl memset
79 ; A2Q: std {{[0-9]+}}, {{[0-9]+}}(3)
80 ; A2Q: blr
81 }
82
83 ; Function Attrs: nounwind
84 define void @bar2(double* nocapture %x) #0 {
85 entry:
86   %0 = bitcast double* %x to i8*
87   tail call void @llvm.memset.p0i8.i64(i8* %0, i8 0, i64 128, i32 32, i1 false)
88   ret void
89
90 ; PWR7-LABEL: @bar2
91 ; PWR7-NOT: bl memset
92 ; PWR7: stxvw4x
93 ; PWR7: blr
94
95 ; PWR8-LABEL: @bar2
96 ; PWR8-NOT: bl memset
97 ; PWR8: stxvw4x
98 ; PWR8: blr
99
100 ; A2Q-LABEL: @bar2
101 ; A2Q-NOT: bl memset
102 ; A2Q: qvstfdx
103 ; A2Q: blr
104 }
105
106 ; Function Attrs: nounwind
107 declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) #0
108
109 attributes #0 = { nounwind }
110