brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.4 KiB · 60a010c Raw
303 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 42; RUN: opt -p dse -S %s | FileCheck %s3 4target datalayout = "E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-v128:64-a:8:16-n32:64"5 6define 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 812; CHECK-NEXT:    [[LOAD:%.*]] = load ptr, ptr [[A]], align 813; CHECK-NEXT:    [[LOAD2:%.*]] = load i32, ptr [[LOAD]], align 814; CHECK-NEXT:    [[GETELEMENTPTR:%.*]] = getelementptr i8, ptr [[CALL1]], i64 015; CHECK-NEXT:    [[GETELEMENTPTR3:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR]], i64 116; CHECK-NEXT:    [[GETELEMENTPTR4:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR]], i64 817; CHECK-NEXT:    store i16 0, ptr [[GETELEMENTPTR4]], align 418; CHECK-NEXT:    [[GETELEMENTPTR5:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR]], i64 1219; CHECK-NEXT:    store i32 0, ptr [[CALL1]], align 420; CHECK-NEXT:    [[LOAD6:%.*]] = load i32, ptr inttoptr (i64 4 to ptr), align 421; 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 029; CHECK-NEXT:    [[GETELEMENTPTR11:%.*]] = getelementptr i8, ptr [[PHI]], i64 030; CHECK-NEXT:    [[GETELEMENTPTR12:%.*]] = getelementptr i8, ptr [[PHI]], i64 031; CHECK-NEXT:    [[GETELEMENTPTR13:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR12]], i64 132; CHECK-NEXT:    store i8 0, ptr [[CALL1]], align 133; CHECK-NEXT:    br label [[BB29:%.*]]34; CHECK:       bb14:35; CHECK-NEXT:    [[GETELEMENTPTR15:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR10]], i64 836; CHECK-NEXT:    [[LOAD16:%.*]] = load i16, ptr [[CALL1]], align 437; CHECK-NEXT:    br i1 false, label [[BB22:%.*]], label [[BB17:%.*]]38; CHECK:       bb17:39; CHECK-NEXT:    [[GETELEMENTPTR18:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR11]], i64 840; CHECK-NEXT:    [[LOAD19:%.*]] = load i16, ptr [[CALL1]], align 441; CHECK-NEXT:    [[GETELEMENTPTR20:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR12]], i64 842; CHECK-NEXT:    store i16 0, ptr [[CALL1]], align 443; CHECK-NEXT:    [[GETELEMENTPTR21:%.*]] = getelementptr i8, ptr [[PHI]], i64 044; CHECK-NEXT:    br label [[BB25:%.*]]45; CHECK:       bb22:46; CHECK-NEXT:    [[GETELEMENTPTR23:%.*]] = getelementptr i8, ptr [[PHI]], i64 047; CHECK-NEXT:    [[GETELEMENTPTR24:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR23]], i64 1248; 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 454; 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 459; CHECK-NEXT:    [[LOAD33:%.*]] = load i8, ptr [[CALL1]], align 460; CHECK-NEXT:    [[GETELEMENTPTR34:%.*]] = getelementptr i8, ptr [[PHI31]], i64 1261; CHECK-NEXT:    [[GETELEMENTPTR35:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR12]], i64 1262; CHECK-NEXT:    br label [[BB86:%.*]]63; CHECK:       bb36:64; CHECK-NEXT:    [[GETELEMENTPTR37:%.*]] = getelementptr i8, ptr [[PHI30]], i64 1265; CHECK-NEXT:    br label [[BB38:%.*]]66; CHECK:       bb38:67; CHECK-NEXT:    [[GETELEMENTPTR39:%.*]] = getelementptr [0 x i32], ptr [[GETELEMENTPTR34]], i64 0, i64 068; CHECK-NEXT:    [[LOAD40:%.*]] = load i32, ptr [[CALL1]], align 469; CHECK-NEXT:    [[GETELEMENTPTR41:%.*]] = getelementptr [0 x i32], ptr [[GETELEMENTPTR37]], i64 0, i64 070; CHECK-NEXT:    [[LOAD42:%.*]] = load i32, ptr [[CALL1]], align 471; CHECK-NEXT:    br label [[BB38]]72; CHECK:       bb43:73; CHECK-NEXT:    [[GETELEMENTPTR44:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR12]], i64 874; CHECK-NEXT:    [[LOAD45:%.*]] = load i16, ptr [[CALL1]], align 475; CHECK-NEXT:    store i16 0, ptr [[CALL1]], align 476; CHECK-NEXT:    store i8 0, ptr [[CALL1]], align 477; CHECK-NEXT:    [[GETELEMENTPTR46:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR12]], i64 1278; CHECK-NEXT:    store i32 0, ptr [[CALL1]], align 479; CHECK-NEXT:    [[GETELEMENTPTR47:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR12]], i64 1680; CHECK-NEXT:    store i32 0, ptr [[CALL1]], align 481; CHECK-NEXT:    br label [[BB9]]82; CHECK:       bb48:83; CHECK-NEXT:    [[GETELEMENTPTR49:%.*]] = getelementptr i8, ptr [[CALL1]], i64 084; CHECK-NEXT:    [[GETELEMENTPTR50:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR49]], i64 185; CHECK-NEXT:    [[GETELEMENTPTR51:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR49]], i64 886; CHECK-NEXT:    [[GETELEMENTPTR52:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR49]], i64 1287; CHECK-NEXT:    store i32 0, ptr [[CALL1]], align 488; 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 092; CHECK-NEXT:    [[GETELEMENTPTR56:%.*]] = getelementptr i8, ptr [[PHI54]], i64 093; CHECK-NEXT:    [[GETELEMENTPTR57:%.*]] = getelementptr i8, ptr [[PHI54]], i64 094; CHECK-NEXT:    [[GETELEMENTPTR58:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR57]], i64 195; CHECK-NEXT:    br label [[BB71]]96; CHECK:       bb59:97; CHECK-NEXT:    [[GETELEMENTPTR60:%.*]] = getelementptr i8, ptr [[PHI54]], i64 098; CHECK-NEXT:    [[GETELEMENTPTR61:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR60]], i64 1299; CHECK-NEXT:    br label [[BB67:%.*]]100; CHECK:       bb62:101; CHECK-NEXT:    [[GETELEMENTPTR63:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR56]], i64 8102; CHECK-NEXT:    [[LOAD64:%.*]] = load i16, ptr [[CALL1]], align 4103; CHECK-NEXT:    [[GETELEMENTPTR65:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR57]], i64 8104; CHECK-NEXT:    store i16 0, ptr [[CALL1]], align 4105; CHECK-NEXT:    [[GETELEMENTPTR66:%.*]] = getelementptr i8, ptr [[PHI54]], i64 0106; 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 4112; 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 4117; CHECK-NEXT:    [[LOAD75:%.*]] = load i8, ptr [[CALL1]], align 4118; CHECK-NEXT:    [[GETELEMENTPTR76:%.*]] = getelementptr i8, ptr [[PHI72]], i64 12119; CHECK-NEXT:    [[GETELEMENTPTR77:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR57]], i64 12120; CHECK-NEXT:    [[GETELEMENTPTR78:%.*]] = getelementptr [0 x i32], ptr [[GETELEMENTPTR76]], i64 0, i64 0121; CHECK-NEXT:    [[LOAD79:%.*]] = load i32, ptr [[CALL1]], align 4122; CHECK-NEXT:    [[GETELEMENTPTR80:%.*]] = getelementptr [0 x i32], ptr [[GETELEMENTPTR77]], i64 0, i64 0123; CHECK-NEXT:    store i32 0, ptr [[CALL1]], align 4124; CHECK-NEXT:    [[LOAD81:%.*]] = load i8, ptr [[CALL1]], align 4125; CHECK-NEXT:    [[GETELEMENTPTR82:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR57]], i64 8126; CHECK-NEXT:    [[LOAD83:%.*]] = load i16, ptr [[CALL1]], align 4127; CHECK-NEXT:    store i16 0, ptr [[CALL1]], align 4128; CHECK-NEXT:    store i8 0, ptr [[CALL1]], align 4129; CHECK-NEXT:    [[GETELEMENTPTR84:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR57]], i64 12130; CHECK-NEXT:    store i32 0, ptr [[CALL1]], align 4131; CHECK-NEXT:    [[GETELEMENTPTR85:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR57]], i64 16132; CHECK-NEXT:    store i32 0, ptr [[CALL1]], align 4133; CHECK-NEXT:    br label [[BB53]]134; CHECK:       bb86:135; CHECK-NEXT:    [[GETELEMENTPTR87:%.*]] = getelementptr [0 x i32], ptr [[GETELEMENTPTR34]], i64 0, i64 0136; CHECK-NEXT:    [[LOAD88:%.*]] = load i32, ptr [[CALL1]], align 4137; CHECK-NEXT:    [[GETELEMENTPTR89:%.*]] = getelementptr [0 x i32], ptr [[GETELEMENTPTR35]], i64 0, i64 0138; CHECK-NEXT:    store i32 0, ptr [[CALL1]], align 4139; CHECK-NEXT:    br label [[BB86]]140;141bb: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 8146  %load = load ptr, ptr %a, align 8147  %load2 = load i32, ptr %load, align 8148  %getelementptr = getelementptr i8, ptr %call1, i64 0149  %getelementptr3 = getelementptr i8, ptr %getelementptr, i64 1150  store i8 0, ptr %call1, align 1151  %getelementptr4 = getelementptr i8, ptr %getelementptr, i64 8152  store i16 0, ptr %getelementptr4, align 4153  %getelementptr5 = getelementptr i8, ptr %getelementptr, i64 12154  store i32 0, ptr %call1, align 4155  %load6 = load i32, ptr inttoptr (i64 4 to ptr), align 4156  br label %bb48157 158bb7:                                              ; No predecessors!159  br label %bb9160 161bb8:                                              ; No predecessors!162  br label %bb53163 164bb9:                                              ; preds = %bb43, %bb7165  %phi = phi ptr [ %call1, %bb7 ], [ %a, %bb43 ]166  %getelementptr10 = getelementptr i8, ptr %phi, i64 0167  %getelementptr11 = getelementptr i8, ptr %phi, i64 0168  %getelementptr12 = getelementptr i8, ptr %phi, i64 0169  %getelementptr13 = getelementptr i8, ptr %getelementptr12, i64 1170  store i8 0, ptr %call1, align 1171  br label %bb29172 173bb14:                                             ; No predecessors!174  %getelementptr15 = getelementptr i8, ptr %getelementptr10, i64 8175  %load16 = load i16, ptr %call1, align 4176  br i1 false, label %bb22, label %bb17177 178bb17:                                             ; preds = %bb14179  %getelementptr18 = getelementptr i8, ptr %getelementptr11, i64 8180  %load19 = load i16, ptr %call1, align 4181  %getelementptr20 = getelementptr i8, ptr %getelementptr12, i64 8182  store i16 0, ptr %call1, align 4183  %getelementptr21 = getelementptr i8, ptr %phi, i64 0184  br label %bb25185 186bb22:                                             ; preds = %bb14187  %getelementptr23 = getelementptr i8, ptr %phi, i64 0188  %getelementptr24 = getelementptr i8, ptr %getelementptr23, i64 12189  br label %bb25190 191bb25:                                             ; preds = %bb22, %bb17192  %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 4196  br label %bb29197 198bb29:                                             ; preds = %bb25, %bb9199  %phi30 = phi ptr [ %call1, %bb9 ], [ %call1, %bb25 ]200  %phi31 = phi ptr [ %call1, %bb9 ], [ %call1, %bb25 ]201  %load32 = load i8, ptr %call1, align 4202  %load33 = load i8, ptr %call1, align 4203  %getelementptr34 = getelementptr i8, ptr %phi31, i64 12204  %getelementptr35 = getelementptr i8, ptr %getelementptr12, i64 12205  br label %bb86206 207bb36:                                             ; No predecessors!208  %getelementptr37 = getelementptr i8, ptr %phi30, i64 12209  br label %bb38210 211bb38:                                             ; preds = %bb38, %bb36212  %getelementptr39 = getelementptr [0 x i32], ptr %getelementptr34, i64 0, i64 0213  %load40 = load i32, ptr %call1, align 4214  %getelementptr41 = getelementptr [0 x i32], ptr %getelementptr37, i64 0, i64 0215  %load42 = load i32, ptr %call1, align 4216  br label %bb38217 218bb43:                                             ; No predecessors!219  %getelementptr44 = getelementptr i8, ptr %getelementptr12, i64 8220  %load45 = load i16, ptr %call1, align 4221  store i16 0, ptr %call1, align 4222  store i8 0, ptr %call1, align 4223  %getelementptr46 = getelementptr i8, ptr %getelementptr12, i64 12224  store i32 0, ptr %call1, align 4225  %getelementptr47 = getelementptr i8, ptr %getelementptr12, i64 16226  store i32 0, ptr %call1, align 4227  br label %bb9228 229bb48:                                             ; preds = %bb48, %bb230  %getelementptr49 = getelementptr i8, ptr %call1, i64 0231  %getelementptr50 = getelementptr i8, ptr %getelementptr49, i64 1232  store i8 0, ptr %call1, align 1233  %getelementptr51 = getelementptr i8, ptr %getelementptr49, i64 8234  store i16 0, ptr %call1, align 4235  %getelementptr52 = getelementptr i8, ptr %getelementptr49, i64 12236  store i32 0, ptr %call1, align 4237  br label %bb48238 239bb53:                                             ; preds = %bb71, %bb8240  %phi54 = phi ptr [ %call1, %bb8 ], [ %a, %bb71 ]241  %getelementptr55 = getelementptr i8, ptr %phi54, i64 0242  %getelementptr56 = getelementptr i8, ptr %phi54, i64 0243  %getelementptr57 = getelementptr i8, ptr %phi54, i64 0244  %getelementptr58 = getelementptr i8, ptr %getelementptr57, i64 1245  br label %bb71246 247bb59:                                             ; No predecessors!248  %getelementptr60 = getelementptr i8, ptr %phi54, i64 0249  %getelementptr61 = getelementptr i8, ptr %getelementptr60, i64 12250  br label %bb67251 252bb62:                                             ; No predecessors!253  %getelementptr63 = getelementptr i8, ptr %getelementptr56, i64 8254  %load64 = load i16, ptr %call1, align 4255  %getelementptr65 = getelementptr i8, ptr %getelementptr57, i64 8256  store i16 0, ptr %call1, align 4257  %getelementptr66 = getelementptr i8, ptr %phi54, i64 0258  br label %bb67259 260bb67:                                             ; preds = %bb62, %bb59261  %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 4265  br label %bb71266 267bb71:                                             ; preds = %bb67, %bb53268  %phi72 = phi ptr [ %call1, %bb53 ], [ %call1, %bb67 ]269  %phi73 = phi ptr [ %call1, %bb53 ], [ %call1, %bb67 ]270  %load74 = load i8, ptr %call1, align 4271  %load75 = load i8, ptr %call1, align 4272  %getelementptr76 = getelementptr i8, ptr %phi72, i64 12273  %getelementptr77 = getelementptr i8, ptr %getelementptr57, i64 12274  %getelementptr78 = getelementptr [0 x i32], ptr %getelementptr76, i64 0, i64 0275  %load79 = load i32, ptr %call1, align 4276  %getelementptr80 = getelementptr [0 x i32], ptr %getelementptr77, i64 0, i64 0277  store i32 0, ptr %call1, align 4278  %load81 = load i8, ptr %call1, align 4279  %getelementptr82 = getelementptr i8, ptr %getelementptr57, i64 8280  %load83 = load i16, ptr %call1, align 4281  store i16 0, ptr %call1, align 4282  store i8 0, ptr %call1, align 4283  %getelementptr84 = getelementptr i8, ptr %getelementptr57, i64 12284  store i32 0, ptr %call1, align 4285  %getelementptr85 = getelementptr i8, ptr %getelementptr57, i64 16286  store i32 0, ptr %call1, align 4287  br label %bb53288 289bb86:                                             ; preds = %bb86, %bb29290  %getelementptr87 = getelementptr [0 x i32], ptr %getelementptr34, i64 0, i64 0291  %load88 = load i32, ptr %call1, align 4292  %getelementptr89 = getelementptr [0 x i32], ptr %getelementptr35, i64 0, i64 0293  store i32 0, ptr %call1, align 4294  br label %bb86295}296 297declare ptr @malloc(i64)298 299; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)300declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #0301 302attributes #0 = { nocallback nofree nounwind willreturn memory(argmem: write) }303