Abhilash Bhandari | 54e5a1a | 2016-11-25 14:07:44 +0000 | [diff] [blame] | 1 | ; RUN: opt -loop-unswitch -S - < %s | FileCheck %s |
| 2 | |
| 3 | ;CHECK-LABEL: @b |
| 4 | ;CHECK: [[Loop1:for\.end.*]]: ; preds = %for.cond.us |
| 5 | ;CHECK-NEXT: %[[PhiVar1:pdt.*]] = phi i32 [ %pdt.0.us, %for.cond.us ] |
| 6 | ;CHECK: [[Loop2:for\.end.*]]: ; preds = %for.cond.us1 |
| 7 | ;CHECK-NEXT: %[[PhiVar2:pdt.*]] = phi i32 [ %pdt.0.us2, %for.cond.us1 ] |
| 8 | ;CHECK: [[Loop3:for\.end.*]]: ; preds = %for.cond |
| 9 | ;CHECK-NEXT: %[[PhiVar3:pdt.*]] = phi i32 [ %pdt.0, %for.cond ] |
| 10 | ;CHECK: [[Join1:for\.end.*]]: ; preds = %[[Loop2]], %[[Loop3]] |
| 11 | ;CHECK-NEXT: %[[PhiRes1:pdt.*]] = phi i32 [ %[[PhiVar3]], %[[Loop3]] ], [ %[[PhiVar2]], %[[Loop2]] ] |
| 12 | ;CHECK: for.end: ; preds = %[[Loop1]], %[[Join1]] |
| 13 | ;CHECK-NEXT: %[[PhiRes2:pdt.*]] = phi i32 [ %[[PhiRes1]], %[[Join1]] ], [ %[[PhiVar1]], %[[Loop1]] ] |
| 14 | ;CHECK-NEXT: ret i32 %[[PhiRes2]] |
| 15 | |
| 16 | ; Function Attrs: nounwind uwtable |
| 17 | define i32 @b(i32 %x, i32 %y) #0 { |
| 18 | entry: |
| 19 | br label %for.cond |
| 20 | |
| 21 | for.cond: ; preds = %for.inc, %entry |
| 22 | %pdt.0 = phi i32 [ 1, %entry ], [ %pdt.2, %for.inc ] |
| 23 | %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ] |
| 24 | %cmp = icmp slt i32 %i.0, 100 |
| 25 | br i1 %cmp, label %for.body, label %for.end |
| 26 | |
| 27 | for.body: ; preds = %for.cond |
| 28 | %tobool = icmp ne i32 %x, 0 |
| 29 | br i1 %tobool, label %if.then, label %if.else |
| 30 | |
| 31 | if.then: ; preds = %for.body |
| 32 | %mul = mul nsw i32 %pdt.0, 2 |
| 33 | br label %if.end6 |
| 34 | |
| 35 | if.else: ; preds = %for.body |
| 36 | %tobool1 = icmp ne i32 %y, 0 |
| 37 | br i1 %tobool1, label %if.then2, label %if.else4 |
| 38 | |
| 39 | if.then2: ; preds = %if.else |
| 40 | %mul3 = mul nsw i32 %pdt.0, 3 |
| 41 | br label %if.end |
| 42 | |
| 43 | if.else4: ; preds = %if.else |
| 44 | %mul5 = mul nsw i32 %pdt.0, 4 |
| 45 | br label %if.end |
| 46 | |
| 47 | if.end: ; preds = %if.else4, %if.then2 |
| 48 | %pdt.1 = phi i32 [ %mul3, %if.then2 ], [ %mul5, %if.else4 ] |
| 49 | br label %if.end6 |
| 50 | |
| 51 | if.end6: ; preds = %if.end, %if.then |
| 52 | %pdt.2 = phi i32 [ %mul, %if.then ], [ %pdt.1, %if.end ] |
| 53 | br label %for.inc |
| 54 | |
| 55 | for.inc: ; preds = %if.end6 |
| 56 | %inc = add nsw i32 %i.0, 1 |
| 57 | br label %for.cond |
| 58 | |
| 59 | for.end: ; preds = %for.cond |
| 60 | ret i32 %pdt.0 |
| 61 | } |
| 62 | |