Skip to content
This repository has been archived by the owner on Feb 5, 2019. It is now read-only.

Commit

Permalink
[SROA] Further test cleanup and add a test for the actual propagation of
Browse files Browse the repository at this point in the history
the nonnull attribute distinct from rewriting it into an assume.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@306358 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
chandlerc committed Jun 27, 2017
1 parent 8ff688d commit 156cc49
Showing 1 changed file with 25 additions and 4 deletions.
29 changes: 25 additions & 4 deletions test/Transforms/SROA/preserve-nonnull.ll
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,31 @@
; Make sure that SROA doesn't lose nonnull metadata
; on loads from allocas that get optimized out.

define float* @yummy_nonnull(float** %arg) {
; CHECK-LABEL: define float* @yummy_nonnull(
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1)

; Check that we do basic propagation of nonnull when rewriting.
define i8* @propagate_nonnull(i32* %v) {
; CHECK-LABEL: define i8* @propagate_nonnull(
; CHECK-NEXT: entry:
; CHECK-NEXT: %[[A:.*]] = alloca i8*
; CHECK-NEXT: %[[V_CAST:.*]] = bitcast i32* %v to i8*
; CHECK-NEXT: store i8* %[[V_CAST]], i8** %[[A]]
; CHECK-NEXT: %[[LOAD:.*]] = load volatile i8*, i8** %[[A]], !nonnull !0
; CHECK-NEXT: ret i8* %[[LOAD]]
entry:
%a = alloca [2 x i8*]
%a.gep0 = getelementptr [2 x i8*], [2 x i8*]* %a, i32 0, i32 0
%a.gep1 = getelementptr [2 x i8*], [2 x i8*]* %a, i32 0, i32 1
%a.gep0.cast = bitcast i8** %a.gep0 to i32**
%a.gep1.cast = bitcast i8** %a.gep1 to i32**
store i32* %v, i32** %a.gep1.cast
store i32* null, i32** %a.gep0.cast
%load = load volatile i8*, i8** %a.gep1, !nonnull !0
ret i8* %load
}

define float* @turn_nonnull_into_assume(float** %arg) {
; CHECK-LABEL: define float* @turn_nonnull_into_assume(
; CHECK-NEXT: entry:
; CHECK-NEXT: %[[RETURN:.*]] = load float*, float** %arg, align 8
; CHECK-NEXT: %[[ASSUME:.*]] = icmp ne float* %[[RETURN]], null
Expand All @@ -19,6 +42,4 @@ entry:
ret float* %ret
}

declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1)

!0 = !{}

0 comments on commit 156cc49

Please sign in to comment.