|
56 | 56 | exit:
|
57 | 57 | ret void
|
58 | 58 | }
|
| 59 | + |
| 60 | +define void @test_brace_escapes(ptr noundef %arr) { |
| 61 | +; CHECK-LABEL: 'test_brace_escapes' |
| 62 | +; CHECK-NEXT: loop.1: |
| 63 | +; CHECK-NEXT: Report: could not determine number of loop iterations |
| 64 | +; CHECK-NEXT: Dependences: |
| 65 | +; CHECK-NEXT: Run-time memory checks: |
| 66 | +; CHECK-NEXT: Grouped accesses: |
| 67 | +; CHECK-EMPTY: |
| 68 | +; CHECK-NEXT: Non vectorizable stores to invariant address were not found in loop. |
| 69 | +; CHECK-NEXT: SCEV assumptions: |
| 70 | +; CHECK-EMPTY: |
| 71 | +; CHECK-NEXT: Expressions re-written: |
| 72 | +; CHECK-NEXT: loop.2: |
| 73 | +; CHECK-NEXT: Memory dependences are safe with run-time checks |
| 74 | +; CHECK-NEXT: Dependences: |
| 75 | +; CHECK-NEXT: Run-time memory checks: |
| 76 | +; CHECK-NEXT: Check 0: |
| 77 | +; CHECK-NEXT: Comparing group ([[GRP4:0x[0-9a-f]+]]): |
| 78 | +; CHECK-NEXT: %gep.iv.2 = getelementptr inbounds ptr, ptr %arr, i64 %iv.2 |
| 79 | +; CHECK-NEXT: Against group ([[GRP5:0x[0-9a-f]+]]): |
| 80 | +; CHECK-NEXT: %gep.iv.1 = getelementptr inbounds ptr, ptr %arr, i64 %iv.1 |
| 81 | +; CHECK-NEXT: Grouped accesses: |
| 82 | +; CHECK-NEXT: Group [[GRP4]]: |
| 83 | +; CHECK-NEXT: (Low: {(64 + %arr),+,64}<%loop.1> High: {(8064 + %arr),+,64}<%loop.1>) |
| 84 | +; CHECK-NEXT: Member: {{(64 + %arr),+,64}<%loop.1>,+,8}<%loop.2> |
| 85 | +; CHECK-NEXT: Group [[GRP5]]: |
| 86 | +; CHECK-NEXT: (Low: %arr High: (8000 + %arr)) |
| 87 | +; CHECK-NEXT: Member: {%arr,+,8}<nuw><%loop.2> |
| 88 | +; CHECK-EMPTY: |
| 89 | +; CHECK-NEXT: Non vectorizable stores to invariant address were not found in loop. |
| 90 | +; CHECK-NEXT: SCEV assumptions: |
| 91 | +; CHECK-EMPTY: |
| 92 | +; CHECK-NEXT: Expressions re-written: |
| 93 | +; |
| 94 | +entry: |
| 95 | + br label %loop.1 |
| 96 | + |
| 97 | +loop.1: |
| 98 | + %iv = phi i64 [ %iv.next, %loop.1 ], [ 8, %entry ] |
| 99 | + %arr.addr.0.i = phi ptr [ %incdec.ptr.i, %loop.1 ], [ %arr, %entry ] |
| 100 | + %incdec.ptr.i = getelementptr inbounds ptr, ptr %arr.addr.0.i, i64 1 |
| 101 | + %0 = load ptr, ptr %arr.addr.0.i, align 8 |
| 102 | + %tobool.not.i = icmp eq ptr %0, null |
| 103 | + %iv.next = add i64 %iv, 8 |
| 104 | + br i1 %tobool.not.i, label %loop.1.exit, label %loop.1 |
| 105 | + |
| 106 | +loop.1.exit: |
| 107 | + %iv.lcssa = phi i64 [ %iv, %loop.1 ] |
| 108 | + br label %loop.2 |
| 109 | + |
| 110 | +loop.2: |
| 111 | + %iv.1 = phi i64 [ 0, %loop.1.exit ], [ %iv.1.next, %loop.2 ] |
| 112 | + %iv.2 = phi i64 [ %iv.lcssa, %loop.1.exit ], [ %iv.2.next, %loop.2 ] |
| 113 | + %gep.iv.1 = getelementptr inbounds ptr, ptr %arr, i64 %iv.1 |
| 114 | + %l.1 = load ptr, ptr %gep.iv.1, align 8 |
| 115 | + %iv.2.next = add nsw i64 %iv.2, 1 |
| 116 | + %gep.iv.2 = getelementptr inbounds ptr, ptr %arr, i64 %iv.2 |
| 117 | + store ptr %l.1, ptr %gep.iv.2, align 8 |
| 118 | + %iv.1.next = add nuw nsw i64 %iv.1, 1 |
| 119 | + %cmp = icmp ult i64 %iv.1.next, 1000 |
| 120 | + br i1 %cmp, label %loop.2, label %exit |
| 121 | + |
| 122 | +exit: |
| 123 | + ret void |
| 124 | +} |
| 125 | + |
0 commit comments