brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.4 KiB · 11294ee Raw
244 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=loop-deletion -S | FileCheck %s3; RUN: opt < %s -passes='loop(loop-deletion)' -S | FileCheck %s4 5; Make sure we do not get the miscompile on this test with irreducible CFG.6define i16 @test_01(i16 %j, i16 %k, i16 %recurs) {                 ; If we have %j: 1, %k: 1, %recurs: 07; CHECK-LABEL: @test_01(8; CHECK-NEXT:  entry:9; CHECK-NEXT:    [[TOBOOL_NOT:%.*]] = icmp eq i16 [[RECURS:%.*]], 010; CHECK-NEXT:    br i1 [[TOBOOL_NOT]], label [[IF_END:%.*]], label [[IF_THEN:%.*]]11; CHECK:       if.then:12; CHECK-NEXT:    [[CALL:%.*]] = tail call i16 @test_01(i16 0, i16 0, i16 0)13; CHECK-NEXT:    br label [[IF_END]]14; CHECK:       if.end:15; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i16 [[J:%.*]], 016; CHECK-NEXT:    br label [[BB2:%.*]]17; CHECK:       bb2:18; CHECK-NEXT:    [[K_ADDR_0:%.*]] = phi i16 [ [[K:%.*]], [[IF_END]] ], [ [[K_ADDR_2:%.*]], [[BB12:%.*]] ]19; CHECK-NEXT:    [[RESULT_0:%.*]] = phi i16 [ 0, [[IF_END]] ], [ 20, [[BB12]] ]20; CHECK-NEXT:    br i1 [[CMP]], label [[BB12]], label [[BB4:%.*]]21; CHECK:       bb4:22; CHECK-NEXT:    [[K_ADDR_1:%.*]] = phi i16 [ [[K_ADDR_0]], [[BB2]] ], [ [[K_ADDR_2]], [[BB12]] ]23; CHECK-NEXT:    [[X_1:%.*]] = phi i16 [ 0, [[BB2]] ], [ 1, [[BB12]] ]24; CHECK-NEXT:    [[RESULT_1:%.*]] = phi i16 [ [[RESULT_0]], [[BB2]] ], [ 10, [[BB12]] ]25; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i16 [[K_ADDR_1]], 026; CHECK-NEXT:    br i1 [[CMP2]], label [[BB13:%.*]], label [[BB12]]27; CHECK:       bb12:28; CHECK-NEXT:    [[K_ADDR_2]] = phi i16 [ [[K_ADDR_0]], [[BB2]] ], [ 0, [[BB4]] ]29; CHECK-NEXT:    [[X_2:%.*]] = phi i16 [ 1, [[BB2]] ], [ [[X_1]], [[BB4]] ]30; CHECK-NEXT:    [[CMP5:%.*]] = icmp eq i16 [[X_2]], 031; CHECK-NEXT:    br i1 [[CMP5]], label [[BB2]], label [[BB4]]32; CHECK:       bb13:33; CHECK-NEXT:    [[RESULT_1_LCSSA:%.*]] = phi i16 [ [[RESULT_1]], [[BB4]] ]34; CHECK-NEXT:    ret i16 [[RESULT_1_LCSSA]]35;36entry:37  %tobool.not = icmp eq i16 %recurs, 0                          ; 138  br i1 %tobool.not, label %if.end, label %if.then              ; -> if.end39 40if.then:                                          ; preds = %entry41  %call = tail call i16 @test_01(i16 0, i16 0, i16 0)42  br label %if.end43 44if.end:                                           ; preds = %if.then, %entry45  %cmp = icmp eq i16 %j, 0                                      ; 046  br label %bb2                                                 ; -> bb247 48bb2:                                              ; preds = %bb12, %if.end49  %k.addr.0 = phi i16 [ %k, %if.end ], [ %k.addr.2, %bb12 ]     ; 150  %result.0 = phi i16 [ 0, %if.end ], [ 20, %bb12 ]             ; 051  br i1 %cmp, label %bb12, label %bb4                           ; %cmp: 0 -> bb452 53bb4:                                              ; preds = %bb12, %bb254  %k.addr.1 = phi i16 [ %k.addr.0, %bb2 ], [ %k.addr.2, %bb12 ] ; 155  %x.1 = phi i16 [ 0, %bb2 ], [ 1, %bb12 ]                      ; 056  %result.1 = phi i16 [ %result.0, %bb2 ], [ 10, %bb12 ]57  %cmp2 = icmp eq i16 %k.addr.1, 0                              ; 058  br i1 %cmp2, label %bb13, label %bb12                         ; -> bb1259 60bb12:                                             ; preds = %bb4, %bb261  %k.addr.2 = phi i16 [ %k.addr.0, %bb2 ], [ 0, %bb4 ]          ; 062  %x.2 = phi i16 [ 1, %bb2 ], [ %x.1, %bb4 ]                    ; 063  %cmp5 = icmp eq i16 %x.2, 0                                   ; 164  br i1 %cmp5, label %bb2, label %bb4                           ; -> bb265 66bb13:                                             ; preds = %bb467  %result.1.lcssa = phi i16 [ %result.1, %bb4 ]68  ret i16 %result.1.lcssa69}70 71; Another nasty case of irreducible CFG. Make sure we do not crash here.72define void @test_02() {73; CHECK-LABEL: @test_02(74; CHECK-NEXT:  bb:75; CHECK-NEXT:    br label [[BB17:%.*]]76; CHECK:       bb1:77; CHECK-NEXT:    ret void78; CHECK:       bb2:79; CHECK-NEXT:    unreachable80; CHECK:       bb3:81; CHECK-NEXT:    unreachable82; CHECK:       bb4:83; CHECK-NEXT:    unreachable84; CHECK:       bb5:85; CHECK-NEXT:    unreachable86; CHECK:       bb6:87; CHECK-NEXT:    unreachable88; CHECK:       bb7:89; CHECK-NEXT:    unreachable90; CHECK:       bb8:91; CHECK-NEXT:    unreachable92; CHECK:       bb9:93; CHECK-NEXT:    switch i8 undef, label [[BB13:%.*]] [94; CHECK-NEXT:    i8 3, label [[BB10:%.*]]95; CHECK-NEXT:    i8 43, label [[BB10]]96; CHECK-NEXT:    i8 37, label [[BB11:%.*]]97; CHECK-NEXT:    i8 2, label [[BB12:%.*]]98; CHECK-NEXT:    i8 4, label [[BB12]]99; CHECK-NEXT:    i8 20, label [[BB12]]100; CHECK-NEXT:    i8 42, label [[BB12]]101; CHECK-NEXT:    i8 44, label [[BB12]]102; CHECK-NEXT:    i8 54, label [[BB12]]103; CHECK-NEXT:    ]104; CHECK:       bb10:105; CHECK-NEXT:    unreachable106; CHECK:       bb11:107; CHECK-NEXT:    unreachable108; CHECK:       bb12:109; CHECK-NEXT:    br label [[BB19:%.*]]110; CHECK:       bb13:111; CHECK-NEXT:    unreachable112; CHECK:       bb14:113; CHECK-NEXT:    unreachable114; CHECK:       bb15:115; CHECK-NEXT:    unreachable116; CHECK:       bb16:117; CHECK-NEXT:    br label [[BB17]]118; CHECK:       bb17:119; CHECK-NEXT:    [[TMP:%.*]] = icmp sgt i32 0, 1120; CHECK-NEXT:    br i1 [[TMP]], label [[BB18:%.*]], label [[BB19]]121; CHECK:       bb18:122; CHECK-NEXT:    br label [[BB20:%.*]]123; CHECK:       bb19:124; CHECK-NEXT:    br label [[BB20]]125; CHECK:       bb20:126; CHECK-NEXT:    switch i8 undef, label [[BB16:%.*]] [127; CHECK-NEXT:    i8 0, label [[BB1:%.*]]128; CHECK-NEXT:    i8 1, label [[BB1]]129; CHECK-NEXT:    i8 8, label [[BB1]]130; CHECK-NEXT:    i8 9, label [[BB1]]131; CHECK-NEXT:    i8 12, label [[BB1]]132; CHECK-NEXT:    i8 13, label [[BB1]]133; CHECK-NEXT:    i8 40, label [[BB1]]134; CHECK-NEXT:    i8 41, label [[BB1]]135; CHECK-NEXT:    i8 52, label [[BB1]]136; CHECK-NEXT:    i8 53, label [[BB1]]137; CHECK-NEXT:    i8 55, label [[BB15:%.*]]138; CHECK-NEXT:    i8 15, label [[BB14:%.*]]139; CHECK-NEXT:    i8 29, label [[BB9:%.*]]140; CHECK-NEXT:    i8 37, label [[BB8:%.*]]141; CHECK-NEXT:    i8 69, label [[BB3:%.*]]142; CHECK-NEXT:    i8 89, label [[BB7:%.*]]143; CHECK-NEXT:    i8 85, label [[BB6:%.*]]144; CHECK-NEXT:    i8 81, label [[BB5:%.*]]145; CHECK-NEXT:    i8 65, label [[BB2:%.*]]146; CHECK-NEXT:    i8 73, label [[BB4:%.*]]147; CHECK-NEXT:    ]148;149bb:150  br label %bb17151 152bb1:                                              ; preds = %bb20, %bb20, %bb20, %bb20, %bb20, %bb20, %bb20, %bb20, %bb20, %bb20153  ret void154 155bb2:                                              ; preds = %bb20156  unreachable157 158bb3:                                              ; preds = %bb20159  unreachable160 161bb4:                                              ; preds = %bb20162  unreachable163 164bb5:                                              ; preds = %bb20165  unreachable166 167bb6:                                              ; preds = %bb20168  unreachable169 170bb7:                                              ; preds = %bb20171  unreachable172 173bb8:                                              ; preds = %bb20174  unreachable175 176bb9:                                              ; preds = %bb20177  switch i8 undef, label %bb13 [178  i8 3, label %bb10179  i8 43, label %bb10180  i8 37, label %bb11181  i8 2, label %bb12182  i8 4, label %bb12183  i8 20, label %bb12184  i8 42, label %bb12185  i8 44, label %bb12186  i8 54, label %bb12187  ]188 189bb10:                                             ; preds = %bb9, %bb9190  unreachable191 192bb11:                                             ; preds = %bb9193  unreachable194 195bb12:                                             ; preds = %bb9, %bb9, %bb9, %bb9, %bb9, %bb9196  br label %bb19197 198bb13:                                             ; preds = %bb9199  unreachable200 201bb14:                                             ; preds = %bb20202  unreachable203 204bb15:                                             ; preds = %bb20205  unreachable206 207bb16:                                             ; preds = %bb20208  br label %bb17209 210bb17:                                             ; preds = %bb16, %bb211  %tmp = icmp sgt i32 0, 1212  br i1 %tmp, label %bb18, label %bb19213 214bb18:                                             ; preds = %bb17215  br label %bb20216 217bb19:                                             ; preds = %bb17, %bb12218  br label %bb20219 220bb20:                                             ; preds = %bb19, %bb18221  switch i8 undef, label %bb16 [222  i8 0, label %bb1223  i8 1, label %bb1224  i8 8, label %bb1225  i8 9, label %bb1226  i8 12, label %bb1227  i8 13, label %bb1228  i8 40, label %bb1229  i8 41, label %bb1230  i8 52, label %bb1231  i8 53, label %bb1232  i8 55, label %bb15233  i8 15, label %bb14234  i8 29, label %bb9235  i8 37, label %bb8236  i8 69, label %bb3237  i8 89, label %bb7238  i8 85, label %bb6239  i8 81, label %bb5240  i8 65, label %bb2241  i8 73, label %bb4242  ]243}244