[llvm] r340095 - [AST] Add tests for argmemonly calls [NFC]
Philip Reames via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 17 14:42:18 PDT 2018
Author: reames
Date: Fri Aug 17 14:42:18 2018
New Revision: 340095
URL: http://llvm.org/viewvc/llvm-project?rev=340095&view=rev
Log:
[AST] Add tests for argmemonly calls [NFC]
First step towards building a test set to rebase D50730 on top of. Starting with clone of memtransfer tests, more to come.
Added:
llvm/trunk/test/Analysis/AliasSet/argmemonly.ll
Added: llvm/trunk/test/Analysis/AliasSet/argmemonly.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/AliasSet/argmemonly.ll?rev=340095&view=auto
==============================================================================
--- llvm/trunk/test/Analysis/AliasSet/argmemonly.ll (added)
+++ llvm/trunk/test/Analysis/AliasSet/argmemonly.ll Fri Aug 17 14:42:18 2018
@@ -0,0 +1,130 @@
+; RUN: opt -basicaa -print-alias-sets -S -o - < %s 2>&1 | FileCheck %s
+
+ at s = global i8 1, align 1
+ at d = global i8 2, align 1
+
+; CHECK: Alias sets for function 'test1':
+; CHECK-NEXT: Alias Set Tracker: 3 alias sets for 2 pointer values.
+; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Pointers: (i8* %a, 1)
+; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 1] may alias, Mod/Ref
+; CHECK-NEXT: 1 Unknown instructions: call void @my_memcpy(i8* %d, i8* %s, i64 1)
+; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Pointers: (i8* %b, 1)
+define void @test1(i8* %s, i8* %d) {
+entry:
+ %a = alloca i8, align 1
+ %b = alloca i8, align 1
+ store i8 1, i8* %a, align 1
+ call void @my_memcpy(i8* %d, i8* %s, i64 1)
+ store i8 1, i8* %b, align 1
+ ret void
+}
+
+; CHECK: Alias sets for function 'test3':
+; CHECK-NEXT: Alias Set Tracker: 3 alias sets for 2 pointer values.
+; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Pointers: (i8* %a, 1)
+; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 1] may alias, Mod/Ref
+; CHECK-NEXT: Unknown instructions: call void @my_memmove(i8* %d, i8* %s, i64 1)
+
+; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Pointers: (i8* %b, 1)
+define void @test3(i8* %s, i8* %d) {
+entry:
+ %a = alloca i8, align 1
+ %b = alloca i8, align 1
+ store i8 1, i8* %a, align 1
+ call void @my_memmove(i8* %d, i8* %s, i64 1)
+ store i8 1, i8* %b, align 1
+ ret void
+}
+
+; CHECK: Alias sets for function 'test5':
+; CHECK-NEXT: Alias Set Tracker: 1 alias sets for 2 pointer values.
+; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 3] may alias, Mod/Ref Pointers: (i8* %a, 1), (i8* %b, 1)
+; CHECK-NEXT: 1 Unknown instructions: call void @my_memcpy(i8* %b, i8* %a, i64 1)
+define void @test5() {
+entry:
+ %a = alloca i8, align 1
+ %b = alloca i8, align 1
+ store i8 1, i8* %a, align 1
+ call void @my_memcpy(i8* %b, i8* %a, i64 1)
+ store i8 1, i8* %b, align 1
+ ret void
+}
+
+; CHECK: Alias sets for function 'test6':
+; CHECK-NEXT: Alias Set Tracker: 1 alias sets for 2 pointer values.
+; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 3] may alias, Mod/Ref Pointers: (i8* %a, 1), (i8* %b, 1)
+; CHECK-NEXT: 1 Unknown instructions: call void @my_memmove(i8* %b, i8* %a, i64 1)
+define void @test6() {
+entry:
+ %a = alloca i8, align 1
+ %b = alloca i8, align 1
+ store i8 1, i8* %a, align 1
+ call void @my_memmove(i8* %b, i8* %a, i64 1)
+ store i8 1, i8* %b, align 1
+ ret void
+}
+
+; CHECK: Alias sets for function 'test7':
+; CHECK-NEXT: Alias Set Tracker: 1 alias sets for 2 pointer values.
+; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 3] may alias, Mod/Ref Pointers: (i8* %a, 1), (i8* %b, 1)
+; CHECK-NEXT: 2 Unknown instructions: call void @my_memcpy(i8* %b, i8* %a, i64 1), call void @my_memcpy(i8* %a, i8* %b, i64 1)
+
+define void @test7() {
+entry:
+ %a = alloca i8, align 1
+ %b = alloca i8, align 1
+ store i8 1, i8* %a, align 1
+ call void @my_memcpy(i8* %b, i8* %a, i64 1)
+ call void @my_memcpy(i8* %a, i8* %b, i64 1)
+ store i8 1, i8* %b, align 1
+ ret void
+}
+
+; CHECK: Alias sets for function 'test_memset1':
+; CHECK-NEXT: Alias Set Tracker: 1 alias sets for 0 pointer values.
+; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 1] may alias, Mod/Ref
+; CHECK-NEXT: 1 Unknown instructions: call void @my_memset(i8* %a, i8 0, i64 1)
+define void @test_memset1() {
+entry:
+ %a = alloca i8, align 1
+ call void @my_memset(i8* %a, i8 0, i64 1)
+ ret void
+}
+
+; CHECK: Alias sets for function 'test_memset2':
+; CHECK-NEXT: Alias Set Tracker: 1 alias sets for 0 pointer values.
+; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 1] may alias, Mod/Ref
+; CHECK-NEXT: 1 Unknown instructions: call void @my_memset(i8* %a, i8 0, i64 1)
+define void @test_memset2(i8* %a) {
+entry:
+ call void @my_memset(i8* %a, i8 0, i64 1)
+ ret void
+}
+
+; CHECK: Alias sets for function 'test_memset3':
+; CHECK-NEXT: Alias Set Tracker: 1 alias sets for 0 pointer values.
+; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 1] may alias, Mod/Ref
+; CHECK-NEXT: 2 Unknown instructions: call void @my_memset(i8* %a, i8 0, i64 1), call void @my_memset(i8* %b, i8 0, i64 1)
+define void @test_memset3(i8* %a, i8* %b) {
+entry:
+ call void @my_memset(i8* %a, i8 0, i64 1)
+ call void @my_memset(i8* %b, i8 0, i64 1)
+ ret void
+}
+
+; CHECK: Alias sets for function 'test_memset4':
+; CHECK-NEXT: Alias Set Tracker: 2 alias sets for 0 pointer values.
+; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 1] may alias, Mod/Ref
+; CHECK-NEXT: 1 Unknown instructions: call void @my_memset(i8* %a, i8 0, i64 1)
+; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 1] may alias, Mod/Ref
+; CHECK-NEXT: 1 Unknown instructions: call void @my_memset(i8* %b, i8 0, i64 1)
+define void @test_memset4(i8* noalias %a, i8* noalias %b) {
+entry:
+ call void @my_memset(i8* %a, i8 0, i64 1)
+ call void @my_memset(i8* %b, i8 0, i64 1)
+ ret void
+}
+
+declare void @my_memset(i8* nocapture writeonly, i8, i64) argmemonly
+declare void @my_memcpy(i8* nocapture writeonly, i8* nocapture readonly, i64) argmemonly
+declare void @my_memmove(i8* nocapture, i8* nocapture readonly, i64) argmemonly
More information about the llvm-commits
mailing list