mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-10 06:03:52 +00:00
e78d6b0640
Running non-LCSSA-preserving LoopSimplify followed by LCSSA on (roughly) the same loop is incorrect, since LoopSimplify may break LCSSA arbitrarily higher in the loop nest. Instead, run LCSSA first, and then run LCSSA-preserving LoopSimplify on the result. This fixes PR31718. Differential Revision: https://reviews.llvm.org/D29055 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292854 91177308-0d34-0410-b5e6-96231b3b80d8
56 lines
1.0 KiB
LLVM
56 lines
1.0 KiB
LLVM
; RUN: opt -loop-unroll -verify-loop-lcssa -S < %s | FileCheck %s
|
|
|
|
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
|
target triple = "x86_64-unknown-linux-gnu"
|
|
|
|
@b = external local_unnamed_addr global i32, align 4
|
|
|
|
; CHECK-LABEL: @main
|
|
; CHECK: exit.loopexit:
|
|
; CHECK: {{.*}} = phi i32 [ %d.0, %h3 ]
|
|
; CHECK: br label %exit
|
|
; CHECK: exit.loopexit1:
|
|
; CHECK: {{.*}} = phi i32 [ %d.0, %h3.1 ]
|
|
; CHECK: br label %exit
|
|
|
|
define void @main() local_unnamed_addr #0 {
|
|
ph1:
|
|
br label %h1
|
|
|
|
h1:
|
|
%d.0 = phi i32 [ %1, %latch1 ], [ undef, %ph1 ]
|
|
br label %ph2
|
|
|
|
ph2:
|
|
br label %h2
|
|
|
|
h2:
|
|
%0 = phi i32 [ 0, %ph2 ], [ %inc, %latch2 ]
|
|
br label %h3
|
|
|
|
h3:
|
|
br i1 undef, label %latch3, label %exit
|
|
|
|
latch3:
|
|
br i1 false, label %exit3, label %h3
|
|
|
|
exit3:
|
|
br label %latch2
|
|
|
|
latch2:
|
|
%inc = add nuw nsw i32 %0, 1
|
|
%cmp = icmp slt i32 %inc, 2
|
|
br i1 %cmp, label %h2, label %exit2
|
|
|
|
exit2:
|
|
br i1 undef, label %latch1, label %ph2
|
|
|
|
latch1: ; preds = %exit2
|
|
%1 = load i32, i32* @b, align 4
|
|
br label %h1
|
|
|
|
exit:
|
|
%d.0.lcssa = phi i32 [ %d.0, %h3 ]
|
|
ret void
|
|
}
|