brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.0 KiB · 10e634f Raw
151 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=loop-simplify,loop-rotate,instcombine,indvars -S -verify-loop-info -verify-dom-info | FileCheck %s3 4; Loopsimplify should be able to merge the two loop exits5; into one, so that loop rotate can rotate the loop, so6; that indvars can promote the induction variable to i647; without needing casts.8 9target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n32:64"10 11define float @test1(ptr %pTmp1, ptr %peakWeight, i32 %bandEdgeIndex) nounwind {12; CHECK-LABEL: @test1(13; CHECK-NEXT:  entry:14; CHECK-NEXT:    [[T0:%.*]] = load float, ptr [[PEAKWEIGHT:%.*]], align 415; CHECK-NEXT:    [[T11:%.*]] = add i32 [[BANDEDGEINDEX:%.*]], -116; CHECK-NEXT:    [[T121:%.*]] = icmp sgt i32 [[T11]], 017; CHECK-NEXT:    br i1 [[T121]], label [[BB_LR_PH:%.*]], label [[BB3:%.*]]18; CHECK:       bb.lr.ph:19; CHECK-NEXT:    [[TMP0:%.*]] = sext i32 [[T11]] to i6420; CHECK-NEXT:    br label [[BB:%.*]]21; CHECK:       bb:22; CHECK-NEXT:    [[INDVARS_IV:%.*]] = phi i64 [ 0, [[BB_LR_PH]] ], [ [[INDVARS_IV_NEXT:%.*]], [[BB]] ]23; CHECK-NEXT:    [[DISTERBHI_04:%.*]] = phi float [ 0.000000e+00, [[BB_LR_PH]] ], [ [[T4:%.*]], [[BB]] ]24; CHECK-NEXT:    [[PEAKCOUNT_02:%.*]] = phi float [ [[T0]], [[BB_LR_PH]] ], [ [[T9:%.*]], [[BB]] ]25; CHECK-NEXT:    [[T2:%.*]] = getelementptr float, ptr [[PTMP1:%.*]], i64 [[INDVARS_IV]]26; CHECK-NEXT:    [[T3:%.*]] = load float, ptr [[T2]], align 427; CHECK-NEXT:    [[T4]] = fadd float [[T3]], [[DISTERBHI_04]]28; CHECK-NEXT:    [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 129; CHECK-NEXT:    [[T7:%.*]] = getelementptr float, ptr [[PEAKWEIGHT]], i64 [[INDVARS_IV_NEXT]]30; CHECK-NEXT:    [[T8:%.*]] = load float, ptr [[T7]], align 431; CHECK-NEXT:    [[T9]] = fadd float [[T8]], [[PEAKCOUNT_02]]32; CHECK-NEXT:    [[T10:%.*]] = fcmp olt float [[T4]], 2.500000e+0033; CHECK-NEXT:    [[T12:%.*]] = icmp sgt i64 [[TMP0]], [[INDVARS_IV_NEXT]]34; CHECK-NEXT:    [[OR_COND:%.*]] = and i1 [[T10]], [[T12]]35; CHECK-NEXT:    br i1 [[OR_COND]], label [[BB]], label [[BB1_BB3_CRIT_EDGE:%.*]]36; CHECK:       bb1.bb3_crit_edge:37; CHECK-NEXT:    [[T4_LCSSA:%.*]] = phi float [ [[T4]], [[BB]] ]38; CHECK-NEXT:    [[T9_LCSSA:%.*]] = phi float [ [[T9]], [[BB]] ]39; CHECK-NEXT:    br label [[BB3]]40; CHECK:       bb3:41; CHECK-NEXT:    [[PEAKCOUNT_0_LCSSA:%.*]] = phi float [ [[T9_LCSSA]], [[BB1_BB3_CRIT_EDGE]] ], [ [[T0]], [[ENTRY:%.*]] ]42; CHECK-NEXT:    [[DISTERBHI_0_LCSSA:%.*]] = phi float [ [[T4_LCSSA]], [[BB1_BB3_CRIT_EDGE]] ], [ 0.000000e+00, [[ENTRY]] ]43; CHECK-NEXT:    [[T13:%.*]] = fdiv float [[PEAKCOUNT_0_LCSSA]], [[DISTERBHI_0_LCSSA]]44; CHECK-NEXT:    ret float [[T13]]45;46entry:47  %t0 = load float, ptr %peakWeight, align 448  br label %bb149 50bb:		; preds = %bb251  %t1 = sext i32 %hiPart.0 to i6452  %t2 = getelementptr float, ptr %pTmp1, i64 %t153  %t3 = load float, ptr %t2, align 454  %t4 = fadd float %t3, %distERBhi.055  %t5 = add i32 %hiPart.0, 156  %t6 = sext i32 %t5 to i6457  %t7 = getelementptr float, ptr %peakWeight, i64 %t658  %t8 = load float, ptr %t7, align 459  %t9 = fadd float %t8, %peakCount.060  br label %bb161 62bb1:		; preds = %bb, %entry63  %peakCount.0 = phi float [ %t0, %entry ], [ %t9, %bb ]64  %hiPart.0 = phi i32 [ 0, %entry ], [ %t5, %bb ]65  %distERBhi.0 = phi float [ 0.000000e+00, %entry ], [ %t4, %bb ]66  %t10 = fcmp uge float %distERBhi.0, 2.500000e+0067  br i1 %t10, label %bb3, label %bb268 69bb2:		; preds = %bb170  %t11 = add i32 %bandEdgeIndex, -171  %t12 = icmp sgt i32 %t11, %hiPart.072  br i1 %t12, label %bb, label %bb373 74bb3:		; preds = %bb2, %bb175  %t13 = fdiv float %peakCount.0, %distERBhi.076  ret float %t1377}78 79; Same test as above.80; This would crash because we assumed TTI was available to process the metadata.81 82define float @merge_branches_profile_metadata(ptr %pTmp1, ptr %peakWeight, i32 %bandEdgeIndex) nounwind {83; CHECK-LABEL: @merge_branches_profile_metadata(84; CHECK-NEXT:  entry:85; CHECK-NEXT:    [[T0:%.*]] = load float, ptr [[PEAKWEIGHT:%.*]], align 486; CHECK-NEXT:    [[T11:%.*]] = add i32 [[BANDEDGEINDEX:%.*]], -187; CHECK-NEXT:    [[T121:%.*]] = icmp sgt i32 [[T11]], 088; CHECK-NEXT:    br i1 [[T121]], label [[BB_LR_PH:%.*]], label [[BB3:%.*]], !prof [[PROF0:![0-9]+]]89; CHECK:       bb.lr.ph:90; CHECK-NEXT:    [[TMP0:%.*]] = sext i32 [[T11]] to i6491; CHECK-NEXT:    br label [[BB:%.*]]92; CHECK:       bb:93; CHECK-NEXT:    [[INDVARS_IV:%.*]] = phi i64 [ 0, [[BB_LR_PH]] ], [ [[INDVARS_IV_NEXT:%.*]], [[BB]] ]94; CHECK-NEXT:    [[DISTERBHI_04:%.*]] = phi float [ 0.000000e+00, [[BB_LR_PH]] ], [ [[T4:%.*]], [[BB]] ]95; CHECK-NEXT:    [[PEAKCOUNT_02:%.*]] = phi float [ [[T0]], [[BB_LR_PH]] ], [ [[T9:%.*]], [[BB]] ]96; CHECK-NEXT:    [[T2:%.*]] = getelementptr float, ptr [[PTMP1:%.*]], i64 [[INDVARS_IV]]97; CHECK-NEXT:    [[T3:%.*]] = load float, ptr [[T2]], align 498; CHECK-NEXT:    [[T4]] = fadd float [[T3]], [[DISTERBHI_04]]99; CHECK-NEXT:    [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1100; CHECK-NEXT:    [[T7:%.*]] = getelementptr float, ptr [[PEAKWEIGHT]], i64 [[INDVARS_IV_NEXT]]101; CHECK-NEXT:    [[T8:%.*]] = load float, ptr [[T7]], align 4102; CHECK-NEXT:    [[T9]] = fadd float [[T8]], [[PEAKCOUNT_02]]103; CHECK-NEXT:    [[T10:%.*]] = fcmp olt float [[T4]], 2.500000e+00104; CHECK-NEXT:    [[T12:%.*]] = icmp sgt i64 [[TMP0]], [[INDVARS_IV_NEXT]]105; CHECK-NEXT:    [[OR_COND:%.*]] = and i1 [[T10]], [[T12]]106; CHECK-NEXT:    br i1 [[OR_COND]], label [[BB]], label [[BB1_BB3_CRIT_EDGE:%.*]], !prof [[PROF1:![0-9]+]]107; CHECK:       bb1.bb3_crit_edge:108; CHECK-NEXT:    [[T4_LCSSA:%.*]] = phi float [ [[T4]], [[BB]] ]109; CHECK-NEXT:    [[T9_LCSSA:%.*]] = phi float [ [[T9]], [[BB]] ]110; CHECK-NEXT:    br label [[BB3]]111; CHECK:       bb3:112; CHECK-NEXT:    [[PEAKCOUNT_0_LCSSA:%.*]] = phi float [ [[T9_LCSSA]], [[BB1_BB3_CRIT_EDGE]] ], [ [[T0]], [[ENTRY:%.*]] ]113; CHECK-NEXT:    [[DISTERBHI_0_LCSSA:%.*]] = phi float [ [[T4_LCSSA]], [[BB1_BB3_CRIT_EDGE]] ], [ 0.000000e+00, [[ENTRY]] ]114; CHECK-NEXT:    [[T13:%.*]] = fdiv float [[PEAKCOUNT_0_LCSSA]], [[DISTERBHI_0_LCSSA]]115; CHECK-NEXT:    ret float [[T13]]116;117entry:118  %t0 = load float, ptr %peakWeight, align 4119  br label %bb1120 121bb:		; preds = %bb2122  %t1 = sext i32 %hiPart.0 to i64123  %t2 = getelementptr float, ptr %pTmp1, i64 %t1124  %t3 = load float, ptr %t2, align 4125  %t4 = fadd float %t3, %distERBhi.0126  %t5 = add i32 %hiPart.0, 1127  %t6 = sext i32 %t5 to i64128  %t7 = getelementptr float, ptr %peakWeight, i64 %t6129  %t8 = load float, ptr %t7, align 4130  %t9 = fadd float %t8, %peakCount.0131  br label %bb1132 133bb1:		; preds = %bb, %entry134  %peakCount.0 = phi float [ %t0, %entry ], [ %t9, %bb ]135  %hiPart.0 = phi i32 [ 0, %entry ], [ %t5, %bb ]136  %distERBhi.0 = phi float [ 0.000000e+00, %entry ], [ %t4, %bb ]137  %t10 = fcmp uge float %distERBhi.0, 2.500000e+00138  br i1 %t10, label %bb3, label %bb2, !prof !0139 140bb2:		; preds = %bb1141  %t11 = add i32 %bandEdgeIndex, -1142  %t12 = icmp sgt i32 %t11, %hiPart.0143  br i1 %t12, label %bb, label %bb3144 145bb3:		; preds = %bb2, %bb1146  %t13 = fdiv float %peakCount.0, %distERBhi.0147  ret float %t13148}149 150!0 = !{!"branch_weights", i32 2000, i32 1}151