forked from OSchip/llvm-project
142 lines
6.9 KiB
LLVM
142 lines
6.9 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
|
; ModuleID = 'reduced.ll'
|
|
; RUN: opt < %s -loop-unroll -verify-loop-lcssa -S | FileCheck %s
|
|
|
|
source_filename = "reduced.ll"
|
|
|
|
%"class.std::__Cr::basic_ostream" = type { i32 (...)**, %"class.std::__Cr::basic_ios" }
|
|
%"class.std::__Cr::basic_ios" = type { %"class.std::__Cr::ios_base", %"class.std::__Cr::basic_ostream"*, i32 }
|
|
%"class.std::__Cr::ios_base" = type { i32 (...)**, i32, i32, i32, i32, i32, i8*, i8*, void (i32, %"class.std::__Cr::ios_base"*, i32)**, i32*, i32, i32, i32*, i32, i32, i8**, i32, i32 }
|
|
%"class.v8::internal::wasm::StructType" = type { i32, i32*, %"class.v8::internal::wasm::ValueType"*, i8* }
|
|
%"class.v8::internal::wasm::ValueType" = type { i32 }
|
|
|
|
$_ZNK2v88internal4wasm10StructType12field_offsetEj = comdat any
|
|
|
|
declare hidden %"class.std::__Cr::basic_ostream"* @_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 %"class.std::__Cr::basic_ostream"* @_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 %"class.std::__Cr::basic_ostream"* @_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 %"class.std::__Cr::basic_ostream"* @_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(%"class.v8::internal::wasm::StructType"* %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 }
|