brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · b645066 Raw
47 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=gvn -S -verify-loop-info %s | FileCheck %s3 4; Make sure we do not try to preserve loop-simplify form, if it would mean5; splitting blocks with indirectbr predecessors.6 7declare i1 @cond()8 9define i32 @foo(ptr %p1, ptr %p2, ptr %p3) {10; CHECK-LABEL: @foo(11; CHECK-NEXT:  bb:12; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]13; CHECK:       loop.header:14; CHECK-NEXT:    store i32 0, ptr [[P3:%.*]], align 415; CHECK-NEXT:    indirectbr ptr [[P1:%.*]], [label [[LOOP_LATCH1:%.*]], label %loop.latch2]16; CHECK:       loop.latch1:17; CHECK-NEXT:    [[C:%.*]] = call i1 @cond()18; CHECK-NEXT:    br i1 [[C]], label [[LOOP_HEADER]], label [[LOOP_LATCH1_EXIT_CRIT_EDGE:%.*]]19; CHECK:       loop.latch1.exit_crit_edge:20; CHECK-NEXT:    [[X_PRE:%.*]] = load i32, ptr [[P3]], align 421; CHECK-NEXT:    br label [[EXIT:%.*]]22; CHECK:       loop.latch2:23; CHECK-NEXT:    indirectbr ptr [[P2:%.*]], [label [[LOOP_HEADER]], label %exit]24; CHECK:       exit:25; CHECK-NEXT:    [[X:%.*]] = phi i32 [ [[X_PRE]], [[LOOP_LATCH1_EXIT_CRIT_EDGE]] ], [ 0, [[LOOP_LATCH2:%.*]] ]26; CHECK-NEXT:    ret i32 [[X]]27;28bb:29  br label %loop.header30 31loop.header:                                      ; preds = %loop.latch2, %loop.latch1, %bb32  store i32 0, ptr %p3, align 433  indirectbr ptr %p1, [label %loop.latch1, label %loop.latch2]34 35loop.latch1:                                      ; preds = %loop.header36  %c = call i1 @cond()37  br i1 %c, label %loop.header, label %exit38 39loop.latch2:                                      ; preds = %loop.header40  indirectbr ptr %p2, [label %loop.header, label %exit]41 42exit:                                             ; preds = %loop.latch2, %loop.latch143  %x = load i32, ptr %p3, align 444  %y = add i32 %x, 045  ret i32 %y46}47