summaryrefslogtreecommitdiffstats
path: root/llvm/test/Verifier/element-wise-atomic-memory-intrinsics.ll
diff options
context:
space:
mode:
authorDaniel Neilson <dneilson@azul.com>2017-07-12 21:57:23 +0000
committerDaniel Neilson <dneilson@azul.com>2017-07-12 21:57:23 +0000
commit965613ef1b07ed44614ef93dc319f2c14170dff4 (patch)
treec3b00ba52768e7c54f8722c3982b746746326148 /llvm/test/Verifier/element-wise-atomic-memory-intrinsics.ll
parentc0402c6916709f7982ca171075cc47b2f0cb6bad (diff)
downloadbcm5719-llvm-965613ef1b07ed44614ef93dc319f2c14170dff4.tar.gz
bcm5719-llvm-965613ef1b07ed44614ef93dc319f2c14170dff4.zip
Add element atomic memset intrinsic
Summary: Continuing the work from https://reviews.llvm.org/D33240, this change introduces an element unordered-atomic memset intrinsic. This intrinsic is essentially memset with the implementation requirement that all stores used for the assignment are done with unordered-atomic stores of a given element size. Reviewers: eli.friedman, reames, mkazantsev, skatkov Reviewed By: reames Subscribers: jfb, dschuff, sbc100, jgravelle-google, aheejin, efriedma, llvm-commits Differential Revision: https://reviews.llvm.org/D34885 llvm-svn: 307854
Diffstat (limited to 'llvm/test/Verifier/element-wise-atomic-memory-intrinsics.ll')
-rw-r--r--llvm/test/Verifier/element-wise-atomic-memory-intrinsics.ll18
1 files changed, 18 insertions, 0 deletions
diff --git a/llvm/test/Verifier/element-wise-atomic-memory-intrinsics.ll b/llvm/test/Verifier/element-wise-atomic-memory-intrinsics.ll
index a92b077049f..81c8ba16b97 100644
--- a/llvm/test/Verifier/element-wise-atomic-memory-intrinsics.ll
+++ b/llvm/test/Verifier/element-wise-atomic-memory-intrinsics.ll
@@ -46,4 +46,22 @@ define void @test_memmove(i8* %P, i8* %Q, i32 %A, i32 %E) {
}
declare void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32) nounwind
+define void @test_memset(i8* %P, i8 %V, i32 %A, i32 %E) {
+ ; CHECK: element size of the element-wise unordered atomic memory intrinsic must be a constant int
+ call void @llvm.memset.element.unordered.atomic.p0i8.i32(i8* align 4 %P, i8 %V, i32 1, i32 %E)
+ ; CHECK: element size of the element-wise atomic memory intrinsic must be a power of 2
+ call void @llvm.memset.element.unordered.atomic.p0i8.i32(i8* align 4 %P, i8 %V, i32 1, i32 3)
+
+ ; CHECK: constant length must be a multiple of the element size in the element-wise atomic memory intrinsic
+ call void @llvm.memset.element.unordered.atomic.p0i8.i32(i8* align 4 %P, i8 %V, i32 7, i32 4)
+
+ ; CHECK: incorrect alignment of the destination argument
+ call void @llvm.memset.element.unordered.atomic.p0i8.i32(i8* %P, i8 %V, i32 1, i32 1)
+ ; CHECK: incorrect alignment of the destination argument
+ call void @llvm.memset.element.unordered.atomic.p0i8.i32(i8* align 1 %P, i8 %V, i32 4, i32 4)
+
+ ret void
+}
+declare void @llvm.memset.element.unordered.atomic.p0i8.i32(i8* nocapture, i8, i32, i32) nounwind
+
; CHECK: input module is broken!
OpenPOWER on IntegriCloud