diff options
Diffstat (limited to 'llvm/test/Transforms/FunctionAttrs/nonnull.ll')
| -rw-r--r-- | llvm/test/Transforms/FunctionAttrs/nonnull.ll | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/llvm/test/Transforms/FunctionAttrs/nonnull.ll b/llvm/test/Transforms/FunctionAttrs/nonnull.ll index 07c40e7d8ef..fb62e4aafac 100644 --- a/llvm/test/Transforms/FunctionAttrs/nonnull.ll +++ b/llvm/test/Transforms/FunctionAttrs/nonnull.ll @@ -79,9 +79,10 @@ define i8* @test5(i1 %c) { } ; Local analysis, but going through a self recursive phi -define i8* @test6() { +; ATTRIBUTOR: Function Attrs: noreturn +; ATTRIBUTOR: define noalias nonnull align 536870912 dereferenceable(4294967295) i8* @test6a() +define i8* @test6a() { entry: -; BOTH: define nonnull i8* @test6 %ret = call i8* @ret_nonnull() br label %loop loop: @@ -91,6 +92,18 @@ exit: ret i8* %phi } +; ATTRIBUTOR: define nonnull i8* @test6b(i1 %c) +define i8* @test6b(i1 %c) { +entry: + %ret = call i8* @ret_nonnull() + br label %loop +loop: + %phi = phi i8* [%ret, %entry], [%phi, %loop] + br i1 %c, label %loop, label %exit +exit: + ret i8* %phi +} + ; BOTH: define i8* @test7 define i8* @test7(i8* %a) { %b = getelementptr inbounds i8, i8* %a, i64 0 @@ -590,7 +603,7 @@ declare void @h(i32*) willreturn nounwind declare i32 @g(i32*) willreturn nounwind define i32 @nonnull_exec_ctx_1(i32* %a, i32 %b) { ; FNATTR-LABEL: define {{[^@]+}}@nonnull_exec_ctx_1 -; FNATTR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #3 +; FNATTR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) ; FNATTR-NEXT: en: ; FNATTR-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B:%.*]], 0 ; FNATTR-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]] @@ -605,7 +618,7 @@ define i32 @nonnull_exec_ctx_1(i32* %a, i32 %b) { ; FNATTR-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]] ; ; ATTRIBUTOR-LABEL: define {{[^@]+}}@nonnull_exec_ctx_1 -; ATTRIBUTOR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #5 +; ATTRIBUTOR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) ; ATTRIBUTOR-NEXT: en: ; ATTRIBUTOR-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B:%.*]], 0 ; ATTRIBUTOR-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]] @@ -637,7 +650,7 @@ hd: define i32 @nonnull_exec_ctx_1b(i32* %a, i32 %b) { ; FNATTR-LABEL: define {{[^@]+}}@nonnull_exec_ctx_1b -; FNATTR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #3 +; FNATTR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) ; FNATTR-NEXT: en: ; FNATTR-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B:%.*]], 0 ; FNATTR-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]] @@ -654,7 +667,7 @@ define i32 @nonnull_exec_ctx_1b(i32* %a, i32 %b) { ; FNATTR-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]] ; ; ATTRIBUTOR-LABEL: define {{[^@]+}}@nonnull_exec_ctx_1b -; ATTRIBUTOR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #5 +; ATTRIBUTOR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) ; ATTRIBUTOR-NEXT: en: ; ATTRIBUTOR-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B:%.*]], 0 ; ATTRIBUTOR-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]] @@ -691,7 +704,7 @@ hd2: define i32 @nonnull_exec_ctx_2(i32* %a, i32 %b) willreturn nounwind { ; FNATTR-LABEL: define {{[^@]+}}@nonnull_exec_ctx_2 -; FNATTR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #2 +; FNATTR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) ; FNATTR-NEXT: en: ; FNATTR-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B:%.*]], 0 ; FNATTR-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]] @@ -706,7 +719,7 @@ define i32 @nonnull_exec_ctx_2(i32* %a, i32 %b) willreturn nounwind { ; FNATTR-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]] ; ; ATTRIBUTOR-LABEL: define {{[^@]+}}@nonnull_exec_ctx_2 -; ATTRIBUTOR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #3 +; ATTRIBUTOR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) ; ATTRIBUTOR-NEXT: en: ; ATTRIBUTOR-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B:%.*]], 0 ; ATTRIBUTOR-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]] @@ -738,7 +751,7 @@ hd: define i32 @nonnull_exec_ctx_2b(i32* %a, i32 %b) willreturn nounwind { ; FNATTR-LABEL: define {{[^@]+}}@nonnull_exec_ctx_2b -; FNATTR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #2 +; FNATTR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) ; FNATTR-NEXT: en: ; FNATTR-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B:%.*]], 0 ; FNATTR-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]] @@ -755,7 +768,7 @@ define i32 @nonnull_exec_ctx_2b(i32* %a, i32 %b) willreturn nounwind { ; FNATTR-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]] ; ; ATTRIBUTOR-LABEL: define {{[^@]+}}@nonnull_exec_ctx_2b -; ATTRIBUTOR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #3 +; ATTRIBUTOR-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) ; ATTRIBUTOR-NEXT: en: ; ATTRIBUTOR-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B:%.*]], 0 ; ATTRIBUTOR-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]] |

