brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.5 KiB · 917d81b Raw
275 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -passes=instcombine -S < %s | FileCheck %s3 4define i32 @phi_freeze_same_consts(i1 %c0, i1 %c1) {5; CHECK-LABEL: define i32 @phi_freeze_same_consts(6; CHECK-SAME: i1 [[C0:%.*]], i1 [[C1:%.*]]) {7; CHECK-NEXT:  [[ENTRY:.*:]]8; CHECK-NEXT:    br i1 [[C0]], label %[[BB_FREEZE:.*]], label %[[BB_OTHER:.*]]9; CHECK:       [[BB_FREEZE]]:10; CHECK-NEXT:    br label %[[FINAL:.*]]11; CHECK:       [[BB_OTHER]]:12; CHECK-NEXT:    br i1 [[C1]], label %[[CA:.*]], label %[[CB:.*]]13; CHECK:       [[CA]]:14; CHECK-NEXT:    br label %[[FINAL]]15; CHECK:       [[CB]]:16; CHECK-NEXT:    br label %[[FINAL]]17; CHECK:       [[FINAL]]:18; CHECK-NEXT:    ret i32 4219;20entry:21  br i1 %c0, label %bb_freeze, label %bb_other22 23bb_freeze:24  %f = freeze i32 undef25  br label %final26 27bb_other:28  br i1 %c1, label %cA, label %cB29cA:30  br label %final31cB:32  br label %final33 34final:35  %phi = phi i32 [ %f, %bb_freeze ], [ 42, %cA ], [ 42, %cB ]36  ret i32 %phi37}38 39define i32 @phi_freeze_mixed_consts(i1 %c0, i1 %c1) {40; CHECK-LABEL: define i32 @phi_freeze_mixed_consts(41; CHECK-SAME: i1 [[C0:%.*]], i1 [[C1:%.*]]) {42; CHECK-NEXT:  [[ENTRY:.*:]]43; CHECK-NEXT:    br i1 [[C0]], label %[[BB_FREEZE:.*]], label %[[BB_OTHER:.*]]44; CHECK:       [[BB_FREEZE]]:45; CHECK-NEXT:    br label %[[FINAL:.*]]46; CHECK:       [[BB_OTHER]]:47; CHECK-NEXT:    br i1 [[C1]], label %[[CA:.*]], label %[[CB:.*]]48; CHECK:       [[CA]]:49; CHECK-NEXT:    br label %[[FINAL]]50; CHECK:       [[CB]]:51; CHECK-NEXT:    br label %[[FINAL]]52; CHECK:       [[FINAL]]:53; CHECK-NEXT:    [[PHI:%.*]] = phi i32 [ 0, %[[BB_FREEZE]] ], [ 42, %[[CA]] ], [ 7, %[[CB]] ]54; CHECK-NEXT:    ret i32 [[PHI]]55;56entry:57  br i1 %c0, label %bb_freeze, label %bb_other58 59bb_freeze:60  %f = freeze i32 undef61  br label %final62 63bb_other:64  br i1 %c1, label %cA, label %cB65cA:66  br label %final67cB:68  br label %final69 70final:71  %phi = phi i32 [ %f, %bb_freeze ], [ 42, %cA ], [ 7, %cB ]72  ret i32 %phi73}74 75define i32 @phi_freeze_with_nonconst_incoming(i32 %x, i1 %c0, i1 %c1) {76; CHECK-LABEL: define i32 @phi_freeze_with_nonconst_incoming(77; CHECK-SAME: i32 [[X:%.*]], i1 [[C0:%.*]], i1 [[C1:%.*]]) {78; CHECK-NEXT:  [[ENTRY:.*:]]79; CHECK-NEXT:    br i1 [[C0]], label %[[BB_FREEZE:.*]], label %[[BB_OTHER:.*]]80; CHECK:       [[BB_FREEZE]]:81; CHECK-NEXT:    br label %[[FINAL:.*]]82; CHECK:       [[BB_OTHER]]:83; CHECK-NEXT:    br i1 [[C1]], label %[[CA:.*]], label %[[CB:.*]]84; CHECK:       [[CA]]:85; CHECK-NEXT:    br label %[[FINAL]]86; CHECK:       [[CB]]:87; CHECK-NEXT:    br label %[[FINAL]]88; CHECK:       [[FINAL]]:89; CHECK-NEXT:    [[PHI:%.*]] = phi i32 [ 0, %[[BB_FREEZE]] ], [ [[X]], %[[CA]] ], [ 13, %[[CB]] ]90; CHECK-NEXT:    ret i32 [[PHI]]91;92entry:93  br i1 %c0, label %bb_freeze, label %bb_other94 95bb_freeze:96  %f = freeze i32 undef97  br label %final98 99bb_other:100  br i1 %c1, label %cA, label %cB101cA:102  br label %final103cB:104  br label %final105 106final:107  %phi = phi i32 [ %f, %bb_freeze ], [ %x, %cA ], [ 13, %cB ]108  ret i32 %phi109}110 111define <4 x i8> @phi_freeze_vector(i1 %c0, i1 %c1) {112; CHECK-LABEL: define <4 x i8> @phi_freeze_vector(113; CHECK-SAME: i1 [[C0:%.*]], i1 [[C1:%.*]]) {114; CHECK-NEXT:  [[ENTRY:.*:]]115; CHECK-NEXT:    br i1 [[C0]], label %[[BB_FREEZE:.*]], label %[[BB_OTHER:.*]]116; CHECK:       [[BB_FREEZE]]:117; CHECK-NEXT:    br label %[[FINAL:.*]]118; CHECK:       [[BB_OTHER]]:119; CHECK-NEXT:    br i1 [[C1]], label %[[CA:.*]], label %[[CB:.*]]120; CHECK:       [[CA]]:121; CHECK-NEXT:    br label %[[FINAL]]122; CHECK:       [[CB]]:123; CHECK-NEXT:    br label %[[FINAL]]124; CHECK:       [[FINAL]]:125; CHECK-NEXT:    ret <4 x i8> splat (i8 9)126;127entry:128  br i1 %c0, label %bb_freeze, label %bb_other129 130bb_freeze:131  %f = freeze <4 x i8> undef132  br label %final133 134bb_other:135  br i1 %c1, label %cA, label %cB136 137cA:138  br label %final139 140cB:141  br label %final142 143final:144  %phi = phi <4 x i8> [ %f, %bb_freeze ],145  [<i8 9, i8 9, i8 9, i8 9>, %cA ],146  [<i8 9, i8 9, i8 9, i8 9>, %cB ]147  ret <4 x i8> %phi148}149 150define i32 @multi_use_one_folds_one_not_zero(i1 %c0, i1 %c1, i1 %c2) {151; CHECK-LABEL: define i32 @multi_use_one_folds_one_not_zero(152; CHECK-SAME: i1 [[C0:%.*]], i1 [[C1:%.*]], i1 [[C2:%.*]]) {153; CHECK-NEXT:  [[ENTRY:.*:]]154; CHECK-NEXT:    br i1 [[C0]], label %[[BB_OTHER3:.*]], label %[[CC1:.*]]155; CHECK:       [[BB_OTHER3]]:156; CHECK-NEXT:    br label %[[MID:.*]]157; CHECK:       [[CC1]]:158; CHECK-NEXT:    br i1 [[C1]], label %[[CA:.*]], label %[[CB:.*]]159; CHECK:       [[CA]]:160; CHECK-NEXT:    br label %[[MID]]161; CHECK:       [[CB]]:162; CHECK-NEXT:    br label %[[MID]]163; CHECK:       [[MID]]:164; CHECK-NEXT:    [[PHI_FOLD:%.*]] = phi i32 [ 0, %[[BB_OTHER3]] ], [ 1, %[[CA]] ], [ 1, %[[CB]] ]165; CHECK-NEXT:    br i1 [[C2]], label %[[BB_FREEZE2:.*]], label %[[CD:.*]]166; CHECK:       [[BB_FREEZE2]]:167; CHECK-NEXT:    br label %[[FINAL:.*]]168; CHECK:       [[BB_OTHER2:.*:]]169; CHECK-NEXT:    br i1 true, label %[[CA]], label %[[CB]]170; CHECK:       [[CC:.*:]]171; CHECK-NEXT:    br label %[[FINAL]]172; CHECK:       [[CD]]:173; CHECK-NEXT:    br label %[[FINAL]]174; CHECK:       [[FINAL]]:175; CHECK-NEXT:    ret i32 [[PHI_FOLD]]176;177entry:178  %f = freeze i32 undef179  br i1 %c0, label %bb_freeze, label %bb_other180bb_freeze:181  br label %mid182bb_other:183  br i1 %c1, label %cA, label %cB184cA:185  br label %mid186cB:187  br label %mid188mid:189  %phi_no_fold  = phi i32 [ %f, %bb_freeze ], [ 1, %cA ], [ 1, %cB ]190  br i1 %c2, label %bb_freeze2, label %cD191bb_freeze2:192  br label %final193bb_other2:194  br i1 %c1, label %cA, label %cB195cC:196  br label %final197cD:198  br label %final199final:200  %phi_fold  = phi i32 [ %f, %bb_freeze2 ], [ 0, %cC ], [ 0, %cD ]201  %a = add i32 %phi_fold, %phi_no_fold202  ret i32 %a203}204 205define i32 @phi_freeze_poison(i1 %c0, i1 %c1) {206; CHECK-LABEL: define i32 @phi_freeze_poison(207; CHECK-SAME: i1 [[C0:%.*]], i1 [[C1:%.*]]) {208; CHECK-NEXT:  [[ENTRY:.*:]]209; CHECK-NEXT:    br i1 [[C0]], label %[[BB_FREEZE:.*]], label %[[BB_OTHER:.*]]210; CHECK:       [[BB_FREEZE]]:211; CHECK-NEXT:    br label %[[FINAL:.*]]212; CHECK:       [[BB_OTHER]]:213; CHECK-NEXT:    br i1 [[C1]], label %[[CA:.*]], label %[[CB:.*]]214; CHECK:       [[CA]]:215; CHECK-NEXT:    br label %[[FINAL]]216; CHECK:       [[CB]]:217; CHECK-NEXT:    br label %[[FINAL]]218; CHECK:       [[FINAL]]:219; CHECK-NEXT:    ret i32 0220;221entry:222  br i1 %c0, label %bb_freeze, label %bb_other223 224bb_freeze:225  %f = freeze i32 undef226  br label %final227 228bb_other:229  br i1 %c1, label %cA, label %cB230cA:231  br label %final232cB:233  br label %final234 235final:236  %phi = phi i32 [ %f, %bb_freeze ], [ poison, %cA ], [ poison, %cB ]237  ret i32 %phi238}239 240define <2 x i32> @phi_freeze_poison_vec(i1 %c0, i1 %c1) {241; CHECK-LABEL: define <2 x i32> @phi_freeze_poison_vec(242; CHECK-SAME: i1 [[C0:%.*]], i1 [[C1:%.*]]) {243; CHECK-NEXT:  [[ENTRY:.*:]]244; CHECK-NEXT:    br i1 [[C0]], label %[[BB_FREEZE:.*]], label %[[BB_OTHER:.*]]245; CHECK:       [[BB_FREEZE]]:246; CHECK-NEXT:    br label %[[FINAL:.*]]247; CHECK:       [[BB_OTHER]]:248; CHECK-NEXT:    br i1 [[C1]], label %[[CA:.*]], label %[[CB:.*]]249; CHECK:       [[CA]]:250; CHECK-NEXT:    br label %[[FINAL]]251; CHECK:       [[CB]]:252; CHECK-NEXT:    br label %[[FINAL]]253; CHECK:       [[FINAL]]:254; CHECK-NEXT:    [[PHI:%.*]] = phi <2 x i32> [ zeroinitializer, %[[BB_FREEZE]] ], [ <i32 poison, i32 1>, %[[CA]] ], [ <i32 poison, i32 1>, %[[CB]] ]255; CHECK-NEXT:    ret <2 x i32> [[PHI]]256;257entry:258  br i1 %c0, label %bb_freeze, label %bb_other259 260bb_freeze:261  %f = freeze <2 x i32> undef262  br label %final263 264bb_other:265  br i1 %c1, label %cA, label %cB266cA:267  br label %final268cB:269  br label %final270 271final:272  %phi = phi <2 x i32> [ %f, %bb_freeze ], [ <i32 poison, i32 1>, %cA ], [ <i32 poison, i32 1>, %cB ]273  ret <2 x i32> %phi274}275