Skip to content

Commit fb45335

Browse files
committed
[InferFunctionAttrs] add more tests for derefenceable; NFC
llvm-svn: 365495
1 parent be20e36 commit fb45335

File tree

1 file changed

+51
-9
lines changed

1 file changed

+51
-9
lines changed

llvm/test/Transforms/InferFunctionAttrs/dereferenceable.ll

Lines changed: 51 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,20 @@ define void @gep0(i8* %unused, i8* %other, i8* %ptr) {
3838
}
3939

4040
; Order of accesses does not change computation.
41-
42-
define void @ordering(i8* %ptr) {
43-
; CHECK-LABEL: @ordering(i8* %ptr)
44-
%arrayidx2 = getelementptr i8, i8* %ptr, i64 2
45-
%t2 = load i8, i8* %arrayidx2
46-
%arrayidx1 = getelementptr i8, i8* %ptr, i64 1
47-
%arrayidx0 = getelementptr i8, i8* %ptr, i64 0
48-
%t0 = load i8, i8* %arrayidx0
49-
%t1 = load i8, i8* %arrayidx1
41+
; Multiple arguments may be dereferenceable.
42+
43+
define void @ordering(i8* %ptr1, i32* %ptr2) {
44+
; CHECK-LABEL: @ordering(i8* %ptr1, i32* %ptr2)
45+
%a20 = getelementptr i32, i32* %ptr2, i64 0
46+
%a12 = getelementptr i8, i8* %ptr1, i64 2
47+
%t12 = load i8, i8* %a12
48+
%a11 = getelementptr i8, i8* %ptr1, i64 1
49+
%t20 = load i32, i32* %a20
50+
%a10 = getelementptr i8, i8* %ptr1, i64 0
51+
%t10 = load i8, i8* %a10
52+
%t11 = load i8, i8* %a11
53+
%a21 = getelementptr i32, i32* %ptr2, i64 1
54+
%t21 = load i32, i32* %a21
5055
ret void
5156
}
5257

@@ -199,3 +204,40 @@ define void @better_bytes(i32* dereferenceable(100) %ptr) {
199204
ret void
200205
}
201206

207+
define void @bitcast(i32* %arg) {
208+
; CHECK-LABEL: @bitcast(i32* %arg)
209+
%ptr = bitcast i32* %arg to float*
210+
%arrayidx0 = getelementptr float, float* %ptr, i64 0
211+
%arrayidx1 = getelementptr float, float* %ptr, i64 1
212+
%t0 = load float, float* %arrayidx0
213+
%t1 = load float, float* %arrayidx1
214+
ret void
215+
}
216+
217+
define void @bitcast_different_sizes(double* %arg1, i8* %arg2) {
218+
; CHECK-LABEL: @bitcast_different_sizes(double* %arg1, i8* %arg2)
219+
%ptr1 = bitcast double* %arg1 to float*
220+
%a10 = getelementptr float, float* %ptr1, i64 0
221+
%a11 = getelementptr float, float* %ptr1, i64 1
222+
%a12 = getelementptr float, float* %ptr1, i64 2
223+
%ld10 = load float, float* %a10
224+
%ld11 = load float, float* %a11
225+
%ld12 = load float, float* %a12
226+
227+
%ptr2 = bitcast i8* %arg2 to i64*
228+
%a20 = getelementptr i64, i64* %ptr2, i64 0
229+
%a21 = getelementptr i64, i64* %ptr2, i64 1
230+
%ld20 = load i64, i64* %a20
231+
%ld21 = load i64, i64* %a21
232+
ret void
233+
}
234+
235+
define void @negative_offset(i32* %arg) {
236+
; CHECK-LABEL: @negative_offset(i32* %arg)
237+
%ptr = bitcast i32* %arg to float*
238+
%arrayidx0 = getelementptr float, float* %ptr, i64 0
239+
%arrayidx1 = getelementptr float, float* %ptr, i64 -1
240+
%t0 = load float, float* %arrayidx0
241+
%t1 = load float, float* %arrayidx1
242+
ret void
243+
}

0 commit comments

Comments
 (0)