94 lines · plain
1; RUN: opt -aa-pipeline=basic-aa -passes='print<memoryssa>' -dot-cfg-mssa=out.dot < %s 2>&1 > /dev/null2; RUN: FileCheck %s -input-file=out.dot3 4; Test -dot-cfg-mssa option for -print-memoryssa.5; Test is based on following C code with some forwarding basic blocks6; added to show that only those blocks with memory ssa comments7; are colourized.8 9;void g();10 11;int f(int *p, int *q, int *r) {12; int i = 0;13; if (*r)14; i = 1;15; else16; g();17; *p = *q + 1;18; if (i)19; ++i;20; return *q;21;}22 23define signext i32 @f(ptr %p, ptr %q, ptr %r) {24entry:25 br label %bb126 27bb1:28 %p.addr = alloca ptr, align 829 %q.addr = alloca ptr, align 830 %r.addr = alloca ptr, align 831 %i = alloca i32, align 432 store ptr %p, ptr %p.addr, align 833 store ptr %q, ptr %q.addr, align 834 store ptr %r, ptr %r.addr, align 835 store i32 0, ptr %i, align 436 %0 = load ptr, ptr %r.addr, align 837 %1 = load i32, ptr %0, align 438 %tobool = icmp ne i32 %1, 039 br i1 %tobool, label %if.then, label %if.else40 41if.then:42 store i32 1, ptr %i, align 443 br label %bb244 45bb2:46 br label %if.end47 48if.else:49 call void @g()50 br label %if.end51 52if.end:53 %2 = load ptr, ptr %q.addr, align 854 %3 = load i32, ptr %2, align 455 %add = add nsw i32 %3, 156 %4 = load ptr, ptr %p.addr, align 857 store i32 %add, ptr %4, align 458 %5 = load i32, ptr %i, align 459 %tobool1 = icmp ne i32 %5, 060 br i1 %tobool1, label %if.then2, label %if.end361 62if.then2:63 %6 = load i32, ptr %i, align 464 %inc = add nsw i32 %6, 165 br label %bb366 67bb3:68 store i32 %inc, ptr %i, align 469 br label %if.end370 71if.end3:72 br label %bb473 74bb4:75 %7 = load ptr, ptr %q.addr, align 876 %8 = load i32, ptr %7, align 477 ret i32 %878}79 80declare void @g(...)81 82; CHECK: digraph "MSSA"83; CHECK-NEXT: label="MSSA";84; CHECK: {{Node0x.* [shape=record,label="{entry:.*}"]}}85; CHECK: {{[shape=record,style=filled, fillcolor=lightpink,label="{bb1:.*1 = MemoryDef(liveOnEntry).*2 = MemoryDef(1).*3 = MemoryDef(2).*4 = MemoryDef(3).*MemoryUse(3).*MemoryUse(liveOnEntry).*}"]}}86; CHECK: {{[shape=record,style=filled, fillcolor=lightpink,label="{if.then:.*5 = MemoryDef(4).*}"]}}87; CHECK: {{[shape=record,label="{bb2:.*}"]}}88; CHECK: {{[shape=record,style=filled, fillcolor=lightpink,label="{if.else:.*6 = MemoryDef(4).*}"]}}89; CHECK: {{[shape=record,style=filled, fillcolor=lightpink,label="{if.end:.*10 = MemoryPhi({bb2,5},{if.else,6})/*MemoryUse(2).*MemoryUse(10).*MemoryUse(1).*7 = MemoryDef(10).*MemoryUse(10).*}"]}}90; CHECK: {{[shape=record,style=filled, fillcolor=lightpink,label="{if.then2:.*MemoryUse(10).*}"]}}91; CHECK: {{[shape=record,style=filled, fillcolor=lightpink,label="{bb3:.*8 = MemoryDef(7).*}"]}}92; CHECK: {{[shape=record,style=filled, fillcolor=lightpink,label="{if.end3:.*9 = MemoryPhi({if.end,7},{bb3,8}).*}"]}}93; CHECK: {{[shape=record,style=filled, fillcolor=lightpink,label="{bb4:.*MemoryUse(2).*MemoryUse(7).*}"]}}94