62 lines · plain
1; RUN: opt -disable-output -passes="loop-mssa(simple-loop-unswitch<nontrivial>),print<memoryssa>" -verify-memoryssa < %s 2>&1 | FileCheck %s2 3declare ptr @malloc() allockind("alloc,uninitialized")4 5; CHECK-LABEL: MemorySSA for function: test6 7; CHECK: for.body.us:8; CHECK-NEXT: 3 = MemoryPhi({entry.split.us,liveOnEntry},{for.body.us,3})9 10; CHECK: for.body:11; CHECK-NEXT: 2 = MemoryPhi({entry.split,liveOnEntry},{for.body,1})12; CHECK-NEXT: 1 = MemoryDef(2)13; CHECK-NEXT: %call.i = call ptr @malloc()14 15define void @test(i1 %arg) {16entry:17 br label %for.body18 19for.body:20 %call.i = call ptr @malloc()21 %cmp.i = icmp ne ptr %call.i, null22 %or.cond.i = select i1 %cmp.i, i1 %arg, i1 false23 br i1 %or.cond.i, label %exit, label %for.body24 25exit:26 ret void27}28 29; CHECK-LABEL: MemorySSA for function: test_extra_defs30 31; CHECK: entry:32; CHECK-NEXT: 1 = MemoryDef(liveOnEntry)33; CHECK-NEXT: store i8 1, ptr %p, align 134 35; CHECK: for.body.us:36; CHECK-NEXT: 5 = MemoryPhi({entry.split.us,1},{for.body.us,6})37; CHECK-NEXT: 6 = MemoryDef(5)38; CHECK-NEXT: store i8 2, ptr %p, align 139 40; CHECK: for.body:41; CHECK-NEXT: 4 = MemoryPhi({entry.split,1},{for.body,3})42; CHECK-NEXT: 2 = MemoryDef(4)43; CHECK-NEXT: store i8 2, ptr %p44; CHECK-NEXT: 3 = MemoryDef(2)45; CHECK-NEXT: %call.i = call ptr @malloc()46 47define void @test_extra_defs(ptr %p, i1 %arg) {48entry:49 store i8 1, ptr %p50 br label %for.body51 52for.body:53 store i8 2, ptr %p54 %call.i = call ptr @malloc()55 %cmp.i = icmp ne ptr %call.i, null56 %or.cond.i = select i1 %cmp.i, i1 %arg, i1 false57 br i1 %or.cond.i, label %exit, label %for.body58 59exit:60 ret void61}62