; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; ModuleID = 'reduced.ll'
; RUN: opt < %s -passes=loop-unroll -verify-loop-lcssa -S | FileCheck %s

source_filename = "reduced.ll"

%"class.std::__Cr::basic_ostream" = type { ptr, %"class.std::__Cr::basic_ios" }
%"class.std::__Cr::basic_ios" = type { %"class.std::__Cr::ios_base", ptr, i32 }
%"class.std::__Cr::ios_base" = type { ptr, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, i32, i32, ptr, i32, i32, ptr, i32, i32 }
%"class.v8::internal::wasm::StructType" = type { i32, ptr, ptr, ptr }
%"class.v8::internal::wasm::ValueType" = type { i32 }

$_ZNK2v88internal4wasm10StructType12field_offsetEj = comdat any

declare hidden ptr @_ZNSt4__CrlsINS_11char_traitsIcEEEERNS_13basic_ostreamIcT_EES6_PKc() local_unnamed_addr

define hidden void @_ZN2v88internal10WasmStruct15WasmStructPrintERNSt4__Cr13basic_ostreamIcNS2_11char_traitsIcEEEE() local_unnamed_addr align 2 {
; CHECK-LABEL: @_ZN2v88internal10WasmStruct15WasmStructPrintERNSt4__Cr13basic_ostreamIcNS2_11char_traitsIcEEEE(
; CHECK-NEXT:  entry:
; CHECK-NEXT:    [[CALL61:%.*]] = tail call i32 @_ZNK2v88internal4wasm10StructType11field_countEv()
; CHECK-NEXT:    [[CMP2_NOT:%.*]] = icmp eq i32 [[CALL61]], 0
; CHECK-NEXT:    br i1 [[CMP2_NOT]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY_PREHEADER:%.*]]
; CHECK:       for.body.preheader:
; CHECK-NEXT:    br label [[FOR_BODY_PEEL_BEGIN:%.*]]
; CHECK:       for.body.peel.begin:
; CHECK-NEXT:    br label [[FOR_BODY_PEEL:%.*]]
; CHECK:       for.body.peel:
; CHECK-NEXT:    tail call void @llvm.assume(i1 true)
; CHECK-NEXT:    [[CALL13_PEEL:%.*]] = tail call i8 @_ZNK2v88internal4wasm9ValueType4kindEv()
; CHECK-NEXT:    switch i8 [[CALL13_PEEL]], label [[FOR_INC_PEEL:%.*]] [
; CHECK-NEXT:    i8 5, label [[SW_BB33_PEEL:%.*]]
; CHECK-NEXT:    i8 9, label [[SW_BB31:%.*]]
; CHECK-NEXT:    i8 8, label [[SW_BB31]]
; CHECK-NEXT:    i8 11, label [[SW_BB31]]
; CHECK-NEXT:    i8 10, label [[SW_BB31]]
; CHECK-NEXT:    ]
; CHECK:       sw.bb33.peel:
; CHECK-NEXT:    [[CALL34_PEEL:%.*]] = tail call ptr @_ZNSt4__CrlsINS_11char_traitsIcEEEERNS_13basic_ostreamIcT_EES6_PKc()
; CHECK-NEXT:    br label [[FOR_INC_PEEL]]
; CHECK:       for.inc.peel:
; CHECK-NEXT:    [[CALL6_PEEL:%.*]] = tail call i32 @_ZNK2v88internal4wasm10StructType11field_countEv()
; CHECK-NEXT:    [[CMP_PEEL:%.*]] = icmp ugt i32 [[CALL6_PEEL]], 1
; CHECK-NEXT:    br i1 [[CMP_PEEL]], label [[FOR_BODY_PEEL_NEXT:%.*]], label [[FOR_COND_CLEANUP_LOOPEXIT:%.*]]
; CHECK:       for.body.peel.next:
; CHECK-NEXT:    br label [[FOR_BODY_PEEL_NEXT1:%.*]]
; CHECK:       for.body.peel.next1:
; CHECK-NEXT:    br label [[FOR_BODY_PREHEADER_PEEL_NEWPH:%.*]]
; CHECK:       for.body.preheader.peel.newph:
; CHECK-NEXT:    br label [[FOR_BODY:%.*]]
; CHECK:       for.cond.cleanup.loopexit.loopexit:
; CHECK-NEXT:    br label [[FOR_COND_CLEANUP_LOOPEXIT]]
; CHECK:       for.cond.cleanup.loopexit:
; CHECK-NEXT:    br label [[FOR_COND_CLEANUP]]
; CHECK:       for.cond.cleanup:
; CHECK-NEXT:    ret void
; CHECK:       for.body:
; CHECK-NEXT:    tail call void @llvm.assume(i1 false)
; CHECK-NEXT:    [[CALL13:%.*]] = tail call i8 @_ZNK2v88internal4wasm9ValueType4kindEv()
; CHECK-NEXT:    switch i8 [[CALL13]], label [[FOR_INC:%.*]] [
; CHECK-NEXT:    i8 5, label [[SW_BB33:%.*]]
; CHECK-NEXT:    i8 9, label [[SW_BB31_LOOPEXIT:%.*]]
; CHECK-NEXT:    i8 8, label [[SW_BB31_LOOPEXIT]]
; CHECK-NEXT:    i8 11, label [[SW_BB31_LOOPEXIT]]
; CHECK-NEXT:    i8 10, label [[SW_BB31_LOOPEXIT]]
; CHECK-NEXT:    ]
; CHECK:       sw.bb31.loopexit:
; CHECK-NEXT:    br label [[SW_BB31]]
; CHECK:       sw.bb31:
; CHECK-NEXT:    tail call void @_ZN2v84baseL18ReadUnalignedValueINS_8internal6ObjectEEET_j()
; CHECK-NEXT:    unreachable
; CHECK:       sw.bb33:
; CHECK-NEXT:    [[CALL34:%.*]] = tail call ptr @_ZNSt4__CrlsINS_11char_traitsIcEEEERNS_13basic_ostreamIcT_EES6_PKc()
; CHECK-NEXT:    br label [[FOR_INC]]
; CHECK:       for.inc:
; CHECK-NEXT:    [[CALL6:%.*]] = tail call i32 @_ZNK2v88internal4wasm10StructType11field_countEv()
; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i32 [[CALL6]], 1
; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_COND_CLEANUP_LOOPEXIT_LOOPEXIT:%.*]], !llvm.loop [[LOOP0:![0-9]+]]
;
entry:
  %call61 = tail call i32 @_ZNK2v88internal4wasm10StructType11field_countEv()
  %cmp2.not = icmp eq i32 %call61, 0
  br i1 %cmp2.not, label %for.cond.cleanup, label %for.body.preheader

