|
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 |
1 | 2 | ; RUN: opt -passes=loop-interchange -cache-line-size=64 -verify-dom-info -verify-loop-info -verify-loop-lcssa -S %s | FileCheck %s
|
2 | 3 |
|
3 | 4 | @b = global [3 x [5 x [8 x i16]]] [[5 x [8 x i16]] zeroinitializer, [5 x [8 x i16]] [[8 x i16] zeroinitializer, [8 x i16] [i16 0, i16 0, i16 0, i16 6, i16 1, i16 6, i16 0, i16 0], [8 x i16] zeroinitializer, [8 x i16] zeroinitializer, [8 x i16] zeroinitializer], [5 x [8 x i16]] zeroinitializer], align 2
|
|
21 | 22 | ;; }
|
22 | 23 |
|
23 | 24 | define void @test1() {
|
24 |
| -;CHECK-LABEL: @test1( |
25 |
| -;CHECK: entry: |
26 |
| -;CHECK-NEXT: br label [[FOR_COND1_PREHEADER:%.*]] |
27 |
| -;CHECK: for.body.preheader: |
28 |
| -;CHECK-NEXT: br label [[FOR_BODY:%.*]] |
29 |
| -;CHECK: for.body: |
30 |
| -;CHECK-NEXT: [[INDVARS_IV22:%.*]] = phi i64 [ [[INDVARS_IV_NEXT23:%.*]], [[FOR_INC8:%.*]] ], [ 0, [[FOR_BODY_PREHEADER:%.*]] ] |
31 |
| -;CHECK-NEXT: [[TOBOOL:%.*]] = icmp eq i64 [[INDVARS_IV22:%.*]], 0 |
32 |
| -;CHECK-NEXT: br i1 [[TOBOOL]], label [[FOR_BODY3_SPLIT1:%.*]], label [[FOR_BODY3_SPLIT:%.*]] |
33 |
| -;CHECK: for.cond1.preheader: |
34 |
| -;CHECK-NEXT: br label [[FOR_BODY3:%.*]] |
35 |
| -;CHECK: for.body3: |
36 |
| -;CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[FOR_COND1_PREHEADER]] ], [ %3, [[FOR_BODY3_SPLIT]] ] |
37 |
| -;CHECK-NEXT: br label [[FOR_BODY_PREHEADER]] |
38 |
| -;CHECK: for.body3.split1: |
39 |
| -;CHECK-NEXT: [[TMP0:%.*]] = add nuw nsw i64 [[INDVARS_IV22]], 5 |
40 |
| -;CHECK-NEXT: [[ARRAYIDX7:%.*]] = getelementptr inbounds [3 x [5 x [8 x i16]]], ptr @b, i64 0, i64 [[INDVARS_IV]], i64 [[INDVARS_IV]], i64 [[TMP0]] |
41 |
| -;CHECK-NEXT: [[TMP1:%.*]] = load i16, ptr [[ARRAYIDX7]] |
42 |
| -;CHECK-NEXT: [[CONV:%.*]] = sext i16 [[TMP1]] to i32 |
43 |
| -;CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr @a |
44 |
| -;CHECK-NEXT: [[TMP_OR:%.*]] = or i32 [[TMP2]], [[CONV]] |
45 |
| -;CHECK-NEXT: store i32 [[TMP_OR]], ptr @a |
46 |
| -;CHECK-NEXT: [[INDVARS_IV_NEXT:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 1 |
47 |
| -;CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[INDVARS_IV_NEXT]], 3 |
48 |
| -;CHECK-NEXT: br label [[FOR_INC8_LOOPEXIT:%.*]] |
49 |
| -;CHECK: for.body3.split: |
50 |
| -;CHECK-NEXT: [[TMP3:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 1 |
51 |
| -;CHECK-NEXT: [[TMP4:%.*]] = icmp ne i64 [[TMP3]], 3 |
52 |
| -;CHECK-NEXT: br i1 %4, label [[FOR_BODY3]], label [[FOR_END10:%.*]] |
53 |
| -;CHECK: for.inc8.loopexit: |
54 |
| -;CHECK-NEXT: br label [[FOR_INC8]] |
55 |
| -;CHECK: for.inc8: |
56 |
| -;CHECK-NEXT: [[INDVARS_IV_NEXT23]] = add nuw nsw i64 [[INDVARS_IV22]], 1 |
57 |
| -;CHECK-NEXT: [[EXITCOND25:%.*]] = icmp ne i64 [[INDVARS_IV_NEXT23]], 3 |
58 |
| -;CHECK-NEXT: br i1 [[EXITCOND25]], label [[FOR_BODY]], label [[FOR_BODY3_SPLIT]] |
59 |
| -;CHECK: for.end10: |
60 |
| -;CHECK-NEXT: [[TMP5:%.*]] = load i32, ptr @a |
61 |
| -;CHECK-NEXT: ret void |
| 25 | +; CHECK-LABEL: define void @test1() { |
| 26 | +; CHECK-NEXT: [[ENTRY:.*]]: |
| 27 | +; CHECK-NEXT: br label %[[FOR_BODY:.*]] |
| 28 | +; CHECK: [[FOR_BODY]]: |
| 29 | +; CHECK-NEXT: [[INDVARS_IV22:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ [[INDVARS_IV_NEXT23:%.*]], %[[FOR_INC8:.*]] ] |
| 30 | +; CHECK-NEXT: [[TOBOOL:%.*]] = icmp eq i64 [[INDVARS_IV22]], 0 |
| 31 | +; CHECK-NEXT: br i1 [[TOBOOL]], label %[[FOR_COND1_PREHEADER:.*]], label %[[FOR_INC8]] |
| 32 | +; CHECK: [[FOR_COND1_PREHEADER]]: |
| 33 | +; CHECK-NEXT: br label %[[FOR_BODY3:.*]] |
| 34 | +; CHECK: [[FOR_BODY3]]: |
| 35 | +; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, %[[FOR_COND1_PREHEADER]] ], [ [[TMP3:%.*]], %[[FOR_BODY3]] ] |
| 36 | +; CHECK-NEXT: [[TMP0:%.*]] = add nuw nsw i64 [[INDVARS_IV22]], 5 |
| 37 | +; CHECK-NEXT: [[ARRAYIDX7:%.*]] = getelementptr inbounds [3 x [5 x [8 x i16]]], ptr @b, i64 0, i64 [[INDVARS_IV]], i64 [[INDVARS_IV]], i64 [[TMP0]] |
| 38 | +; CHECK-NEXT: [[TMP1:%.*]] = load i16, ptr [[ARRAYIDX7]], align 2 |
| 39 | +; CHECK-NEXT: [[CONV:%.*]] = sext i16 [[TMP1]] to i32 |
| 40 | +; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr @a, align 4 |
| 41 | +; CHECK-NEXT: [[TMP_OR:%.*]] = or i32 [[TMP2]], [[CONV]] |
| 42 | +; CHECK-NEXT: store i32 [[TMP_OR]], ptr @a, align 4 |
| 43 | +; CHECK-NEXT: [[TMP3]] = add nuw nsw i64 [[INDVARS_IV]], 1 |
| 44 | +; CHECK-NEXT: [[TMP4:%.*]] = icmp ne i64 [[TMP3]], 3 |
| 45 | +; CHECK-NEXT: br i1 [[TMP4]], label %[[FOR_BODY3]], label %[[FOR_INC8_LOOPEXIT:.*]] |
| 46 | +; CHECK: [[FOR_INC8_LOOPEXIT]]: |
| 47 | +; CHECK-NEXT: br label %[[FOR_INC8]] |
| 48 | +; CHECK: [[FOR_INC8]]: |
| 49 | +; CHECK-NEXT: [[INDVARS_IV_NEXT23]] = add nuw nsw i64 [[INDVARS_IV22]], 1 |
| 50 | +; CHECK-NEXT: [[EXITCOND25:%.*]] = icmp ne i64 [[INDVARS_IV_NEXT23]], 3 |
| 51 | +; CHECK-NEXT: br i1 [[EXITCOND25]], label %[[FOR_BODY]], label %[[FOR_END10:.*]] |
| 52 | +; CHECK: [[FOR_END10]]: |
| 53 | +; CHECK-NEXT: [[TMP5:%.*]] = load i32, ptr @a, align 4 |
| 54 | +; CHECK-NEXT: ret void |
| 55 | +; |
62 | 56 |
|
63 | 57 | entry:
|
64 | 58 | br label %for.body
|
@@ -118,45 +112,45 @@ for.end10: ; preds = %for.inc8
|
118 | 112 | ;; }
|
119 | 113 |
|
120 | 114 | define void @test2() {
|
121 |
| -; CHECK-LABEL: @test2( |
122 |
| -; CHECK-NEXT: entry: |
123 |
| -; CHECK-NEXT: br label [[OUTERMOST_HEADER:%.*]] |
124 |
| -; CHECK: outermost.header: |
125 |
| -; CHECK-NEXT: [[INDVAR_OUTERMOST:%.*]] = phi i32 [ 10, [[ENTRY:%.*]] ], [ [[INDVAR_OUTERMOST_NEXT:%.*]], [[OUTERMOST_LATCH:%.*]] ] |
| 115 | +; CHECK-LABEL: define void @test2() { |
| 116 | +; CHECK-NEXT: [[ENTRY:.*]]: |
| 117 | +; CHECK-NEXT: br label %[[OUTERMOST_HEADER:.*]] |
| 118 | +; CHECK: [[OUTERMOST_HEADER]]: |
| 119 | +; CHECK-NEXT: [[INDVAR_OUTERMOST:%.*]] = phi i32 [ 10, %[[ENTRY]] ], [ [[INDVAR_OUTERMOST_NEXT:%.*]], %[[OUTERMOST_LATCH:.*]] ] |
126 | 120 | ; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr @a, align 4
|
127 | 121 | ; CHECK-NEXT: [[TOBOOL71_I:%.*]] = icmp eq i32 [[TMP0]], 0
|
128 |
| -; CHECK-NEXT: br label [[INNERMOST_PREHEADER:%.*]] |
129 |
| -; CHECK: middle.header.preheader: |
130 |
| -; CHECK-NEXT: br label [[MIDDLE_HEADER:%.*]] |
131 |
| -; CHECK: middle.header: |
132 |
| -; CHECK-NEXT: [[INDVAR_MIDDLE:%.*]] = phi i64 [ [[INDVAR_MIDDLE_NEXT:%.*]], [[MIDDLE_LATCH:%.*]] ], [ 4, [[MIDDLE_HEADER_PREHEADER:%.*]] ] |
133 |
| -; CHECK-NEXT: br i1 [[TOBOOL71_I]], label [[INNERMOST_BODY_SPLIT1:%.*]], label [[INNERMOST_BODY_SPLIT:%.*]] |
134 |
| -; CHECK: innermost.preheader: |
135 |
| -; CHECK-NEXT: br label [[INNERMOST_BODY:%.*]] |
136 |
| -; CHECK: innermost.body: |
137 |
| -; CHECK-NEXT: [[INDVAR_INNERMOST:%.*]] = phi i64 [ [[TMP1:%.*]], [[INNERMOST_BODY_SPLIT]] ], [ 4, [[INNERMOST_PREHEADER]] ] |
138 |
| -; CHECK-NEXT: br label [[MIDDLE_HEADER_PREHEADER]] |
139 |
| -; CHECK: innermost.body.split1: |
| 122 | +; CHECK-NEXT: br label %[[INNERMOST_PREHEADER:.*]] |
| 123 | +; CHECK: [[MIDDLE_HEADER_PREHEADER:.*]]: |
| 124 | +; CHECK-NEXT: br label %[[MIDDLE_HEADER:.*]] |
| 125 | +; CHECK: [[MIDDLE_HEADER]]: |
| 126 | +; CHECK-NEXT: [[INDVAR_MIDDLE:%.*]] = phi i64 [ [[INDVAR_MIDDLE_NEXT:%.*]], %[[MIDDLE_LATCH:.*]] ], [ 4, %[[MIDDLE_HEADER_PREHEADER]] ] |
| 127 | +; CHECK-NEXT: br i1 [[TOBOOL71_I]], label %[[INNERMOST_BODY_SPLIT1:.*]], label %[[INNERMOST_BODY_SPLIT:.*]] |
| 128 | +; CHECK: [[INNERMOST_PREHEADER]]: |
| 129 | +; CHECK-NEXT: br label %[[INNERMOST_BODY:.*]] |
| 130 | +; CHECK: [[INNERMOST_BODY]]: |
| 131 | +; CHECK-NEXT: [[INDVAR_INNERMOST:%.*]] = phi i64 [ [[TMP1:%.*]], %[[INNERMOST_BODY_SPLIT]] ], [ 4, %[[INNERMOST_PREHEADER]] ] |
| 132 | +; CHECK-NEXT: br label %[[MIDDLE_HEADER_PREHEADER]] |
| 133 | +; CHECK: [[INNERMOST_BODY_SPLIT1]]: |
140 | 134 | ; CHECK-NEXT: [[ARRAYIDX9_I:%.*]] = getelementptr inbounds [1 x [6 x i32]], ptr @d, i64 0, i64 [[INDVAR_INNERMOST]], i64 [[INDVAR_MIDDLE]]
|
141 | 135 | ; CHECK-NEXT: store i32 0, ptr [[ARRAYIDX9_I]], align 4
|
142 | 136 | ; CHECK-NEXT: [[INDVAR_INNERMOST_NEXT:%.*]] = add nsw i64 [[INDVAR_INNERMOST]], -1
|
143 | 137 | ; CHECK-NEXT: [[TOBOOL5_I:%.*]] = icmp eq i64 [[INDVAR_INNERMOST_NEXT]], 0
|
144 |
| -; CHECK-NEXT: br label [[MIDDLE_LATCH_LOOPEXIT:%.*]] |
145 |
| -; CHECK: innermost.body.split: |
| 138 | +; CHECK-NEXT: br label %[[INNERMOST_LOOPEXIT:.*]] |
| 139 | +; CHECK: [[INNERMOST_BODY_SPLIT]]: |
146 | 140 | ; CHECK-NEXT: [[TMP1]] = add nsw i64 [[INDVAR_INNERMOST]], -1
|
147 | 141 | ; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i64 [[TMP1]], 0
|
148 |
| -; CHECK-NEXT: br i1 [[TMP2]], label [[OUTERMOST_LATCH]], label [[INNERMOST_BODY]] |
149 |
| -; CHECK: innermost.loopexit: |
150 |
| -; CHECK-NEXT: br label [[MIDDLE_LATCH]] |
151 |
| -; CHECK: middle.latch: |
| 142 | +; CHECK-NEXT: br i1 [[TMP2]], label %[[OUTERMOST_LATCH]], label %[[INNERMOST_BODY]] |
| 143 | +; CHECK: [[INNERMOST_LOOPEXIT]]: |
| 144 | +; CHECK-NEXT: br label %[[MIDDLE_LATCH]] |
| 145 | +; CHECK: [[MIDDLE_LATCH]]: |
152 | 146 | ; CHECK-NEXT: [[INDVAR_MIDDLE_NEXT]] = add nsw i64 [[INDVAR_MIDDLE]], -1
|
153 | 147 | ; CHECK-NEXT: [[TOBOOL2_I:%.*]] = icmp eq i64 [[INDVAR_MIDDLE_NEXT]], 0
|
154 |
| -; CHECK-NEXT: br i1 [[TOBOOL2_I]], label [[INNERMOST_BODY_SPLIT]], label [[MIDDLE_HEADER]] |
155 |
| -; CHECK: outermost.latch: |
| 148 | +; CHECK-NEXT: br i1 [[TOBOOL2_I]], label %[[INNERMOST_BODY_SPLIT]], label %[[MIDDLE_HEADER]] |
| 149 | +; CHECK: [[OUTERMOST_LATCH]]: |
156 | 150 | ; CHECK-NEXT: [[INDVAR_OUTERMOST_NEXT]] = add nsw i32 [[INDVAR_OUTERMOST]], -5
|
157 | 151 | ; CHECK-NEXT: [[TOBOOL_I:%.*]] = icmp eq i32 [[INDVAR_OUTERMOST_NEXT]], 0
|
158 |
| -; CHECK-NEXT: br i1 [[TOBOOL_I]], label [[OUTERMOST_EXIT:%.*]], label [[OUTERMOST_HEADER]] |
159 |
| -; CHECK: outermost.exit: |
| 152 | +; CHECK-NEXT: br i1 [[TOBOOL_I]], label %[[OUTERMOST_EXIT:.*]], label %[[OUTERMOST_HEADER]] |
| 153 | +; CHECK: [[OUTERMOST_EXIT]]: |
160 | 154 | ; CHECK-NEXT: ret void
|
161 | 155 | ;
|
162 | 156 |
|
|
0 commit comments