Files
clang-p2996/llvm/test/Transforms/IndVarSimplify/inner-loop-by-latch-cond.ll
Serguei Katkov 529f42331e [SCEV] Re-land: Fix isKnownPredicate
This is re-land of https://reviews.llvm.org/rL327362 with a fix
and regression test.

The crash was due to it is possible that for found MDL loop,
LHS or RHS may contain an invariant unknown SCEV which
does not dominate the MDL. Please see regression
test for an example.

Reviewers: sanjoy, mkazantsev, reames
Reviewed By: mkazantsev
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D44553

llvm-svn: 327822
2018-03-19 06:35:30 +00:00

36 lines
850 B
LLVM

; RUN: opt < %s -indvars -S | FileCheck %s
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128-ni:1"
target triple = "x86_64-unknown-linux-gnu"
declare void @foo(i64)
; CHECK-LABEL: @test
define void @test(i64 %a) {
entry:
br label %outer_header
outer_header:
%i = phi i64 [20, %entry], [%i.next, %outer_latch]
%i.next = add nuw nsw i64 %i, 1
br label %inner_header
inner_header:
%j = phi i64 [1, %outer_header], [%j.next, %inner_header]
%cmp = icmp ult i64 %j, %i.next
; CHECK-NOT: select
%s = select i1 %cmp, i64 %j, i64 %i
; CHECK: call void @foo(i64 %j)
call void @foo(i64 %s)
%j.next = add nuw nsw i64 %j, 1
%cond = icmp ult i64 %j, %i
br i1 %cond, label %inner_header, label %outer_latch
outer_latch:
%cond2 = icmp ne i64 %i.next, 40
br i1 %cond2, label %outer_header, label %return
return:
ret void
}