diff options
Diffstat (limited to 'llvm/test/Transforms/CorrelatedValuePropagation/pointer.ll')
-rw-r--r-- | llvm/test/Transforms/CorrelatedValuePropagation/pointer.ll | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/llvm/test/Transforms/CorrelatedValuePropagation/pointer.ll b/llvm/test/Transforms/CorrelatedValuePropagation/pointer.ll new file mode 100644 index 00000000000..9242d7b8aff --- /dev/null +++ b/llvm/test/Transforms/CorrelatedValuePropagation/pointer.ll @@ -0,0 +1,35 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py +; RUN: opt -correlated-propagation -S -o - %s | FileCheck %s + +; Testcase that checks that we don't end in a neverending recursion resulting in +; a segmentation fault. The checks below verify that nothing is changed. + +declare dso_local i16* @f2(i16* readnone returned) local_unnamed_addr + +define dso_local void @f3() local_unnamed_addr { +; CHECK-LABEL: @f3( +; CHECK-NEXT: entry: +; CHECK-NEXT: br label [[FOR_COND:%.*]] +; CHECK: for.end: +; CHECK-NEXT: [[CALL6:%.*]] = call i16* @f2(i16* [[CALL6]]) +; CHECK-NEXT: br i1 false, label [[FOR_COND]], label [[FOR_COND3:%.*]] +; CHECK: for.cond: +; CHECK-NEXT: [[C_0:%.*]] = phi i16* [ undef, [[ENTRY:%.*]] ], [ [[CALL6]], [[FOR_END:%.*]] ] +; CHECK-NEXT: br label [[FOR_COND3]] +; CHECK: for.cond3: +; CHECK-NEXT: ret void +; +entry: + br label %for.cond + +for.end: + %call6 = call i16* @f2(i16* %call6) + br i1 false, label %for.cond, label %for.cond3 + +for.cond: + %c.0 = phi i16* [ undef, %entry ], [ %call6, %for.end ] + br label %for.cond3 + +for.cond3: + ret void +} |