brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.0 KiB · 76e00a9 Raw
316 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes='sroa<preserve-cfg>' -S | FileCheck %s --check-prefixes=CHECK,CHECK-PRESERVE-CFG3; RUN: opt < %s -passes='sroa<modify-cfg>' -S | FileCheck %s --check-prefixes=CHECK,CHECK-MODIFY-CFG4target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-n8:16:32:64"5 6@a = external global i16, align 17 8declare void @maybe_writes()9 10define void @f2(i1 %c1) {11; CHECK-LABEL: @f2(12; CHECK-NEXT:  entry:13; CHECK-NEXT:    br i1 [[C1:%.*]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]14; CHECK:       if.then:15; CHECK-NEXT:    br label [[CLEANUP:%.*]]16; CHECK:       cleanup:17; CHECK-NEXT:    [[G_0_SROA_SPECULATE_LOAD_CLEANUP:%.*]] = load i16, ptr @a, align 118; CHECK-NEXT:    switch i32 2, label [[CLEANUP7:%.*]] [19; CHECK-NEXT:      i32 0, label [[LBL1:%.*]]20; CHECK-NEXT:      i32 2, label [[LBL1]]21; CHECK-NEXT:    ]22; CHECK:       if.else:23; CHECK-NEXT:    br label [[LBL1]]24; CHECK:       lbl1:25; CHECK-NEXT:    [[G_0_SROA_SPECULATED:%.*]] = phi i16 [ [[G_0_SROA_SPECULATE_LOAD_CLEANUP]], [[CLEANUP]] ], [ [[G_0_SROA_SPECULATE_LOAD_CLEANUP]], [[CLEANUP]] ], [ undef, [[IF_ELSE]] ]26; CHECK-NEXT:    unreachable27; CHECK:       cleanup7:28; CHECK-NEXT:    ret void29;30entry:31  %e = alloca i16, align 132  br i1 %c1, label %if.then, label %if.else33 34if.then:                                          ; preds = %entry35  br label %cleanup36 37cleanup:                                          ; preds = %if.then38  switch i32 2, label %cleanup7 [39  i32 0, label %lbl140  i32 2, label %lbl141  ]42 43if.else:                                          ; preds = %entry44  br label %lbl145 46lbl1:                                             ; preds = %if.else, %cleanup, %cleanup47  %g.0 = phi ptr [ @a, %cleanup ], [ @a, %cleanup ], [ %e, %if.else ]48  %0 = load i16, ptr %g.0, align 149  unreachable50 51cleanup7:                                         ; preds = %cleanup52  ret void53}54 55define void @f2_hwasan(i1 %c1) sanitize_hwaddress {56; CHECK-LABEL: @f2_hwasan(57; CHECK-NEXT:  entry:58; CHECK-NEXT:    [[E:%.*]] = alloca i16, align 159; CHECK-NEXT:    br i1 [[C1:%.*]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]60; CHECK:       if.then:61; CHECK-NEXT:    br label [[CLEANUP:%.*]]62; CHECK:       cleanup:63; CHECK-NEXT:    switch i32 2, label [[CLEANUP7:%.*]] [64; CHECK-NEXT:      i32 0, label [[LBL1:%.*]]65; CHECK-NEXT:      i32 2, label [[LBL1]]66; CHECK-NEXT:    ]67; CHECK:       if.else:68; CHECK-NEXT:    br label [[LBL1]]69; CHECK:       lbl1:70; CHECK-NEXT:    [[G_0:%.*]] = phi ptr [ @a, [[CLEANUP]] ], [ @a, [[CLEANUP]] ], [ [[E]], [[IF_ELSE]] ]71; CHECK-NEXT:    [[TMP0:%.*]] = load i16, ptr [[G_0]], align 172; CHECK-NEXT:    unreachable73; CHECK:       cleanup7:74; CHECK-NEXT:    ret void75;76entry:77  %e = alloca i16, align 178  br i1 %c1, label %if.then, label %if.else79 80if.then:                                          ; preds = %entry81  br label %cleanup82 83cleanup:                                          ; preds = %if.then84  switch i32 2, label %cleanup7 [85  i32 0, label %lbl186  i32 2, label %lbl187  ]88 89if.else:                                          ; preds = %entry90  br label %lbl191 92lbl1:                                             ; preds = %if.else, %cleanup, %cleanup93  %g.0 = phi ptr [ @a, %cleanup ], [ @a, %cleanup ], [ %e, %if.else ]94  %0 = load i16, ptr %g.0, align 195  unreachable96 97cleanup7:                                         ; preds = %cleanup98  ret void99}100 101define void @f3(i1 %c1) {102; CHECK-LABEL: @f3(103; CHECK-NEXT:  entry:104; CHECK-NEXT:    [[E:%.*]] = alloca i16, align 1105; CHECK-NEXT:    br i1 [[C1:%.*]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]106; CHECK:       if.then:107; CHECK-NEXT:    br label [[CLEANUP:%.*]]108; CHECK:       cleanup:109; CHECK-NEXT:    switch i32 2, label [[CLEANUP7:%.*]] [110; CHECK-NEXT:      i32 0, label [[LBL1:%.*]]111; CHECK-NEXT:      i32 2, label [[LBL1]]112; CHECK-NEXT:    ]113; CHECK:       if.else:114; CHECK-NEXT:    br label [[LBL1]]115; CHECK:       lbl1:116; CHECK-NEXT:    [[G_0:%.*]] = phi ptr [ @a, [[CLEANUP]] ], [ @a, [[CLEANUP]] ], [ [[E]], [[IF_ELSE]] ]117; CHECK-NEXT:    br label [[FINAL:%.*]]118; CHECK:       final:119; CHECK-NEXT:    [[TMP0:%.*]] = load i16, ptr [[G_0]], align 1120; CHECK-NEXT:    unreachable121; CHECK:       cleanup7:122; CHECK-NEXT:    ret void123;124entry:125  %e = alloca i16, align 1126  br i1 %c1, label %if.then, label %if.else127 128if.then:                                          ; preds = %entry129  br label %cleanup130 131cleanup:                                          ; preds = %if.then132  switch i32 2, label %cleanup7 [133  i32 0, label %lbl1134  i32 2, label %lbl1135  ]136 137if.else:                                          ; preds = %entry138  br label %lbl1139 140lbl1:                                             ; preds = %if.else, %cleanup, %cleanup141  %g.0 = phi ptr [ @a, %cleanup ], [ @a, %cleanup ], [ %e, %if.else ]142  br label %final143 144final:145  %0 = load i16, ptr %g.0, align 1146  unreachable147 148cleanup7:                                         ; preds = %cleanup149  ret void150}151 152define void @f4(i1 %c1) {153; CHECK-LABEL: @f4(154; CHECK-NEXT:  entry:155; CHECK-NEXT:    [[E:%.*]] = alloca i16, align 1156; CHECK-NEXT:    br i1 [[C1:%.*]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]157; CHECK:       if.then:158; CHECK-NEXT:    br label [[CLEANUP:%.*]]159; CHECK:       cleanup:160; CHECK-NEXT:    switch i32 2, label [[CLEANUP7:%.*]] [161; CHECK-NEXT:      i32 0, label [[LBL1:%.*]]162; CHECK-NEXT:      i32 2, label [[LBL1]]163; CHECK-NEXT:    ]164; CHECK:       if.else:165; CHECK-NEXT:    br label [[LBL1]]166; CHECK:       lbl1:167; CHECK-NEXT:    [[G_0:%.*]] = phi ptr [ @a, [[CLEANUP]] ], [ @a, [[CLEANUP]] ], [ [[E]], [[IF_ELSE]] ]168; CHECK-NEXT:    br label [[FINAL:%.*]]169; CHECK:       final:170; CHECK-NEXT:    call void @maybe_writes()171; CHECK-NEXT:    [[TMP0:%.*]] = load i16, ptr [[G_0]], align 1172; CHECK-NEXT:    unreachable173; CHECK:       cleanup7:174; CHECK-NEXT:    ret void175;176entry:177  %e = alloca i16, align 1178  br i1 %c1, label %if.then, label %if.else179 180if.then:                                          ; preds = %entry181  br label %cleanup182 183cleanup:                                          ; preds = %if.then184  switch i32 2, label %cleanup7 [185  i32 0, label %lbl1186  i32 2, label %lbl1187  ]188 189if.else:                                          ; preds = %entry190  br label %lbl1191 192lbl1:                                             ; preds = %if.else, %cleanup, %cleanup193  %g.0 = phi ptr [ @a, %cleanup ], [ @a, %cleanup ], [ %e, %if.else ]194  br label %final195 196final:197  call void @maybe_writes()198  %0 = load i16, ptr %g.0, align 1199  unreachable200 201cleanup7:                                         ; preds = %cleanup202  ret void203}204 205define void @f5(i1 %c1, i1 %c2) {206; CHECK-LABEL: @f5(207; CHECK-NEXT:  entry:208; CHECK-NEXT:    [[E:%.*]] = alloca i16, align 1209; CHECK-NEXT:    br i1 [[C1:%.*]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]210; CHECK:       if.then:211; CHECK-NEXT:    br label [[CLEANUP:%.*]]212; CHECK:       cleanup:213; CHECK-NEXT:    switch i32 2, label [[CLEANUP7:%.*]] [214; CHECK-NEXT:      i32 0, label [[LBL1:%.*]]215; CHECK-NEXT:      i32 2, label [[LBL1]]216; CHECK-NEXT:    ]217; CHECK:       if.else:218; CHECK-NEXT:    br label [[LBL1]]219; CHECK:       lbl1:220; CHECK-NEXT:    [[G_0:%.*]] = phi ptr [ @a, [[CLEANUP]] ], [ @a, [[CLEANUP]] ], [ [[E]], [[IF_ELSE]] ]221; CHECK-NEXT:    br i1 [[C2:%.*]], label [[FINAL:%.*]], label [[CLEANUP7]]222; CHECK:       final:223; CHECK-NEXT:    [[TMP0:%.*]] = load i16, ptr [[G_0]], align 1224; CHECK-NEXT:    unreachable225; CHECK:       cleanup7:226; CHECK-NEXT:    ret void227;228entry:229  %e = alloca i16, align 1230  br i1 %c1, label %if.then, label %if.else231 232if.then:                                          ; preds = %entry233  br label %cleanup234 235cleanup:                                          ; preds = %if.then236  switch i32 2, label %cleanup7 [237  i32 0, label %lbl1238  i32 2, label %lbl1239  ]240 241if.else:                                          ; preds = %entry242  br label %lbl1243 244lbl1:                                             ; preds = %if.else, %cleanup, %cleanup245  %g.0 = phi ptr [ @a, %cleanup ], [ @a, %cleanup ], [ %e, %if.else ]246  br i1 %c2, label %final, label %cleanup7247 248final:249  %0 = load i16, ptr %g.0, align 1250  unreachable251 252cleanup7:                                         ; preds = %cleanup253  ret void254}255 256define void @f6(i1 %c1) {257; CHECK-LABEL: @f6(258; CHECK-NEXT:  entry:259; CHECK-NEXT:    [[E:%.*]] = alloca i16, align 1260; CHECK-NEXT:    br i1 [[C1:%.*]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]261; CHECK:       if.then:262; CHECK-NEXT:    br label [[CLEANUP:%.*]]263; CHECK:       cleanup:264; CHECK-NEXT:    switch i32 2, label [[CLEANUP7:%.*]] [265; CHECK-NEXT:      i32 0, label [[LBL1:%.*]]266; CHECK-NEXT:      i32 2, label [[LBL1]]267; CHECK-NEXT:    ]268; CHECK:       if.else:269; CHECK-NEXT:    br label [[LBL1]]270; CHECK:       lbl1:271; CHECK-NEXT:    [[G_0:%.*]] = phi ptr [ @a, [[CLEANUP]] ], [ @a, [[CLEANUP]] ], [ [[E]], [[IF_ELSE]] ]272; CHECK-NEXT:    br label [[FINAL:%.*]]273; CHECK:       unreachable_pred:274; CHECK-NEXT:    br label [[FINAL]]275; CHECK:       final:276; CHECK-NEXT:    call void @maybe_writes()277; CHECK-NEXT:    [[TMP0:%.*]] = load i16, ptr [[G_0]], align 1278; CHECK-NEXT:    unreachable279; CHECK:       cleanup7:280; CHECK-NEXT:    ret void281;282entry:283  %e = alloca i16, align 1284  br i1 %c1, label %if.then, label %if.else285 286if.then:                                          ; preds = %entry287  br label %cleanup288 289cleanup:                                          ; preds = %if.then290  switch i32 2, label %cleanup7 [291  i32 0, label %lbl1292  i32 2, label %lbl1293  ]294 295if.else:                                          ; preds = %entry296  br label %lbl1297 298lbl1:                                             ; preds = %if.else, %cleanup, %cleanup299  %g.0 = phi ptr [ @a, %cleanup ], [ @a, %cleanup ], [ %e, %if.else ]300  br label %final301 302unreachable_pred:303  br label %final304 305final:306  call void @maybe_writes()307  %0 = load i16, ptr %g.0, align 1308  unreachable309 310cleanup7:                                         ; preds = %cleanup311  ret void312}313;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:314; CHECK-MODIFY-CFG: {{.*}}315; CHECK-PRESERVE-CFG: {{.*}}316