blob: 220f442a6b68125c5ab0f820d2e264009902343e [file] [edit]
; RUN: opt < %s -passes='require<profile-summary>,function(chr)' -force-chr -chr-merge-threshold=1 -disable-output
; Regression test for a crash in CHR when setting unknown profdata on the
; merged condition. IRBuilder::CreateLogicalAnd is implemented as a select and
; can constant-fold to a non-Instruction value (e.g. `i1 true`). The buggy code
; assumed it always produced an Instruction and did `cast<Instruction>(V)`,
; which can segfault in release builds.
define void @repro_crash() {
entry:
br i1 true, label %then, label %exit, !prof !15
then:
br label %exit
exit:
ret void
}
!llvm.module.flags = !{!0}
!0 = !{i32 1, !"ProfileSummary", !1}
!1 = !{!2, !3, !4, !5, !6, !7, !8, !9}
!2 = !{!"ProfileFormat", !"InstrProf"}
!3 = !{!"TotalCount", i64 10000}
!4 = !{!"MaxCount", i64 10}
!5 = !{!"MaxInternalCount", i64 1}
!6 = !{!"MaxFunctionCount", i64 1000}
!7 = !{!"NumCounts", i64 1}
!8 = !{!"NumFunctions", i64 1}
!9 = !{!"DetailedSummary", !10}
!10 = !{!11}
!11 = !{i32 999999, i64 1, i32 1}
!15 = !{!"branch_weights", i32 100, i32 1}