[ARM] Split large truncating MVE stores
[llvm-complete.git] / test / Verifier / element-wise-atomic-memory-intrinsics.ll
blobf22f8eecbcc0456cb39a3a5f48ca58e194de8c95
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
5   ; CHECK: i32 %E
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)
25   ret void
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
32   ; CHECK-NEXT: i32 %E
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)
52   ret void
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
59   ; CHECK: i32 %E
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)
74   ret void
76 declare void @llvm.memset.element.unordered.atomic.p0i8.i32(i8* nocapture, i8, i32, i32) nounwind
78 ; CHECK: input module is broken!