brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · 3063e4f Raw
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