|
1 |
| -; RUN: opt < %s -loop-unroll -pragma-unroll-threshold=1024 -S | FileCheck %s |
2 |
| -; RUN: opt < %s -loop-unroll -loop-unroll -pragma-unroll-threshold=1024 -S | FileCheck %s |
| 1 | +; RUN: opt < %s -loop-unroll -pragma-unroll-threshold=1024 -unroll-max-iteration-count-to-analyze=40 -S | FileCheck %s |
| 2 | +; RUN: opt < %s -loop-unroll -loop-unroll -pragma-unroll-threshold=1024 -unroll-max-iteration-count-to-analyze=40 -S | FileCheck %s |
3 | 3 | ;
|
4 | 4 | ; Run loop unrolling twice to verify that loop unrolling metadata is properly
|
5 | 5 | ; removed and further unrolling is disabled after the pass is run once.
|
@@ -31,6 +31,31 @@ for.end: ; preds = %for.body
|
31 | 31 | ret void
|
32 | 32 | }
|
33 | 33 |
|
| 34 | +; loop4_with_dbg contains a small loop which should be completely unrolled by |
| 35 | +; the default unrolling heuristics. There is DbgInfoIntrinsic inside the loop |
| 36 | +; body, which should not block unrolling. |
| 37 | +; |
| 38 | +; CHECK-LABEL: @loop4_dbg( |
| 39 | +; CHECK-NOT: br i1 |
| 40 | +define void @loop4_dbg(i32* nocapture %a) { |
| 41 | +entry: |
| 42 | + br label %for.body |
| 43 | + |
| 44 | +for.body: ; preds = %for.body, %entry |
| 45 | + %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ] |
| 46 | + %arrayidx = getelementptr inbounds i32, i32* %a, i64 %indvars.iv |
| 47 | + %0 = load i32, i32* %arrayidx, align 4 |
| 48 | + call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !22, metadata !DIExpression()), !dbg !24 |
| 49 | + %inc = add nsw i32 %0, 1 |
| 50 | + store i32 %inc, i32* %arrayidx, align 4 |
| 51 | + %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 |
| 52 | + %exitcond = icmp eq i64 %indvars.iv.next, 40 |
| 53 | + br i1 %exitcond, label %for.end, label %for.body |
| 54 | + |
| 55 | +for.end: ; preds = %for.body |
| 56 | + ret void |
| 57 | +} |
| 58 | + |
34 | 59 | ; #pragma clang loop unroll(disable)
|
35 | 60 | ;
|
36 | 61 | ; CHECK-LABEL: @loop4_with_disable(
|
@@ -357,5 +382,18 @@ for.body: ; preds = %entry, %for.body
|
357 | 382 | for.end: ; preds = %for.body, %entry
|
358 | 383 | ret void
|
359 | 384 | }
|
| 385 | + |
| 386 | +declare void @llvm.dbg.value(metadata, i64, metadata, metadata) |
| 387 | + |
| 388 | +!llvm.module.flags = !{!18, !19} |
| 389 | +!llvm.dbg.cu = !{!20} |
| 390 | + |
360 | 391 | !16 = !{!16, !17}
|
361 | 392 | !17 = !{!"llvm.loop.unroll.count", i32 3}
|
| 393 | +!18 = !{i32 2, !"Dwarf Version", i32 4} |
| 394 | +!19 = !{i32 2, !"Debug Info Version", i32 3} |
| 395 | +!20 = distinct !DICompileUnit(language: DW_LANG_C99, file: !23) |
| 396 | +!21 = distinct !DISubprogram(name: "foo", unit: !20) |
| 397 | +!22 = !DILocalVariable(name: "b", line: 1, arg: 2, scope: !21) |
| 398 | +!23 = !DIFile(filename: "a.c", directory: "a/b") |
| 399 | +!24 = !DILocation(line: 1, column: 14, scope: !21) |
0 commit comments