62 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; REQUIRES: asserts3; RUN: opt -S -enable-loop-simplifycfg-term-folding=true -passes='require<domtree>,loop(indvars,loop-simplifycfg)' -verify-loop-info -verify-dom-info -verify-loop-lcssa 2>&1 < %s | FileCheck %s4; RUN: opt -S -enable-loop-simplifycfg-term-folding=true -passes=indvars,loop-simplifycfg -verify-memoryssa -verify-loop-info -verify-dom-info -verify-loop-lcssa 2>&1 < %s | FileCheck %s5 6define void @test(i1 %c) {7; CHECK-LABEL: @test(8; CHECK-NEXT: entry:9; CHECK-NEXT: switch i32 0, label [[ENTRY_SPLIT:%.*]] [10; CHECK-NEXT: i32 1, label [[DEAD_EXIT:%.*]]11; CHECK-NEXT: ]12; CHECK: entry.split:13; CHECK-NEXT: br label [[OUTER:%.*]]14; CHECK: outer:15; CHECK-NEXT: br i1 [[C:%.*]], label [[TO_FOLD:%.*]], label [[LATCH:%.*]]16; CHECK: to_fold:17; CHECK-NEXT: br i1 [[C]], label [[LATCH]], label [[INNER_PREHEADER:%.*]]18; CHECK: inner.preheader:19; CHECK-NEXT: br label [[INNER:%.*]]20; CHECK: inner:21; CHECK-NEXT: br i1 false, label [[INNER_LATCH:%.*]], label [[UNDEAD:%.*]]22; CHECK: inner_latch:23; CHECK-NEXT: br i1 true, label [[INNER]], label [[LATCH_LOOPEXIT:%.*]]24; CHECK: undead:25; CHECK-NEXT: br label [[LATCH]]26; CHECK: latch.loopexit:27; CHECK-NEXT: br label [[LATCH]]28; CHECK: latch:29; CHECK-NEXT: br label [[OUTER]]30; CHECK: dead_exit:31; CHECK-NEXT: ret void32;33 34entry:35 br label %outer36 37outer:38 br i1 %c, label %to_fold, label %latch39 40to_fold:41 br i1 %c, label %latch, label %inner42 43inner:44 %iv = phi i32 [0, %to_fold], [%iv.next, %inner_latch]45 %never = icmp sgt i32 %iv, 4046 br i1 %never, label %inner_latch, label %undead47 48inner_latch:49 %iv.next = add i32 %iv, 150 %cmp = icmp slt i32 %iv.next, 1051 br i1 %cmp, label %inner, label %latch52 53undead:54 br label %latch55 56latch:57 br i1 true, label %outer, label %dead_exit58 59dead_exit:60 ret void61}62