Sanjoy Das | 4153f47 | 2015-02-18 01:47:07 +0000 | [diff] [blame] | 1 | ; ; RUN: opt -analyze -scalar-evolution < %s | FileCheck %s |
| 2 | |
Sanjoy Das | 7e4a641 | 2016-05-29 00:32:17 +0000 | [diff] [blame] | 3 | define void @infer.sext.0(i1* %c, i32 %start, i32* %buf) { |
Sanjoy Das | 4153f47 | 2015-02-18 01:47:07 +0000 | [diff] [blame] | 4 | ; CHECK-LABEL: Classifying expressions for: @infer.sext.0 |
| 5 | entry: |
| 6 | br label %loop |
| 7 | |
| 8 | loop: |
Sanjoy Das | b14010d | 2015-02-24 01:02:42 +0000 | [diff] [blame] | 9 | %counter = phi i32 [ 0, %entry ], [ %counter.inc, %loop ] |
Sanjoy Das | 4153f47 | 2015-02-18 01:47:07 +0000 | [diff] [blame] | 10 | %idx = phi i32 [ %start, %entry ], [ %idx.inc, %loop ] |
| 11 | %idx.inc = add nsw i32 %idx, 1 |
| 12 | %idx.inc.sext = sext i32 %idx.inc to i64 |
| 13 | ; CHECK: %idx.inc.sext = sext i32 %idx.inc to i64 |
Sanjoy Das | 8f27415 | 2015-10-22 19:57:19 +0000 | [diff] [blame] | 14 | ; CHECK-NEXT: --> {(1 + (sext i32 %start to i64))<nsw>,+,1}<nsw><%loop> |
Sanjoy Das | 7e4a641 | 2016-05-29 00:32:17 +0000 | [diff] [blame] | 15 | |
| 16 | %buf.gep = getelementptr inbounds i32, i32* %buf, i32 %idx.inc |
| 17 | %val = load i32, i32* %buf.gep |
| 18 | |
Sanjoy Das | b14010d | 2015-02-24 01:02:42 +0000 | [diff] [blame] | 19 | %condition = icmp eq i32 %counter, 1 |
| 20 | %counter.inc = add i32 %counter, 1 |
Sanjoy Das | 4153f47 | 2015-02-18 01:47:07 +0000 | [diff] [blame] | 21 | br i1 %condition, label %exit, label %loop |
| 22 | |
| 23 | exit: |
| 24 | ret void |
| 25 | } |
| 26 | |
Sanjoy Das | 7e4a641 | 2016-05-29 00:32:17 +0000 | [diff] [blame] | 27 | define void @infer.zext.0(i1* %c, i32 %start, i32* %buf) { |
Sanjoy Das | 4153f47 | 2015-02-18 01:47:07 +0000 | [diff] [blame] | 28 | ; CHECK-LABEL: Classifying expressions for: @infer.zext.0 |
| 29 | entry: |
| 30 | br label %loop |
| 31 | |
| 32 | loop: |
Sanjoy Das | b14010d | 2015-02-24 01:02:42 +0000 | [diff] [blame] | 33 | %counter = phi i32 [ 0, %entry ], [ %counter.inc, %loop ] |
Sanjoy Das | 4153f47 | 2015-02-18 01:47:07 +0000 | [diff] [blame] | 34 | %idx = phi i32 [ %start, %entry ], [ %idx.inc, %loop ] |
| 35 | %idx.inc = add nuw i32 %idx, 1 |
| 36 | %idx.inc.sext = zext i32 %idx.inc to i64 |
| 37 | ; CHECK: %idx.inc.sext = zext i32 %idx.inc to i64 |
Sanjoy Das | 8f27415 | 2015-10-22 19:57:19 +0000 | [diff] [blame] | 38 | ; CHECK-NEXT: --> {(1 + (zext i32 %start to i64))<nuw><nsw>,+,1}<nuw><%loop> |
Sanjoy Das | 7e4a641 | 2016-05-29 00:32:17 +0000 | [diff] [blame] | 39 | |
| 40 | %buf.gep = getelementptr inbounds i32, i32* %buf, i32 %idx.inc |
| 41 | %val = load i32, i32* %buf.gep |
| 42 | |
Sanjoy Das | b14010d | 2015-02-24 01:02:42 +0000 | [diff] [blame] | 43 | %condition = icmp eq i32 %counter, 1 |
| 44 | %counter.inc = add i32 %counter, 1 |
Sanjoy Das | 4153f47 | 2015-02-18 01:47:07 +0000 | [diff] [blame] | 45 | br i1 %condition, label %exit, label %loop |
| 46 | |
| 47 | exit: |
| 48 | ret void |
| 49 | } |
| 50 | |
| 51 | define void @infer.sext.1(i32 %start, i1* %c) { |
| 52 | ; CHECK-LABEL: Classifying expressions for: @infer.sext.1 |
| 53 | entry: |
| 54 | %start.mul = mul i32 %start, 4 |
| 55 | %start.real = add i32 %start.mul, 2 |
| 56 | br label %loop |
| 57 | |
| 58 | loop: |
| 59 | %idx = phi i32 [ %start.real, %entry ], [ %idx.inc, %loop ] |
| 60 | %idx.sext = sext i32 %idx to i64 |
| 61 | ; CHECK: %idx.sext = sext i32 %idx to i64 |
Nikita Popov | 8550fb3 | 2019-06-15 09:15:52 +0000 | [diff] [blame] | 62 | ; CHECK-NEXT: --> {(2 + (sext i32 (4 * %start) to i64))<nuw><nsw>,+,2}<nsw><%loop> |
Sanjoy Das | 4153f47 | 2015-02-18 01:47:07 +0000 | [diff] [blame] | 63 | %idx.inc = add nsw i32 %idx, 2 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 64 | %condition = load i1, i1* %c |
Sanjoy Das | 4153f47 | 2015-02-18 01:47:07 +0000 | [diff] [blame] | 65 | br i1 %condition, label %exit, label %loop |
| 66 | |
| 67 | exit: |
| 68 | ret void |
| 69 | } |
| 70 | |
| 71 | define void @infer.sext.2(i1* %c, i8 %start) { |
| 72 | ; CHECK-LABEL: Classifying expressions for: @infer.sext.2 |
| 73 | entry: |
| 74 | %start.inc = add i8 %start, 1 |
| 75 | %entry.condition = icmp slt i8 %start, 127 |
| 76 | br i1 %entry.condition, label %loop, label %exit |
| 77 | |
| 78 | loop: |
| 79 | %idx = phi i8 [ %start.inc, %entry ], [ %idx.inc, %loop ] |
| 80 | %idx.sext = sext i8 %idx to i16 |
| 81 | ; CHECK: %idx.sext = sext i8 %idx to i16 |
Sanjoy Das | 8f27415 | 2015-10-22 19:57:19 +0000 | [diff] [blame] | 82 | ; CHECK-NEXT: --> {(1 + (sext i8 %start to i16))<nsw>,+,1}<nsw><%loop> |
Sanjoy Das | 4153f47 | 2015-02-18 01:47:07 +0000 | [diff] [blame] | 83 | %idx.inc = add nsw i8 %idx, 1 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 84 | %condition = load volatile i1, i1* %c |
Sanjoy Das | 4153f47 | 2015-02-18 01:47:07 +0000 | [diff] [blame] | 85 | br i1 %condition, label %exit, label %loop |
| 86 | |
| 87 | exit: |
| 88 | ret void |
| 89 | } |
| 90 | |
| 91 | define void @infer.zext.1(i1* %c, i8 %start) { |
| 92 | ; CHECK-LABEL: Classifying expressions for: @infer.zext.1 |
| 93 | entry: |
| 94 | %start.inc = add i8 %start, 1 |
| 95 | %entry.condition = icmp ult i8 %start, 255 |
| 96 | br i1 %entry.condition, label %loop, label %exit |
| 97 | |
| 98 | loop: |
| 99 | %idx = phi i8 [ %start.inc, %entry ], [ %idx.inc, %loop ] |
| 100 | %idx.zext = zext i8 %idx to i16 |
| 101 | ; CHECK: %idx.zext = zext i8 %idx to i16 |
Sanjoy Das | 8f27415 | 2015-10-22 19:57:19 +0000 | [diff] [blame] | 102 | ; CHECK-NEXT: --> {(1 + (zext i8 %start to i16))<nuw><nsw>,+,1}<nuw><%loop> |
Sanjoy Das | 4153f47 | 2015-02-18 01:47:07 +0000 | [diff] [blame] | 103 | %idx.inc = add nuw i8 %idx, 1 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 104 | %condition = load volatile i1, i1* %c |
Sanjoy Das | 4153f47 | 2015-02-18 01:47:07 +0000 | [diff] [blame] | 105 | br i1 %condition, label %exit, label %loop |
| 106 | |
| 107 | exit: |
| 108 | ret void |
| 109 | } |