165 lines · plain
1; TEST that counter updates are promoted outside the whole loop nest2; RUN: opt < %s --passes=pgo-instr-gen,instrprof -do-counter-promotion=true -S | FileCheck --check-prefix=PROMO %s 3 4@g = common local_unnamed_addr global i32 0, align 45@c = local_unnamed_addr global i32 10, align 46 7; Function Attrs: noinline norecurse nounwind uwtable8define void @bar() local_unnamed_addr #0 {9bb:10 %tmp2 = load i32, ptr @g, align 4, !tbaa !211 %tmp3 = add nsw i32 %tmp2, 112 store i32 %tmp3, ptr @g, align 4, !tbaa !213 ret void14}15 16; Function Attrs: norecurse nounwind uwtable17define i32 @main() local_unnamed_addr #1 {18bb:19 store i32 0, ptr @g, align 4, !tbaa !220 %tmp = load i32, ptr @c, align 4, !tbaa !221 %tmp1 = icmp sgt i32 %tmp, 022 br i1 %tmp1, label %bb2_1, label %bb8423 24bb2_1:25 br label %bb226 27bb2: ; preds = %bb39, %bb28 %tmp3 = phi i32 [ %tmp40, %bb39 ], [ %tmp, %bb2_1 ]29 %tmp5 = phi i32 [ %tmp43, %bb39 ], [ 0, %bb2_1 ]30 %tmp7 = icmp sgt i32 %tmp3, 031 br i1 %tmp7, label %bb14_1, label %bb3932 33bb8: ; preds = %bb3934; PROMO-LABEL: bb835; PROMO: load {{.*}} @__profc_main{{.*}}36; PROMO-NEXT: add37; PROMO-NEXT: store {{.*}}@__profc_main{{.*}}38; PROMO-NEXT: load {{.*}} @__profc_main{{.*}}39; PROMO-NEXT: add40; PROMO-NEXT: store {{.*}}@__profc_main{{.*}}41; PROMO-NEXT: load {{.*}} @__profc_main{{.*}}42; PROMO-NEXT: add43; PROMO-NEXT: store {{.*}}@__profc_main{{.*}}44; PROMO-NEXT: load {{.*}} @__profc_main{{.*}}45; PROMO-NEXT: add46; PROMO-NEXT: store {{.*}}@__profc_main{{.*}}47; PROMO-NEXT: load {{.*}} @__profc_main{{.*}}48; PROMO-NEXT: add49; PROMO-NEXT: store {{.*}}@__profc_main{{.*}}50 51 %tmp13 = icmp sgt i32 %tmp40, 052 br i1 %tmp13, label %bb45, label %bb8453 54bb14_1:55 br label %bb1456 57bb14: ; preds = %bb29, %bb258 %tmp15 = phi i32 [ %tmp30, %bb29 ], [ %tmp3, %bb14_1 ]59 %tmp16 = phi i64 [ %tmp31, %bb29 ], [ 0, %bb14_1 ]60 %tmp17 = phi i64 [ %tmp32, %bb29 ], [ 0, %bb14_1 ]61 %tmp18 = phi i32 [ %tmp33, %bb29 ], [ 0, %bb14_1 ]62 %tmp19 = icmp sgt i32 %tmp15, 063 br i1 %tmp19, label %bb20_split, label %bb2964 65bb20_split: 66 br label %bb2067 68bb20: ; preds = %bb20, %bb1469 %tmp21 = phi i64 [ %tmp23, %bb20 ], [ 0, %bb20_split ]70 %tmp22 = phi i32 [ %tmp24, %bb20 ], [ 0, %bb20_split ]71 %tmp23 = add nuw i64 %tmp21, 172 tail call void @bar()73 %tmp24 = add nuw nsw i32 %tmp22, 174 %tmp25 = load i32, ptr @c, align 4, !tbaa !275 %tmp26 = icmp slt i32 %tmp24, %tmp2576 br i1 %tmp26, label %bb20, label %bb2777 78bb27: ; preds = %bb2079 %tmp28 = add i64 %tmp23, %tmp1680 br label %bb2981 82bb29: ; preds = %bb27, %bb1483 %tmp30 = phi i32 [ %tmp25, %bb27 ], [ %tmp15, %bb14 ]84 %tmp31 = phi i64 [ %tmp28, %bb27 ], [ %tmp16, %bb14 ]85 %tmp32 = add nuw i64 %tmp17, 186 %tmp33 = add nuw nsw i32 %tmp18, 187 %tmp34 = icmp slt i32 %tmp33, %tmp3088 br i1 %tmp34, label %bb14, label %bb3589 90bb35: ; preds = %bb2991 %tmp36 = insertelement <2 x i64> poison, i64 %tmp31, i32 092 br label %bb3993 94bb39: ; preds = %bb35, %bb295 %tmp40 = phi i32 [ %tmp30, %bb35 ], [ %tmp3, %bb2 ]96 %tmp43 = add nuw nsw i32 %tmp5, 197 %tmp44 = icmp slt i32 %tmp43, %tmp4098 br i1 %tmp44, label %bb2, label %bb899 100bb45: ; preds = %bb67, %bb8101 %tmp46 = phi i32 [ %tmp68, %bb67 ], [ %tmp40, %bb8 ]102 %tmp47 = phi i64 [ %tmp69, %bb67 ], [ 0, %bb8 ]103 %tmp48 = phi i64 [ %tmp70, %bb67 ], [ 0, %bb8 ]104 %tmp49 = phi i32 [ %tmp71, %bb67 ], [ 0, %bb8 ]105 %tmp50 = icmp sgt i32 %tmp46, 0106 br i1 %tmp50, label %bb57, label %bb67107 108bb51: ; preds = %bb67109 %tmp56 = icmp sgt i32 %tmp68, 0110 br i1 %tmp56, label %bb73, label %bb84111 112bb57: ; preds = %bb57, %bb45113 %tmp58 = phi i64 [ %tmp60, %bb57 ], [ 0, %bb45 ]114 %tmp59 = phi i32 [ %tmp61, %bb57 ], [ 0, %bb45 ]115 %tmp60 = add nuw i64 %tmp58, 1116 tail call void @bar()117 %tmp61 = add nuw nsw i32 %tmp59, 1118 %tmp62 = load i32, ptr @c, align 4, !tbaa !2119 %tmp63 = mul nsw i32 %tmp62, 10120 %tmp64 = icmp slt i32 %tmp61, %tmp63121 br i1 %tmp64, label %bb57, label %bb65122 123bb65: ; preds = %bb57124 %tmp66 = add i64 %tmp60, %tmp47125 br label %bb67126 127bb67: ; preds = %bb65, %bb45128 %tmp68 = phi i32 [ %tmp62, %bb65 ], [ %tmp46, %bb45 ]129 %tmp69 = phi i64 [ %tmp66, %bb65 ], [ %tmp47, %bb45 ]130 %tmp70 = add nuw i64 %tmp48, 1131 %tmp71 = add nuw nsw i32 %tmp49, 1132 %tmp72 = icmp slt i32 %tmp71, %tmp68133 br i1 %tmp72, label %bb45, label %bb51134 135bb73: ; preds = %bb73, %bb51136 %tmp74 = phi i64 [ %tmp76, %bb73 ], [ 0, %bb51 ]137 %tmp75 = phi i32 [ %tmp77, %bb73 ], [ 0, %bb51 ]138 %tmp76 = add nuw i64 %tmp74, 1139 tail call void @bar()140 %tmp77 = add nuw nsw i32 %tmp75, 1141 %tmp78 = load i32, ptr @c, align 4, !tbaa !2142 %tmp79 = mul nsw i32 %tmp78, 100143 %tmp80 = icmp slt i32 %tmp77, %tmp79144 br i1 %tmp80, label %bb73, label %bb81145 146bb81: ; preds = %bb73147 br label %bb84148 149bb84: ; preds = %bb81, %bb51, %bb8, %bb150 ret i32 0151}152 153attributes #0 = { noinline }154attributes #1 = { norecurse nounwind uwtable } 155 156!llvm.module.flags = !{!0}157!llvm.ident = !{!1}158 159!0 = !{i32 1, !"wchar_size", i32 4}160!1 = !{!"clang version 5.0.0 (trunk 307355)"}161!2 = !{!3, !3, i64 0}162!3 = !{!"int", !4, i64 0}163!4 = !{!"omnipotent char", !5, i64 0}164!5 = !{!"Simple C/C++ TBAA"}165