112 lines · plain
1; RUN: opt -S -passes=indvars < %s | FileCheck %s2 3target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"4target triple = "x86_64-apple-macosx10.11.0"5 6; SCEVExpander would try to RAUW %val_2 with %c.lcssa, breaking "def7; dominates uses".8 9define void @pr27232(i32 %val, i1 %arg) {10; CHECK-LABEL: @pr27232(11entry:12 br i1 %arg, label %loop_0.cond, label %for.body.us13 14for.body.us:15 br label %loop_0.cond16 17loop_0.cond:18 %val_2 = phi i32 [ %val, %for.body.us ], [ undef, %entry ]19 br i1 true, label %loop_0.ph, label %loop_1.ph20 21loop_0.ph:22 br label %loop_023 24loop_1.exit:25 br label %loop_1.ph26 27loop_1.ph:28 %c.lcssa = phi i32 [ 0, %loop_0.cond ], [ %val_2, %loop_1.exit ]29 br label %loop_130 31loop_0:32 br i1 %arg, label %loop_0, label %loop_1.exit33 34loop_1:35 %d.1 = phi i32 [ %c.lcssa, %loop_1 ], [ %val_2, %loop_1.ph ]36 %t.1 = phi i32 [ %val_2, %loop_1 ], [ %c.lcssa, %loop_1.ph ]37 br i1 %arg, label %leave, label %loop_138 39leave:40 ret void41}42 43 44; @ReplaceArg_0 and @ReplaceArg_1 used to trigger a failed cast<>45; assertion in SCEVExpander.46 47define void @ReplaceArg_0(i32 %val, i1 %arg) {48; CHECK-LABEL: @ReplaceArg_0(49entry:50 br i1 %arg, label %loop_0.cond, label %for.body.us51 52for.body.us:53 br label %loop_0.cond54 55loop_0.cond:56 br i1 true, label %loop_0.ph, label %loop_1.ph57 58loop_0.ph:59 br label %loop_060 61loop_1.exit:62 br label %loop_1.ph63 64loop_1.ph:65 %c.lcssa = phi i32 [ 0, %loop_0.cond ], [ %val, %loop_1.exit ]66 br label %loop_167 68loop_0:69 br i1 %arg, label %loop_0, label %loop_1.exit70 71loop_1:72 %d.1 = phi i32 [ %c.lcssa, %loop_1 ], [ %val, %loop_1.ph ]73 %t.1 = phi i32 [ %val, %loop_1 ], [ %c.lcssa, %loop_1.ph ]74 br i1 %arg, label %leave, label %loop_175 76leave:77 ret void78}79 80define void @ReplaceArg_1(i32 %val, i1 %arg) {81; CHECK-LABEL: @ReplaceArg_1(82entry:83 br i1 %arg, label %loop_0.cond, label %for.body.us84 85for.body.us:86 br label %loop_0.cond87 88loop_0.cond:89 br i1 true, label %loop_0.ph, label %loop_1.ph90 91loop_0.ph:92 br label %loop_093 94loop_1.exit:95 br label %loop_1.ph96 97loop_1.ph:98 %c.lcssa = phi i32 [ 0, %loop_0.cond ], [ %val, %loop_1.exit ]99 br label %loop_1100 101loop_0:102 br i1 %arg, label %loop_0, label %loop_1.exit103 104loop_1:105 %t.1 = phi i32 [ %val, %loop_1 ], [ %c.lcssa, %loop_1.ph ]106 %d.1 = phi i32 [ %c.lcssa, %loop_1 ], [ %val, %loop_1.ph ]107 br i1 %arg, label %leave, label %loop_1108 109leave:110 ret void111}112