1; RUN: not opt -verify < %s 2>&1 | FileCheck %s
2
3define void @test_memcpy(i8* %P, i8* %Q, i32 %A, i32 %E) {
4  ; CHECK: element size of the element-wise unordered atomic memory intrinsic must be a constant int
5  call void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* align 4 %Q, i32 1, i32 %E)
6  ; CHECK: element size of the element-wise atomic memory intrinsic must be a power of 2
7  call void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* align 4 %Q, i32 1, i32 3)
8
9  ; CHECK: constant length must be a multiple of the element size in the element-wise atomic memory intrinsic
10  call void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* align 4 %Q, i32 7, i32 4)
11
12  ; CHECK: incorrect alignment of the destination argument
13  call void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i32(i8* %P, i8* align 4 %Q, i32 1, i32 1)
14  ; CHECK: incorrect alignment of the destination argument
15  call void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i32(i8* align 1 %P, i8* align 4 %Q, i32 4, i32 4)
16
17  ; CHECK: incorrect alignment of the source argument
18  call void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* %Q, i32 1, i32 1)
19  ; CHECK: incorrect alignment of the source argument
20  call void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* align 1 %Q, i32 4, i32 4)
21
22  ret void
23}
24declare void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32) nounwind
25
26define void @test_memmove(i8* %P, i8* %Q, i32 %A, i32 %E) {
27  ; CHECK: element size of the element-wise unordered atomic memory intrinsic must be a constant int
28  call void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* align 4 %Q, i32 1, i32 %E)
29  ; CHECK: element size of the element-wise atomic memory intrinsic must be a power of 2
30  call void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* align 4 %Q, i32 1, i32 3)
31
32  ; CHECK: constant length must be a multiple of the element size in the element-wise atomic memory intrinsic
33  call void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* align 4 %Q, i32 7, i32 4)
34
35  ; CHECK: incorrect alignment of the destination argument
36  call void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i32(i8* %P, i8* align 4 %Q, i32 1, i32 1)
37  ; CHECK: incorrect alignment of the destination argument
38  call void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i32(i8* align 1 %P, i8* align 4 %Q, i32 4, i32 4)
39
40  ; CHECK: incorrect alignment of the source argument
41  call void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* %Q, i32 1, i32 1)
42  ; CHECK: incorrect alignment of the source argument
43  call void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* align 1 %Q, i32 4, i32 4)
44
45  ret void
46}
47declare void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32) nounwind
48
49define void @test_memset(i8* %P, i8 %V, i32 %A, i32 %E) {
50  ; CHECK: element size of the element-wise unordered atomic memory intrinsic must be a constant int
51  call void @llvm.memset.element.unordered.atomic.p0i8.i32(i8* align 4 %P, i8 %V, i32 1, i32 %E)
52  ; CHECK: element size of the element-wise atomic memory intrinsic must be a power of 2
53  call void @llvm.memset.element.unordered.atomic.p0i8.i32(i8* align 4 %P, i8 %V, i32 1, i32 3)
54
55  ; CHECK: constant length must be a multiple of the element size in the element-wise atomic memory intrinsic
56  call void @llvm.memset.element.unordered.atomic.p0i8.i32(i8* align 4 %P, i8 %V, i32 7, i32 4)
57
58  ; CHECK: incorrect alignment of the destination argument
59  call void @llvm.memset.element.unordered.atomic.p0i8.i32(i8* %P, i8 %V, i32 1, i32 1)
60  ; CHECK: incorrect alignment of the destination argument
61  call void @llvm.memset.element.unordered.atomic.p0i8.i32(i8* align 1 %P, i8 %V, i32 4, i32 4)
62
63  ret void
64}
65declare void @llvm.memset.element.unordered.atomic.p0i8.i32(i8* nocapture, i8, i32, i32) nounwind
66
67; CHECK: input module is broken!
68