mirror of
https://github.com/RPCS3/llvm.git
synced 2025-05-15 01:46:46 +00:00

Even when we don't create a remainder loop (that is, when we unroll by 2), we may duplicate nested loops into the remainder. This is complicated by the fact the remainder may itself be either inserted into an outer loop, or at the top level. In the latter case, we may need to create new top-level loops. Differential Revision: https://reviews.llvm.org/D29156 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@293124 91177308-0d34-0410-b5e6-96231b3b80d8
37 lines
1.4 KiB
LLVM
37 lines
1.4 KiB
LLVM
; RUN: opt -S -loop-unroll -unroll-runtime -unroll-count=2 -verify-loop-info -pass-remarks=loop-unroll < %s 2>&1 | FileCheck %s
|
|
|
|
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
|
target triple = "x86_64-unknown-linux-gnu"
|
|
|
|
; Verify that runtime-unrolling a top-level loop that has nested loops does not
|
|
; make the unroller produce invalid loop-info.
|
|
; CHECK: remark: {{.*}}: unrolled loop by a factor of 2 with run-time trip count
|
|
; CHECK: @widget
|
|
; CHECK: ret void
|
|
define void @widget(double* %arg, double* %arg1, double* %p, i64* %q1, i64* %q2) local_unnamed_addr {
|
|
entry:
|
|
br label %header.outer
|
|
|
|
header.outer: ; preds = %latch.outer, %entry
|
|
%tmp = phi double* [ %tmp8, %latch.outer ], [ %arg, %entry ]
|
|
br label %header.inner
|
|
|
|
header.inner: ; preds = %latch.inner, %header.outer
|
|
br i1 undef, label %latch.inner, label %latch.outer
|
|
|
|
latch.inner: ; preds = %header.inner
|
|
%tmp5 = load i64, i64* %q1, align 8
|
|
store i64 %tmp5, i64* %q2, align 8
|
|
%tmp6 = icmp eq double* %p, %arg
|
|
br label %header.inner
|
|
|
|
latch.outer: ; preds = %header.inner
|
|
store double 0.0, double* %p, align 8
|
|
%tmp8 = getelementptr inbounds double, double* %tmp, i64 1
|
|
%tmp9 = icmp eq double* %tmp8, %arg1
|
|
br i1 %tmp9, label %exit, label %header.outer
|
|
|
|
exit: ; preds = %latch.outer
|
|
ret void
|
|
}
|