1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2 ; RUN: opt -newgvn -S %s | FileCheck %s 3 ; Ensure that loads that bypass memory def-use chains get added as users of the new 4 ; MemoryDef. Otherwise this test will not pass memory verification because the value 5 ; of the load will not be reprocessed until verification. 6 ; ModuleID = 'bugpoint-reduced-simplified.bc' 7 source_filename = "bugpoint-output-f242c4f.bc" 8 target triple = "x86_64-apple-darwin16.7.0" 9 10 @global = external global i32 #0 11 @global.1 = external global i32 #0 12 13 define void @hoge(i32 %arg) { 14 ; CHECK-LABEL: @hoge( 15 ; CHECK-NEXT: bb: 16 ; CHECK-NEXT: br label [[BB2:%.*]] 17 ; CHECK: bb1: 18 ; CHECK-NEXT: br label [[BB2]] 19 ; CHECK: bb2: 20 ; CHECK-NEXT: [[TMP:%.*]] = phi i32 [ 0, [[BB1:%.*]] ], [ [[ARG:%.*]], [[BB:%.*]] ] 21 ; CHECK-NEXT: br label [[BB6:%.*]] 22 ; CHECK: bb3: 23 ; CHECK-NEXT: [[TMP4:%.*]] = load i32, i32* @global, !h !0 24 ; CHECK-NEXT: unreachable 25 ; CHECK: bb6: 26 ; CHECK-NEXT: store i32 [[TMP]], i32* @global.1, !h !0 27 ; CHECK-NEXT: br i1 undef, label [[BB7:%.*]], label [[BB1]] 28 ; CHECK: bb7: 29 ; CHECK-NEXT: br i1 undef, label [[BB10:%.*]], label [[BB8:%.*]] 30 ; CHECK: bb8: 31 ; CHECK-NEXT: br i1 false, label [[BB9:%.*]], label [[BB3:%.*]] 32 ; CHECK: bb9: 33 ; CHECK-NEXT: store i8 undef, i8* null 34 ; CHECK-NEXT: br label [[BB3]] 35 ; CHECK: bb10: 36 ; CHECK-NEXT: store i32 0, i32* @global, !h !0 37 ; CHECK-NEXT: br label [[BB7]] 38 ; 39 bb: 40 br label %bb2 41 42 bb1: ; preds = %bb6 43 br label %bb2 44 45 bb2: ; preds = %bb1, %bb 46 %tmp = phi i32 [ 0, %bb1 ], [ %arg, %bb ] 47 br label %bb6 48 49 bb3: ; preds = %bb9, %bb8 50 %tmp4 = load i32, i32* @global, !h !0 51 %tmp5 = icmp eq i32 %tmp4, 0 52 unreachable 53 54 bb6: ; preds = %bb2 55 store i32 %tmp, i32* @global.1, !h !0 56 br i1 undef, label %bb7, label %bb1 57 58 bb7: ; preds = %bb10, %bb6 59 br i1 undef, label %bb10, label %bb8 60 61 bb8: ; preds = %bb7 62 br i1 false, label %bb9, label %bb3 63 64 bb9: ; preds = %bb8 65 call void @widget() 66 br label %bb3 67 68 bb10: ; preds = %bb7 69 store i32 0, i32* @global, !h !0 70 br label %bb7 71 } 72 73 declare void @widget() 74 75 attributes #0 = { align=4 } 76 77 !0 = !{} 78