Marianne Mailhot-Sarrasin | b192670 | 2016-05-04 17:45:40 +0000 | [diff] [blame] | 1 | ; RUN: opt < %s -S -loop-unroll -unroll-count=4 | FileCheck -check-prefix=CHECK_COUNT4 %s
|
| 2 | ; RUN: opt < %s -S -loop-unroll | FileCheck -check-prefix=CHECK_NOCOUNT %s
|
| 3 |
|
| 4 |
|
| 5 | ;///////////////////// TEST 1 //////////////////////////////
|
| 6 |
|
Hans Wennborg | 719b26b | 2016-05-10 21:45:55 +0000 | [diff] [blame^] | 7 | ; This test shows that the loop is unrolled according to the specified
|
| 8 | ; unroll factor.
|
Marianne Mailhot-Sarrasin | b192670 | 2016-05-04 17:45:40 +0000 | [diff] [blame] | 9 |
|
Hans Wennborg | 719b26b | 2016-05-10 21:45:55 +0000 | [diff] [blame^] | 10 | define void @Test1() nounwind {
|
Marianne Mailhot-Sarrasin | b192670 | 2016-05-04 17:45:40 +0000 | [diff] [blame] | 11 | entry:
|
| 12 | br label %loop
|
| 13 |
|
| 14 | loop:
|
| 15 | %iv = phi i32 [ 0, %entry ], [ %inc, %loop ]
|
| 16 | %inc = add i32 %iv, 1
|
| 17 | %exitcnd = icmp uge i32 %inc, 1024
|
| 18 | br i1 %exitcnd, label %exit, label %loop
|
| 19 |
|
| 20 | exit:
|
| 21 | ret void
|
| 22 | }
|
| 23 |
|
| 24 | ; CHECK_COUNT4-LABEL: @Test1
|
| 25 | ; CHECK_COUNT4: phi
|
| 26 | ; CHECK_COUNT4-NEXT: add
|
| 27 | ; CHECK_COUNT4-NEXT: add
|
| 28 | ; CHECK_COUNT4-NEXT: add
|
| 29 | ; CHECK_COUNT4-NEXT: add
|
| 30 | ; CHECK_COUNT4-NEXT: icmp
|
| 31 |
|
| 32 |
|
| 33 | ;///////////////////// TEST 2 //////////////////////////////
|
| 34 |
|
Hans Wennborg | 719b26b | 2016-05-10 21:45:55 +0000 | [diff] [blame^] | 35 | ; This test shows that with optnone attribute, the loop is not unrolled
|
| 36 | ; even if an unroll factor was specified.
|
Marianne Mailhot-Sarrasin | b192670 | 2016-05-04 17:45:40 +0000 | [diff] [blame] | 37 |
|
Hans Wennborg | 719b26b | 2016-05-10 21:45:55 +0000 | [diff] [blame^] | 38 | define void @Test2() nounwind optnone noinline {
|
Marianne Mailhot-Sarrasin | b192670 | 2016-05-04 17:45:40 +0000 | [diff] [blame] | 39 | entry:
|
| 40 | br label %loop
|
| 41 |
|
| 42 | loop:
|
| 43 | %iv = phi i32 [ 0, %entry ], [ %inc, %loop ]
|
| 44 | %inc = add i32 %iv, 1
|
| 45 | %exitcnd = icmp uge i32 %inc, 1024
|
| 46 | br i1 %exitcnd, label %exit, label %loop
|
| 47 |
|
| 48 | exit:
|
| 49 | ret void
|
| 50 | }
|
| 51 |
|
| 52 | ; CHECK_COUNT4-LABEL: @Test2
|
| 53 | ; CHECK_COUNT4: phi
|
| 54 | ; CHECK_COUNT4-NEXT: add
|
Marianne Mailhot-Sarrasin | b192670 | 2016-05-04 17:45:40 +0000 | [diff] [blame] | 55 | ; CHECK_COUNT4-NEXT: icmp
|
| 56 |
|
| 57 |
|
| 58 | ;///////////////////// TEST 3 //////////////////////////////
|
| 59 |
|
Hans Wennborg | 719b26b | 2016-05-10 21:45:55 +0000 | [diff] [blame^] | 60 | ; This test shows that this loop is fully unrolled by default.
|
Marianne Mailhot-Sarrasin | b192670 | 2016-05-04 17:45:40 +0000 | [diff] [blame] | 61 |
|
| 62 | @tab = common global [24 x i32] zeroinitializer, align 4
|
| 63 |
|
Hans Wennborg | 719b26b | 2016-05-10 21:45:55 +0000 | [diff] [blame^] | 64 | define i32 @Test3() {
|
Marianne Mailhot-Sarrasin | b192670 | 2016-05-04 17:45:40 +0000 | [diff] [blame] | 65 | entry:
|
| 66 | br label %for.body
|
| 67 |
|
| 68 | for.body: ; preds = %for.body, %entry
|
| 69 | %i.05 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
|
| 70 | %arrayidx = getelementptr inbounds [24 x i32], [24 x i32]* @tab, i32 0, i32 %i.05
|
| 71 | store i32 %i.05, i32* %arrayidx, align 4
|
| 72 | %inc = add nuw nsw i32 %i.05, 1
|
| 73 | %exitcond = icmp eq i32 %inc, 24
|
| 74 | br i1 %exitcond, label %for.end, label %for.body
|
| 75 |
|
| 76 | for.end: ; preds = %for.body
|
| 77 | ret i32 42
|
| 78 | }
|
| 79 |
|
Hans Wennborg | 719b26b | 2016-05-10 21:45:55 +0000 | [diff] [blame^] | 80 | ; CHECK_NOCOUNT-LABEL: @Test3
|
Marianne Mailhot-Sarrasin | b192670 | 2016-05-04 17:45:40 +0000 | [diff] [blame] | 81 | ; CHECK_NOCOUNT: store
|
| 82 | ; CHECK_NOCOUNT-NEXT: store
|
| 83 | ; CHECK_NOCOUNT-NEXT: store
|
| 84 | ; CHECK_NOCOUNT-NEXT: store
|
| 85 | ; CHECK_NOCOUNT-NEXT: store
|
| 86 | ; CHECK_NOCOUNT-NEXT: store
|
| 87 | ; CHECK_NOCOUNT-NEXT: store
|
| 88 | ; CHECK_NOCOUNT-NEXT: store
|
| 89 | ; CHECK_NOCOUNT-NEXT: store
|
| 90 | ; CHECK_NOCOUNT-NEXT: store
|
| 91 | ; CHECK_NOCOUNT-NEXT: store
|
| 92 | ; CHECK_NOCOUNT-NEXT: store
|
| 93 | ; CHECK_NOCOUNT-NEXT: store
|
| 94 | ; CHECK_NOCOUNT-NEXT: store
|
| 95 | ; CHECK_NOCOUNT-NEXT: store
|
| 96 | ; CHECK_NOCOUNT-NEXT: store
|
| 97 | ; CHECK_NOCOUNT-NEXT: store
|
| 98 | ; CHECK_NOCOUNT-NEXT: store
|
| 99 | ; CHECK_NOCOUNT-NEXT: store
|
| 100 | ; CHECK_NOCOUNT-NEXT: store
|
| 101 | ; CHECK_NOCOUNT-NEXT: store
|
| 102 | ; CHECK_NOCOUNT-NEXT: store
|
| 103 | ; CHECK_NOCOUNT-NEXT: store
|
| 104 | ; CHECK_NOCOUNT-NEXT: store
|
| 105 | ; CHECK_NOCOUNT-NEXT: ret
|
| 106 |
|
| 107 |
|
Hans Wennborg | 719b26b | 2016-05-10 21:45:55 +0000 | [diff] [blame^] | 108 | ;///////////////////// TEST 4 //////////////////////////////
|
Marianne Mailhot-Sarrasin | b192670 | 2016-05-04 17:45:40 +0000 | [diff] [blame] | 109 |
|
Hans Wennborg | 719b26b | 2016-05-10 21:45:55 +0000 | [diff] [blame^] | 110 | ; This test shows that with optsize attribute, this loop is not unrolled.
|
Marianne Mailhot-Sarrasin | b192670 | 2016-05-04 17:45:40 +0000 | [diff] [blame] | 111 |
|
Hans Wennborg | 719b26b | 2016-05-10 21:45:55 +0000 | [diff] [blame^] | 112 | define i32 @Test4() optsize {
|
Marianne Mailhot-Sarrasin | b192670 | 2016-05-04 17:45:40 +0000 | [diff] [blame] | 113 | entry:
|
| 114 | br label %for.body
|
| 115 |
|
| 116 | for.body: ; preds = %for.body, %entry
|
| 117 | %i.05 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
|
| 118 | %arrayidx = getelementptr inbounds [24 x i32], [24 x i32]* @tab, i32 0, i32 %i.05
|
| 119 | store i32 %i.05, i32* %arrayidx, align 4
|
| 120 | %inc = add nuw nsw i32 %i.05, 1
|
| 121 | %exitcond = icmp eq i32 %inc, 24
|
| 122 | br i1 %exitcond, label %for.end, label %for.body
|
| 123 |
|
| 124 | for.end: ; preds = %for.body
|
| 125 | ret i32 42
|
| 126 | }
|
| 127 |
|
Hans Wennborg | 719b26b | 2016-05-10 21:45:55 +0000 | [diff] [blame^] | 128 | ; CHECK_NOCOUNT-LABEL: @Test4
|
Marianne Mailhot-Sarrasin | b192670 | 2016-05-04 17:45:40 +0000 | [diff] [blame] | 129 | ; CHECK_NOCOUNT: phi
|
| 130 | ; CHECK_NOCOUNT: icmp
|