67 lines · plain
1; RUN: opt -aa-pipeline=basic-aa -passes='print<memoryssa>,verify<memoryssa>' -disable-output < %s 2>&1 | FileCheck %s2;3; Testing many dominators, specifically from a switch statement in C.4 5declare i1 @getBool() readnone6 7define i32 @foo(ptr %p) {8entry:9 br label %loopbegin10 11loopbegin:12; CHECK: 8 = MemoryPhi({entry,liveOnEntry},{sw.epilog,6})13; CHECK-NEXT: %n =14 %n = phi i32 [ 0, %entry ], [ %1, %sw.epilog ]15 %m = alloca i32, align 416 switch i32 %n, label %sw.default [17 i32 0, label %sw.bb18 i32 1, label %sw.bb119 i32 2, label %sw.bb220 i32 3, label %sw.bb321 ]22 23sw.bb:24; CHECK: 1 = MemoryDef(8)25; CHECK-NEXT: store i32 126 store i32 1, ptr %m, align 427 br label %sw.epilog28 29sw.bb1:30; CHECK: 2 = MemoryDef(8)31; CHECK-NEXT: store i32 232 store i32 2, ptr %m, align 433 br label %sw.epilog34 35sw.bb2:36; CHECK: 3 = MemoryDef(8)37; CHECK-NEXT: store i32 338 store i32 3, ptr %m, align 439 br label %sw.epilog40 41sw.bb3:42; CHECK: 4 = MemoryDef(8)43; CHECK-NEXT: store i32 444 store i32 4, ptr %m, align 445 br label %sw.epilog46 47sw.default:48; CHECK: 5 = MemoryDef(8)49; CHECK-NEXT: store i32 550 store i32 5, ptr %m, align 451 br label %sw.epilog52 53sw.epilog:54; CHECK: 7 = MemoryPhi({sw.default,5},{sw.bb,1},{sw.bb1,2},{sw.bb2,3},{sw.bb3,4})55; CHECK-NEXT: MemoryUse(7)56; CHECK-NEXT: %0 =57 %0 = load i32, ptr %m, align 458; CHECK: 6 = MemoryDef(7)59; CHECK-NEXT: %1 =60 %1 = load volatile i32, ptr %p, align 461 %2 = icmp eq i32 %0, %162 br i1 %2, label %exit, label %loopbegin63 64exit:65 ret i32 %166}67