1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 19:23:23 +01:00
llvm-mirror/test/Transforms/IndVarSimplify/const_phi.ll
Silviu Baranga be20c3f9e9 Fix PR25372 - teach replaceCongruentPHIs to handle cases where SE evaluates a PHI to a SCEVConstant
Summary:
Since now Scalar Evolution can create non-add rec expressions for PHI
nodes, it can also create SCEVConstant expressions. This will confuse
replaceCongruentPHIs, which previously relied on the fact that SCEV
could not produce constants in this case.

We will now replace the node with a constant in these cases - or avoid
processing the Phi in case of a type mismatch.

Reviewers: sanjoy

Subscribers: llvm-commits, majnemer

Differential Revision: http://reviews.llvm.org/D14230

llvm-svn: 251938
2015-11-03 16:27:04 +00:00

34 lines
864 B
LLVM

; RUN: opt < %s -indvars -S | FileCheck %s
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
; PR25372
; We can compute the expression of %phi0 and that is a SCEV
; constant. However, instcombine can't deduce this, so we can
; potentially end up trying to handle a constant when replacing
; congruent IVs.
; CHECK-LABEL: crash
define void @crash() {
entry:
br i1 false, label %not_taken, label %pre
not_taken:
br label %pre
pre:
; %phi0.pre and %phi1.pre are evaluated by SCEV to constant 0.
%phi0.pre = phi i32 [ 0, %entry ], [ 2, %not_taken ]
%phi1.pre = phi i32 [ 0, %entry ], [ 1, %not_taken ]
br label %loop
loop:
; %phi0 and %phi1 are evaluated by SCEV to constant 0.
%phi0 = phi i32 [ 0, %loop ], [ %phi0.pre, %pre ]
%phi1 = phi i32 [ 0, %loop ], [ %phi1.pre, %pre ]
br i1 undef, label %exit, label %loop
exit:
ret void
}