1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; REQUIRES: asserts 3; RUN: opt -S -enable-loop-simplifycfg-term-folding=true -loop-simplifycfg -verify-loop-info -verify-dom-info -verify-loop-lcssa 2>&1 < %s | FileCheck %s 4; RUN: opt -S -enable-loop-simplifycfg-term-folding=true -passes='require<domtree>,loop(loop-simplifycfg)' -verify-loop-info -verify-dom-info -verify-loop-lcssa 2>&1 < %s | FileCheck %s 5; RUN: opt -S -enable-loop-simplifycfg-term-folding=true -loop-simplifycfg -enable-mssa-loop-dependency=true -verify-memoryssa -verify-loop-info -verify-dom-info -verify-loop-lcssa 2>&1 < %s | FileCheck %s 6 7target triple = "x86_64-unknown-linux-gnu" 8 9define void @test() { 10; CHECK-LABEL: @test( 11; CHECK-NEXT: br label [[BB1:%.*]] 12; CHECK: bb1.loopexit: 13; CHECK-NEXT: br label [[BB1]] 14; CHECK: bb1: 15; CHECK-NEXT: br label [[BB2:%.*]] 16; CHECK: bb2.loopexit: 17; CHECK-NEXT: br label [[BB2]] 18; CHECK: bb2: 19; CHECK-NEXT: switch i32 0, label [[BB2_SPLIT:%.*]] [ 20; CHECK-NEXT: i32 1, label [[BB1_LOOPEXIT:%.*]] 21; CHECK-NEXT: i32 2, label [[BB2_LOOPEXIT:%.*]] 22; CHECK-NEXT: ] 23; CHECK: bb2.split: 24; CHECK-NEXT: br label [[BB3:%.*]] 25; CHECK: bb3: 26; CHECK-NEXT: br label [[BB3]] 27; 28 29 br label %bb1 30 31bb1: ; preds = %bb4, %0 32 br label %bb2 33 34bb2: ; preds = %bb6, %bb1 35 br label %bb3 36 37bb3: ; preds = %bb8, %bb3, %bb2 38 br i1 false, label %bb4, label %bb3 39 40bb4: ; preds = %bb8, %bb3 41 br i1 undef, label %bb1, label %bb6 42 43bb6: ; preds = %bb4 44 br i1 undef, label %bb2, label %bb8 45 46bb8: ; preds = %bb6 47 br i1 true, label %bb4, label %bb3 48} 49 50define void @test_many_subloops(i1 %c) { 51; CHECK-LABEL: @test_many_subloops( 52; CHECK-NEXT: br label [[BB1:%.*]] 53; CHECK: bb1.loopexit: 54; CHECK-NEXT: br label [[BB1]] 55; CHECK: bb1: 56; CHECK-NEXT: br label [[BB2:%.*]] 57; CHECK: bb2.loopexit: 58; CHECK-NEXT: br label [[BB2]] 59; CHECK: bb2: 60; CHECK-NEXT: switch i32 0, label [[BB2_SPLIT:%.*]] [ 61; CHECK-NEXT: i32 1, label [[BB1_LOOPEXIT:%.*]] 62; CHECK-NEXT: i32 2, label [[BB2_LOOPEXIT:%.*]] 63; CHECK-NEXT: ] 64; CHECK: bb2.split: 65; CHECK-NEXT: br label [[BB3:%.*]] 66; CHECK: bb3: 67; CHECK-NEXT: br label [[BB3]] 68; 69 70 br label %bb1 71 72bb1: 73 br label %bb2 74 75bb2: 76 br label %bb3 77 78bb3: 79 br i1 false, label %bb4, label %bb3 80 81bb4: 82 br i1 undef, label %bb1, label %subloop1 83 84subloop1: 85 br i1 %c, label %subloop2, label %subloop11 86 87subloop11: 88 br i1 %c, label %subloop11, label %subloop12 89 90subloop12: 91 br i1 %c, label %subloop12, label %subloop13 92 93subloop13: 94 br i1 %c, label %subloop13, label %subloop1_latch 95 96subloop1_latch: 97 br label %subloop1 98 99subloop2: 100 br i1 %c, label %bb6, label %subloop21 101 102subloop21: 103 br i1 %c, label %subloop21, label %subloop22 104 105subloop22: 106 br i1 %c, label %subloop22, label %subloop23 107 108subloop23: 109 br i1 %c, label %subloop23, label %subloop2_latch 110 111subloop2_latch: 112 br label %subloop2 113 114bb6: 115 br i1 undef, label %bb2, label %bb8 116 117bb8: 118 br i1 true, label %bb4, label %bb3 119} 120