1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -S -passes='loop(indvars),verify,loop(loop-rotate,loop-idiom)' < %s | FileCheck %s 3; RUN: opt -S -passes='loop(indvars),verify,loop(loop-rotate,loop-idiom)' -verify-memoryssa < %s | FileCheck %s 4target triple = "x86_64-unknown-linux-gnu" 5 6; Verify that we invalidate SCEV properly. 7 8define void @test_01() { 9; CHECK-LABEL: @test_01( 10; CHECK-NEXT: entry: 11; CHECK-NEXT: br label [[LBL1:%.*]] 12; CHECK: lbl1: 13; CHECK-NEXT: br label [[FOR_COND:%.*]] 14; CHECK: for.cond: 15; CHECK-NEXT: br i1 false, label [[FOR_BODY3_LR_PH:%.*]], label [[FOR_COND_FOR_END5_CRIT_EDGE:%.*]] 16; CHECK: for.body3.lr.ph: 17; CHECK-NEXT: br label [[FOR_BODY3:%.*]] 18; CHECK: for.cond1: 19; CHECK-NEXT: br i1 false, label [[FOR_BODY3]], label [[FOR_COND1_FOR_END5_CRIT_EDGE:%.*]] 20; CHECK: for.body3: 21; CHECK-NEXT: br i1 false, label [[IF_THEN:%.*]], label [[FOR_COND1:%.*]] 22; CHECK: if.then: 23; CHECK-NEXT: br label [[LBL1]] 24; CHECK: for.cond.for.end5_crit_edge: 25; CHECK-NEXT: br label [[FOR_END5:%.*]] 26; CHECK: for.cond1.for.end5_crit_edge: 27; CHECK-NEXT: br label [[FOR_END5]] 28; CHECK: for.end5: 29; CHECK-NEXT: ret void 30; 31entry: 32 br label %lbl1 33 34lbl1: ; preds = %if.then, %entry 35 br label %for.cond 36 37for.cond: ; preds = %lbl1 38 br label %for.cond1 39 40for.cond1: ; preds = %if.end, %for.cond 41 br i1 false, label %for.body3, label %for.end5 42 43for.body3: ; preds = %for.cond1 44 br i1 false, label %if.then, label %if.end 45 46if.then: ; preds = %for.body3 47 br label %lbl1 48 49if.end: ; preds = %for.body3 50 br label %for.cond1 51 52for.end5: ; preds = %for.cond1 53 ret void 54} 55 56define void @test_02() { 57; CHECK-LABEL: @test_02( 58; CHECK-NEXT: entry: 59; CHECK-NEXT: br label [[LBL1:%.*]] 60; CHECK: lbl1: 61; CHECK-NEXT: br label [[FOR_COND:%.*]] 62; CHECK: for.cond: 63; CHECK-NEXT: br i1 false, label [[IF_THEN:%.*]], label [[IF_END7:%.*]] 64; CHECK: if.then: 65; CHECK-NEXT: br i1 false, label [[FOR_BODY_LR_PH:%.*]], label [[IF_THEN_FOR_END6_CRIT_EDGE:%.*]] 66; CHECK: for.body.lr.ph: 67; CHECK-NEXT: br label [[FOR_BODY:%.*]] 68; CHECK: for.body: 69; CHECK-NEXT: br i1 false, label [[IF_THEN3:%.*]], label [[IF_END:%.*]] 70; CHECK: if.then3: 71; CHECK-NEXT: br label [[LBL1]] 72; CHECK: if.end: 73; CHECK-NEXT: br label [[FOR_COND4:%.*]] 74; CHECK: for.cond4: 75; CHECK-NEXT: br i1 false, label [[FOR_BODY]], label [[FOR_COND1_FOR_END6_CRIT_EDGE:%.*]] 76; CHECK: if.then.for.end6_crit_edge: 77; CHECK-NEXT: br label [[FOR_END6:%.*]] 78; CHECK: for.cond1.for.end6_crit_edge: 79; CHECK-NEXT: br label [[FOR_END6]] 80; CHECK: for.end6: 81; CHECK-NEXT: ret void 82; CHECK: if.end7: 83; CHECK-NEXT: unreachable 84; 85entry: 86 br label %lbl1 87 88lbl1: ; preds = %if.then3, %entry 89 br label %for.cond 90 91for.cond: ; preds = %lbl1 92 br i1 false, label %if.then, label %if.end7 93 94if.then: ; preds = %for.cond 95 br label %for.cond1 96 97for.cond1: ; preds = %for.cond4, %if.then 98 br i1 false, label %for.body, label %for.end6 99 100for.body: ; preds = %for.cond1 101 br i1 false, label %if.then3, label %if.end 102 103if.then3: ; preds = %for.body 104 br label %lbl1 105 106if.end: ; preds = %for.body 107 br label %for.cond4 108 109for.cond4: ; preds = %if.end 110 br label %for.cond1 111 112for.end6: ; preds = %for.cond1 113 ret void 114 115if.end7: ; preds = %for.cond 116 unreachable 117} 118