brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.3 KiB · 573a4c0 Raw
240 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=newgvn -S %s | FileCheck %s3 4; Test cases where initially a PHI-of-ops can be simplified to an existing5; value, but later we need to revisit the decision because the leader of6; one of the operands used for the simplification changed.7 8declare void @use(i1)9 10define void @pr36501(i1 %c) {11; CHECK-LABEL: @pr36501(12; CHECK-NEXT:  bb:13; CHECK-NEXT:    br label [[BB1:%.*]]14; CHECK:       bb1:15; CHECK-NEXT:    [[PHI_1:%.*]] = phi i32 [ -2022207984, [[BB:%.*]] ], [ 0, [[BB7:%.*]] ]16; CHECK-NEXT:    br i1 [[C:%.*]], label [[BB3:%.*]], label [[BB2:%.*]]17; CHECK:       bb2:18; CHECK-NEXT:    br label [[BB3]]19; CHECK:       bb3:20; CHECK-NEXT:    [[PHI_2:%.*]] = phi i32 [ -1, [[BB2]] ], [ [[PHI_1]], [[BB1]] ]21; CHECK-NEXT:    [[TMP5:%.*]] = icmp eq i32 [[PHI_2]], 022; CHECK-NEXT:    br i1 [[TMP5]], label [[BB6:%.*]], label [[BB7]]23; CHECK:       bb6:24; CHECK-NEXT:    br label [[BB7]]25; CHECK:       bb7:26; CHECK-NEXT:    [[PHIOFOPS:%.*]] = phi i1 [ [[TMP5]], [[BB3]] ], [ true, [[BB6]] ]27; CHECK-NEXT:    [[PHI_3:%.*]] = phi i32 [ [[PHI_2]], [[BB3]] ], [ 0, [[BB6]] ]28; CHECK-NEXT:    call void @use(i1 [[PHIOFOPS]])29; CHECK-NEXT:    br label [[BB1]]30;31bb:32  br label %bb133 34bb1:35  %phi.1 = phi i32 [ -2022207984, %bb ], [ 0, %bb7 ]36  br i1 %c, label %bb3, label %bb237 38bb2:39  br label %bb340 41bb3:42  %phi.2 = phi i32 [ -1, %bb2 ], [ %phi.1, %bb1 ]43  %tmp5 = icmp eq i32 %phi.2, 044  br i1 %tmp5, label %bb6, label %bb745 46bb6:47  br label %bb748 49bb7:                                              ; preds = %bb6, %bb350  %phi.3 = phi i32 [ %phi.2, %bb3 ], [ 0, %bb6 ]51  %tmp9 = icmp eq i32 %phi.3, 052  call void @use(i1 %tmp9)53  br label %bb154}55 56define void @pr42422(i1 %c.1, i1 %c.2) {57; CHECK-LABEL: @pr42422(58; CHECK-NEXT:  bb:59; CHECK-NEXT:    br label [[BB1:%.*]]60; CHECK:       bb1:61; CHECK-NEXT:    br label [[BB2:%.*]]62; CHECK:       bb2:63; CHECK-NEXT:    [[TMP:%.*]] = phi i32 [ [[TMP23:%.*]], [[BB22:%.*]] ], [ 0, [[BB1]] ]64; CHECK-NEXT:    [[TMP3:%.*]] = icmp sle i32 [[TMP]], 165; CHECK-NEXT:    br i1 [[TMP3]], label [[BB4:%.*]], label [[BB24:%.*]]66; CHECK:       bb4:67; CHECK-NEXT:    br i1 [[C_1:%.*]], label [[BB5:%.*]], label [[BB6:%.*]]68; CHECK:       bb5:69; CHECK-NEXT:    br label [[BB19:%.*]]70; CHECK:       bb6:71; CHECK-NEXT:    br i1 [[C_2:%.*]], label [[BB7:%.*]], label [[BB8:%.*]]72; CHECK:       bb7:73; CHECK-NEXT:    br label [[BB16:%.*]]74; CHECK:       bb8:75; CHECK-NEXT:    [[TMP9:%.*]] = phi i64 [ [[TMP12:%.*]], [[BB11:%.*]] ], [ 0, [[BB6]] ]76; CHECK-NEXT:    [[TMP10:%.*]] = icmp sle i64 [[TMP9]], 177; CHECK-NEXT:    br i1 [[TMP10]], label [[BB11]], label [[BB13:%.*]]78; CHECK:       bb11:79; CHECK-NEXT:    [[TMP12]] = add nsw i64 [[TMP9]], 180; CHECK-NEXT:    br label [[BB8]]81; CHECK:       bb13:82; CHECK-NEXT:    br i1 true, label [[BB14:%.*]], label [[BB15:%.*]]83; CHECK:       bb14:84; CHECK-NEXT:    br label [[BB16]]85; CHECK:       bb15:86; CHECK-NEXT:    store i8 poison, ptr null, align 187; CHECK-NEXT:    br label [[BB16]]88; CHECK:       bb16:89; CHECK-NEXT:    [[TMP17:%.*]] = phi i32 [ poison, [[BB15]] ], [ 1, [[BB14]] ], [ 9, [[BB7]] ]90; CHECK-NEXT:    switch i32 [[TMP17]], label [[BB19]] [91; CHECK-NEXT:      i32 0, label [[BB6]]92; CHECK-NEXT:      i32 9, label [[BB18:%.*]]93; CHECK-NEXT:    ]94; CHECK:       bb18:95; CHECK-NEXT:    br label [[BB19]]96; CHECK:       bb19:97; CHECK-NEXT:    [[TMP20:%.*]] = phi i32 [ 0, [[BB18]] ], [ [[TMP17]], [[BB16]] ], [ 1, [[BB5]] ]98; CHECK-NEXT:    [[TMP21:%.*]] = icmp eq i32 [[TMP20]], 099; CHECK-NEXT:    br i1 [[TMP21]], label [[BB22]], label [[BB25:%.*]]100; CHECK:       bb22:101; CHECK-NEXT:    [[TMP23]] = add nsw i32 [[TMP]], 1102; CHECK-NEXT:    br label [[BB2]]103; CHECK:       bb24:104; CHECK-NEXT:    br label [[BB25]]105; CHECK:       bb25:106; CHECK-NEXT:    [[PHIOFOPS:%.*]] = phi i1 [ true, [[BB24]] ], [ [[TMP21]], [[BB19]] ]107; CHECK-NEXT:    [[TMP26:%.*]] = phi i32 [ [[TMP20]], [[BB19]] ], [ 0, [[BB24]] ]108; CHECK-NEXT:    br i1 [[PHIOFOPS]], label [[BB1]], label [[BB28:%.*]]109; CHECK:       bb28:110; CHECK-NEXT:    ret void111;112bb:113  br label %bb1114 115bb1:                                              ; preds = %bb25, %bb116  br label %bb2117 118bb2:                                              ; preds = %bb22, %bb1119  %tmp = phi i32 [ %tmp23, %bb22 ], [ 0, %bb1 ]120  %tmp3 = icmp sle i32 %tmp, 1121  br i1 %tmp3, label %bb4, label %bb24122 123bb4:                                              ; preds = %bb2124  br i1 %c.1, label %bb5, label %bb6125 126bb5:                                              ; preds = %bb4127  br label %bb19128 129bb6:                                              ; preds = %bb16, %bb4130  br i1 %c.2, label %bb7, label %bb8131 132bb7:                                              ; preds = %bb6133  br label %bb16134 135bb8:                                              ; preds = %bb11, %bb6136  %tmp9 = phi i64 [ %tmp12, %bb11 ], [ 0, %bb6 ]137  %tmp10 = icmp sle i64 %tmp9, 1138  br i1 %tmp10, label %bb11, label %bb13139 140bb11:                                             ; preds = %bb8141  %tmp12 = add nsw i64 %tmp9, 1142  br label %bb8143 144bb13:                                             ; preds = %bb8145  br i1 true, label %bb14, label %bb15146 147bb14:                                             ; preds = %bb13148  br label %bb16149 150bb15:                                             ; preds = %bb13151  br label %bb16152 153bb16:                                             ; preds = %bb15, %bb14, %bb7154  %tmp17 = phi i32 [ undef, %bb15 ], [ 1, %bb14 ], [ 9, %bb7 ]155  switch i32 %tmp17, label %bb19 [156  i32 0, label %bb6157  i32 9, label %bb18158  ]159 160bb18:                                             ; preds = %bb16161  br label %bb19162 163bb19:                                             ; preds = %bb18, %bb16, %bb5164  %tmp20 = phi i32 [ 0, %bb18 ], [ %tmp17, %bb16 ], [ 1, %bb5 ]165  %tmp21 = icmp eq i32 %tmp20, 0166  br i1 %tmp21, label %bb22, label %bb25167 168bb22:                                             ; preds = %bb19169  %tmp23 = add nsw i32 %tmp, 1170  br label %bb2171 172bb24:                                             ; preds = %bb2173  br label %bb25174 175bb25:                                             ; preds = %bb24, %bb19176  %tmp26 = phi i32 [ %tmp20, %bb19 ], [ 0, %bb24 ]177  %tmp27 = icmp eq i32 %tmp26, 0178  br i1 %tmp27, label %bb1, label %bb28179 180bb28:                                             ; preds = %bb25181  ret void182}183 184define void @PR42557(i32 %tmp6, i1 %c.1, i1 %c.2) {185; CHECK-LABEL: @PR42557(186; CHECK-NEXT:  bb:187; CHECK-NEXT:    br label [[BB1:%.*]]188; CHECK:       bb1:189; CHECK-NEXT:    [[TMP:%.*]] = phi i32 [ 0, [[BB:%.*]] ], [ [[TMP6:%.*]], [[BB1]] ]190; CHECK-NEXT:    br i1 [[C_1:%.*]], label [[BB2:%.*]], label [[BB1]]191; CHECK:       bb2:192; CHECK-NEXT:    br i1 [[C_2:%.*]], label [[BB16:%.*]], label [[BB11:%.*]]193; CHECK:       bb16:194; CHECK-NEXT:    [[TMP17:%.*]] = add i32 [[TMP]], 1195; CHECK-NEXT:    br label [[BB11]]196; CHECK:       bb11:197; CHECK-NEXT:    [[TMP12:%.*]] = phi i32 [ [[TMP17]], [[BB16]] ], [ 0, [[BB2]] ]198; CHECK-NEXT:    [[TMP13:%.*]] = icmp eq i32 [[TMP12]], 0199; CHECK-NEXT:    call void @use(i1 [[TMP13]])200; CHECK-NEXT:    [[TMP15:%.*]] = icmp ne i32 [[TMP]], 0201; CHECK-NEXT:    br i1 [[TMP15]], label [[BB18:%.*]], label [[BB19:%.*]]202; CHECK:       bb18:203; CHECK-NEXT:    br label [[BB19]]204; CHECK:       bb19:205; CHECK-NEXT:    [[PHIOFOPS:%.*]] = phi i1 [ [[TMP13]], [[BB11]] ], [ false, [[BB18]] ]206; CHECK-NEXT:    [[TMP20:%.*]] = phi i32 [ [[TMP12]], [[BB11]] ], [ 1, [[BB18]] ]207; CHECK-NEXT:    call void @use(i1 [[PHIOFOPS]])208; CHECK-NEXT:    ret void209;210bb:211  br label %bb1212 213bb1:                                              ; preds = %bb1, %bb214  %tmp = phi i32 [ 0, %bb ], [ %tmp6, %bb1 ]215  br i1 %c.1, label %bb2, label %bb1216 217bb2:                                              ; preds = %bb1218  br i1 %c.2, label %bb16, label %bb11219 220bb16:                                             ; preds = %bb2221  %tmp17 = add i32 %tmp, 1222  br label %bb11223 224bb11:                                             ; preds = %bb16, %bb2225  %tmp12 = phi i32 [ %tmp17, %bb16 ], [ 0, %bb2 ]226  %tmp13 = icmp eq i32 %tmp12, 0227  call void @use(i1 %tmp13)228  %tmp15 = icmp ne i32 %tmp, 0229  br i1 %tmp15, label %bb18, label %bb19230 231bb18:                                             ; preds = %bb11232  br label %bb19233 234bb19:                                             ; preds = %bb18, %bb11235  %tmp20 = phi i32 [ %tmp12, %bb11 ], [ 1, %bb18 ]236  %tmp21 = icmp eq i32 %tmp20, 0237  call void @use(i1 %tmp21)238  ret void239}240