1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
  
     | 
    
      ; RUN: llc -O2 < %s
; REQUIRES: asserts
target datalayout = "e-m:e-p:32:32-i1:32-i64:64-a:0-v32:32-n16:32"
target triple = "hexagon-unknown--elf"
%struct.cpumask = type { [1 x i32] }
%struct.load_weight = type { i32, i32 }
@sysctl_sched_latency = global i32 6000000, align 4
@normalized_sysctl_sched_latency = global i32 6000000, align 4
@sysctl_sched_tunable_scaling = global i8 1, align 1
@sysctl_sched_min_granularity = global i32 750000, align 4
@normalized_sysctl_sched_min_granularity = global i32 750000, align 4
@sysctl_sched_wakeup_granularity = global i32 1000000, align 4
@normalized_sysctl_sched_wakeup_granularity = global i32 1000000, align 4
@sysctl_sched_migration_cost = constant i32 500000, align 4
@sysctl_sched_shares_window = global i32 10000000, align 4
@sysctl_sched_child_runs_first = common global i32 0, align 4
@cpu_online_mask = external constant %struct.cpumask*
; Function Attrs: noinline nounwind
define void @sched_init_granularity() #0 {
entry:
  tail call fastcc void @update_sysctl()
  ret void
}
; Function Attrs: noinline nounwind
define internal fastcc void @update_sysctl() #0 {
entry:
  %call = tail call i32 @get_update_sysctl_factor()
  %0 = load i32, i32* @normalized_sysctl_sched_min_granularity, align 4, !tbaa !1
  %mul = mul i32 %0, %call
  store i32 %mul, i32* @sysctl_sched_min_granularity, align 4, !tbaa !1
  %1 = load i32, i32* @normalized_sysctl_sched_latency, align 4, !tbaa !1
  %mul1 = mul i32 %1, %call
  store i32 %mul1, i32* @sysctl_sched_latency, align 4, !tbaa !1
  %2 = load i32, i32* @normalized_sysctl_sched_wakeup_granularity, align 4, !tbaa !1
  %mul2 = mul i32 %2, %call
  store i32 %mul2, i32* @sysctl_sched_wakeup_granularity, align 4, !tbaa !1
  ret void
}
; Function Attrs: noinline nounwind
define i32 @calc_delta_mine(i32 %delta_exec, i32 %weight, %struct.load_weight* nocapture %lw) #0 {
entry:
  %cmp = icmp ugt i32 %weight, 1
  %conv = zext i32 %delta_exec to i64
  br i1 %cmp, label %if.then, label %if.end, !prof !5
if.then:                                          ; preds = %entry
  %conv2 = zext i32 %weight to i64
  %mul = mul i64 %conv2, %conv
  br label %if.end
if.end:                                           ; preds = %entry, %if.then
  %tmp.0 = phi i64 [ %mul, %if.then ], [ %conv, %entry ]
  %inv_weight = getelementptr inbounds %struct.load_weight, %struct.load_weight* %lw, i32 0, i32 1
  %0 = load i32, i32* %inv_weight, align 4, !tbaa !6
  %tobool4 = icmp eq i32 %0, 0
  br i1 %tobool4, label %if.then5, label %if.end22
if.then5:                                         ; preds = %if.end
  %weight7 = getelementptr inbounds %struct.load_weight, %struct.load_weight* %lw, i32 0, i32 0
  %1 = load i32, i32* %weight7, align 4, !tbaa !9
  %lnot9 = icmp eq i32 %1, 0
  br i1 %lnot9, label %if.then17, label %if.else19, !prof !10
if.then17:                                        ; preds = %if.then5
  store i32 -1, i32* %inv_weight, align 4, !tbaa !6
  br label %if.end22
if.else19:                                        ; preds = %if.then5
  %div = udiv i32 -1, %1
  store i32 %div, i32* %inv_weight, align 4, !tbaa !6
  br label %if.end22
if.end22:                                         ; preds = %if.end, %if.then17, %if.else19
  %2 = phi i32 [ %0, %if.end ], [ -1, %if.then17 ], [ %div, %if.else19 ]
  %cmp23 = icmp ugt i64 %tmp.0, 4294967295
  br i1 %cmp23, label %if.then31, label %if.else37, !prof !10
if.then31:                                        ; preds = %if.end22
  %add = add i64 %tmp.0, 32768
  %shr = lshr i64 %add, 16
  %conv33 = zext i32 %2 to i64
  %mul34 = mul i64 %conv33, %shr
  %add35 = add i64 %mul34, 32768
  %shr36 = lshr i64 %add35, 16
  br label %if.end43
if.else37:                                        ; preds = %if.end22
  %conv39 = zext i32 %2 to i64
  %mul40 = mul i64 %conv39, %tmp.0
  %add41 = add i64 %mul40, 2147483648
  %shr42 = lshr i64 %add41, 32
  br label %if.end43
if.end43:                                         ; preds = %if.else37, %if.then31
  %tmp.1 = phi i64 [ %shr36, %if.then31 ], [ %shr42, %if.else37 ]
  %cmp49 = icmp ult i64 %tmp.1, 2147483647
  %3 = trunc i64 %tmp.1 to i32
  %conv51 = select i1 %cmp49, i32 %3, i32 2147483647
  ret i32 %conv51
}
declare i32 @get_update_sysctl_factor() #0
declare i32 @__bitmap_weight(i32*, i32) #1
attributes #0 = { noinline nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #2 = { nounwind }
!llvm.ident = !{!0}
!0 = !{!"Clang 3.1"}
!1 = !{!2, !2, i64 0}
!2 = !{!"int", !3, i64 0}
!3 = !{!"omnipotent char", !4, i64 0}
!4 = !{!"Simple C/C++ TBAA"}
!5 = !{!"branch_weights", i32 64, i32 4}
!6 = !{!7, !8, i64 4}
!7 = !{!"load_weight", !8, i64 0, !8, i64 4}
!8 = !{!"long", !3, i64 0}
!9 = !{!7, !8, i64 0}
!10 = !{!"branch_weights", i32 4, i32 64}
!11 = !{!12, !12, i64 0}
!12 = !{!"any pointer", !3, i64 0}
!13 = !{!3, !3, i64 0}
!14 = !{i32 45854, i32 45878}
 
     |