1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-24 13:33:37 +02:00
llvm-mirror/test/Transforms/LoopUnroll/runtime-li.ll
Michael Kuperstein ce7b578d43 [LoopUnroll] Properly update loopinfo for runtime unrolling by 2
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

llvm-svn: 293124
2017-01-26 01:04:11 +00:00

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
}