summaryrefslogtreecommitdiffstats
path: root/llvm/test/Analysis/AliasSet/memtransfer.ll
diff options
context:
space:
mode:
authorDaniel Neilson <dneilson@azul.com>2018-05-30 14:43:39 +0000
committerDaniel Neilson <dneilson@azul.com>2018-05-30 14:43:39 +0000
commit6b23fb764ecc6d355408c4974019a8b43efc220e (patch)
tree81705514c55a4065b1150d37edf7a0cd9efafec1 /llvm/test/Analysis/AliasSet/memtransfer.ll
parent52457d33b23c1657e0825f99bab3064e463d62e8 (diff)
downloadbcm5719-llvm-6b23fb764ecc6d355408c4974019a8b43efc220e.tar.gz
bcm5719-llvm-6b23fb764ecc6d355408c4974019a8b43efc220e.zip
[AliasSet] Teach the alias set how to handle atomic memcpy/memmove/memset
Summary: The atomic variants of the memcpy/memmove/memset intrinsics can be treated the same was as the regular forms, with respect to aliasing. Update the AliasSetTracker to treat the atomic forms the same was as the regular forms. llvm-svn: 333551
Diffstat (limited to 'llvm/test/Analysis/AliasSet/memtransfer.ll')
-rw-r--r--llvm/test/Analysis/AliasSet/memtransfer.ll77
1 files changed, 77 insertions, 0 deletions
diff --git a/llvm/test/Analysis/AliasSet/memtransfer.ll b/llvm/test/Analysis/AliasSet/memtransfer.ll
index c1940fcd8cd..0d7e601a8f5 100644
--- a/llvm/test/Analysis/AliasSet/memtransfer.ll
+++ b/llvm/test/Analysis/AliasSet/memtransfer.ll
@@ -19,6 +19,22 @@ entry:
ret void
}
+; CHECK: Alias sets for function 'test1_atomic':
+; CHECK: Alias Set Tracker: 3 alias sets for 4 pointer values.
+; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Pointers: (i8* %a, 1)
+; CHECK-NOT: 1 Unknown instructions
+; CHECK: AliasSet[0x{{[0-9a-f]+}}, 2] may alias, Mod/Ref Pointers: (i8* %s, 1), (i8* %d, 1)
+; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Pointers: (i8* %b, 1)
+define void @test1_atomic(i8* %s, i8* %d) {
+entry:
+ %a = alloca i8, align 1
+ %b = alloca i8, align 1
+ store atomic i8 1, i8* %a unordered, align 1
+ call void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i64(i8* align 1 %d, i8* align 1 %s, i64 1, i32 1)
+ store atomic i8 1, i8* %b unordered, align 1
+ ret void
+}
+
; CHECK: Alias sets for function 'test2':
; CHECK: Alias Set Tracker: 3 alias sets for 4 pointer values.
; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Pointers: (i8* %a, 1)
@@ -51,6 +67,22 @@ entry:
ret void
}
+; CHECK: Alias sets for function 'test3_atomic':
+; CHECK: Alias Set Tracker: 3 alias sets for 4 pointer values.
+; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Pointers: (i8* %a, 1)
+; CHECK-NOT: 1 Unknown instructions
+; CHECK: AliasSet[0x{{[0-9a-f]+}}, 2] may alias, Mod/Ref Pointers: (i8* %s, 1), (i8* %d, 1)
+; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Pointers: (i8* %b, 1)
+define void @test3_atomic(i8* %s, i8* %d) {
+entry:
+ %a = alloca i8, align 1
+ %b = alloca i8, align 1
+ store atomic i8 1, i8* %a unordered, align 1
+ call void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i64(i8* align 1 %d, i8* align 1 %s, i64 1, i32 1)
+ store atomic i8 1, i8* %b unordered, align 1
+ ret void
+}
+
; CHECK: Alias sets for function 'test4':
; CHECK: Alias Set Tracker: 3 alias sets for 4 pointer values.
; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Pointers: (i8* %a, 1)
@@ -81,6 +113,20 @@ entry:
ret void
}
+; CHECK: Alias sets for function 'test5_atomic':
+; CHECK: Alias Set Tracker: 2 alias sets for 2 pointer values.
+; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod/Ref Pointers: (i8* %a, 1)
+; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Pointers: (i8* %b, 1)
+define void @test5_atomic() {
+entry:
+ %a = alloca i8, align 1
+ %b = alloca i8, align 1
+ store atomic i8 1, i8* %a unordered, align 1
+ call void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i64(i8* align 1 %b, i8* align 1 %a, i64 1, i32 1)
+ store atomic i8 1, i8* %b unordered, align 1
+ ret void
+}
+
; CHECK: Alias sets for function 'test6':
; CHECK: Alias Set Tracker: 2 alias sets for 2 pointer values.
; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod/Ref Pointers: (i8* %a, 1)
@@ -95,6 +141,20 @@ entry:
ret void
}
+; CHECK: Alias sets for function 'test6_atomic':
+; CHECK: Alias Set Tracker: 2 alias sets for 2 pointer values.
+; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod/Ref Pointers: (i8* %a, 1)
+; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Pointers: (i8* %b, 1)
+define void @test6_atomic() {
+entry:
+ %a = alloca i8, align 1
+ %b = alloca i8, align 1
+ store atomic i8 1, i8* %a unordered, align 1
+ call void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i64(i8* align 1 %b, i8* align 1 %a, i64 1, i32 1)
+ store atomic i8 1, i8* %b unordered, align 1
+ ret void
+}
+
; CHECK: Alias sets for function 'test7':
; CHECK: Alias Set Tracker: 2 alias sets for 2 pointer values.
; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod/Ref Pointers: (i8* %a, 1)
@@ -110,5 +170,22 @@ entry:
ret void
}
+; CHECK: Alias sets for function 'test7_atomic':
+; CHECK: Alias Set Tracker: 2 alias sets for 2 pointer values.
+; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod/Ref Pointers: (i8* %a, 1)
+; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod/Ref Pointers: (i8* %b, 1)
+define void @test7_atomic() {
+entry:
+ %a = alloca i8, align 1
+ %b = alloca i8, align 1
+ store atomic i8 1, i8* %a unordered, align 1
+ call void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i64(i8* align 1 %b, i8* align 1 %a, i64 1, i32 1)
+ call void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i64(i8* align 1 %a, i8* align 1 %b, i64 1, i32 1)
+ store atomic i8 1, i8* %b unordered, align 1
+ ret void
+}
+
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1)
+declare void @llvm.memcpy.element.unordered.atomic.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32)
declare void @llvm.memmove.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i1)
+declare void @llvm.memmove.element.unordered.atomic.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32)
OpenPOWER on IntegriCloud