for.body.preheader:                               ; preds = %entry
  br label %for.body

for.cond.cleanup.loopexit:                        ; preds = %for.inc
  br label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond.cleanup.loopexit, %entry
  ret void

for.body:                                         ; preds = %for.body.preheader, %for.inc
  %cmp.i3 = phi i1 [ false, %for.inc ], [ true, %for.body.preheader ]
  tail call void @llvm.assume(i1 %cmp.i3)
  %call13 = tail call i8 @_ZNK2v88internal4wasm9ValueType4kindEv()
  switch i8 %call13, label %for.inc [
  i8 5, label %sw.bb33
  i8 9, label %sw.bb31
  i8 8, label %sw.bb31
  i8 11, label %sw.bb31
  i8 10, label %sw.bb31
  ]

sw.bb31:                                          ; preds = %for.body, %for.body, %for.body, %for.body
  tail call void @_ZN2v84baseL18ReadUnalignedValueINS_8internal6ObjectEEET_j()
  unreachable

sw.bb33:                                          ; preds = %for.body
  %call34 = tail call ptr @_ZNSt4__CrlsINS_11char_traitsIcEEEERNS_13basic_ostreamIcT_EES6_PKc()
  br label %for.inc

for.inc:                                          ; preds = %for.body, %sw.bb33
  %call6 = tail call i32 @_ZNK2v88internal4wasm10StructType11field_countEv()
  %cmp = icmp ugt i32 %call6, 1
  br i1 %cmp, label %for.body, label %for.cond.cleanup.loopexit
}

declare hidden i32 @_ZNK2v88internal4wasm10StructType11field_countEv() local_unnamed_addr align 2

define linkonce_odr hidden i32 @_ZNK2v88internal4wasm10StructType12field_offsetEj(ptr %this, i32 %index) local_unnamed_addr comdat align 2 {
; CHECK-LABEL: @_ZNK2v88internal4wasm10StructType12field_offsetEj(
; CHECK-NEXT:  entry:
; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i32 [[INDEX:%.*]], 0
; CHECK-NEXT:    tail call void @llvm.assume(i1 [[CMP]])
; CHECK-NEXT:    ret i32 undef
;
entry:
  %cmp = icmp eq i32 %index, 0
  tail call void @llvm.assume(i1 %cmp)
  ret i32 undef
}

declare hidden i8 @_ZNK2v88internal4wasm9ValueType4kindEv() local_unnamed_addr align 2

declare void @_ZN2v84baseL18ReadUnalignedValueINS_8internal6ObjectEEET_j() local_unnamed_addr

; Function Attrs: inaccessiblememonly nofree nosync nounwind willreturn
declare void @llvm.assume(i1 noundef) #0

attributes #0 = { inaccessiblememonly nofree nosync nounwind willreturn }
