llvm/llvm/test/Transforms/PhaseOrdering/branch-dom-cond.ll

; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
; RUN: opt -O3 -S < %s                    | FileCheck %s

define void @growTables(ptr %p) {
; CHECK-LABEL: define void @growTables(
; CHECK-SAME: ptr [[P:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
; CHECK-NEXT:  [[ENTRY:.*]]:
; CHECK-NEXT:    [[CALL:%.*]] = load volatile i32, ptr [[P]], align 4
; CHECK-NEXT:    [[CMP71:%.*]] = icmp sgt i32 [[CALL]], 0
; CHECK-NEXT:    br i1 [[CMP71]], label %[[FOR_BODY:.*]], label %[[COMMON_RET:.*]]
; CHECK:       [[FOR_BODY]]:
; CHECK-NEXT:    [[I_02:%.*]] = phi i32 [ [[INC:%.*]], %[[FOR_BODY]] ], [ 0, %[[ENTRY]] ]
; CHECK-NEXT:    [[CALL9:%.*]] = load volatile ptr, ptr [[P]], align 8
; CHECK-NEXT:    [[INC]] = add nuw nsw i32 [[I_02]], 1
; CHECK-NEXT:    [[CMP7:%.*]] = icmp slt i32 [[INC]], [[CALL]]
; CHECK-NEXT:    br i1 [[CMP7]], label %[[FOR_BODY]], label %[[FOR_BODY12:.*]]
; CHECK:       [[FOR_BODY12]]:
; CHECK-NEXT:    [[CALL14:%.*]] = load volatile ptr, ptr [[P]], align 8
; CHECK-NEXT:    br label %[[COMMON_RET]]
; CHECK:       [[COMMON_RET]]:
; CHECK-NEXT:    ret void
;
entry:
  %call = load volatile i32, ptr %p, align 4
  br label %for.cond

for.cond:
  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
  %cmp7 = icmp slt i32 %i.0, %call
  br i1 %cmp7, label %for.body, label %for.end

for.body:
  %call9 = load volatile ptr, ptr %p, align 8
  %inc = add i32 %i.0, 1
  br label %for.cond

for.end:
  %cmp11 = icmp sgt i32 %call, 0
  br i1 %cmp11, label %for.body12, label %common.ret

for.body12:
  %call14 = load volatile ptr, ptr %p, align 8
  br label %common.ret

common.ret:
  ret void
}