; RUN: opt -S -indvars < %s | FileCheck %s target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-apple-macosx10.11.0" ; SCEVExpander would try to RAUW %val_2 with %c.lcssa, breaking "def ; dominates uses". define void @pr27232(i32 %val) { ; CHECK-LABEL: @pr27232( entry: br i1 undef, label %loop_0.cond, label %for.body.us for.body.us: br label %loop_0.cond loop_0.cond: %val_2 = phi i32 [ %val, %for.body.us ], [ undef, %entry ] br i1 true, label %loop_0.ph, label %loop_1.ph loop_0.ph: br label %loop_0 loop_1.exit: br label %loop_1.ph loop_1.ph: %c.lcssa = phi i32 [ 0, %loop_0.cond ], [ %val_2, %loop_1.exit ] br label %loop_1 loop_0: br i1 undef, label %loop_0, label %loop_1.exit loop_1: %d.1 = phi i32 [ %c.lcssa, %loop_1 ], [ %val_2, %loop_1.ph ] %t.1 = phi i32 [ %val_2, %loop_1 ], [ %c.lcssa, %loop_1.ph ] br i1 undef, label %leave, label %loop_1 leave: ret void } ; @ReplaceArg_0 and @ReplaceArg_1 used to trigger a failed cast<> ; assertion in SCEVExpander. define void @ReplaceArg_0(i32 %val) { ; CHECK-LABEL: @ReplaceArg_0( entry: br i1 undef, label %loop_0.cond, label %for.body.us for.body.us: br label %loop_0.cond loop_0.cond: br i1 true, label %loop_0.ph, label %loop_1.ph loop_0.ph: br label %loop_0 loop_1.exit: br label %loop_1.ph loop_1.ph: %c.lcssa = phi i32 [ 0, %loop_0.cond ], [ %val, %loop_1.exit ] br label %loop_1 loop_0: br i1 undef, label %loop_0, label %loop_1.exit loop_1: %d.1 = phi i32 [ %c.lcssa, %loop_1 ], [ %val, %loop_1.ph ] %t.1 = phi i32 [ %val, %loop_1 ], [ %c.lcssa, %loop_1.ph ] br i1 undef, label %leave, label %loop_1 leave: ret void } define void @ReplaceArg_1(i32 %val) { ; CHECK-LABEL: @ReplaceArg_1( entry: br i1 undef, label %loop_0.cond, label %for.body.us for.body.us: br label %loop_0.cond loop_0.cond: br i1 true, label %loop_0.ph, label %loop_1.ph loop_0.ph: br label %loop_0 loop_1.exit: br label %loop_1.ph loop_1.ph: %c.lcssa = phi i32 [ 0, %loop_0.cond ], [ %val, %loop_1.exit ] br label %loop_1 loop_0: br i1 undef, label %loop_0, label %loop_1.exit loop_1: %t.1 = phi i32 [ %val, %loop_1 ], [ %c.lcssa, %loop_1.ph ] %d.1 = phi i32 [ %c.lcssa, %loop_1 ], [ %val, %loop_1.ph ] br i1 undef, label %leave, label %loop_1 leave: ret void }