102 lines · plain
1; RUN: opt -mtriple=arm-arm-none-eabi -passes=consthoist -S < %s | FileCheck %s2; RUN: opt -mtriple=arm-arm-none-eabi -passes='require<profile-summary>,consthoist' -pgso -S < %s | FileCheck %s -check-prefix=PGSO3; RUN: opt -mtriple=arm-arm-none-eabi -passes=consthoist -pgso=false -S < %s | FileCheck %s -check-prefix=NPGSO4 5; There are different candidates here for the base constant: 1073876992 and6; 1073876996. But we don't want to see the latter because it results in7; negative offsets.8 9define void @foo() #0 {10entry:11; CHECK-LABEL: @foo12; CHECK-NOT: [[CONST1:%const_mat[0-9]*]] = add i32 %const, -413; CHECK-LABEL: @foo_pgso14 %0 = load volatile i32, ptr inttoptr (i32 1073876992 to ptr), align 409615 %or = or i32 %0, 116 store volatile i32 %or, ptr inttoptr (i32 1073876992 to ptr), align 409617 %1 = load volatile i32, ptr inttoptr (i32 1073876996 to ptr), align 418 %and = and i32 %1, -11750604819 store volatile i32 %and, ptr inttoptr (i32 1073876996 to ptr), align 420 %2 = load volatile i32, ptr inttoptr (i32 1073876992 to ptr), align 409621 %and1 = and i32 %2, -1736704122 store volatile i32 %and1, ptr inttoptr (i32 1073876996 to ptr), align 409623 %3 = load volatile i32, ptr inttoptr (i32 1073876992 to ptr), align 409624 %and2 = and i32 %3, -26214525 store volatile i32 %and2, ptr inttoptr (i32 1073876992 to ptr), align 409626 %4 = load volatile i32, ptr inttoptr (i32 1073876996 to ptr), align 427 %and3 = and i32 %4, -832307328 store volatile i32 %and3, ptr inttoptr (i32 1073876996 to ptr), align 429 store volatile i32 10420224, ptr inttoptr (i32 1073877000 to ptr), align 830 %5 = load volatile i32, ptr inttoptr (i32 1073876996 to ptr), align 409631 %or4 = or i32 %5, 6553632 store volatile i32 %or4, ptr inttoptr (i32 1073876996 to ptr), align 409633 %6 = load volatile i32, ptr inttoptr (i32 1073881088 to ptr), align 819234 %or6.i.i = or i32 %6, 1635 store volatile i32 %or6.i.i, ptr inttoptr (i32 1073881088 to ptr), align 819236 %7 = load volatile i32, ptr inttoptr (i32 1073881088 to ptr), align 819237 %and7.i.i = and i32 %7, -438 store volatile i32 %and7.i.i, ptr inttoptr (i32 1073881088 to ptr), align 819239 %8 = load volatile i32, ptr inttoptr (i32 1073881088 to ptr), align 819240 %or8.i.i = or i32 %8, 241 store volatile i32 %or8.i.i, ptr inttoptr (i32 1073881088 to ptr), align 819242 ret void43}44 45attributes #0 = { minsize norecurse nounwind optsize readnone uwtable }46 47define void @foo_pgso() #1 !prof !14 {48entry:49; PGSO-LABEL: @foo_pgso50; PGSO-NOT: [[CONST2:%const_mat[0-9]*]] = add i32 %const, -451; NPGSO-LABEL: @foo_pgso52; NPGSO: [[CONST2:%const_mat[0-9]*]] = add i32 %const, -453 %0 = load volatile i32, ptr inttoptr (i32 1073876992 to ptr), align 409654 %or = or i32 %0, 155 store volatile i32 %or, ptr inttoptr (i32 1073876992 to ptr), align 409656 %1 = load volatile i32, ptr inttoptr (i32 1073876996 to ptr), align 457 %and = and i32 %1, -11750604858 store volatile i32 %and, ptr inttoptr (i32 1073876996 to ptr), align 459 %2 = load volatile i32, ptr inttoptr (i32 1073876992 to ptr), align 409660 %and1 = and i32 %2, -1736704161 store volatile i32 %and1, ptr inttoptr (i32 1073876996 to ptr), align 409662 %3 = load volatile i32, ptr inttoptr (i32 1073876992 to ptr), align 409663 %and2 = and i32 %3, -26214564 store volatile i32 %and2, ptr inttoptr (i32 1073876992 to ptr), align 409665 %4 = load volatile i32, ptr inttoptr (i32 1073876996 to ptr), align 466 %and3 = and i32 %4, -832307367 store volatile i32 %and3, ptr inttoptr (i32 1073876996 to ptr), align 468 store volatile i32 10420224, ptr inttoptr (i32 1073877000 to ptr), align 869 %5 = load volatile i32, ptr inttoptr (i32 1073876996 to ptr), align 409670 %or4 = or i32 %5, 6553671 store volatile i32 %or4, ptr inttoptr (i32 1073876996 to ptr), align 409672 %6 = load volatile i32, ptr inttoptr (i32 1073881088 to ptr), align 819273 %or6.i.i = or i32 %6, 1674 store volatile i32 %or6.i.i, ptr inttoptr (i32 1073881088 to ptr), align 819275 %7 = load volatile i32, ptr inttoptr (i32 1073881088 to ptr), align 819276 %and7.i.i = and i32 %7, -477 store volatile i32 %and7.i.i, ptr inttoptr (i32 1073881088 to ptr), align 819278 %8 = load volatile i32, ptr inttoptr (i32 1073881088 to ptr), align 819279 %or8.i.i = or i32 %8, 280 store volatile i32 %or8.i.i, ptr inttoptr (i32 1073881088 to ptr), align 819281 ret void82}83 84attributes #1 = { norecurse nounwind readnone uwtable } ; no optsize or minsize85 86!llvm.module.flags = !{!0}87!0 = !{i32 1, !"ProfileSummary", !1}88!1 = !{!2, !3, !4, !5, !6, !7, !8, !9}89!2 = !{!"ProfileFormat", !"InstrProf"}90!3 = !{!"TotalCount", i64 10000}91!4 = !{!"MaxCount", i64 10}92!5 = !{!"MaxInternalCount", i64 1}93!6 = !{!"MaxFunctionCount", i64 1000}94!7 = !{!"NumCounts", i64 3}95!8 = !{!"NumFunctions", i64 3}96!9 = !{!"DetailedSummary", !10}97!10 = !{!11, !12, !13}98!11 = !{i32 10000, i64 100, i32 1}99!12 = !{i32 999000, i64 100, i32 1}100!13 = !{i32 999999, i64 1, i32 2}101!14 = !{!"function_entry_count", i64 0}102