1 ; RUN: opt < %s -correlated-propagation -S | FileCheck %s 2 3 ; CHECK-LABEL: @test0( 4 define void @test0(i32 %n) { 5 entry: 6 br label %for.cond 7 8 for.cond: ; preds = %for.body, %entry 9 %j.0 = phi i32 [ %n, %entry ], [ %div, %for.body ] 10 %cmp = icmp sgt i32 %j.0, 1 11 br i1 %cmp, label %for.body, label %for.end 12 13 for.body: ; preds = %for.cond 14 ; CHECK: %div1 = udiv i32 %j.0, 2 15 %div = sdiv i32 %j.0, 2 16 br label %for.cond 17 18 for.end: ; preds = %for.cond 19 ret void 20 } 21 22 ; CHECK-LABEL: @test1( 23 define void @test1(i32 %n) { 24 entry: 25 br label %for.cond 26 27 for.cond: ; preds = %for.body, %entry 28 %j.0 = phi i32 [ %n, %entry ], [ %div, %for.body ] 29 %cmp = icmp sgt i32 %j.0, -2 30 br i1 %cmp, label %for.body, label %for.end 31 32 for.body: ; preds = %for.cond 33 ; CHECK: %div = sdiv i32 %j.0, 2 34 %div = sdiv i32 %j.0, 2 35 br label %for.cond 36 37 for.end: ; preds = %for.cond 38 ret void 39 } 40 41 ; CHECK-LABEL: @test2( 42 define void @test2(i32 %n) { 43 entry: 44 %cmp = icmp sgt i32 %n, 1 45 br i1 %cmp, label %bb, label %exit 46 47 bb: 48 ; CHECK: %div1 = udiv i32 %n, 2 49 %div = sdiv i32 %n, 2 50 br label %exit 51 52 exit: 53 ret void 54 } 55