brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.4 KiB · a858107 Raw
150 lines · plain
1; RUN: opt -aa-pipeline=basic-aa -passes='print<memoryssa>,verify<memoryssa>' -disable-output < %s 2>&1 | FileCheck %s2 3%struct.hoge = type { i32, %struct.widget }4%struct.widget = type { i64 }5 6define hidden void @quux(ptr %f, i1 %arg) align 2 {7  %tmp = getelementptr inbounds %struct.hoge, ptr %f, i64 0, i32 1, i32 08  %tmp24 = getelementptr inbounds %struct.hoge, ptr %f, i64 0, i32 19  br label %bb2610 11bb26:                                             ; preds = %bb77, %012; CHECK:  3 = MemoryPhi({%0,liveOnEntry},{bb77,2})13; CHECK-NEXT:   br i1 %arg, label %bb68, label %bb7714  br i1 %arg, label %bb68, label %bb7715 16bb68:                                             ; preds = %bb2617; CHECK:  MemoryUse(liveOnEntry)18; CHECK-NEXT:   %tmp69 = load i64, ptr null, align 819  %tmp69 = load i64, ptr null, align 820; CHECK:  1 = MemoryDef(3)21; CHECK-NEXT:   store i64 %tmp69, ptr %tmp, align 822  store i64 %tmp69, ptr %tmp, align 823  br label %bb7724 25bb77:                                             ; preds = %bb68, %bb2626; CHECK:  2 = MemoryPhi({bb26,3},{bb68,1})27; CHECK:  MemoryUse(2)28; CHECK-NEXT:   %tmp78 = load ptr, ptr %tmp24, align 829  %tmp78 = load ptr, ptr %tmp24, align 830  %tmp79 = getelementptr inbounds i64, ptr %tmp78, i64 undef31  br label %bb2632}33 34define hidden void @quux_no_null_opt(ptr %f, i1 %arg) align 2 #0 {35; CHECK-LABEL: quux_no_null_opt(36  %tmp = getelementptr inbounds %struct.hoge, ptr %f, i64 0, i32 1, i32 037  %tmp24 = getelementptr inbounds %struct.hoge, ptr %f, i64 0, i32 138  br label %bb2639 40bb26:                                             ; preds = %bb77, %041; CHECK:  3 = MemoryPhi({%0,liveOnEntry},{bb77,2})42; CHECK-NEXT:   br i1 %arg, label %bb68, label %bb7743  br i1 %arg, label %bb68, label %bb7744 45bb68:                                             ; preds = %bb2646; CHECK:  MemoryUse(3)47; CHECK-NEXT:   %tmp69 = load i64, ptr null, align 848  %tmp69 = load i64, ptr null, align 849; CHECK:  1 = MemoryDef(3)50; CHECK-NEXT:   store i64 %tmp69, ptr %tmp, align 851  store i64 %tmp69, ptr %tmp, align 852  br label %bb7753 54bb77:                                             ; preds = %bb68, %bb2655; CHECK:  2 = MemoryPhi({bb26,3},{bb68,1})56; CHECK:  MemoryUse(2)57; CHECK-NEXT:   %tmp78 = load ptr, ptr %tmp24, align 858  %tmp78 = load ptr, ptr %tmp24, align 859  %tmp79 = getelementptr inbounds i64, ptr %tmp78, i64 undef60  br label %bb2661}62 63; CHECK-LABEL: define void @quux_skip64define void @quux_skip(ptr noalias %f, ptr noalias %g, i1 %arg) align 2 {65  %tmp = getelementptr inbounds %struct.hoge, ptr %f, i64 0, i32 1, i32 066  %tmp24 = getelementptr inbounds %struct.hoge, ptr %f, i64 0, i32 167  br label %bb2668 69bb26:                                             ; preds = %bb77, %070; CHECK: 3 = MemoryPhi({%0,liveOnEntry},{bb77,2})71; CHECK-NEXT: br i1 %arg, label %bb68, label %bb7772  br i1 %arg, label %bb68, label %bb7773 74bb68:                                             ; preds = %bb2675; CHECK: MemoryUse(3)76; CHECK-NEXT: %tmp69 = load i64, ptr %g, align 877  %tmp69 = load i64, ptr %g, align 878; CHECK: 1 = MemoryDef(3)79; CHECK-NEXT: store i64 %tmp69, ptr %g, align 880  store i64 %tmp69, ptr %g, align 881  br label %bb7782 83bb77:                                             ; preds = %bb68, %bb2684; CHECK: 2 = MemoryPhi({bb26,3},{bb68,1})85; CHECK: MemoryUse(liveOnEntry)86; CHECK-NEXT: %tmp78 = load ptr, ptr %tmp24, align 887  %tmp78 = load ptr, ptr %tmp24, align 888  br label %bb2689}90 91; CHECK-LABEL: define void @quux_dominated92define void @quux_dominated(ptr noalias %f, ptr noalias %g, i1 %arg) align 2 {93  %tmp = getelementptr inbounds %struct.hoge, ptr %f, i64 0, i32 1, i32 094  %tmp24 = getelementptr inbounds %struct.hoge, ptr %f, i64 0, i32 195  br label %bb2696 97bb26:                                             ; preds = %bb77, %098; CHECK: 3 = MemoryPhi({%0,liveOnEntry},{bb77,2})99; CHECK: MemoryUse(3)100; CHECK-NEXT: load ptr, ptr %tmp24, align 8101  load ptr, ptr %tmp24, align 8102  br i1 %arg, label %bb68, label %bb77103 104bb68:                                             ; preds = %bb26105; CHECK: MemoryUse(3)106; CHECK-NEXT: %tmp69 = load i64, ptr %g, align 8107  %tmp69 = load i64, ptr %g, align 8108; CHECK: 1 = MemoryDef(3)109; CHECK-NEXT: store i64 %tmp69, ptr %g, align 8110  store i64 %tmp69, ptr %g, align 8111  br label %bb77112 113bb77:                                             ; preds = %bb68, %bb26114; CHECK: 4 = MemoryPhi({bb26,3},{bb68,1})115; CHECK: 2 = MemoryDef(4)116; CHECK-NEXT: store ptr null, ptr %tmp24, align 8117  store ptr null, ptr %tmp24, align 8118  br label %bb26119}120 121; CHECK-LABEL: define void @quux_nodominate122define void @quux_nodominate(ptr noalias %f, ptr noalias %g, i1 %arg) align 2 {123  %tmp = getelementptr inbounds %struct.hoge, ptr %f, i64 0, i32 1, i32 0124  %tmp24 = getelementptr inbounds %struct.hoge, ptr %f, i64 0, i32 1125  br label %bb26126 127bb26:                                             ; preds = %bb77, %0128; CHECK: 3 = MemoryPhi({%0,liveOnEntry},{bb77,2})129; CHECK: MemoryUse(liveOnEntry)130; CHECK-NEXT: load ptr, ptr %tmp24, align 8131  load ptr, ptr %tmp24, align 8132  br i1 %arg, label %bb68, label %bb77133 134bb68:                                             ; preds = %bb26135; CHECK: MemoryUse(3)136; CHECK-NEXT: %tmp69 = load i64, ptr %g, align 8137  %tmp69 = load i64, ptr %g, align 8138; CHECK: 1 = MemoryDef(3)139; CHECK-NEXT: store i64 %tmp69, ptr %g, align 8140  store i64 %tmp69, ptr %g, align 8141  br label %bb77142 143bb77:                                             ; preds = %bb68, %bb26144; CHECK: 2 = MemoryPhi({bb26,3},{bb68,1})145; CHECK-NEXT: br label %bb26146  br label %bb26147}148 149attributes #0 = { null_pointer_is_valid }150