brintos

brintos / llvm-project-archived public Read only

0
0
Text · 39.2 KiB · c9161cc Raw
1206 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -fix-irreducible --verify-loop-info -S | FileCheck %s3; RUN: opt < %s -passes='fix-irreducible,verify<loops>' -S | FileCheck %s4; RUN: opt < %s -passes='verify<loops>,fix-irreducible,verify<loops>' -S | FileCheck %s5 6define void @nested_irr_top_level(i1 %Pred0, i1 %Pred1, i1 %Pred2, i1 %Pred3, i1 %Pred4, i1 %Pred5) {7; CHECK-LABEL: @nested_irr_top_level(8; CHECK-NEXT:  entry:9; CHECK-NEXT:    [[PRED1_INV:%.*]] = xor i1 [[PRED1:%.*]], true10; CHECK-NEXT:    [[PRED0_INV:%.*]] = xor i1 [[PRED0:%.*]], true11; CHECK-NEXT:    br label [[IRR_GUARD:%.*]]12; CHECK:       A1:13; CHECK-NEXT:    br label [[IRR_GUARD1:%.*]]14; CHECK:       B1:15; CHECK-NEXT:    br i1 [[PRED2:%.*]], label [[IRR_GUARD1]], label [[A3:%.*]]16; CHECK:       B2:17; CHECK-NEXT:    br i1 [[PRED3:%.*]], label [[B1:%.*]], label [[A3]]18; CHECK:       A3:19; CHECK-NEXT:    br i1 [[PRED4:%.*]], label [[IRR_GUARD]], label [[EXIT:%.*]]20; CHECK:       A2:21; CHECK-NEXT:    br i1 [[PRED5:%.*]], label [[A1:%.*]], label [[EXIT]]22; CHECK:       exit:23; CHECK-NEXT:    ret void24; CHECK:       irr.guard:25; CHECK-NEXT:    [[GUARD_A2:%.*]] = phi i1 [ true, [[A3]] ], [ [[PRED0_INV]], [[ENTRY:%.*]] ]26; CHECK-NEXT:    br i1 [[GUARD_A2]], label [[A2:%.*]], label [[A1]]27; CHECK:       irr.guard1:28; CHECK-NEXT:    [[GUARD_B2:%.*]] = phi i1 [ true, [[B1]] ], [ [[PRED1_INV]], [[A1]] ]29; CHECK-NEXT:    br i1 [[GUARD_B2]], label [[B2:%.*]], label [[B1]]30;31entry:32  br i1 %Pred0, label %A1, label %A233 34A1:35  br i1 %Pred1, label %B1, label %B236 37B1:38  br i1 %Pred2, label %B2, label %A339 40B2:41  br i1 %Pred3, label %B1, label %A342 43A3:44  br i1 %Pred4, label %A2, label %exit45 46A2:47  br i1 %Pred5, label %A1, label %exit48 49exit:50  ret void51}52 53define void @nested_irr_top_level_callbr(i1 %Pred0, i1 %Pred1, i1 %Pred2, i1 %Pred3, i1 %Pred4, i1 %Pred5) {54; CHECK-LABEL: @nested_irr_top_level_callbr(55; CHECK-NEXT:  entry:56; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED0:%.*]])57; CHECK-NEXT:            to label [[ENTRY_TARGET_A1:%.*]] [label %entry.target.A2]58; CHECK:       A1:59; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED1:%.*]])60; CHECK-NEXT:            to label [[A1_TARGET_B1:%.*]] [label %A1.target.B2]61; CHECK:       B1:62; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED2:%.*]])63; CHECK-NEXT:            to label [[B1_TARGET_B2:%.*]] [label %A3]64; CHECK:       B2:65; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED3:%.*]])66; CHECK-NEXT:            to label [[B1:%.*]] [label %A3]67; CHECK:       A3:68; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED4:%.*]])69; CHECK-NEXT:            to label [[A3_TARGET_A2:%.*]] [label %exit]70; CHECK:       A2:71; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED5:%.*]])72; CHECK-NEXT:            to label [[A1:%.*]] [label %exit]73; CHECK:       exit:74; CHECK-NEXT:    ret void75; CHECK:       A3.target.A2:76; CHECK-NEXT:    br label [[IRR_GUARD:%.*]]77; CHECK:       entry.target.A1:78; CHECK-NEXT:    br label [[IRR_GUARD]]79; CHECK:       entry.target.A2:80; CHECK-NEXT:    br label [[IRR_GUARD]]81; CHECK:       irr.guard:82; CHECK-NEXT:    [[GUARD_A2:%.*]] = phi i1 [ true, [[A3_TARGET_A2]] ], [ false, [[ENTRY_TARGET_A1]] ], [ true, [[ENTRY_TARGET_A2:%.*]] ]83; CHECK-NEXT:    br i1 [[GUARD_A2]], label [[A2:%.*]], label [[A1]]84; CHECK:       B1.target.B2:85; CHECK-NEXT:    br label [[IRR_GUARD1:%.*]]86; CHECK:       A1.target.B1:87; CHECK-NEXT:    br label [[IRR_GUARD1]]88; CHECK:       A1.target.B2:89; CHECK-NEXT:    br label [[IRR_GUARD1]]90; CHECK:       irr.guard1:91; CHECK-NEXT:    [[GUARD_B2:%.*]] = phi i1 [ true, [[B1_TARGET_B2]] ], [ false, [[A1_TARGET_B1]] ], [ true, [[A1_TARGET_B2:%.*]] ]92; CHECK-NEXT:    br i1 [[GUARD_B2]], label [[B2:%.*]], label [[B1]]93;94entry:95  callbr void asm "", "r,!i"(i1 %Pred0) to label %A1 [label %A2]96 97A1:98  callbr void asm "", "r,!i"(i1 %Pred1) to label %B1 [label %B2]99 100B1:101  callbr void asm "", "r,!i"(i1 %Pred2) to label %B2 [label %A3]102 103B2:104  callbr void asm "", "r,!i"(i1 %Pred3) to label %B1 [label %A3]105 106A3:107  callbr void asm "", "r,!i"(i1 %Pred4) to label %A2 [label %exit]108 109A2:110  callbr void asm "", "r,!i"(i1 %Pred5) to label %A1 [label %exit]111 112exit:113  ret void114}115 116define void @nested_irr_in_loop(i1 %Pred0, i1 %Pred1, i1 %Pred2, i1 %Pred3, i1 %Pred4, i1 %Pred5, i1 %Pred6) {117; CHECK-LABEL: @nested_irr_in_loop(118; CHECK-NEXT:  entry:119; CHECK-NEXT:    [[PRED1_INV:%.*]] = xor i1 [[PRED1:%.*]], true120; CHECK-NEXT:    [[PRED0_INV:%.*]] = xor i1 [[PRED0:%.*]], true121; CHECK-NEXT:    br label [[H1:%.*]]122; CHECK:       H1:123; CHECK-NEXT:    br label [[IRR_GUARD:%.*]]124; CHECK:       A1:125; CHECK-NEXT:    br label [[IRR_GUARD1:%.*]]126; CHECK:       B1:127; CHECK-NEXT:    br i1 [[PRED2:%.*]], label [[IRR_GUARD1]], label [[A3:%.*]]128; CHECK:       B2:129; CHECK-NEXT:    br i1 [[PRED3:%.*]], label [[B1:%.*]], label [[A3]]130; CHECK:       A3:131; CHECK-NEXT:    br i1 [[PRED4:%.*]], label [[IRR_GUARD]], label [[L1:%.*]]132; CHECK:       A2:133; CHECK-NEXT:    br i1 [[PRED5:%.*]], label [[A1:%.*]], label [[L1]]134; CHECK:       L1:135; CHECK-NEXT:    br i1 [[PRED6:%.*]], label [[EXIT:%.*]], label [[H1]]136; CHECK:       exit:137; CHECK-NEXT:    ret void138; CHECK:       irr.guard:139; CHECK-NEXT:    [[GUARD_A2:%.*]] = phi i1 [ true, [[A3]] ], [ [[PRED0_INV]], [[H1]] ]140; CHECK-NEXT:    br i1 [[GUARD_A2]], label [[A2:%.*]], label [[A1]]141; CHECK:       irr.guard1:142; CHECK-NEXT:    [[GUARD_B2:%.*]] = phi i1 [ true, [[B1]] ], [ [[PRED1_INV]], [[A1]] ]143; CHECK-NEXT:    br i1 [[GUARD_B2]], label [[B2:%.*]], label [[B1]]144;145entry:146  br label %H1147 148H1:149  br i1 %Pred0, label %A1, label %A2150 151A1:152  br i1 %Pred1, label %B1, label %B2153 154B1:155  br i1 %Pred2, label %B2, label %A3156 157B2:158  br i1 %Pred3, label %B1, label %A3159 160A3:161  br i1 %Pred4, label %A2, label %L1162 163A2:164  br i1 %Pred5, label %A1, label %L1165 166L1:167  br i1 %Pred6, label %exit, label %H1168 169exit:170  ret void171}172 173define void @nested_irr_in_loop_callbr(i1 %Pred0, i1 %Pred1, i1 %Pred2, i1 %Pred3, i1 %Pred4, i1 %Pred5, i1 %Pred6) {174; CHECK-LABEL: @nested_irr_in_loop_callbr(175; CHECK-NEXT:  entry:176; CHECK-NEXT:    br label [[H1:%.*]]177; CHECK:       H1:178; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED0:%.*]])179; CHECK-NEXT:            to label [[H1_TARGET_A1:%.*]] [label %H1.target.A2]180; CHECK:       A1:181; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED1:%.*]])182; CHECK-NEXT:            to label [[A1_TARGET_B1:%.*]] [label %A1.target.B2]183; CHECK:       B1:184; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED2:%.*]])185; CHECK-NEXT:            to label [[B1_TARGET_B2:%.*]] [label %A3]186; CHECK:       B2:187; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED3:%.*]])188; CHECK-NEXT:            to label [[B1:%.*]] [label %A3]189; CHECK:       A3:190; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED4:%.*]])191; CHECK-NEXT:            to label [[A3_TARGET_A2:%.*]] [label %L1]192; CHECK:       A2:193; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED5:%.*]])194; CHECK-NEXT:            to label [[A1:%.*]] [label %L1]195; CHECK:       L1:196; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED6:%.*]])197; CHECK-NEXT:            to label [[EXIT:%.*]] [label %H1]198; CHECK:       exit:199; CHECK-NEXT:    ret void200; CHECK:       A3.target.A2:201; CHECK-NEXT:    br label [[IRR_GUARD:%.*]]202; CHECK:       H1.target.A1:203; CHECK-NEXT:    br label [[IRR_GUARD]]204; CHECK:       H1.target.A2:205; CHECK-NEXT:    br label [[IRR_GUARD]]206; CHECK:       irr.guard:207; CHECK-NEXT:    [[GUARD_A2:%.*]] = phi i1 [ true, [[A3_TARGET_A2]] ], [ false, [[H1_TARGET_A1]] ], [ true, [[H1_TARGET_A2:%.*]] ]208; CHECK-NEXT:    br i1 [[GUARD_A2]], label [[A2:%.*]], label [[A1]]209; CHECK:       B1.target.B2:210; CHECK-NEXT:    br label [[IRR_GUARD1:%.*]]211; CHECK:       A1.target.B1:212; CHECK-NEXT:    br label [[IRR_GUARD1]]213; CHECK:       A1.target.B2:214; CHECK-NEXT:    br label [[IRR_GUARD1]]215; CHECK:       irr.guard1:216; CHECK-NEXT:    [[GUARD_B2:%.*]] = phi i1 [ true, [[B1_TARGET_B2]] ], [ false, [[A1_TARGET_B1]] ], [ true, [[A1_TARGET_B2:%.*]] ]217; CHECK-NEXT:    br i1 [[GUARD_B2]], label [[B2:%.*]], label [[B1]]218;219entry:220  br label %H1221 222H1:223  callbr void asm "", "r,!i"(i1 %Pred0) to label %A1 [label %A2]224 225A1:226  callbr void asm "", "r,!i"(i1 %Pred1) to label %B1 [label %B2]227 228B1:229  callbr void asm "", "r,!i"(i1 %Pred2) to label %B2 [label %A3]230 231B2:232  callbr void asm "", "r,!i"(i1 %Pred3) to label %B1 [label %A3]233 234A3:235  callbr void asm "", "r,!i"(i1 %Pred4) to label %A2 [label %L1]236 237A2:238  callbr void asm "", "r,!i"(i1 %Pred5) to label %A1 [label %L1]239 240L1:241  callbr void asm "", "r,!i"(i1 %Pred6) to label %exit [label %H1]242 243exit:244  ret void245}246 247define void @loop_in_irr(i1 %Pred0, i1 %Pred1, i1 %Pred2) {248; CHECK-LABEL: @loop_in_irr(249; CHECK-NEXT:  entry:250; CHECK-NEXT:    [[PRED0_INV:%.*]] = xor i1 [[PRED0:%.*]], true251; CHECK-NEXT:    br label [[IRR_GUARD:%.*]]252; CHECK:       A1:253; CHECK-NEXT:    br label [[H1:%.*]]254; CHECK:       H1:255; CHECK-NEXT:    br label [[L1:%.*]]256; CHECK:       L1:257; CHECK-NEXT:    br i1 [[PRED1:%.*]], label [[H1]], label [[A3:%.*]]258; CHECK:       A3:259; CHECK-NEXT:    br i1 [[PRED2:%.*]], label [[IRR_GUARD]], label [[EXIT:%.*]]260; CHECK:       A2:261; CHECK-NEXT:    br label [[A1:%.*]]262; CHECK:       exit:263; CHECK-NEXT:    ret void264; CHECK:       irr.guard:265; CHECK-NEXT:    [[GUARD_A2:%.*]] = phi i1 [ true, [[A3]] ], [ [[PRED0_INV]], [[ENTRY:%.*]] ]266; CHECK-NEXT:    br i1 [[GUARD_A2]], label [[A2:%.*]], label [[A1]]267;268entry:269  br i1 %Pred0, label %A1, label %A2270 271A1:272  br label %H1273 274H1:275  br label %L1276 277L1:278  br i1 %Pred1, label %H1, label %A3279 280A3:281  br i1 %Pred2, label %A2, label %exit282 283A2:284  br label %A1285 286exit:287  ret void288}289 290define void @loop_in_irr_callbr(i1 %Pred0, i1 %Pred1, i1 %Pred2) {291; CHECK-LABEL: @loop_in_irr_callbr(292; CHECK-NEXT:  entry:293; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED0:%.*]])294; CHECK-NEXT:            to label [[ENTRY_TARGET_A1:%.*]] [label %entry.target.A2]295; CHECK:       A1:296; CHECK-NEXT:    callbr void asm "", ""()297; CHECK-NEXT:            to label [[H1:%.*]] []298; CHECK:       H1:299; CHECK-NEXT:    callbr void asm "", ""()300; CHECK-NEXT:            to label [[L1:%.*]] []301; CHECK:       L1:302; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED1:%.*]])303; CHECK-NEXT:            to label [[H1]] [label %A3]304; CHECK:       A3:305; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED2:%.*]])306; CHECK-NEXT:            to label [[A3_TARGET_A2:%.*]] [label %exit]307; CHECK:       A2:308; CHECK-NEXT:    callbr void asm "", ""()309; CHECK-NEXT:            to label [[A1:%.*]] []310; CHECK:       exit:311; CHECK-NEXT:    ret void312; CHECK:       A3.target.A2:313; CHECK-NEXT:    br label [[IRR_GUARD:%.*]]314; CHECK:       entry.target.A1:315; CHECK-NEXT:    br label [[IRR_GUARD]]316; CHECK:       entry.target.A2:317; CHECK-NEXT:    br label [[IRR_GUARD]]318; CHECK:       irr.guard:319; CHECK-NEXT:    [[GUARD_A2:%.*]] = phi i1 [ true, [[A3_TARGET_A2]] ], [ false, [[ENTRY_TARGET_A1]] ], [ true, [[ENTRY_TARGET_A2:%.*]] ]320; CHECK-NEXT:    br i1 [[GUARD_A2]], label [[A2:%.*]], label [[A1]]321;322entry:323  callbr void asm "", "r,!i"(i1 %Pred0) to label %A1 [label %A2]324 325A1:326  callbr void asm "", ""() to label %H1 []327 328H1:329  callbr void asm "", ""() to label %L1 []330 331L1:332  callbr void asm "", "r,!i"(i1 %Pred1) to label %H1 [label %A3]333 334A3:335  callbr void asm "", "r,!i"(i1 %Pred2) to label %A2 [label %exit]336 337A2:338  callbr void asm "", ""() to label %A1 []339 340exit:341  ret void342}343 344define void @loop_in_irr_shared_entry(i1 %Pred0, i1 %Pred1, i1 %Pred2) {345; CHECK-LABEL: @loop_in_irr_shared_entry(346; CHECK-NEXT:  entry:347; CHECK-NEXT:    [[PRED0_INV:%.*]] = xor i1 [[PRED0:%.*]], true348; CHECK-NEXT:    br label [[IRR_GUARD:%.*]]349; CHECK:       H1:350; CHECK-NEXT:    br label [[L1:%.*]]351; CHECK:       L1:352; CHECK-NEXT:    br i1 [[PRED1:%.*]], label [[H1:%.*]], label [[A3:%.*]]353; CHECK:       A3:354; CHECK-NEXT:    br i1 [[PRED2:%.*]], label [[IRR_GUARD]], label [[EXIT:%.*]]355; CHECK:       A2:356; CHECK-NEXT:    br label [[H1]]357; CHECK:       exit:358; CHECK-NEXT:    ret void359; CHECK:       irr.guard:360; CHECK-NEXT:    [[GUARD_A2:%.*]] = phi i1 [ true, [[A3]] ], [ [[PRED0_INV]], [[ENTRY:%.*]] ]361; CHECK-NEXT:    br i1 [[GUARD_A2]], label [[A2:%.*]], label [[H1]]362;363entry:364  br i1 %Pred0, label %H1, label %A2365 366H1:367  br label %L1368 369L1:370  br i1 %Pred1, label %H1, label %A3371 372A3:373  br i1 %Pred2, label %A2, label %exit374 375A2:376  br label %H1377 378exit:379  ret void380}381 382define void @loop_in_irr_shared_entry_callbr(i1 %Pred0, i1 %Pred1, i1 %Pred2) {383; CHECK-LABEL: @loop_in_irr_shared_entry_callbr(384; CHECK-NEXT:  entry:385; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED0:%.*]])386; CHECK-NEXT:            to label [[ENTRY_TARGET_H1:%.*]] [label %entry.target.A2]387; CHECK:       H1:388; CHECK-NEXT:    callbr void asm "", ""()389; CHECK-NEXT:            to label [[L1:%.*]] []390; CHECK:       L1:391; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED1:%.*]])392; CHECK-NEXT:            to label [[H1:%.*]] [label %A3]393; CHECK:       A3:394; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED2:%.*]])395; CHECK-NEXT:            to label [[A3_TARGET_A2:%.*]] [label %exit]396; CHECK:       A2:397; CHECK-NEXT:    callbr void asm "", ""()398; CHECK-NEXT:            to label [[H1]] []399; CHECK:       exit:400; CHECK-NEXT:    ret void401; CHECK:       A3.target.A2:402; CHECK-NEXT:    br label [[IRR_GUARD:%.*]]403; CHECK:       entry.target.H1:404; CHECK-NEXT:    br label [[IRR_GUARD]]405; CHECK:       entry.target.A2:406; CHECK-NEXT:    br label [[IRR_GUARD]]407; CHECK:       irr.guard:408; CHECK-NEXT:    [[GUARD_A2:%.*]] = phi i1 [ true, [[A3_TARGET_A2]] ], [ false, [[ENTRY_TARGET_H1]] ], [ true, [[ENTRY_TARGET_A2:%.*]] ]409; CHECK-NEXT:    br i1 [[GUARD_A2]], label [[A2:%.*]], label [[H1]]410;411entry:412  callbr void asm "", "r,!i"(i1 %Pred0) to label %H1 [label %A2]413 414H1:415  callbr void asm "", ""() to label %L1 []416 417L1:418  callbr void asm "", "r,!i"(i1 %Pred1) to label %H1 [label %A3]419 420A3:421  callbr void asm "", "r,!i"(i1 %Pred2) to label %A2 [label %exit]422 423A2:424  callbr void asm "", ""() to label %H1 []425 426exit:427  ret void428}429 430define void @loop_in_irr_shared_header(i1 %Pred0, i1 %Pred1, i1 %Pred2) {431; CHECK-LABEL: @loop_in_irr_shared_header(432; CHECK-NEXT:  entry:433; CHECK-NEXT:    [[PRED0_INV:%.*]] = xor i1 [[PRED0:%.*]], true434; CHECK-NEXT:    br label [[IRR_GUARD:%.*]]435; CHECK:       H1:436; CHECK-NEXT:    br label [[L1:%.*]]437; CHECK:       L1:438; CHECK-NEXT:    br i1 [[PRED1:%.*]], label [[IRR_GUARD]], label [[A3:%.*]]439; CHECK:       A3:440; CHECK-NEXT:    br i1 [[PRED2:%.*]], label [[A2:%.*]], label [[EXIT:%.*]]441; CHECK:       A2:442; CHECK-NEXT:    br label [[IRR_GUARD]]443; CHECK:       exit:444; CHECK-NEXT:    ret void445; CHECK:       irr.guard:446; CHECK-NEXT:    [[GUARD_H1:%.*]] = phi i1 [ true, [[A2]] ], [ true, [[L1]] ], [ [[PRED0_INV]], [[ENTRY:%.*]] ]447; CHECK-NEXT:    br i1 [[GUARD_H1]], label [[H1:%.*]], label [[A2]]448;449entry:450  br i1 %Pred0, label %A2, label %H1451 452H1:453  br label %L1454 455L1:456  br i1 %Pred1, label %H1, label %A3457 458A3:459  br i1 %Pred2, label %A2, label %exit460 461A2:462  br label %H1463 464exit:465  ret void466}467 468define void @loop_in_irr_shared_header_callbr(i1 %Pred0, i1 %Pred1, i1 %Pred2) {469; CHECK-LABEL: @loop_in_irr_shared_header_callbr(470; CHECK-NEXT:  entry:471; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED0:%.*]])472; CHECK-NEXT:            to label [[ENTRY_TARGET_A2:%.*]] [label %entry.target.H1]473; CHECK:       H1:474; CHECK-NEXT:    callbr void asm "", ""()475; CHECK-NEXT:            to label [[L1:%.*]] []476; CHECK:       L1:477; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED1:%.*]])478; CHECK-NEXT:            to label [[L1_TARGET_H1:%.*]] [label %A3]479; CHECK:       A3:480; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED2:%.*]])481; CHECK-NEXT:            to label [[A2:%.*]] [label %exit]482; CHECK:       A2:483; CHECK-NEXT:    callbr void asm "", ""()484; CHECK-NEXT:            to label [[A2_TARGET_H1:%.*]] []485; CHECK:       exit:486; CHECK-NEXT:    ret void487; CHECK:       A2.target.H1:488; CHECK-NEXT:    br label [[IRR_GUARD:%.*]]489; CHECK:       L1.target.H1:490; CHECK-NEXT:    br label [[IRR_GUARD]]491; CHECK:       entry.target.A2:492; CHECK-NEXT:    br label [[IRR_GUARD]]493; CHECK:       entry.target.H1:494; CHECK-NEXT:    br label [[IRR_GUARD]]495; CHECK:       irr.guard:496; CHECK-NEXT:    [[GUARD_H1:%.*]] = phi i1 [ true, [[A2_TARGET_H1]] ], [ true, [[L1_TARGET_H1]] ], [ false, [[ENTRY_TARGET_A2]] ], [ true, [[ENTRY_TARGET_H1:%.*]] ]497; CHECK-NEXT:    br i1 [[GUARD_H1]], label [[H1:%.*]], label [[A2]]498;499entry:500  callbr void asm "", "r,!i"(i1 %Pred0) to label %A2 [label %H1]501 502H1:503  callbr void asm "", ""() to label %L1 []504 505L1:506  callbr void asm "", "r,!i"(i1 %Pred1) to label %H1 [label %A3]507 508A3:509  callbr void asm "", "r,!i"(i1 %Pred2) to label %A2 [label %exit]510 511A2:512  callbr void asm "", ""() to label %H1 []513 514exit:515  ret void516}517 518define void @loop_irr_loop_shared_header(i1 %Pred0, i1 %Pred1, i1 %Pred2, i1 %Pred3) {519; CHECK-LABEL: @loop_irr_loop_shared_header(520; CHECK-NEXT:  entry:521; CHECK-NEXT:    [[PRED0_INV:%.*]] = xor i1 [[PRED0:%.*]], true522; CHECK-NEXT:    br label [[H2:%.*]]523; CHECK:       H2:524; CHECK-NEXT:    br label [[IRR_GUARD:%.*]]525; CHECK:       H1:526; CHECK-NEXT:    br i1 [[PRED1:%.*]], label [[A3:%.*]], label [[IRR_GUARD]]527; CHECK:       A3:528; CHECK-NEXT:    br i1 [[PRED2:%.*]], label [[A2:%.*]], label [[L2:%.*]]529; CHECK:       A2:530; CHECK-NEXT:    br label [[IRR_GUARD]]531; CHECK:       L2:532; CHECK-NEXT:    br i1 [[PRED3:%.*]], label [[H2]], label [[EXIT:%.*]]533; CHECK:       exit:534; CHECK-NEXT:    ret void535; CHECK:       irr.guard:536; CHECK-NEXT:    [[GUARD_H1:%.*]] = phi i1 [ true, [[A2]] ], [ true, [[H1:%.*]] ], [ [[PRED0_INV]], [[H2]] ]537; CHECK-NEXT:    br i1 [[GUARD_H1]], label [[H1]], label [[A2]]538;539entry:540  br label %H2541 542H2:543  br i1 %Pred0, label %A2, label %H1544 545H1:546  br i1 %Pred1, label %A3, label %H1547 548A3:549  br i1 %Pred2, label %A2, label %L2550 551A2:552  br label %H1553 554L2:555  br i1 %Pred3, label %H2, label %exit556 557exit:558  ret void559}560 561define void @loop_irr_loop_shared_header_callbr(i1 %Pred0, i1 %Pred1, i1 %Pred2, i1 %Pred3) {562; CHECK-LABEL: @loop_irr_loop_shared_header_callbr(563; CHECK-NEXT:  entry:564; CHECK-NEXT:    callbr void asm "", ""()565; CHECK-NEXT:            to label [[H2:%.*]] []566; CHECK:       H2:567; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED0:%.*]])568; CHECK-NEXT:            to label [[H2_TARGET_A2:%.*]] [label %H2.target.H1]569; CHECK:       H1:570; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED1:%.*]])571; CHECK-NEXT:            to label [[A3:%.*]] [label %H1.target.H1]572; CHECK:       A3:573; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED2:%.*]])574; CHECK-NEXT:            to label [[A2:%.*]] [label %L2]575; CHECK:       A2:576; CHECK-NEXT:    callbr void asm "", ""()577; CHECK-NEXT:            to label [[A2_TARGET_H1:%.*]] []578; CHECK:       L2:579; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED3:%.*]])580; CHECK-NEXT:            to label [[H2]] [label %exit]581; CHECK:       exit:582; CHECK-NEXT:    ret void583; CHECK:       A2.target.H1:584; CHECK-NEXT:    br label [[IRR_GUARD:%.*]]585; CHECK:       H1.target.H1:586; CHECK-NEXT:    br label [[IRR_GUARD]]587; CHECK:       H2.target.A2:588; CHECK-NEXT:    br label [[IRR_GUARD]]589; CHECK:       H2.target.H1:590; CHECK-NEXT:    br label [[IRR_GUARD]]591; CHECK:       irr.guard:592; CHECK-NEXT:    [[GUARD_H1:%.*]] = phi i1 [ true, [[A2_TARGET_H1]] ], [ true, [[H1_TARGET_H1:%.*]] ], [ false, [[H2_TARGET_A2]] ], [ true, [[H2_TARGET_H1:%.*]] ]593; CHECK-NEXT:    br i1 [[GUARD_H1]], label [[H1:%.*]], label [[A2]]594;595entry:596  callbr void asm "", ""() to label %H2 []597 598H2:599  callbr void asm "", "r,!i"(i1 %Pred0) to label %A2 [label %H1]600 601H1:602  callbr void asm "", "r,!i"(i1 %Pred1) to label %A3 [label %H1]603 604A3:605  callbr void asm "", "r,!i"(i1 %Pred2) to label %A2 [label %L2]606 607A2:608  callbr void asm "", ""() to label %H1 []609 610L2:611  callbr void asm "", "r,!i"(i1 %Pred3) to label %H2 [label %exit]612 613exit:614  ret void615}616 617define void @siblings_top_level(i1 %Pred0, i1 %Pred1, i1 %Pred2, i1 %Pred3, i1 %Pred4, i1 %Pred5, i1 %Pred6) {618; CHECK-LABEL: @siblings_top_level(619; CHECK-NEXT:  entry:620; CHECK-NEXT:    [[PRED4_INV:%.*]] = xor i1 [[PRED4:%.*]], true621; CHECK-NEXT:    [[PRED1_INV:%.*]] = xor i1 [[PRED1:%.*]], true622; CHECK-NEXT:    br i1 [[PRED0:%.*]], label [[H1:%.*]], label [[FORK1:%.*]]623; CHECK:       H1:624; CHECK-NEXT:    br label [[IRR_GUARD:%.*]]625; CHECK:       A1:626; CHECK-NEXT:    br label [[IRR_GUARD]]627; CHECK:       A2:628; CHECK-NEXT:    br i1 [[PRED2:%.*]], label [[A1:%.*]], label [[L1:%.*]]629; CHECK:       L1:630; CHECK-NEXT:    br i1 [[PRED3:%.*]], label [[H1]], label [[EXIT:%.*]]631; CHECK:       fork1:632; CHECK-NEXT:    br label [[IRR_GUARD1:%.*]]633; CHECK:       B1:634; CHECK-NEXT:    br label [[H2:%.*]]635; CHECK:       H2:636; CHECK-NEXT:    br label [[L2:%.*]]637; CHECK:       L2:638; CHECK-NEXT:    br i1 [[PRED5:%.*]], label [[H2]], label [[IRR_GUARD1]]639; CHECK:       B2:640; CHECK-NEXT:    br i1 [[PRED6:%.*]], label [[B1:%.*]], label [[EXIT]]641; CHECK:       exit:642; CHECK-NEXT:    ret void643; CHECK:       irr.guard:644; CHECK-NEXT:    [[GUARD_A2:%.*]] = phi i1 [ true, [[A1]] ], [ [[PRED1_INV]], [[H1]] ]645; CHECK-NEXT:    br i1 [[GUARD_A2]], label [[A2:%.*]], label [[A1]]646; CHECK:       irr.guard1:647; CHECK-NEXT:    [[GUARD_B2:%.*]] = phi i1 [ true, [[L2]] ], [ [[PRED4_INV]], [[FORK1]] ]648; CHECK-NEXT:    br i1 [[GUARD_B2]], label [[B2:%.*]], label [[B1]]649;650entry:651  br i1 %Pred0, label %H1, label %fork1652 653H1:654  br i1 %Pred1, label %A1, label %A2655 656A1:657  br label %A2658 659A2:660  br i1 %Pred2, label %A1, label %L1661 662L1:663  br i1 %Pred3, label %H1, label %exit664 665fork1:666  br i1 %Pred4, label %B1, label %B2667 668B1:669  br label %H2670 671H2:672  br label %L2673 674L2:675  br i1 %Pred5, label %H2, label %B2676 677B2:678  br i1 %Pred6, label %B1, label %exit679 680exit:681  ret void682}683 684define void @siblings_top_level_callbr(i1 %Pred0, i1 %Pred1, i1 %Pred2, i1 %Pred3, i1 %Pred4, i1 %Pred5, i1 %Pred6) {685; CHECK-LABEL: @siblings_top_level_callbr(686; CHECK-NEXT:  entry:687; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED0:%.*]])688; CHECK-NEXT:            to label [[H1:%.*]] [label %fork1]689; CHECK:       H1:690; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED1:%.*]])691; CHECK-NEXT:            to label [[H1_TARGET_A1:%.*]] [label %H1.target.A2]692; CHECK:       A1:693; CHECK-NEXT:    callbr void asm "", ""()694; CHECK-NEXT:            to label [[A1_TARGET_A2:%.*]] []695; CHECK:       A2:696; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED2:%.*]])697; CHECK-NEXT:            to label [[A1:%.*]] [label %L1]698; CHECK:       L1:699; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED3:%.*]])700; CHECK-NEXT:            to label [[H1]] [label %exit]701; CHECK:       fork1:702; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED4:%.*]])703; CHECK-NEXT:            to label [[FORK1_TARGET_B1:%.*]] [label %fork1.target.B2]704; CHECK:       B1:705; CHECK-NEXT:    callbr void asm "", ""()706; CHECK-NEXT:            to label [[H2:%.*]] []707; CHECK:       H2:708; CHECK-NEXT:    callbr void asm "", ""()709; CHECK-NEXT:            to label [[L2:%.*]] []710; CHECK:       L2:711; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED5:%.*]])712; CHECK-NEXT:            to label [[H2]] [label %L2.target.B2]713; CHECK:       B2:714; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED6:%.*]])715; CHECK-NEXT:            to label [[B1:%.*]] [label %exit]716; CHECK:       exit:717; CHECK-NEXT:    ret void718; CHECK:       A1.target.A2:719; CHECK-NEXT:    br label [[IRR_GUARD:%.*]]720; CHECK:       H1.target.A1:721; CHECK-NEXT:    br label [[IRR_GUARD]]722; CHECK:       H1.target.A2:723; CHECK-NEXT:    br label [[IRR_GUARD]]724; CHECK:       irr.guard:725; CHECK-NEXT:    [[GUARD_A2:%.*]] = phi i1 [ true, [[A1_TARGET_A2]] ], [ false, [[H1_TARGET_A1]] ], [ true, [[H1_TARGET_A2:%.*]] ]726; CHECK-NEXT:    br i1 [[GUARD_A2]], label [[A2:%.*]], label [[A1]]727; CHECK:       L2.target.B2:728; CHECK-NEXT:    br label [[IRR_GUARD1:%.*]]729; CHECK:       fork1.target.B1:730; CHECK-NEXT:    br label [[IRR_GUARD1]]731; CHECK:       fork1.target.B2:732; CHECK-NEXT:    br label [[IRR_GUARD1]]733; CHECK:       irr.guard1:734; CHECK-NEXT:    [[GUARD_B2:%.*]] = phi i1 [ true, [[L2_TARGET_B2:%.*]] ], [ false, [[FORK1_TARGET_B1]] ], [ true, [[FORK1_TARGET_B2:%.*]] ]735; CHECK-NEXT:    br i1 [[GUARD_B2]], label [[B2:%.*]], label [[B1]]736;737entry:738  callbr void asm "", "r,!i"(i1 %Pred0) to label %H1 [label %fork1]739 740H1:741  callbr void asm "", "r,!i"(i1 %Pred1) to label %A1 [label %A2]742 743A1:744  callbr void asm "", ""() to label %A2 []745 746A2:747  callbr void asm "", "r,!i"(i1 %Pred2) to label %A1 [label %L1]748 749L1:750  callbr void asm "", "r,!i"(i1 %Pred3) to label %H1 [label %exit]751 752fork1:753  callbr void asm "", "r,!i"(i1 %Pred4) to label %B1 [label %B2]754 755B1:756  callbr void asm "", ""() to label %H2 []757 758H2:759  callbr void asm "", ""() to label %L2 []760 761L2:762  callbr void asm "", "r,!i"(i1 %Pred5) to label %H2 [label %B2]763 764B2:765  callbr void asm "", "r,!i"(i1 %Pred6) to label %B1 [label %exit]766 767exit:768  ret void769}770 771define void @siblings_in_loop(i1 %Pred0, i1 %Pred1, i1 %Pred2, i1 %Pred3, i1 %Pred4, i1 %Pred5, i1 %Pred6, i1 %Pred7) {772; CHECK-LABEL: @siblings_in_loop(773; CHECK-NEXT:  entry:774; CHECK-NEXT:    [[PRED4_INV:%.*]] = xor i1 [[PRED4:%.*]], true775; CHECK-NEXT:    [[PRED1_INV:%.*]] = xor i1 [[PRED1:%.*]], true776; CHECK-NEXT:    br label [[H0:%.*]]777; CHECK:       H0:778; CHECK-NEXT:    br i1 [[PRED0:%.*]], label [[H1:%.*]], label [[FORK1:%.*]]779; CHECK:       H1:780; CHECK-NEXT:    br label [[IRR_GUARD:%.*]]781; CHECK:       A1:782; CHECK-NEXT:    br label [[IRR_GUARD]]783; CHECK:       A2:784; CHECK-NEXT:    br i1 [[PRED2:%.*]], label [[A1:%.*]], label [[L1:%.*]]785; CHECK:       L1:786; CHECK-NEXT:    br i1 [[PRED3:%.*]], label [[H1]], label [[L0:%.*]]787; CHECK:       fork1:788; CHECK-NEXT:    br label [[IRR_GUARD1:%.*]]789; CHECK:       B1:790; CHECK-NEXT:    br label [[H2:%.*]]791; CHECK:       H2:792; CHECK-NEXT:    br label [[L2:%.*]]793; CHECK:       L2:794; CHECK-NEXT:    br i1 [[PRED5:%.*]], label [[H2]], label [[IRR_GUARD1]]795; CHECK:       B2:796; CHECK-NEXT:    br i1 [[PRED6:%.*]], label [[B1:%.*]], label [[L0]]797; CHECK:       L0:798; CHECK-NEXT:    br i1 [[PRED7:%.*]], label [[EXIT:%.*]], label [[H0]]799; CHECK:       exit:800; CHECK-NEXT:    ret void801; CHECK:       irr.guard:802; CHECK-NEXT:    [[GUARD_A2:%.*]] = phi i1 [ true, [[A1]] ], [ [[PRED1_INV]], [[H1]] ]803; CHECK-NEXT:    br i1 [[GUARD_A2]], label [[A2:%.*]], label [[A1]]804; CHECK:       irr.guard1:805; CHECK-NEXT:    [[GUARD_B2:%.*]] = phi i1 [ true, [[L2]] ], [ [[PRED4_INV]], [[FORK1]] ]806; CHECK-NEXT:    br i1 [[GUARD_B2]], label [[B2:%.*]], label [[B1]]807;808entry:809  br label %H0810 811H0:812  br i1 %Pred0, label %H1, label %fork1813 814H1:815  br i1 %Pred1, label %A1, label %A2816 817A1:818  br label %A2819 820A2:821  br i1 %Pred2, label %A1, label %L1822 823L1:824  br i1 %Pred3, label %H1, label %L0825 826fork1:827  br i1 %Pred4, label %B1, label %B2828 829B1:830  br label %H2831 832H2:833  br label %L2834 835L2:836  br i1 %Pred5, label %H2, label %B2837 838B2:839  br i1 %Pred6, label %B1, label %L0840 841L0:842  br i1 %Pred7, label %exit, label %H0843 844exit:845  ret void846}847 848define void @siblings_in_loop_callbr(i1 %Pred0, i1 %Pred1, i1 %Pred2, i1 %Pred3, i1 %Pred4, i1 %Pred5, i1 %Pred6, i1 %Pred7) {849; CHECK-LABEL: @siblings_in_loop_callbr(850; CHECK-NEXT:  entry:851; CHECK-NEXT:    callbr void asm "", ""()852; CHECK-NEXT:            to label [[H0:%.*]] []853; CHECK:       H0:854; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED0:%.*]])855; CHECK-NEXT:            to label [[H1:%.*]] [label %fork1]856; CHECK:       H1:857; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED1:%.*]])858; CHECK-NEXT:            to label [[H1_TARGET_A1:%.*]] [label %H1.target.A2]859; CHECK:       A1:860; CHECK-NEXT:    callbr void asm "", ""()861; CHECK-NEXT:            to label [[A1_TARGET_A2:%.*]] []862; CHECK:       A2:863; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED2:%.*]])864; CHECK-NEXT:            to label [[A1:%.*]] [label %L1]865; CHECK:       L1:866; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED3:%.*]])867; CHECK-NEXT:            to label [[H1]] [label %L0]868; CHECK:       fork1:869; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED4:%.*]])870; CHECK-NEXT:            to label [[FORK1_TARGET_B1:%.*]] [label %fork1.target.B2]871; CHECK:       B1:872; CHECK-NEXT:    callbr void asm "", ""()873; CHECK-NEXT:            to label [[H2:%.*]] []874; CHECK:       H2:875; CHECK-NEXT:    callbr void asm "", ""()876; CHECK-NEXT:            to label [[L2:%.*]] []877; CHECK:       L2:878; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED5:%.*]])879; CHECK-NEXT:            to label [[H2]] [label %L2.target.B2]880; CHECK:       B2:881; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED6:%.*]])882; CHECK-NEXT:            to label [[B1:%.*]] [label %L0]883; CHECK:       L0:884; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED7:%.*]])885; CHECK-NEXT:            to label [[EXIT:%.*]] [label %H0]886; CHECK:       exit:887; CHECK-NEXT:    ret void888; CHECK:       A1.target.A2:889; CHECK-NEXT:    br label [[IRR_GUARD:%.*]]890; CHECK:       H1.target.A1:891; CHECK-NEXT:    br label [[IRR_GUARD]]892; CHECK:       H1.target.A2:893; CHECK-NEXT:    br label [[IRR_GUARD]]894; CHECK:       irr.guard:895; CHECK-NEXT:    [[GUARD_A2:%.*]] = phi i1 [ true, [[A1_TARGET_A2]] ], [ false, [[H1_TARGET_A1]] ], [ true, [[H1_TARGET_A2:%.*]] ]896; CHECK-NEXT:    br i1 [[GUARD_A2]], label [[A2:%.*]], label [[A1]]897; CHECK:       L2.target.B2:898; CHECK-NEXT:    br label [[IRR_GUARD1:%.*]]899; CHECK:       fork1.target.B1:900; CHECK-NEXT:    br label [[IRR_GUARD1]]901; CHECK:       fork1.target.B2:902; CHECK-NEXT:    br label [[IRR_GUARD1]]903; CHECK:       irr.guard1:904; CHECK-NEXT:    [[GUARD_B2:%.*]] = phi i1 [ true, [[L2_TARGET_B2:%.*]] ], [ false, [[FORK1_TARGET_B1]] ], [ true, [[FORK1_TARGET_B2:%.*]] ]905; CHECK-NEXT:    br i1 [[GUARD_B2]], label [[B2:%.*]], label [[B1]]906;907entry:908  callbr void asm "", ""() to label %H0 []909 910H0:911  callbr void asm "", "r,!i"(i1 %Pred0) to label %H1 [label %fork1]912 913H1:914  callbr void asm "", "r,!i"(i1 %Pred1) to label %A1 [label %A2]915 916A1:917  callbr void asm "", ""() to label %A2 []918 919A2:920  callbr void asm "", "r,!i"(i1 %Pred2) to label %A1 [label %L1]921 922L1:923  callbr void asm "", "r,!i"(i1 %Pred3) to label %H1 [label %L0]924 925fork1:926  callbr void asm "", "r,!i"(i1 %Pred4) to label %B1 [label %B2]927 928B1:929  callbr void asm "", ""() to label %H2 []930 931H2:932  callbr void asm "", ""() to label %L2 []933 934L2:935  callbr void asm "", "r,!i"(i1 %Pred5) to label %H2 [label %B2]936 937B2:938  callbr void asm "", "r,!i"(i1 %Pred6) to label %B1 [label %L0]939 940L0:941  callbr void asm "", "r,!i"(i1 %Pred7) to label %exit [label %H0]942 943exit:944  ret void945}946 947define void @irr_in_irr_shared_entry(i1 %Pred0, i1 %Pred1, i1 %Pred2, i1 %Pred3, i1 %Pred4, i1 %Pred5, i1 %Pred6, i1 %Pred7, i1 %Pred8, i1 %Pred9, i1 %Pred10, i1 %Pred11, i1 %Pred12, i1 %Pred13) {948; CHECK-LABEL: @irr_in_irr_shared_entry(949; CHECK-NEXT:  entry:950; CHECK-NEXT:    br i1 [[PRED0:%.*]], label [[IF_END:%.*]], label [[IF_THEN:%.*]]951; CHECK:       if.end:952; CHECK-NEXT:    br i1 [[PRED1:%.*]], label [[IF_THEN7:%.*]], label [[IF_ELSE:%.*]]953; CHECK:       if.then7:954; CHECK-NEXT:    br label [[IF_END16:%.*]]955; CHECK:       if.else:956; CHECK-NEXT:    br label [[IF_END16]]957; CHECK:       if.end16:958; CHECK-NEXT:    br i1 [[PRED2:%.*]], label [[WHILE_COND_PREHEADER:%.*]], label [[IF_THEN39:%.*]]959; CHECK:       while.cond.preheader:960; CHECK-NEXT:    br label [[WHILE_COND:%.*]]961; CHECK:       while.cond:962; CHECK-NEXT:    br i1 [[PRED3:%.*]], label [[IRR_GUARD:%.*]], label [[LOR_RHS:%.*]]963; CHECK:       cond.true49:964; CHECK-NEXT:    br i1 [[PRED4:%.*]], label [[IF_THEN69:%.*]], label [[IRR_GUARD1:%.*]]965; CHECK:       while.body63:966; CHECK-NEXT:    br i1 [[PRED5:%.*]], label [[EXIT:%.*]], label [[WHILE_COND47:%.*]]967; CHECK:       while.cond47:968; CHECK-NEXT:    br i1 [[PRED6:%.*]], label [[COND_TRUE49:%.*]], label [[IRR_GUARD]]969; CHECK:       cond.end61:970; CHECK-NEXT:    br i1 [[PRED7:%.*]], label [[IRR_GUARD1]], label [[WHILE_COND]]971; CHECK:       if.then69:972; CHECK-NEXT:    br i1 [[PRED8:%.*]], label [[EXIT]], label [[WHILE_COND]]973; CHECK:       lor.rhs:974; CHECK-NEXT:    br i1 [[PRED9:%.*]], label [[IRR_GUARD]], label [[WHILE_END76:%.*]]975; CHECK:       while.end76:976; CHECK-NEXT:    br label [[EXIT]]977; CHECK:       if.then39:978; CHECK-NEXT:    br i1 [[PRED10:%.*]], label [[EXIT]], label [[IF_END_I145:%.*]]979; CHECK:       if.end.i145:980; CHECK-NEXT:    br i1 [[PRED11:%.*]], label [[EXIT]], label [[IF_END8_I149:%.*]]981; CHECK:       if.end8.i149:982; CHECK-NEXT:    br label [[EXIT]]983; CHECK:       if.then:984; CHECK-NEXT:    br i1 [[PRED12:%.*]], label [[EXIT]], label [[IF_END_I:%.*]]985; CHECK:       if.end.i:986; CHECK-NEXT:    br i1 [[PRED13:%.*]], label [[EXIT]], label [[IF_END8_I:%.*]]987; CHECK:       if.end8.i:988; CHECK-NEXT:    br label [[EXIT]]989; CHECK:       exit:990; CHECK-NEXT:    ret void991; CHECK:       irr.guard:992; CHECK-NEXT:    [[GUARD_COND_END61:%.*]] = phi i1 [ true, [[WHILE_COND47]] ], [ true, [[LOR_RHS]] ], [ false, [[WHILE_COND]] ]993; CHECK-NEXT:    br i1 [[GUARD_COND_END61]], label [[COND_END61:%.*]], label [[IRR_GUARD1]]994; CHECK:       irr.guard1:995; CHECK-NEXT:    [[GUARD_WHILE_BODY63:%.*]] = phi i1 [ true, [[COND_TRUE49]] ], [ true, [[COND_END61]] ], [ false, [[IRR_GUARD]] ]996; CHECK-NEXT:    br i1 [[GUARD_WHILE_BODY63]], label [[WHILE_BODY63:%.*]], label [[COND_TRUE49]]997;998entry:999  br i1 %Pred0, label %if.end, label %if.then1000 1001if.end:1002  br i1 %Pred1, label %if.then7, label %if.else1003 1004if.then7:1005  br label %if.end161006 1007if.else:1008  br label %if.end161009 1010if.end16:1011  br i1 %Pred2, label %while.cond.preheader, label %if.then391012 1013while.cond.preheader:1014  br label %while.cond1015 1016while.cond:1017  br i1 %Pred3, label %cond.true49, label %lor.rhs1018 1019cond.true49:1020  br i1 %Pred4, label %if.then69, label %while.body631021 1022while.body63:1023  br i1 %Pred5, label %exit, label %while.cond471024 1025while.cond47:1026  br i1 %Pred6, label %cond.true49, label %cond.end611027 1028cond.end61:1029  br i1 %Pred7, label %while.body63, label %while.cond1030 1031if.then69:1032  br i1 %Pred8, label %exit, label %while.cond1033 1034lor.rhs:1035  br i1 %Pred9, label %cond.end61, label %while.end761036 1037while.end76:1038  br label %exit1039 1040if.then39:1041  br i1 %Pred10, label %exit, label %if.end.i1451042 1043if.end.i145:1044  br i1 %Pred11, label %exit, label %if.end8.i1491045 1046if.end8.i149:1047  br label %exit1048 1049if.then:1050  br i1 %Pred12, label %exit, label %if.end.i1051 1052if.end.i:1053  br i1 %Pred13, label %exit, label %if.end8.i1054 1055if.end8.i:1056  br label %exit1057 1058exit:1059  ret void1060}1061 1062define void @irr_in_irr_shared_entry_callbr(i1 %Pred0, i1 %Pred1, i1 %Pred2, i1 %Pred3, i1 %Pred4, i1 %Pred5, i1 %Pred6, i1 %Pred7, i1 %Pred8, i1 %Pred9, i1 %Pred10, i1 %Pred11, i1 %Pred12, i1 %Pred13) {1063; CHECK-LABEL: @irr_in_irr_shared_entry_callbr(1064; CHECK-NEXT:  entry:1065; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED0:%.*]])1066; CHECK-NEXT:            to label [[IF_END:%.*]] [label %if.then]1067; CHECK:       if.end:1068; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED1:%.*]])1069; CHECK-NEXT:            to label [[IF_THEN7:%.*]] [label %if.else]1070; CHECK:       if.then7:1071; CHECK-NEXT:    callbr void asm "", ""()1072; CHECK-NEXT:            to label [[IF_END16:%.*]] []1073; CHECK:       if.else:1074; CHECK-NEXT:    callbr void asm "", ""()1075; CHECK-NEXT:            to label [[IF_END16]] []1076; CHECK:       if.end16:1077; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED2:%.*]])1078; CHECK-NEXT:            to label [[WHILE_COND_PREHEADER:%.*]] [label %if.then39]1079; CHECK:       while.cond.preheader:1080; CHECK-NEXT:    callbr void asm "", ""()1081; CHECK-NEXT:            to label [[WHILE_COND:%.*]] []1082; CHECK:       while.cond:1083; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED3:%.*]])1084; CHECK-NEXT:            to label [[WHILE_COND_TARGET_COND_TRUE49:%.*]] [label %lor.rhs]1085; CHECK:       cond.true49:1086; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED4:%.*]])1087; CHECK-NEXT:            to label [[IF_THEN69:%.*]] [label %cond.true49.target.while.body63]1088; CHECK:       while.body63:1089; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED5:%.*]])1090; CHECK-NEXT:            to label [[EXIT:%.*]] [label %while.cond47]1091; CHECK:       while.cond47:1092; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED6:%.*]])1093; CHECK-NEXT:            to label [[COND_TRUE49:%.*]] [label %while.cond47.target.cond.end61]1094; CHECK:       cond.end61:1095; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED7:%.*]])1096; CHECK-NEXT:            to label [[COND_END61_TARGET_WHILE_BODY63:%.*]] [label %while.cond]1097; CHECK:       if.then69:1098; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED8:%.*]])1099; CHECK-NEXT:            to label [[EXIT]] [label %while.cond]1100; CHECK:       lor.rhs:1101; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED9:%.*]])1102; CHECK-NEXT:            to label [[LOR_RHS_TARGET_COND_END61:%.*]] [label %while.end76]1103; CHECK:       while.end76:1104; CHECK-NEXT:    callbr void asm "", ""()1105; CHECK-NEXT:            to label [[EXIT]] []1106; CHECK:       if.then39:1107; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED10:%.*]])1108; CHECK-NEXT:            to label [[EXIT]] [label %if.end.i145]1109; CHECK:       if.end.i145:1110; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED11:%.*]])1111; CHECK-NEXT:            to label [[EXIT]] [label %if.end8.i149]1112; CHECK:       if.end8.i149:1113; CHECK-NEXT:    callbr void asm "", ""()1114; CHECK-NEXT:            to label [[EXIT]] []1115; CHECK:       if.then:1116; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED12:%.*]])1117; CHECK-NEXT:            to label [[EXIT]] [label %if.end.i]1118; CHECK:       if.end.i:1119; CHECK-NEXT:    callbr void asm "", "r,!i"(i1 [[PRED13:%.*]])1120; CHECK-NEXT:            to label [[EXIT]] [label %if.end8.i]1121; CHECK:       if.end8.i:1122; CHECK-NEXT:    callbr void asm "", ""()1123; CHECK-NEXT:            to label [[EXIT]] []1124; CHECK:       exit:1125; CHECK-NEXT:    ret void1126; CHECK:       while.cond47.target.cond.end61:1127; CHECK-NEXT:    br label [[IRR_GUARD:%.*]]1128; CHECK:       lor.rhs.target.cond.end61:1129; CHECK-NEXT:    br label [[IRR_GUARD]]1130; CHECK:       while.cond.target.cond.true49:1131; CHECK-NEXT:    br label [[IRR_GUARD]]1132; CHECK:       irr.guard:1133; CHECK-NEXT:    [[GUARD_COND_END61:%.*]] = phi i1 [ true, [[WHILE_COND47_TARGET_COND_END61:%.*]] ], [ true, [[LOR_RHS_TARGET_COND_END61]] ], [ false, [[WHILE_COND_TARGET_COND_TRUE49]] ]1134; CHECK-NEXT:    br i1 [[GUARD_COND_END61]], label [[COND_END61:%.*]], label [[IRR_GUARD1:%.*]]1135; CHECK:       cond.true49.target.while.body63:1136; CHECK-NEXT:    br label [[IRR_GUARD1]]1137; CHECK:       cond.end61.target.while.body63:1138; CHECK-NEXT:    br label [[IRR_GUARD1]]1139; CHECK:       irr.guard1:1140; CHECK-NEXT:    [[GUARD_WHILE_BODY63:%.*]] = phi i1 [ true, [[COND_TRUE49_TARGET_WHILE_BODY63:%.*]] ], [ true, [[COND_END61_TARGET_WHILE_BODY63]] ], [ false, [[IRR_GUARD]] ]1141; CHECK-NEXT:    br i1 [[GUARD_WHILE_BODY63]], label [[WHILE_BODY63:%.*]], label [[COND_TRUE49]]1142;1143entry:1144  callbr void asm "", "r,!i"(i1 %Pred0) to label %if.end [label %if.then]1145 1146if.end:1147  callbr void asm "", "r,!i"(i1 %Pred1) to label %if.then7 [label %if.else]1148 1149if.then7:1150  callbr void asm "", ""() to label %if.end16 []1151 1152if.else:1153  callbr void asm "", ""() to label %if.end16 []1154 1155if.end16:1156  callbr void asm "", "r,!i"(i1 %Pred2) to label %while.cond.preheader [label %if.then39]1157 1158while.cond.preheader:1159  callbr void asm "", ""() to label %while.cond []1160 1161while.cond:1162  callbr void asm "", "r,!i"(i1 %Pred3) to label %cond.true49 [label %lor.rhs]1163 1164cond.true49:1165  callbr void asm "", "r,!i"(i1 %Pred4) to label %if.then69 [label %while.body63]1166 1167while.body63:1168  callbr void asm "", "r,!i"(i1 %Pred5) to label %exit [label %while.cond47]1169 1170while.cond47:1171  callbr void asm "", "r,!i"(i1 %Pred6) to label %cond.true49 [label %cond.end61]1172 1173cond.end61:1174  callbr void asm "", "r,!i"(i1 %Pred7) to label %while.body63 [label %while.cond]1175 1176if.then69:1177  callbr void asm "", "r,!i"(i1 %Pred8) to label %exit [label %while.cond]1178 1179lor.rhs:1180  callbr void asm "", "r,!i"(i1 %Pred9) to label %cond.end61 [label %while.end76]1181 1182while.end76:1183  callbr void asm "", ""() to label %exit []1184 1185if.then39:1186  callbr void asm "", "r,!i"(i1 %Pred10) to label %exit [label %if.end.i145]1187 1188if.end.i145:1189  callbr void asm "", "r,!i"(i1 %Pred11) to label %exit [label %if.end8.i149]1190 1191if.end8.i149:1192  callbr void asm "", ""() to label %exit []1193 1194if.then:1195  callbr void asm "", "r,!i"(i1 %Pred12) to label %exit [label %if.end.i]1196 1197if.end.i:1198  callbr void asm "", "r,!i"(i1 %Pred13) to label %exit [label %if.end8.i]1199 1200if.end8.i:1201  callbr void asm "", ""() to label %exit []1202 1203exit:1204  ret void1205}1206