blob: 81c8ba16b97d1f7209181bc19247d61804b5744b [file] [log] [blame]
Igor Laevsky4f31e522016-12-29 14:31:07 +00001; RUN: not opt -verify < %s 2>&1 | FileCheck %s
2
Daniel Neilson3faabbb2017-06-16 14:43:59 +00003define 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)
Igor Laevsky4f31e522016-12-29 14:31:07 +00006 ; CHECK: element size of the element-wise atomic memory intrinsic must be a power of 2
Daniel Neilson3faabbb2017-06-16 14:43:59 +00007 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)
Igor Laevsky4f31e522016-12-29 14:31:07 +000011
12 ; CHECK: incorrect alignment of the destination argument
Daniel Neilson3faabbb2017-06-16 14:43:59 +000013 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)
Igor Laevsky4f31e522016-12-29 14:31:07 +000016
17 ; CHECK: incorrect alignment of the source argument
Daniel Neilson3faabbb2017-06-16 14:43:59 +000018 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)
Igor Laevsky4f31e522016-12-29 14:31:07 +000021
22 ret void
23}
Daniel Neilson3faabbb2017-06-16 14:43:59 +000024declare void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32) nounwind
Daniel Neilson57226ef2017-07-12 15:25:26 +000025
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
Daniel Neilson965613e2017-07-12 21:57:23 +000049define 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
Igor Laevsky4f31e522016-12-29 14:31:07 +000067; CHECK: input module is broken!