1; 2; Here all the branches are exiting ones. Checking that we dont have 3; exponential behavior with any kind of controlling heuristics here. 4; 5; There we should have just a single loop. 6; 7; RUN: opt < %s -enable-unswitch-cost-multiplier=true \ 8; RUN: -unswitch-num-initial-unscaled-candidates=0 -unswitch-siblings-toplevel-div=1 \ 9; RUN: -passes='loop(simple-loop-unswitch<nontrivial>),print<loops>' -disable-output 2>&1 | FileCheck %s --check-prefixes=LOOP1 10; 11; RUN: opt < %s -enable-unswitch-cost-multiplier=true \ 12; RUN: -unswitch-num-initial-unscaled-candidates=0 -unswitch-siblings-toplevel-div=8 \ 13; RUN: -passes='loop(simple-loop-unswitch<nontrivial>),print<loops>' -disable-output 2>&1 | FileCheck %s --check-prefixes=LOOP1 14; 15; RUN: opt < %s -enable-unswitch-cost-multiplier=true \ 16; RUN: -unswitch-num-initial-unscaled-candidates=8 -unswitch-siblings-toplevel-div=1 \ 17; RUN: -passes='loop(simple-loop-unswitch<nontrivial>),print<loops>' -disable-output 2>&1 | FileCheck %s --check-prefixes=LOOP1 18; 19; RUN: opt < %s -enable-unswitch-cost-multiplier=true \ 20; RUN: -unswitch-num-initial-unscaled-candidates=8 -unswitch-siblings-toplevel-div=8 \ 21; RUN: -passes='loop(simple-loop-unswitch<nontrivial>),print<loops>' -disable-output 2>&1 | FileCheck %s --check-prefixes=LOOP1 22; 23; RUN: opt < %s -enable-unswitch-cost-multiplier=false \ 24; RUN: -passes='loop(simple-loop-unswitch<nontrivial>),print<loops>' -disable-output 2>&1 | FileCheck %s --check-prefixes=LOOP1 25; 26; 27; RUN: opt < %s -enable-unswitch-cost-multiplier=true \ 28; RUN: -unswitch-num-initial-unscaled-candidates=0 -unswitch-siblings-toplevel-div=1 \ 29; RUN: -passes='loop-mssa(simple-loop-unswitch<nontrivial>),print<loops>' -disable-output 2>&1 | FileCheck %s --check-prefixes=LOOP1 30; 31; RUN: opt < %s -enable-unswitch-cost-multiplier=true \ 32; RUN: -unswitch-num-initial-unscaled-candidates=0 -unswitch-siblings-toplevel-div=8 \ 33; RUN: -passes='loop-mssa(simple-loop-unswitch<nontrivial>),print<loops>' -disable-output 2>&1 | FileCheck %s --check-prefixes=LOOP1 34; 35; RUN: opt < %s -enable-unswitch-cost-multiplier=true \ 36; RUN: -unswitch-num-initial-unscaled-candidates=8 -unswitch-siblings-toplevel-div=1 \ 37; RUN: -passes='loop-mssa(simple-loop-unswitch<nontrivial>),print<loops>' -disable-output 2>&1 | FileCheck %s --check-prefixes=LOOP1 38; 39; RUN: opt < %s -enable-unswitch-cost-multiplier=true \ 40; RUN: -unswitch-num-initial-unscaled-candidates=8 -unswitch-siblings-toplevel-div=8 \ 41; RUN: -passes='loop-mssa(simple-loop-unswitch<nontrivial>),print<loops>' -disable-output 2>&1 | FileCheck %s --check-prefixes=LOOP1 42; 43; RUN: opt < %s -enable-unswitch-cost-multiplier=false \ 44; RUN: -passes='loop-mssa(simple-loop-unswitch<nontrivial>),print<loops>' -disable-output 2>&1 | FileCheck %s --check-prefixes=LOOP1 45; 46; 47; Single loop, not unswitched 48; LOOP1: Loop at depth 1 containing: 49; LOOP1-NOT: Loop at depth 1 containing: 50 51declare void @bar() 52 53define void @loop_simple5(ptr %addr, i1 %c1, i1 %c2, i1 %c3, i1 %c4, i1 %c5) { 54entry: 55 br label %loop 56loop: 57 %iv = phi i32 [0, %entry], [%iv.next, %loop_latch] 58 %iv.next = add i32 %iv, 1 59 ;; disabling trivial unswitch 60 call void @bar() 61 br i1 %c1, label %loop_next1, label %exit 62loop_next1: 63 br i1 %c2, label %loop_next2, label %exit 64loop_next2: 65 br i1 %c3, label %loop_next3, label %exit 66loop_next3: 67 br i1 %c4, label %loop_next4, label %exit 68loop_next4: 69 br i1 %c5, label %loop_latch, label %exit 70loop_latch: 71 store volatile i32 0, ptr %addr 72 %test_loop = icmp slt i32 %iv, 50 73 br i1 %test_loop, label %loop, label %exit 74exit: 75 ret void 76} 77