1; Test that patterns of transformations which disconnect a region of the call 2; graph mid-traversal and then invalidate it function correctly. 3; 4; RUN: opt -S -passes='cgscc(inline,function(simplifycfg))' < %s | FileCheck %s 5 6define internal void @test_scc_internal(i1 %flag) { 7; CHECK-NOT: @test_scc_internal 8entry: 9 br i1 %flag, label %then, label %else 10 11then: 12 call void @test_scc_internal(i1 false) 13 call void @test_scc_external() 14 br label %else 15 16else: 17 ret void 18} 19 20define void @test_scc_external() { 21; CHECK-LABEL: define void @test_scc_external() 22entry: 23 call void @test_scc_internal(i1 false) 24 ret void 25} 26 27define internal void @test_refscc_internal(i1 %flag, ptr %ptr) { 28; CHECK-NOT: @test_refscc_internal 29entry: 30 br i1 %flag, label %then, label %else 31 32then: 33 call void @test_refscc_internal(i1 false, ptr @test_refscc_external) 34 br label %else 35 36else: 37 ret void 38} 39 40define ptr @test_refscc_external() { 41; CHECK-LABEL: define ptr @test_refscc_external() 42entry: 43 br i1 true, label %then, label %else 44; CHECK-NEXT: entry: 45; CHECK-NEXT: ret ptr null 46; CHECK-NEXT: } 47; CHECK-NOT: @test_refscc_internal 48 49then: 50 ret ptr null 51 52else: 53 ret ptr @test_refscc_internal 54} 55