98 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=loop-unroll -verify-loop-lcssa -S < %s | FileCheck %s3 4target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"5target triple = "x86_64-unknown-linux-gnu"6 7@b = external local_unnamed_addr global i32, align 48 9declare i1 @unknown(i32) readonly nounwind willreturn10 11define void @main() local_unnamed_addr #0 {12; CHECK-LABEL: @main(13; CHECK-NEXT: ph1:14; CHECK-NEXT: br label [[H1:%.*]]15; CHECK: h1:16; CHECK-NEXT: [[D_0:%.*]] = phi i32 [ [[TMP0:%.*]], [[LATCH1:%.*]] ], [ undef, [[PH1:%.*]] ]17; CHECK-NEXT: br label [[PH2:%.*]]18; CHECK: ph2:19; CHECK-NEXT: br label [[H2:%.*]]20; CHECK: h2:21; CHECK-NEXT: br label [[H3:%.*]]22; CHECK: h3:23; CHECK-NEXT: [[C1:%.*]] = call i1 @unknown(i32 0)24; CHECK-NEXT: br i1 [[C1]], label [[LATCH3:%.*]], label [[EXIT_LOOPEXIT:%.*]]25; CHECK: latch3:26; CHECK-NEXT: [[C2:%.*]] = call i1 @unknown(i32 0)27; CHECK-NEXT: br i1 [[C2]], label [[EXIT3:%.*]], label [[H3]]28; CHECK: exit3:29; CHECK-NEXT: br label [[LATCH2:%.*]]30; CHECK: latch2:31; CHECK-NEXT: br label [[H3_1:%.*]]32; CHECK: h3.1:33; CHECK-NEXT: [[C1_1:%.*]] = call i1 @unknown(i32 1)34; CHECK-NEXT: br i1 [[C1_1]], label [[LATCH3_1:%.*]], label [[EXIT_LOOPEXIT1:%.*]]35; CHECK: latch3.1:36; CHECK-NEXT: [[C2_1:%.*]] = call i1 @unknown(i32 1)37; CHECK-NEXT: br i1 [[C2_1]], label [[EXIT3_1:%.*]], label [[H3_1]]38; CHECK: exit3.1:39; CHECK-NEXT: br label [[LATCH2_1:%.*]]40; CHECK: latch2.1:41; CHECK-NEXT: [[C3:%.*]] = call i1 @unknown(i32 [[D_0]])42; CHECK-NEXT: br i1 [[C3]], label [[LATCH1]], label [[PH2]]43; CHECK: latch1:44; CHECK-NEXT: [[TMP0]] = load i32, ptr @b, align 445; CHECK-NEXT: br label [[H1]]46; CHECK: exit.loopexit:47; CHECK-NEXT: [[D_0_LCSSA_PH:%.*]] = phi i32 [ [[D_0]], [[H3]] ]48; CHECK-NEXT: br label [[EXIT:%.*]]49; CHECK: exit.loopexit1:50; CHECK-NEXT: [[D_0_LCSSA_PH2:%.*]] = phi i32 [ [[D_0]], [[H3_1]] ]51; CHECK-NEXT: br label [[EXIT]]52; CHECK: exit:53; CHECK-NEXT: [[D_0_LCSSA:%.*]] = phi i32 [ [[D_0_LCSSA_PH]], [[EXIT_LOOPEXIT]] ], [ [[D_0_LCSSA_PH2]], [[EXIT_LOOPEXIT1]] ]54; CHECK-NEXT: ret void55;56ph1:57 br label %h158 59h1:60 %d.0 = phi i32 [ %1, %latch1 ], [ undef, %ph1 ]61 br label %ph262 63ph2:64 br label %h265 66h2:67 %0 = phi i32 [ 0, %ph2 ], [ %inc, %latch2 ]68 br label %h369 70h3:71 %c1 = call i1 @unknown(i32 %0)72 br i1 %c1, label %latch3, label %exit73 74latch3:75 %c2 = call i1 @unknown(i32 %0)76 br i1 %c2, label %exit3, label %h377 78exit3:79 br label %latch280 81latch2:82 %inc = add nuw nsw i32 %0, 183 %cmp = icmp slt i32 %inc, 284 br i1 %cmp, label %h2, label %exit285 86exit2:87 %c3 = call i1 @unknown(i32 %d.0)88 br i1 %c3, label %latch1, label %ph289 90latch1: ; preds = %exit291 %1 = load i32, ptr @b, align 492 br label %h193 94exit:95 %d.0.lcssa = phi i32 [ %d.0, %h3 ]96 ret void97}98