1; RUN: opt -passes=licm -verify-memoryssa -S %s | FileCheck %s 2; REQUIRES: asserts 3 4target datalayout = "E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-v128:64-a:8:16-n32:64" 5target triple = "s390x-ibm-linux" 6 7@g_77 = external dso_local global i16, align 2 8 9; CHECK-LABEL: @f1(i1 %arg) 10define void @f1(i1 %arg) { 11entry: 12 store i16 undef, ptr @g_77, align 2 13 br label %loop_pre 14 15unreachablelabel: ; No predecessors 16 br label %loop_pre 17 18loop_pre: 19 br label %for.cond.header 20 21for.cond.header: 22 store i32 0, ptr undef, align 4 23 br i1 %arg, label %for.body, label %for.end 24 25for.body: 26 %tmp1 = load volatile i16, ptr undef, align 2 27 br label %for.end 28 29for.end: 30 br i1 %arg, label %func.exit, label %for.cond.header 31 32func.exit: 33 ret void 34} 35 36@g_159 = external dso_local global i32, align 4 37 38; CHECK-LABEL: @f2(i1 %arg) 39define void @f2(i1 %arg) { 40entry: 41 br label %for.header.first 42 43for.header.first: 44 br label %for.body.first 45 46for.body.first: 47 store i32 0, ptr @g_159, align 4 48 br i1 %arg, label %for.body.first, label %for.end.first 49 50for.end.first: 51 br i1 %arg, label %lor.end, label %for.header.first 52 53lor.end: 54 br label %for.pre 55 56unreachablelabel: ; No predecessors 57 br label %for.pre 58 59for.pre: 60 br label %for.header.second 61 62for.header.second: 63 store i32 undef, ptr undef, align 4 64 br label %for.header.second 65} 66 67@g_271 = external dso_local global i8, align 2 68@g_427 = external dso_local unnamed_addr global [9 x i16], align 2 69 70; CHECK-LABEL: @f3(i1 %arg) 71define void @f3(i1 %arg) { 72entry: 73 br label %for.preheader 74 75for.preheader: 76 store volatile i8 undef, ptr @g_271, align 2 77 br i1 %arg, label %for.preheader, label %for.end 78 79for.end: 80 br label %lbl_1058.i 81 82unreachablelabel: ; No predecessors 83 br label %lbl_1058.i 84 85lbl_1058.i: 86 br label %for.cond3.preheader.i 87 88for.cond3.preheader.i: 89 %tmp1 = load i16, ptr getelementptr inbounds ([9 x i16], ptr @g_427, i64 0, i64 2), align 2 90 %conv620.i129 = zext i16 %tmp1 to i32 91 %cmp621.i130 = icmp ugt i32 undef, %conv620.i129 92 %conv622.i131 = zext i1 %cmp621.i130 to i32 93 store i32 %conv622.i131, ptr undef, align 4 94 br i1 %arg, label %func.exit, label %for.cond3.preheader.i 95 96func.exit: 97 ret void 98} 99 100@g_6 = external dso_local unnamed_addr global [3 x i32], align 4 101@g_244 = external dso_local global i64, align 8 102@g_1164 = external dso_local global i64, align 8 103 104; CHECK-LABEL: @f4(i1 %arg) 105define void @f4(i1 %arg) { 106entry: 107 br label %for.cond8.preheader 108 109for.cond8.preheader: 110 store i32 0, ptr getelementptr inbounds ([3 x i32], ptr @g_6, i64 0, i64 2), align 4 111 br i1 %arg, label %if.end, label %for.cond8.preheader 112 113if.end: 114 br i1 %arg, label %cleanup1270, label %for.cond504.preheader 115 116for.cond504.preheader: 117 store i64 undef, ptr @g_244, align 8 118 br label %cleanup1270 119 120for.cond559.preheader: 121 store i64 undef, ptr @g_1164, align 8 122 br i1 %arg, label %for.cond559.preheader, label %cleanup1270 123 124cleanup1270: 125 ret void 126} 127 128@g_1504 = external dso_local local_unnamed_addr global ptr, align 8 129 130define void @f5(i1 %arg) { 131bb: 132 tail call fastcc void @f21() 133 br label %bb12.outer 134 135bb12.outer.loopexit: ; No predecessors! 136 br label %bb12.outer 137 138bb12.outer: ; preds = %bb12.outer.loopexit, %bb 139 br i1 %arg, label %bb12.outer.split.us, label %bb12.preheader 140 141bb12.preheader: ; preds = %bb12.outer 142 br label %bb12 143 144bb12.outer.split.us: ; preds = %bb12.outer 145 br label %bb16.us.us 146 147bb16.us.us: ; preds = %bb16.us.us, %bb12.outer.split.us 148 br label %bb16.us.us 149 150bb12: ; preds = %bb77.1, %bb12.preheader 151 br i1 %arg, label %bb25.preheader, label %bb77 152 153bb25.preheader: ; preds = %bb12.1, %bb12 154 br label %bb25 155 156bb25: ; preds = %l0, %bb25.preheader 157 br i1 %arg, label %bb62, label %bb71.thread 158 159bb62: ; preds = %bb25 160 br i1 %arg, label %bb92.loopexit, label %l0 161 162l0: ; preds = %bb62 163 br label %bb25 164 165bb71.thread: ; preds = %bb25 166 br label %bb92 167 168bb77: ; preds = %bb12 169 %tmp78 = load ptr, ptr @g_1504, align 8 170 %tmp79 = load volatile ptr, ptr %tmp78, align 8 171 br i1 %arg, label %bb91, label %bb12.1 172 173bb91: ; preds = %bb77.1, %bb77 174 unreachable 175 176bb92.loopexit: ; preds = %bb62 177 br label %bb92 178 179bb92: ; preds = %bb92.loopexit, %bb71.thread 180 ret void 181 182bb12.1: ; preds = %bb77 183 br i1 %arg, label %bb25.preheader, label %bb77.1 184 185bb77.1: ; preds = %bb12.1 186 br i1 %arg, label %bb91, label %bb12 187} 188 189declare void @f21() 190