1; RUN: opt -S -loop-sink < %s | FileCheck %s 2; RUN: opt -S -verify-memoryssa -enable-mssa-in-legacy-loop-sink -loop-sink < %s | FileCheck %s 3; RUN: opt -S -aa-pipeline=basic-aa -passes=loop-sink < %s | FileCheck %s 4; RUN: opt -S -verify-memoryssa -enable-mssa-in-loop-sink -aa-pipeline=basic-aa -passes=loop-sink < %s | FileCheck %s 5 6; CHECK: pr39570 7; Make sure not to assert. 8 9%0 = type { i32, %1*, %2, %6*, %33* } 10%1 = type { i32 (...)** } 11%2 = type { %3* } 12%3 = type { %4, i32, %5* } 13%4 = type { i32 (...)**, i32 } 14%5 = type opaque 15%6 = type { %7, %1*, %31*, i8, %2, %32* } 16%7 = type <{ %8, %9*, %10, i32, %33*, %33*, %33*, %27, %28, i16 }> 17%8 = type { i32 (...)** } 18%9 = type opaque 19%10 = type { %11, %16, %18, %19 } 20%11 = type { %12*, i32, i32, %13* } 21%12 = type { i32 (...)** } 22%13 = type { %14*, %14* } 23%14 = type { %15, i32 } 24%15 = type { %12*, i32, i32, i16* } 25%16 = type { %12*, i32, i32, %17* } 26%17 = type { %13, %14* } 27%18 = type { %12*, i32, i32, %14** } 28%19 = type { %20, %21, %12*, float, i32, i32, %22, %22, %24, i32, i32 } 29%20 = type { i8 } 30%21 = type { i8 } 31%22 = type { %12*, %23*, %23* } 32%23 = type opaque 33%24 = type { %12*, i32, i32, %25* } 34%25 = type { %12*, i32, i32, %26* } 35%26 = type opaque 36%27 = type { %33* } 37%28 = type { %29, i32, i32, %14* } 38%29 = type { %30 } 39%30 = type { i32 (...)** } 40%31 = type opaque 41%32 = type { i32 (...)** } 42%33 = type <{ %8, %9*, %10, i32, %33*, %33*, %33*, %27, %28, i16, [2 x i8] }> 43 44define dso_local void @pr39570() local_unnamed_addr align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) !prof !1 { 45 br i1 undef, label %8, label %1, !prof !2 46 47; <label>:1: ; preds = %0 48 %2 = load %0*, %0** undef, align 4 49 br label %3 50 51; <label>:3: ; preds = %7, %1 52 %4 = getelementptr inbounds %0, %0* %2, i32 undef, i32 0 53 br label %5 54 55; <label>:5: ; preds = %3 56 %6 = getelementptr inbounds %0, %0* %2, i32 undef, i32 4 57 br i1 undef, label %18, label %7, !prof !3 58 59; <label>:7: ; preds = %5 60 br label %3 61 62; <label>:8: ; preds = %0 63 invoke void @baz() 64 to label %9 unwind label %12 65 66; <label>:9: ; preds = %8 67 invoke void @bar() 68 to label %17 unwind label %10 69 70; <label>:10: ; preds = %9 71 %11 = landingpad { i8*, i32 } 72 catch i8* null 73 unreachable 74 75; <label>:12: ; preds = %8 76 %13 = landingpad { i8*, i32 } 77 cleanup 78 invoke void @bar() 79 to label %16 unwind label %14 80 81; <label>:14: ; preds = %12 82 %15 = landingpad { i8*, i32 } 83 catch i8* null 84 unreachable 85 86; <label>:16: ; preds = %12 87 resume { i8*, i32 } %13 88 89; <label>:17: ; preds = %9 90 br label %18 91 92; <label>:18: ; preds = %17, %5 93 invoke void @baz() 94 to label %19 unwind label %20 95 96; <label>:19: ; preds = %18 97 invoke void @bar() 98 to label %22 unwind label %20 99 100; <label>:20: ; preds = %19 101 %21 = landingpad { i8*, i32 } 102 catch i8* null 103 unreachable 104 105; <label>:22: ; preds = %19 106 ret void 107} 108 109declare dso_local i32 @__gxx_personality_v0(...) 110declare dso_local void @bar() local_unnamed_addr 111declare dso_local void @baz() local_unnamed_addr align 2 112 113!1 = !{!"function_entry_count", i64 0} 114!2 = !{!"branch_weights", i32 1, i32 3215551} 115!3 = !{!"branch_weights", i32 3215551, i32 1} 116