|
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4 |
| 2 | +; RUN: opt -p dse -S %s | FileCheck %s |
| 3 | + |
| 4 | +target datalayout = "E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-v128:64-a:8:16-n32:64" |
| 5 | + |
| 6 | +define void @widget(ptr %a) { |
| 7 | +; CHECK-LABEL: define void @widget( |
| 8 | +; CHECK-SAME: ptr [[A:%.*]]) { |
| 9 | +; CHECK-NEXT: bb: |
| 10 | +; CHECK-NEXT: [[CALL1:%.*]] = tail call noalias ptr @malloc(i64 0) |
| 11 | +; CHECK-NEXT: store ptr [[CALL1]], ptr [[A]], align 8 |
| 12 | +; CHECK-NEXT: [[LOAD:%.*]] = load ptr, ptr [[A]], align 8 |
| 13 | +; CHECK-NEXT: [[LOAD2:%.*]] = load i32, ptr [[LOAD]], align 8 |
| 14 | +; CHECK-NEXT: [[GETELEMENTPTR:%.*]] = getelementptr i8, ptr [[CALL1]], i64 0 |
| 15 | +; CHECK-NEXT: [[GETELEMENTPTR3:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR]], i64 1 |
| 16 | +; CHECK-NEXT: [[GETELEMENTPTR4:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR]], i64 8 |
| 17 | +; CHECK-NEXT: store i16 0, ptr [[GETELEMENTPTR4]], align 4 |
| 18 | +; CHECK-NEXT: [[GETELEMENTPTR5:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR]], i64 12 |
| 19 | +; CHECK-NEXT: store i32 0, ptr [[CALL1]], align 4 |
| 20 | +; CHECK-NEXT: [[LOAD6:%.*]] = load i32, ptr inttoptr (i64 4 to ptr), align 4 |
| 21 | +; CHECK-NEXT: br label [[BB48:%.*]] |
| 22 | +; CHECK: bb7: |
| 23 | +; CHECK-NEXT: br label [[BB9:%.*]] |
| 24 | +; CHECK: bb8: |
| 25 | +; CHECK-NEXT: br label [[BB53:%.*]] |
| 26 | +; CHECK: bb9: |
| 27 | +; CHECK-NEXT: [[PHI:%.*]] = phi ptr [ [[CALL1]], [[BB7:%.*]] ], [ [[A]], [[BB43:%.*]] ] |
| 28 | +; CHECK-NEXT: [[GETELEMENTPTR10:%.*]] = getelementptr i8, ptr [[PHI]], i64 0 |
| 29 | +; CHECK-NEXT: [[GETELEMENTPTR11:%.*]] = getelementptr i8, ptr [[PHI]], i64 0 |
| 30 | +; CHECK-NEXT: [[GETELEMENTPTR12:%.*]] = getelementptr i8, ptr [[PHI]], i64 0 |
| 31 | +; CHECK-NEXT: [[GETELEMENTPTR13:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR12]], i64 1 |
| 32 | +; CHECK-NEXT: store i8 0, ptr [[CALL1]], align 1 |
| 33 | +; CHECK-NEXT: br label [[BB29:%.*]] |
| 34 | +; CHECK: bb14: |
| 35 | +; CHECK-NEXT: [[GETELEMENTPTR15:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR10]], i64 8 |
| 36 | +; CHECK-NEXT: [[LOAD16:%.*]] = load i16, ptr [[CALL1]], align 4 |
| 37 | +; CHECK-NEXT: br i1 false, label [[BB22:%.*]], label [[BB17:%.*]] |
| 38 | +; CHECK: bb17: |
| 39 | +; CHECK-NEXT: [[GETELEMENTPTR18:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR11]], i64 8 |
| 40 | +; CHECK-NEXT: [[LOAD19:%.*]] = load i16, ptr [[CALL1]], align 4 |
| 41 | +; CHECK-NEXT: [[GETELEMENTPTR20:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR12]], i64 8 |
| 42 | +; CHECK-NEXT: store i16 0, ptr [[CALL1]], align 4 |
| 43 | +; CHECK-NEXT: [[GETELEMENTPTR21:%.*]] = getelementptr i8, ptr [[PHI]], i64 0 |
| 44 | +; CHECK-NEXT: br label [[BB25:%.*]] |
| 45 | +; CHECK: bb22: |
| 46 | +; CHECK-NEXT: [[GETELEMENTPTR23:%.*]] = getelementptr i8, ptr [[PHI]], i64 0 |
| 47 | +; CHECK-NEXT: [[GETELEMENTPTR24:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR23]], i64 12 |
| 48 | +; CHECK-NEXT: br label [[BB25]] |
| 49 | +; CHECK: bb25: |
| 50 | +; CHECK-NEXT: [[PHI26:%.*]] = phi ptr [ [[A]], [[BB17]] ], [ [[CALL1]], [[BB22]] ] |
| 51 | +; CHECK-NEXT: [[PHI27:%.*]] = phi ptr [ [[CALL1]], [[BB17]] ], [ [[CALL1]], [[BB22]] ] |
| 52 | +; CHECK-NEXT: [[PHI28:%.*]] = phi ptr [ [[CALL1]], [[BB17]] ], [ [[CALL1]], [[BB22]] ] |
| 53 | +; CHECK-NEXT: store i32 0, ptr [[CALL1]], align 4 |
| 54 | +; CHECK-NEXT: br label [[BB29]] |
| 55 | +; CHECK: bb29: |
| 56 | +; CHECK-NEXT: [[PHI30:%.*]] = phi ptr [ [[CALL1]], [[BB9]] ], [ [[CALL1]], [[BB25]] ] |
| 57 | +; CHECK-NEXT: [[PHI31:%.*]] = phi ptr [ [[CALL1]], [[BB9]] ], [ [[CALL1]], [[BB25]] ] |
| 58 | +; CHECK-NEXT: [[LOAD32:%.*]] = load i8, ptr [[CALL1]], align 4 |
| 59 | +; CHECK-NEXT: [[LOAD33:%.*]] = load i8, ptr [[CALL1]], align 4 |
| 60 | +; CHECK-NEXT: [[GETELEMENTPTR34:%.*]] = getelementptr i8, ptr [[PHI31]], i64 12 |
| 61 | +; CHECK-NEXT: [[GETELEMENTPTR35:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR12]], i64 12 |
| 62 | +; CHECK-NEXT: br label [[BB86:%.*]] |
| 63 | +; CHECK: bb36: |
| 64 | +; CHECK-NEXT: [[GETELEMENTPTR37:%.*]] = getelementptr i8, ptr [[PHI30]], i64 12 |
| 65 | +; CHECK-NEXT: br label [[BB38:%.*]] |
| 66 | +; CHECK: bb38: |
| 67 | +; CHECK-NEXT: [[GETELEMENTPTR39:%.*]] = getelementptr [0 x i32], ptr [[GETELEMENTPTR34]], i64 0, i64 0 |
| 68 | +; CHECK-NEXT: [[LOAD40:%.*]] = load i32, ptr [[CALL1]], align 4 |
| 69 | +; CHECK-NEXT: [[GETELEMENTPTR41:%.*]] = getelementptr [0 x i32], ptr [[GETELEMENTPTR37]], i64 0, i64 0 |
| 70 | +; CHECK-NEXT: [[LOAD42:%.*]] = load i32, ptr [[CALL1]], align 4 |
| 71 | +; CHECK-NEXT: br label [[BB38]] |
| 72 | +; CHECK: bb43: |
| 73 | +; CHECK-NEXT: [[GETELEMENTPTR44:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR12]], i64 8 |
| 74 | +; CHECK-NEXT: [[LOAD45:%.*]] = load i16, ptr [[CALL1]], align 4 |
| 75 | +; CHECK-NEXT: store i16 0, ptr [[CALL1]], align 4 |
| 76 | +; CHECK-NEXT: store i8 0, ptr [[CALL1]], align 4 |
| 77 | +; CHECK-NEXT: [[GETELEMENTPTR46:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR12]], i64 12 |
| 78 | +; CHECK-NEXT: store i32 0, ptr [[CALL1]], align 4 |
| 79 | +; CHECK-NEXT: [[GETELEMENTPTR47:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR12]], i64 16 |
| 80 | +; CHECK-NEXT: store i32 0, ptr [[CALL1]], align 4 |
| 81 | +; CHECK-NEXT: br label [[BB9]] |
| 82 | +; CHECK: bb48: |
| 83 | +; CHECK-NEXT: [[GETELEMENTPTR49:%.*]] = getelementptr i8, ptr [[CALL1]], i64 0 |
| 84 | +; CHECK-NEXT: [[GETELEMENTPTR50:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR49]], i64 1 |
| 85 | +; CHECK-NEXT: [[GETELEMENTPTR51:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR49]], i64 8 |
| 86 | +; CHECK-NEXT: [[GETELEMENTPTR52:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR49]], i64 12 |
| 87 | +; CHECK-NEXT: store i32 0, ptr [[CALL1]], align 4 |
| 88 | +; CHECK-NEXT: br label [[BB48]] |
| 89 | +; CHECK: bb53: |
| 90 | +; CHECK-NEXT: [[PHI54:%.*]] = phi ptr [ [[CALL1]], [[BB8:%.*]] ], [ [[A]], [[BB71:%.*]] ] |
| 91 | +; CHECK-NEXT: [[GETELEMENTPTR55:%.*]] = getelementptr i8, ptr [[PHI54]], i64 0 |
| 92 | +; CHECK-NEXT: [[GETELEMENTPTR56:%.*]] = getelementptr i8, ptr [[PHI54]], i64 0 |
| 93 | +; CHECK-NEXT: [[GETELEMENTPTR57:%.*]] = getelementptr i8, ptr [[PHI54]], i64 0 |
| 94 | +; CHECK-NEXT: [[GETELEMENTPTR58:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR57]], i64 1 |
| 95 | +; CHECK-NEXT: br label [[BB71]] |
| 96 | +; CHECK: bb59: |
| 97 | +; CHECK-NEXT: [[GETELEMENTPTR60:%.*]] = getelementptr i8, ptr [[PHI54]], i64 0 |
| 98 | +; CHECK-NEXT: [[GETELEMENTPTR61:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR60]], i64 12 |
| 99 | +; CHECK-NEXT: br label [[BB67:%.*]] |
| 100 | +; CHECK: bb62: |
| 101 | +; CHECK-NEXT: [[GETELEMENTPTR63:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR56]], i64 8 |
| 102 | +; CHECK-NEXT: [[LOAD64:%.*]] = load i16, ptr [[CALL1]], align 4 |
| 103 | +; CHECK-NEXT: [[GETELEMENTPTR65:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR57]], i64 8 |
| 104 | +; CHECK-NEXT: store i16 0, ptr [[CALL1]], align 4 |
| 105 | +; CHECK-NEXT: [[GETELEMENTPTR66:%.*]] = getelementptr i8, ptr [[PHI54]], i64 0 |
| 106 | +; CHECK-NEXT: br label [[BB67]] |
| 107 | +; CHECK: bb67: |
| 108 | +; CHECK-NEXT: [[PHI68:%.*]] = phi ptr [ [[A]], [[BB62:%.*]] ], [ [[CALL1]], [[BB59:%.*]] ] |
| 109 | +; CHECK-NEXT: [[PHI69:%.*]] = phi ptr [ [[CALL1]], [[BB62]] ], [ [[CALL1]], [[BB59]] ] |
| 110 | +; CHECK-NEXT: [[PHI70:%.*]] = phi ptr [ [[CALL1]], [[BB62]] ], [ [[CALL1]], [[BB59]] ] |
| 111 | +; CHECK-NEXT: store i32 0, ptr [[CALL1]], align 4 |
| 112 | +; CHECK-NEXT: br label [[BB71]] |
| 113 | +; CHECK: bb71: |
| 114 | +; CHECK-NEXT: [[PHI72:%.*]] = phi ptr [ [[CALL1]], [[BB53]] ], [ [[CALL1]], [[BB67]] ] |
| 115 | +; CHECK-NEXT: [[PHI73:%.*]] = phi ptr [ [[CALL1]], [[BB53]] ], [ [[CALL1]], [[BB67]] ] |
| 116 | +; CHECK-NEXT: [[LOAD74:%.*]] = load i8, ptr [[CALL1]], align 4 |
| 117 | +; CHECK-NEXT: [[LOAD75:%.*]] = load i8, ptr [[CALL1]], align 4 |
| 118 | +; CHECK-NEXT: [[GETELEMENTPTR76:%.*]] = getelementptr i8, ptr [[PHI72]], i64 12 |
| 119 | +; CHECK-NEXT: [[GETELEMENTPTR77:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR57]], i64 12 |
| 120 | +; CHECK-NEXT: [[GETELEMENTPTR78:%.*]] = getelementptr [0 x i32], ptr [[GETELEMENTPTR76]], i64 0, i64 0 |
| 121 | +; CHECK-NEXT: [[LOAD79:%.*]] = load i32, ptr [[CALL1]], align 4 |
| 122 | +; CHECK-NEXT: [[GETELEMENTPTR80:%.*]] = getelementptr [0 x i32], ptr [[GETELEMENTPTR77]], i64 0, i64 0 |
| 123 | +; CHECK-NEXT: store i32 0, ptr [[CALL1]], align 4 |
| 124 | +; CHECK-NEXT: [[LOAD81:%.*]] = load i8, ptr [[CALL1]], align 4 |
| 125 | +; CHECK-NEXT: [[GETELEMENTPTR82:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR57]], i64 8 |
| 126 | +; CHECK-NEXT: [[LOAD83:%.*]] = load i16, ptr [[CALL1]], align 4 |
| 127 | +; CHECK-NEXT: store i16 0, ptr [[CALL1]], align 4 |
| 128 | +; CHECK-NEXT: store i8 0, ptr [[CALL1]], align 4 |
| 129 | +; CHECK-NEXT: [[GETELEMENTPTR84:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR57]], i64 12 |
| 130 | +; CHECK-NEXT: store i32 0, ptr [[CALL1]], align 4 |
| 131 | +; CHECK-NEXT: [[GETELEMENTPTR85:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR57]], i64 16 |
| 132 | +; CHECK-NEXT: store i32 0, ptr [[CALL1]], align 4 |
| 133 | +; CHECK-NEXT: br label [[BB53]] |
| 134 | +; CHECK: bb86: |
| 135 | +; CHECK-NEXT: [[GETELEMENTPTR87:%.*]] = getelementptr [0 x i32], ptr [[GETELEMENTPTR34]], i64 0, i64 0 |
| 136 | +; CHECK-NEXT: [[LOAD88:%.*]] = load i32, ptr [[CALL1]], align 4 |
| 137 | +; CHECK-NEXT: [[GETELEMENTPTR89:%.*]] = getelementptr [0 x i32], ptr [[GETELEMENTPTR35]], i64 0, i64 0 |
| 138 | +; CHECK-NEXT: store i32 0, ptr [[CALL1]], align 4 |
| 139 | +; CHECK-NEXT: br label [[BB86]] |
| 140 | +; |
| 141 | +bb: |
| 142 | + %call = tail call ptr @malloc(i64 1) |
| 143 | + tail call void @llvm.memset.p0.i64(ptr %call, i8 0, i64 1, i1 false) |
| 144 | + %call1 = tail call noalias ptr @malloc(i64 0) |
| 145 | + store ptr %call1, ptr %a, align 8 |
| 146 | + %load = load ptr, ptr %a, align 8 |
| 147 | + %load2 = load i32, ptr %load, align 8 |
| 148 | + %getelementptr = getelementptr i8, ptr %call1, i64 0 |
| 149 | + %getelementptr3 = getelementptr i8, ptr %getelementptr, i64 1 |
| 150 | + store i8 0, ptr %call1, align 1 |
| 151 | + %getelementptr4 = getelementptr i8, ptr %getelementptr, i64 8 |
| 152 | + store i16 0, ptr %getelementptr4, align 4 |
| 153 | + %getelementptr5 = getelementptr i8, ptr %getelementptr, i64 12 |
| 154 | + store i32 0, ptr %call1, align 4 |
| 155 | + %load6 = load i32, ptr inttoptr (i64 4 to ptr), align 4 |
| 156 | + br label %bb48 |
| 157 | + |
| 158 | +bb7: ; No predecessors! |
| 159 | + br label %bb9 |
| 160 | + |
| 161 | +bb8: ; No predecessors! |
| 162 | + br label %bb53 |
| 163 | + |
| 164 | +bb9: ; preds = %bb43, %bb7 |
| 165 | + %phi = phi ptr [ %call1, %bb7 ], [ %a, %bb43 ] |
| 166 | + %getelementptr10 = getelementptr i8, ptr %phi, i64 0 |
| 167 | + %getelementptr11 = getelementptr i8, ptr %phi, i64 0 |
| 168 | + %getelementptr12 = getelementptr i8, ptr %phi, i64 0 |
| 169 | + %getelementptr13 = getelementptr i8, ptr %getelementptr12, i64 1 |
| 170 | + store i8 0, ptr %call1, align 1 |
| 171 | + br label %bb29 |
| 172 | + |
| 173 | +bb14: ; No predecessors! |
| 174 | + %getelementptr15 = getelementptr i8, ptr %getelementptr10, i64 8 |
| 175 | + %load16 = load i16, ptr %call1, align 4 |
| 176 | + br i1 false, label %bb22, label %bb17 |
| 177 | + |
| 178 | +bb17: ; preds = %bb14 |
| 179 | + %getelementptr18 = getelementptr i8, ptr %getelementptr11, i64 8 |
| 180 | + %load19 = load i16, ptr %call1, align 4 |
| 181 | + %getelementptr20 = getelementptr i8, ptr %getelementptr12, i64 8 |
| 182 | + store i16 0, ptr %call1, align 4 |
| 183 | + %getelementptr21 = getelementptr i8, ptr %phi, i64 0 |
| 184 | + br label %bb25 |
| 185 | + |
| 186 | +bb22: ; preds = %bb14 |
| 187 | + %getelementptr23 = getelementptr i8, ptr %phi, i64 0 |
| 188 | + %getelementptr24 = getelementptr i8, ptr %getelementptr23, i64 12 |
| 189 | + br label %bb25 |
| 190 | + |
| 191 | +bb25: ; preds = %bb22, %bb17 |
| 192 | + %phi26 = phi ptr [ %a, %bb17 ], [ %call1, %bb22 ] |
| 193 | + %phi27 = phi ptr [ %call1, %bb17 ], [ %call1, %bb22 ] |
| 194 | + %phi28 = phi ptr [ %call1, %bb17 ], [ %call1, %bb22 ] |
| 195 | + store i32 0, ptr %call1, align 4 |
| 196 | + br label %bb29 |
| 197 | + |
| 198 | +bb29: ; preds = %bb25, %bb9 |
| 199 | + %phi30 = phi ptr [ %call1, %bb9 ], [ %call1, %bb25 ] |
| 200 | + %phi31 = phi ptr [ %call1, %bb9 ], [ %call1, %bb25 ] |
| 201 | + %load32 = load i8, ptr %call1, align 4 |
| 202 | + %load33 = load i8, ptr %call1, align 4 |
| 203 | + %getelementptr34 = getelementptr i8, ptr %phi31, i64 12 |
| 204 | + %getelementptr35 = getelementptr i8, ptr %getelementptr12, i64 12 |
| 205 | + br label %bb86 |
| 206 | + |
| 207 | +bb36: ; No predecessors! |
| 208 | + %getelementptr37 = getelementptr i8, ptr %phi30, i64 12 |
| 209 | + br label %bb38 |
| 210 | + |
| 211 | +bb38: ; preds = %bb38, %bb36 |
| 212 | + %getelementptr39 = getelementptr [0 x i32], ptr %getelementptr34, i64 0, i64 0 |
| 213 | + %load40 = load i32, ptr %call1, align 4 |
| 214 | + %getelementptr41 = getelementptr [0 x i32], ptr %getelementptr37, i64 0, i64 0 |
| 215 | + %load42 = load i32, ptr %call1, align 4 |
| 216 | + br label %bb38 |
| 217 | + |
| 218 | +bb43: ; No predecessors! |
| 219 | + %getelementptr44 = getelementptr i8, ptr %getelementptr12, i64 8 |
| 220 | + %load45 = load i16, ptr %call1, align 4 |
| 221 | + store i16 0, ptr %call1, align 4 |
| 222 | + store i8 0, ptr %call1, align 4 |
| 223 | + %getelementptr46 = getelementptr i8, ptr %getelementptr12, i64 12 |
| 224 | + store i32 0, ptr %call1, align 4 |
| 225 | + %getelementptr47 = getelementptr i8, ptr %getelementptr12, i64 16 |
| 226 | + store i32 0, ptr %call1, align 4 |
| 227 | + br label %bb9 |
| 228 | + |
| 229 | +bb48: ; preds = %bb48, %bb |
| 230 | + %getelementptr49 = getelementptr i8, ptr %call1, i64 0 |
| 231 | + %getelementptr50 = getelementptr i8, ptr %getelementptr49, i64 1 |
| 232 | + store i8 0, ptr %call1, align 1 |
| 233 | + %getelementptr51 = getelementptr i8, ptr %getelementptr49, i64 8 |
| 234 | + store i16 0, ptr %call1, align 4 |
| 235 | + %getelementptr52 = getelementptr i8, ptr %getelementptr49, i64 12 |
| 236 | + store i32 0, ptr %call1, align 4 |
| 237 | + br label %bb48 |
| 238 | + |
| 239 | +bb53: ; preds = %bb71, %bb8 |
| 240 | + %phi54 = phi ptr [ %call1, %bb8 ], [ %a, %bb71 ] |
| 241 | + %getelementptr55 = getelementptr i8, ptr %phi54, i64 0 |
| 242 | + %getelementptr56 = getelementptr i8, ptr %phi54, i64 0 |
| 243 | + %getelementptr57 = getelementptr i8, ptr %phi54, i64 0 |
| 244 | + %getelementptr58 = getelementptr i8, ptr %getelementptr57, i64 1 |
| 245 | + br label %bb71 |
| 246 | + |
| 247 | +bb59: ; No predecessors! |
| 248 | + %getelementptr60 = getelementptr i8, ptr %phi54, i64 0 |
| 249 | + %getelementptr61 = getelementptr i8, ptr %getelementptr60, i64 12 |
| 250 | + br label %bb67 |
| 251 | + |
| 252 | +bb62: ; No predecessors! |
| 253 | + %getelementptr63 = getelementptr i8, ptr %getelementptr56, i64 8 |
| 254 | + %load64 = load i16, ptr %call1, align 4 |
| 255 | + %getelementptr65 = getelementptr i8, ptr %getelementptr57, i64 8 |
| 256 | + store i16 0, ptr %call1, align 4 |
| 257 | + %getelementptr66 = getelementptr i8, ptr %phi54, i64 0 |
| 258 | + br label %bb67 |
| 259 | + |
| 260 | +bb67: ; preds = %bb62, %bb59 |
| 261 | + %phi68 = phi ptr [ %a, %bb62 ], [ %call1, %bb59 ] |
| 262 | + %phi69 = phi ptr [ %call1, %bb62 ], [ %call1, %bb59 ] |
| 263 | + %phi70 = phi ptr [ %call1, %bb62 ], [ %call1, %bb59 ] |
| 264 | + store i32 0, ptr %call1, align 4 |
| 265 | + br label %bb71 |
| 266 | + |
| 267 | +bb71: ; preds = %bb67, %bb53 |
| 268 | + %phi72 = phi ptr [ %call1, %bb53 ], [ %call1, %bb67 ] |
| 269 | + %phi73 = phi ptr [ %call1, %bb53 ], [ %call1, %bb67 ] |
| 270 | + %load74 = load i8, ptr %call1, align 4 |
| 271 | + %load75 = load i8, ptr %call1, align 4 |
| 272 | + %getelementptr76 = getelementptr i8, ptr %phi72, i64 12 |
| 273 | + %getelementptr77 = getelementptr i8, ptr %getelementptr57, i64 12 |
| 274 | + %getelementptr78 = getelementptr [0 x i32], ptr %getelementptr76, i64 0, i64 0 |
| 275 | + %load79 = load i32, ptr %call1, align 4 |
| 276 | + %getelementptr80 = getelementptr [0 x i32], ptr %getelementptr77, i64 0, i64 0 |
| 277 | + store i32 0, ptr %call1, align 4 |
| 278 | + %load81 = load i8, ptr %call1, align 4 |
| 279 | + %getelementptr82 = getelementptr i8, ptr %getelementptr57, i64 8 |
| 280 | + %load83 = load i16, ptr %call1, align 4 |
| 281 | + store i16 0, ptr %call1, align 4 |
| 282 | + store i8 0, ptr %call1, align 4 |
| 283 | + %getelementptr84 = getelementptr i8, ptr %getelementptr57, i64 12 |
| 284 | + store i32 0, ptr %call1, align 4 |
| 285 | + %getelementptr85 = getelementptr i8, ptr %getelementptr57, i64 16 |
| 286 | + store i32 0, ptr %call1, align 4 |
| 287 | + br label %bb53 |
| 288 | + |
| 289 | +bb86: ; preds = %bb86, %bb29 |
| 290 | + %getelementptr87 = getelementptr [0 x i32], ptr %getelementptr34, i64 0, i64 0 |
| 291 | + %load88 = load i32, ptr %call1, align 4 |
| 292 | + %getelementptr89 = getelementptr [0 x i32], ptr %getelementptr35, i64 0, i64 0 |
| 293 | + store i32 0, ptr %call1, align 4 |
| 294 | + br label %bb86 |
| 295 | +} |
| 296 | + |
| 297 | +declare ptr @malloc(i64) |
| 298 | + |
| 299 | +; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write) |
| 300 | +declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #0 |
| 301 | + |
| 302 | +attributes #0 = { nocallback nofree nounwind willreturn memory(argmem: write) } |
0 commit comments