Revert r354244 "[DAGCombiner] Eliminate dead stores to stack."
[llvm-complete.git] / test / Verifier / element-wise-atomic-memory-intrinsics.ll
blob81c8ba16b97d1f7209181bc19247d61804b5744b
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: 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)
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)
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)
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)
22   ret void
24 declare void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32) nounwind
26 define 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)
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)
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)
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)
45   ret void
47 declare void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32) nounwind
49 define 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)
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)
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)
63   ret void
65 declare void @llvm.memset.element.unordered.atomic.p0i8.i32(i8* nocapture, i8, i32, i32) nounwind
67 ; CHECK: input module is broken!