1 ; RUN: not opt -verify < %s 2>&1 | FileCheck %s
3 define void @test_memcpy(i8* %P, i8* %Q, i32 %A, i32 %E) {
4 ; CHECK: immarg operand has non-immediate parameter
6 ; CHECK-NEXT: call void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* align 4 %Q, i32 1, i32 %E)
7 call void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* align 4 %Q, i32 1, i32 %E)
9 ; CHECK: element size of the element-wise atomic memory intrinsic must be a power of 2
10 call void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* align 4 %Q, i32 1, i32 3)
12 ; CHECK: constant length must be a multiple of the element size in the element-wise atomic memory intrinsic
13 call void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* align 4 %Q, i32 7, i32 4)
15 ; CHECK: incorrect alignment of the destination argument
16 call void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i32(i8* %P, i8* align 4 %Q, i32 1, i32 1)
17 ; CHECK: incorrect alignment of the destination argument
18 call void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i32(i8* align 1 %P, i8* align 4 %Q, i32 4, i32 4)
20 ; CHECK: incorrect alignment of the source argument
21 call void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* %Q, i32 1, i32 1)
22 ; CHECK: incorrect alignment of the source argument
23 call void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* align 1 %Q, i32 4, i32 4)
28 declare void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32) nounwind
30 define void @test_memmove(i8* %P, i8* %Q, i32 %A, i32 %E) {
31 ; CHECK: immarg operand has non-immediate parameter
33 ; CHECK-NEXT: call void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* align 4 %Q, i32 1, i32 %E)
34 call void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* align 4 %Q, i32 1, i32 %E)
36 ; CHECK: element size of the element-wise atomic memory intrinsic must be a power of 2
37 call void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* align 4 %Q, i32 1, i32 3)
39 ; CHECK: constant length must be a multiple of the element size in the element-wise atomic memory intrinsic
40 call void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* align 4 %Q, i32 7, i32 4)
42 ; CHECK: incorrect alignment of the destination argument
43 call void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i32(i8* %P, i8* align 4 %Q, i32 1, i32 1)
44 ; CHECK: incorrect alignment of the destination argument
45 call void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i32(i8* align 1 %P, i8* align 4 %Q, i32 4, i32 4)
47 ; CHECK: incorrect alignment of the source argument
48 call void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* %Q, i32 1, i32 1)
49 ; CHECK: incorrect alignment of the source argument
50 call void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i32(i8* align 4 %P, i8* align 1 %Q, i32 4, i32 4)
55 declare void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32) nounwind
57 define void @test_memset(i8* %P, i8 %V, i32 %A, i32 %E) {
58 ; CHECK: immarg operand has non-immediate parameter
60 ; CHECK: call void @llvm.memset.element.unordered.atomic.p0i8.i32(i8* align 4 %P, i8 %V, i32 1, i32 %E)
61 call void @llvm.memset.element.unordered.atomic.p0i8.i32(i8* align 4 %P, i8 %V, i32 1, i32 %E)
63 ; CHECK: element size of the element-wise atomic memory intrinsic must be a power of 2
64 call void @llvm.memset.element.unordered.atomic.p0i8.i32(i8* align 4 %P, i8 %V, i32 1, i32 3)
66 ; CHECK: constant length must be a multiple of the element size in the element-wise atomic memory intrinsic
67 call void @llvm.memset.element.unordered.atomic.p0i8.i32(i8* align 4 %P, i8 %V, i32 7, i32 4)
69 ; CHECK: incorrect alignment of the destination argument
70 call void @llvm.memset.element.unordered.atomic.p0i8.i32(i8* %P, i8 %V, i32 1, i32 1)
71 ; CHECK: incorrect alignment of the destination argument
72 call void @llvm.memset.element.unordered.atomic.p0i8.i32(i8* align 1 %P, i8 %V, i32 4, i32 4)
76 declare void @llvm.memset.element.unordered.atomic.p0i8.i32(i8* nocapture, i8, i32, i32) nounwind
78 ; CHECK: input module is broken!