; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
; RUN: opt -S -passes=loop-predication < %s 2>&1 | FileCheck %s

; Do not convert branch in loop_outer block on the widenable_cond11 to a
; loop-varying one.
; It will result in a miscompile.
; deopt9 will have incorrect deopt state (it currently uses init_val because
; indvars identified that if that exit is taken, it will be taken on first
; iteration, since widenable_cond11 is a loop-invariant condition).
define i32 @foo(ptr addrspace(1) %arg) {
; CHECK-LABEL: define i32 @foo
; CHECK-SAME: (ptr addrspace(1) [[ARG:%.*]]) {
; CHECK-NEXT:  entry:
; CHECK-NEXT:    [[INIT_VAL:%.*]] = load i32, ptr addrspace(1) [[ARG]], align 4
; CHECK-NEXT:    [[WIDENABLE_COND11:%.*]] = call i1 @llvm.experimental.widenable.condition()
; CHECK-NEXT:    br label [[LOOP_OUTER:%.*]]
; CHECK:       loop_outer:
; CHECK-NEXT:    [[IV:%.*]] = phi i32 [ [[PHI36:%.*]], [[OUTER_LOOP_LATCH:%.*]] ], [ 42, [[ENTRY:%.*]] ]
; CHECK-NEXT:    [[PHI21:%.*]] = phi i32 [ [[ADD39:%.*]], [[OUTER_LOOP_LATCH]] ], [ [[INIT_VAL]], [[ENTRY]] ]
; CHECK-NEXT:    [[ADD27:%.*]] = add i32 [[IV]], 1
; CHECK-NEXT:    [[ICMP28:%.*]] = icmp eq i32 [[ADD27]], 60
; CHECK-NEXT:    br i1 [[WIDENABLE_COND11]], label [[INNER_LOOP_PH:%.*]], label [[DEOPT9:%.*]]
; CHECK:       inner_loop_ph:
; CHECK-NEXT:    store atomic i32 606, ptr addrspace(1) [[ARG]] unordered, align 4
; CHECK-NEXT:    br label [[INNER_LOOP:%.*]]
; CHECK:       inner_loop:
; CHECK-NEXT:    [[PHI43:%.*]] = phi i32 [ 1, [[INNER_LOOP_PH]] ], [ [[ADD55:%.*]], [[INNER_LOOP_LATCH:%.*]] ]
; CHECK-NEXT:    [[PHI44:%.*]] = phi i32 [ [[ADD27]], [[INNER_LOOP_PH]] ], [ [[ADD48:%.*]], [[INNER_LOOP_LATCH]] ]
; CHECK-NEXT:    [[ADD48]] = add i32 [[PHI44]], 1
; CHECK-NEXT:    [[ICMP49:%.*]] = icmp eq i32 [[ADD48]], 0
; CHECK-NEXT:    br i1 [[ICMP49]], label [[DEOPT57:%.*]], label [[INNER_LOOP_LATCH]]
; CHECK:       inner_loop_latch:
; CHECK-NEXT:    store atomic i32 606, ptr addrspace(1) [[ARG]] unordered, align 4
; CHECK-NEXT:    [[ADD55]] = add nuw nsw i32 [[PHI43]], 1
; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp eq i32 [[ADD55]], 10
; CHECK-NEXT:    br i1 [[EXITCOND]], label [[OUTER_LOOP_LATCH]], label [[INNER_LOOP]]
; CHECK:       outer_loop_latch:
; CHECK-NEXT:    [[PHI36]] = phi i32 [ [[ADD48]], [[INNER_LOOP_LATCH]] ]
; CHECK-NEXT:    [[ADD39]] = add i32 [[PHI21]], 1
; CHECK-NEXT:    br label [[LOOP_OUTER]]
; CHECK:       deopt9:
; CHECK-NEXT:    [[LCSSA:%.*]] = phi i32 [ [[INIT_VAL]], [[LOOP_OUTER]] ]
; CHECK-NEXT:    [[CALL53:%.*]] = call i32 (...) @llvm.experimental.deoptimize.i32(i32 13) [ "deopt"(i32 606, i32 [[LCSSA]]) ]
; CHECK-NEXT:    ret i32 [[CALL53]]
; CHECK:       deopt57:
; CHECK-NEXT:    [[CALL62:%.*]] = call i32 (...) @llvm.experimental.deoptimize.i32(i32 12) [ "deopt"(i32 7) ]
; CHECK-NEXT:    ret i32 [[CALL62]]
;
entry:
  %init_val = load i32, ptr addrspace(1) %arg, align 4
  %widenable_cond11 = call i1 @llvm.experimental.widenable.condition()
  br label %loop_outer

loop_outer:                                       ; preds = %outer_loop_latch, %entry
  %iv = phi i32 [ %phi36, %outer_loop_latch ], [ 42, %entry ]
  %phi21 = phi i32 [ %add39, %outer_loop_latch ], [ %init_val, %entry ]
  %add27 = add i32 %iv, 1
  %icmp28 = icmp eq i32 %add27, 60
  br i1 %widenable_cond11, label %inner_loop_ph, label %deopt9

inner_loop_ph:                                             ; preds = %loop_outer
  store atomic i32 606, ptr addrspace(1) %arg unordered, align 4
  br label %inner_loop

inner_loop:                                       ; preds = %inner_loop_latch, %inner_loop_ph
  %phi43 = phi i32 [ 1, %inner_loop_ph ], [ %add55, %inner_loop_latch ]
  %phi44 = phi i32 [ %add27, %inner_loop_ph ], [ %add48, %inner_loop_latch ]
  %add48 = add i32 %phi44, 1
  %icmp49 = icmp eq i32 %add48, 0
  br i1 %icmp49, label %deopt57, label %inner_loop_latch

inner_loop_latch:                                             ; preds = %inner_loop
  store atomic i32 606, ptr addrspace(1) %arg unordered, align 4
  %add55 = add nuw nsw i32 %phi43, 1
  %exitcond = icmp eq i32 %add55, 10
  br i1 %exitcond, label %outer_loop_latch, label %inner_loop

outer_loop_latch:                                             ; preds = %inner_loop_latch
  %phi36 = phi i32 [ %add48, %inner_loop_latch ]
  %add39 = add i32 %phi21, 1
  br label %loop_outer

deopt9:                                           ; preds = %loop_outer
  %lcssa = phi i32 [ %init_val, %loop_outer ]
  %call53 = call i32 (...) @llvm.experimental.deoptimize.i32(i32 13) [ "deopt"(i32 606, i32 %lcssa) ]
  ret i32 %call53

deopt57:                                             ; preds = %inner_loop
  %call62 = call i32 (...) @llvm.experimental.deoptimize.i32(i32 12) [ "deopt"(i32 7) ]
  ret i32 %call62
}

declare i32 @llvm.experimental.deoptimize.i32(...)

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(inaccessiblemem: readwrite)
declare noundef i1 @llvm.experimental.widenable.condition()
