|
1 | 1 | ; RUN: opt -passes=dfa-jump-threading -dfa-cost-threshold=25 -pass-remarks-missed='dfa-jump-threading' -pass-remarks-output=%t -disable-output %s
|
2 | 2 | ; RUN: FileCheck --input-file %t --check-prefix=REMARK %s
|
3 | 3 | ; RUN: opt -S -passes=dfa-jump-threading %s | FileCheck %s
|
| 4 | +; RUN: opt -S -passes=dfa-jump-threading -dfa-jump-ignore-optsize %s | FileCheck %s --check-prefix=IGNORESIZE |
4 | 5 |
|
5 | 6 | ; This negative test case checks that the optimization doesn't trigger
|
6 | 7 | ; when the code size cost is too high.
|
@@ -186,6 +187,53 @@ define i32 @negative5(i32 %num) minsize {
|
186 | 187 | ; CHECK: for.end:
|
187 | 188 | ; CHECK-NEXT: ret i32 0
|
188 | 189 | ;
|
| 190 | +; IGNORESIZE-LABEL: define i32 @negative5( |
| 191 | +; IGNORESIZE-NEXT: entry: |
| 192 | +; IGNORESIZE-NEXT: br label [[FOR_BODY:%.*]] |
| 193 | +; IGNORESIZE: for.body: |
| 194 | +; IGNORESIZE-NEXT: [[COUNT:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_INC:%.*]] ] |
| 195 | +; IGNORESIZE-NEXT: [[STATE:%.*]] = phi i32 [ 1, [[ENTRY]] ], [ poison, [[FOR_INC]] ] |
| 196 | +; IGNORESIZE-NEXT: switch i32 [[STATE]], label [[FOR_INC_JT1:%.*]] [ |
| 197 | +; IGNORESIZE-NEXT: i32 1, label [[CASE1:%.*]] |
| 198 | +; IGNORESIZE-NEXT: i32 2, label [[CASE2:%.*]] |
| 199 | +; IGNORESIZE-NEXT: ] |
| 200 | +; IGNORESIZE: for.body.jt2: |
| 201 | +; IGNORESIZE-NEXT: [[COUNT_JT2:%.*]] = phi i32 [ [[INC_JT2:%.*]], [[FOR_INC_JT2:%.*]] ] |
| 202 | +; IGNORESIZE-NEXT: [[STATE_JT2:%.*]] = phi i32 [ [[STATE_NEXT_JT2:%.*]], [[FOR_INC_JT2]] ] |
| 203 | +; IGNORESIZE-NEXT: br label [[CASE2]] |
| 204 | +; IGNORESIZE: for.body.jt1: |
| 205 | +; IGNORESIZE-NEXT: [[COUNT_JT1:%.*]] = phi i32 [ [[INC_JT1:%.*]], [[FOR_INC_JT1]] ] |
| 206 | +; IGNORESIZE-NEXT: [[STATE_JT1:%.*]] = phi i32 [ [[STATE_NEXT_JT1:%.*]], [[FOR_INC_JT1]] ] |
| 207 | +; IGNORESIZE-NEXT: br label [[CASE1]] |
| 208 | +; IGNORESIZE: case1: |
| 209 | +; IGNORESIZE-NEXT: [[COUNT2:%.*]] = phi i32 [ [[COUNT_JT1]], [[FOR_BODY_JT1:%.*]] ], [ [[COUNT]], [[FOR_BODY]] ] |
| 210 | +; IGNORESIZE-NEXT: br label [[FOR_INC_JT2]] |
| 211 | +; IGNORESIZE: case2: |
| 212 | +; IGNORESIZE-NEXT: [[COUNT1:%.*]] = phi i32 [ [[COUNT_JT2]], [[FOR_BODY_JT2:%.*]] ], [ [[COUNT]], [[FOR_BODY]] ] |
| 213 | +; IGNORESIZE-NEXT: [[CMP:%.*]] = icmp eq i32 [[COUNT1]], 50 |
| 214 | +; IGNORESIZE-NEXT: br i1 [[CMP]], label [[FOR_INC_JT1]], label [[SI_UNFOLD_FALSE:%.*]] |
| 215 | +; IGNORESIZE: si.unfold.false: |
| 216 | +; IGNORESIZE-NEXT: br label [[FOR_INC_JT2]] |
| 217 | +; IGNORESIZE: for.inc: |
| 218 | +; IGNORESIZE-NEXT: [[INC]] = add nsw i32 undef, 1 |
| 219 | +; IGNORESIZE-NEXT: [[CMP_EXIT:%.*]] = icmp slt i32 [[INC]], [[NUM]] |
| 220 | +; IGNORESIZE-NEXT: br i1 [[CMP_EXIT]], label [[FOR_BODY]], label [[FOR_END:%.*]] |
| 221 | +; IGNORESIZE: for.inc.jt2: |
| 222 | +; IGNORESIZE-NEXT: [[COUNT4:%.*]] = phi i32 [ [[COUNT1]], [[SI_UNFOLD_FALSE]] ], [ [[COUNT2]], [[CASE1]] ] |
| 223 | +; IGNORESIZE-NEXT: [[STATE_NEXT_JT2]] = phi i32 [ 2, [[CASE1]] ], [ 2, [[SI_UNFOLD_FALSE]] ] |
| 224 | +; IGNORESIZE-NEXT: [[INC_JT2]] = add nsw i32 [[COUNT4]], 1 |
| 225 | +; IGNORESIZE-NEXT: [[CMP_EXIT_JT2:%.*]] = icmp slt i32 [[INC_JT2]], [[NUM]] |
| 226 | +; IGNORESIZE-NEXT: br i1 [[CMP_EXIT_JT2]], label [[FOR_BODY_JT2]], label [[FOR_END]] |
| 227 | +; IGNORESIZE: for.inc.jt1: |
| 228 | +; IGNORESIZE-NEXT: [[COUNT3:%.*]] = phi i32 [ [[COUNT1]], [[CASE2]] ], [ [[COUNT]], [[FOR_BODY]] ] |
| 229 | +; IGNORESIZE-NEXT: [[STATE_NEXT_JT1]] = phi i32 [ 1, [[CASE2]] ], [ 1, [[FOR_BODY]] ] |
| 230 | +; IGNORESIZE-NEXT: [[INC_JT1]] = add nsw i32 [[COUNT3]], 1 |
| 231 | +; IGNORESIZE-NEXT: [[CMP_EXIT_JT1:%.*]] = icmp slt i32 [[INC_JT1]], [[NUM]] |
| 232 | +; IGNORESIZE-NEXT: br i1 [[CMP_EXIT_JT1]], label [[FOR_BODY_JT1]], label [[FOR_END]] |
| 233 | +; IGNORESIZE: for.end: |
| 234 | +; IGNORESIZE-NEXT: ret i32 0 |
| 235 | +; |
| 236 | + |
189 | 237 | entry:
|
190 | 238 | br label %for.body
|
191 | 239 |
|
|
0 commit comments