68 lines · plain
1; RUN: opt -disable-output -aa-pipeline=basic-aa -passes='loop-mssa(licm),print<memoryssa>' < %s 2>&1 | FileCheck %s2 3; CHECK-LABEL: @f(i1 %arg)4 5; CHECK: lbl1:6; CHECK-NEXT: ; [[NO4:.*]] = MemoryPhi({entry,liveOnEntry},{lbl1.backedge,[[NO9:.*]]})7; CHECK-NEXT: ; [[NO2:.*]] = MemoryDef([[NO4]])8; CHECK-NEXT: call void @g()9; CHECK-NEXT: br i1 %arg, label %for.end, label %if.else10 11; CHECK: for.end:12; CHECK-NEXT: br i1 %arg, label %lbl3, label %lbl213 14; CHECK: lbl2:15; CHECK-NEXT: ; [[NO8:.*]] = MemoryPhi({lbl3,[[NO7:.*]]},{for.end,[[NO2]]})16; CHECK-NEXT: br label %lbl317 18; CHECK: lbl3:19; CHECK-NEXT: [[NO7]] = MemoryPhi({lbl2,[[NO8]]},{for.end,2})20 21; CHECK: cleanup:22; CHECK-NEXT: MemoryUse([[NO2]])23; CHECK-NEXT: %cleanup.dest = load i32, ptr undef, align 124 25; CHECK: lbl1.backedge:26; CHECK-NEXT: [[NO9]] = MemoryPhi({cleanup,[[NO7]]},{if.else,2})27; CHECK-NEXT: br label %lbl128 29; CHECK: cleanup.cont:30; CHECK-NEXT: ; [[NO6:.*]] = MemoryDef([[NO7]])31; CHECK-NEXT: store i16 undef, ptr %e, align 132; CHECK-NEXT: 3 = MemoryDef([[NO6]])33; CHECK-NEXT: call void @g()34 35define void @f(i1 %arg) {36entry:37 %e = alloca i16, align 138 br label %lbl139 40lbl1: ; preds = %if.else, %cleanup, %entry41 store i16 undef, ptr %e, align 142 call void @g()43 br i1 %arg, label %for.end, label %if.else44 45for.end: ; preds = %lbl146 br i1 %arg, label %lbl3, label %lbl247 48lbl2: ; preds = %lbl3, %for.end49 br label %lbl350 51lbl3: ; preds = %lbl2, %for.end52 br i1 %arg, label %lbl2, label %cleanup53 54cleanup: ; preds = %lbl355 %cleanup.dest = load i32, ptr undef, align 156 %switch = icmp ult i32 %cleanup.dest, 157 br i1 %switch, label %cleanup.cont, label %lbl158 59cleanup.cont: ; preds = %cleanup60 call void @g()61 ret void62 63if.else: ; preds = %lbl164 br label %lbl165}66 67declare void @g()68