-
Notifications
You must be signed in to change notification settings - Fork 11.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Lint] Convert tests to opaque pointers (NFC)
- Loading branch information
Showing
7 changed files
with
90 additions
and
99 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,61 +1,56 @@ | ||
; RUN: opt -passes=lint -disable-output < %s 2>&1 | FileCheck %s | ||
|
||
declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i1) nounwind argmemonly | ||
declare void @llvm.memcpy.p0.p0.i32(ptr nocapture writeonly, ptr nocapture readonly, i32, i1) nounwind argmemonly | ||
|
||
define void @f_memcpy() { | ||
entry: | ||
%dst = alloca [1000 x i8], align 2 | ||
%src = alloca [1000 x i8], align 4 | ||
%dst.i8 = bitcast [1000 x i8]* %dst to i8* | ||
%src.i8 = bitcast [1000 x i8]* %src to i8* | ||
; CHECK: Undefined behavior: Memory reference address is misaligned | ||
; CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 8 %dst.i8, i8* align 4 %src.i8, i32 200, i1 false) | ||
call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 8 %dst.i8, i8* align 4 %src.i8, i32 200, i1 false) | ||
; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 8 %dst, ptr align 4 %src, i32 200, i1 false) | ||
call void @llvm.memcpy.p0.p0.i32(ptr align 8 %dst, ptr align 4 %src, i32 200, i1 false) | ||
; CHECK: Undefined behavior: Memory reference address is misaligned | ||
; CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 2 %dst.i8, i8* align 8 %src.i8, i32 200, i1 false) | ||
call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 2 %dst.i8, i8* align 8 %src.i8, i32 200, i1 false) | ||
; CHECK-NOT: @llvm.memcpy.p0i8.p0i8.i32 | ||
call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 1 %dst.i8, i8* align 4 %src.i8, i32 200, i1 false) | ||
call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 2 %dst.i8, i8* align 2 %src.i8, i32 200, i1 false) | ||
call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 2 %dst.i8, i8* align 4 %src.i8, i32 200, i1 false) | ||
; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 2 %dst, ptr align 8 %src, i32 200, i1 false) | ||
call void @llvm.memcpy.p0.p0.i32(ptr align 2 %dst, ptr align 8 %src, i32 200, i1 false) | ||
; CHECK-NOT: @llvm.memcpy.p0.p0.i32 | ||
call void @llvm.memcpy.p0.p0.i32(ptr align 1 %dst, ptr align 4 %src, i32 200, i1 false) | ||
call void @llvm.memcpy.p0.p0.i32(ptr align 2 %dst, ptr align 2 %src, i32 200, i1 false) | ||
call void @llvm.memcpy.p0.p0.i32(ptr align 2 %dst, ptr align 4 %src, i32 200, i1 false) | ||
|
||
ret void | ||
} | ||
|
||
declare void @llvm.memmove.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i1) nounwind argmemonly | ||
declare void @llvm.memmove.p0.p0.i32(ptr nocapture writeonly, ptr nocapture readonly, i32, i1) nounwind argmemonly | ||
|
||
define void @f_memmove() { | ||
entry: | ||
%dst = alloca [1000 x i8], align 2 | ||
%src = alloca [1000 x i8], align 4 | ||
%dst.i8 = bitcast [1000 x i8]* %dst to i8* | ||
%src.i8 = bitcast [1000 x i8]* %src to i8* | ||
; CHECK: Undefined behavior: Memory reference address is misaligned | ||
; CHECK-NEXT: call void @llvm.memmove.p0i8.p0i8.i32(i8* align 4 %dst.i8, i8* align 4 %src.i8, i32 200, i1 false) | ||
call void @llvm.memmove.p0i8.p0i8.i32(i8* align 4 %dst.i8, i8* align 4 %src.i8, i32 200, i1 false) | ||
; CHECK-NEXT: call void @llvm.memmove.p0.p0.i32(ptr align 4 %dst, ptr align 4 %src, i32 200, i1 false) | ||
call void @llvm.memmove.p0.p0.i32(ptr align 4 %dst, ptr align 4 %src, i32 200, i1 false) | ||
; CHECK: Undefined behavior: Memory reference address is misaligned | ||
; CHECK-NEXT: call void @llvm.memmove.p0i8.p0i8.i32(i8* align 2 %dst.i8, i8* align 8 %src.i8, i32 200, i1 false) | ||
call void @llvm.memmove.p0i8.p0i8.i32(i8* align 2 %dst.i8, i8* align 8 %src.i8, i32 200, i1 false) | ||
; CHECK-NOT: @llvm.memmove.p0i8.p0i8.i32 | ||
call void @llvm.memmove.p0i8.p0i8.i32(i8* align 1 %dst.i8, i8* align 4 %src.i8, i32 200, i1 false) | ||
call void @llvm.memmove.p0i8.p0i8.i32(i8* align 2 %dst.i8, i8* align 2 %src.i8, i32 200, i1 false) | ||
call void @llvm.memmove.p0i8.p0i8.i32(i8* align 2 %dst.i8, i8* align 4 %src.i8, i32 200, i1 false) | ||
; CHECK-NEXT: call void @llvm.memmove.p0.p0.i32(ptr align 2 %dst, ptr align 8 %src, i32 200, i1 false) | ||
call void @llvm.memmove.p0.p0.i32(ptr align 2 %dst, ptr align 8 %src, i32 200, i1 false) | ||
; CHECK-NOT: @llvm.memmove.p0.p0.i32 | ||
call void @llvm.memmove.p0.p0.i32(ptr align 1 %dst, ptr align 4 %src, i32 200, i1 false) | ||
call void @llvm.memmove.p0.p0.i32(ptr align 2 %dst, ptr align 2 %src, i32 200, i1 false) | ||
call void @llvm.memmove.p0.p0.i32(ptr align 2 %dst, ptr align 4 %src, i32 200, i1 false) | ||
|
||
ret void | ||
} | ||
|
||
declare void @llvm.memset.p0i8.i32(i8* nocapture writeonly, i8, i32, i1) nounwind argmemonly | ||
declare void @llvm.memset.p0.i32(ptr nocapture writeonly, i8, i32, i1) nounwind argmemonly | ||
|
||
define void @f_memset() { | ||
entry: | ||
%dst = alloca [1000 x i8], align 2 | ||
%dst.i8 = bitcast [1000 x i8]* %dst to i8* | ||
; CHECK: Undefined behavior: Memory reference address is misaligned | ||
; CHECK-NEXT: call void @llvm.memset.p0i8.i32(i8* align 4 %dst.i8, i8 55, i32 200, i1 false) | ||
call void @llvm.memset.p0i8.i32(i8* align 4 %dst.i8, i8 55, i32 200, i1 false) | ||
; CHECK-NOT: @llvm.memset.p0i8.i32 | ||
call void @llvm.memset.p0i8.i32(i8* align 1 %dst.i8, i8 55, i32 200, i1 false) | ||
call void @llvm.memset.p0i8.i32(i8* align 2 %dst.i8, i8 55, i32 200, i1 false) | ||
; CHECK-NEXT: call void @llvm.memset.p0.i32(ptr align 4 %dst, i8 55, i32 200, i1 false) | ||
call void @llvm.memset.p0.i32(ptr align 4 %dst, i8 55, i32 200, i1 false) | ||
; CHECK-NOT: @llvm.memset.p0.i32 | ||
call void @llvm.memset.p0.i32(ptr align 1 %dst, i8 55, i32 200, i1 false) | ||
call void @llvm.memset.p0.i32(ptr align 2 %dst, i8 55, i32 200, i1 false) | ||
|
||
ret void | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,40 +1,40 @@ | ||
; RUN: opt < %s -passes=lint -disable-output 2>&1 | FileCheck %s | ||
|
||
declare void @f1(i8* noalias readonly, i8*) | ||
declare void @f1(ptr noalias readonly, ptr) | ||
|
||
define void @f2(i8* %a) { | ||
define void @f2(ptr %a) { | ||
entry: | ||
call void @f1(i8* %a, i8* %a) | ||
call void @f1(ptr %a, ptr %a) | ||
ret void | ||
} | ||
|
||
; Lint should complain about us passing %a to both arguments, since the noalias | ||
; argument may depend on writes to the other. | ||
; CHECK: Unusual: noalias argument aliases another argument | ||
; CHECK-NEXT: call void @f1(i8* %a, i8* %a) | ||
; CHECK-NEXT: call void @f1(ptr %a, ptr %a) | ||
|
||
declare void @f3(i8* noalias, i8* readonly) | ||
declare void @f3(ptr noalias, ptr readonly) | ||
|
||
define void @f4(i8* %a) { | ||
define void @f4(ptr %a) { | ||
entry: | ||
call void @f3(i8* %a, i8* %a) | ||
call void @f3(ptr %a, ptr %a) | ||
ret void | ||
} | ||
|
||
; Lint should complain about us passing %a to both arguments, since writes to | ||
; the noalias argument may cause a dependency for the other. | ||
; CHECK: Unusual: noalias argument aliases another argument | ||
; CHECK-NEXT: call void @f3(i8* %a, i8* %a) | ||
; CHECK-NEXT: call void @f3(ptr %a, ptr %a) | ||
|
||
declare void @f5(i8* noalias readonly, i8* readonly) | ||
declare void @f5(ptr noalias readonly, ptr readonly) | ||
|
||
define void @f6(i8* %a) { | ||
define void @f6(ptr %a) { | ||
entry: | ||
call void @f5(i8* %a, i8* %a) | ||
call void @f5(ptr %a, ptr %a) | ||
ret void | ||
} | ||
|
||
; Lint should not complain about passing %a to both arguments even if one is | ||
; noalias, since they are both readonly and thus have no dependence. | ||
; CHECK-NOT: Unusual: noalias argument aliases another argument | ||
; CHECK-NOT: call void @f5(i8* %a, i8* %a) | ||
; CHECK-NOT: call void @f5(ptr %a, ptr %a) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.