[llvm] r306358 - [SROA] Further test cleanup and add a test for the actual propagation of

Chandler Carruth via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 26 20:08:45 PDT 2017


Author: chandlerc
Date: Mon Jun 26 20:08:45 2017
New Revision: 306358

URL: http://llvm.org/viewvc/llvm-project?rev=306358&view=rev
Log:
[SROA] Further test cleanup and add a test for the actual propagation of
the nonnull attribute distinct from rewriting it into an assume.

Modified:
    llvm/trunk/test/Transforms/SROA/preserve-nonnull.ll

Modified: llvm/trunk/test/Transforms/SROA/preserve-nonnull.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SROA/preserve-nonnull.ll?rev=306358&r1=306357&r2=306358&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/SROA/preserve-nonnull.ll (original)
+++ llvm/trunk/test/Transforms/SROA/preserve-nonnull.ll Mon Jun 26 20:08:45 2017
@@ -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
@@ -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 = !{}




More information about the llvm-commits mailing list