Follow up to d0858bffa11, add missing REQUIRES x86
[llvm-project.git] / llvm / test / Transforms / IndVarSimplify / iv-sext.ll
blob450913f16baa290e9ee6ad7f07f63b2a48a478bc
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
2 ; RUN: opt < %s -passes=indvars -S | FileCheck %s
4 ; Indvars should be able to promote the hiPart induction variable in the
5 ; inner loop to i64.
6 ; TODO: it should promote hiPart to i64 in the outer loop too.
8 target 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 define void @t(ptr %pval1, ptr %peakWeight, ptr %nrgReducePeakrate, i32 %bandEdgeIndex, float %val1) nounwind {
11 ; CHECK-LABEL: define void @t
12 ; CHECK-SAME: (ptr [[PVAL1:%.*]], ptr [[PEAKWEIGHT:%.*]], ptr [[NRGREDUCEPEAKRATE:%.*]], i32 [[BANDEDGEINDEX:%.*]], float [[VAL1:%.*]]) #[[ATTR0:[0-9]+]] {
13 ; CHECK-NEXT:  entry:
14 ; CHECK-NEXT:    [[VAL:%.*]] = load float, ptr [[PEAKWEIGHT]], align 4
15 ; CHECK-NEXT:    [[VAL2:%.*]] = icmp sgt i32 [[BANDEDGEINDEX]], 0
16 ; CHECK-NEXT:    br i1 [[VAL2]], label [[BB_NPH22:%.*]], label [[RETURN:%.*]]
17 ; CHECK:       bb.nph22:
18 ; CHECK-NEXT:    [[VAL3:%.*]] = add i32 [[BANDEDGEINDEX]], -1
19 ; CHECK-NEXT:    [[TMP0:%.*]] = sext i32 [[VAL3]] to i64
20 ; CHECK-NEXT:    [[WIDE_TRIP_COUNT:%.*]] = zext i32 [[BANDEDGEINDEX]] to i64
21 ; CHECK-NEXT:    br label [[BB:%.*]]
22 ; CHECK:       bb:
23 ; CHECK-NEXT:    [[INDVARS_IV1:%.*]] = phi i64 [ [[INDVARS_IV_NEXT2:%.*]], [[BB8:%.*]] ], [ 0, [[BB_NPH22]] ]
24 ; CHECK-NEXT:    [[DISTERBHI_121:%.*]] = phi float [ [[DISTERBHI_2_LCSSA:%.*]], [[BB8]] ], [ 0.000000e+00, [[BB_NPH22]] ]
25 ; CHECK-NEXT:    [[DISTERBLO_120:%.*]] = phi float [ [[DISTERBLO_0_LCSSA:%.*]], [[BB8]] ], [ 0.000000e+00, [[BB_NPH22]] ]
26 ; CHECK-NEXT:    [[HIPART_119:%.*]] = phi i32 [ [[HIPART_0_LCSSA:%.*]], [[BB8]] ], [ 0, [[BB_NPH22]] ]
27 ; CHECK-NEXT:    [[LOPART_118:%.*]] = phi i32 [ [[LOPART_0_LCSSA:%.*]], [[BB8]] ], [ 0, [[BB_NPH22]] ]
28 ; CHECK-NEXT:    [[PEAKCOUNT_117:%.*]] = phi float [ [[PEAKCOUNT_2_LCSSA:%.*]], [[BB8]] ], [ [[VAL]], [[BB_NPH22]] ]
29 ; CHECK-NEXT:    [[VAL4:%.*]] = icmp ugt i64 [[INDVARS_IV1]], 0
30 ; CHECK-NEXT:    br i1 [[VAL4]], label [[BB1:%.*]], label [[BB3_PREHEADER:%.*]]
31 ; CHECK:       bb1:
32 ; CHECK-NEXT:    [[TMP1:%.*]] = add nsw i64 [[INDVARS_IV1]], -1
33 ; CHECK-NEXT:    [[VAL7:%.*]] = getelementptr float, ptr [[PVAL1]], i64 [[TMP1]]
34 ; CHECK-NEXT:    [[VAL8:%.*]] = load float, ptr [[VAL7]], align 4
35 ; CHECK-NEXT:    [[VAL9:%.*]] = fadd float [[VAL8]], [[DISTERBLO_120]]
36 ; CHECK-NEXT:    [[TMP2:%.*]] = add nsw i64 [[INDVARS_IV1]], -1
37 ; CHECK-NEXT:    [[VAL12:%.*]] = getelementptr float, ptr [[PVAL1]], i64 [[TMP2]]
38 ; CHECK-NEXT:    [[VAL13:%.*]] = load float, ptr [[VAL12]], align 4
39 ; CHECK-NEXT:    [[VAL14:%.*]] = fsub float [[DISTERBHI_121]], [[VAL13]]
40 ; CHECK-NEXT:    br label [[BB3_PREHEADER]]
41 ; CHECK:       bb3.preheader:
42 ; CHECK-NEXT:    [[DISTERBLO_0_PH:%.*]] = phi float [ [[DISTERBLO_120]], [[BB]] ], [ [[VAL9]], [[BB1]] ]
43 ; CHECK-NEXT:    [[DISTERBHI_0_PH:%.*]] = phi float [ [[DISTERBHI_121]], [[BB]] ], [ [[VAL14]], [[BB1]] ]
44 ; CHECK-NEXT:    [[VAL15:%.*]] = fcmp ogt float [[DISTERBLO_0_PH]], 2.500000e+00
45 ; CHECK-NEXT:    br i1 [[VAL15]], label [[BB_NPH:%.*]], label [[BB5_PREHEADER:%.*]]
46 ; CHECK:       bb.nph:
47 ; CHECK-NEXT:    br label [[BB2:%.*]]
48 ; CHECK:       bb2:
49 ; CHECK-NEXT:    [[DISTERBLO_03:%.*]] = phi float [ [[VAL19:%.*]], [[BB3:%.*]] ], [ [[DISTERBLO_0_PH]], [[BB_NPH]] ]
50 ; CHECK-NEXT:    [[LOPART_02:%.*]] = phi i32 [ [[VAL24:%.*]], [[BB3]] ], [ [[LOPART_118]], [[BB_NPH]] ]
51 ; CHECK-NEXT:    [[PEAKCOUNT_01:%.*]] = phi float [ [[VAL23:%.*]], [[BB3]] ], [ [[PEAKCOUNT_117]], [[BB_NPH]] ]
52 ; CHECK-NEXT:    [[VAL16:%.*]] = sext i32 [[LOPART_02]] to i64
53 ; CHECK-NEXT:    [[VAL17:%.*]] = getelementptr float, ptr [[PVAL1]], i64 [[VAL16]]
54 ; CHECK-NEXT:    [[VAL18:%.*]] = load float, ptr [[VAL17]], align 4
55 ; CHECK-NEXT:    [[VAL19]] = fsub float [[DISTERBLO_03]], [[VAL18]]
56 ; CHECK-NEXT:    [[VAL20:%.*]] = sext i32 [[LOPART_02]] to i64
57 ; CHECK-NEXT:    [[VAL21:%.*]] = getelementptr float, ptr [[PEAKWEIGHT]], i64 [[VAL20]]
58 ; CHECK-NEXT:    [[VAL22:%.*]] = load float, ptr [[VAL21]], align 4
59 ; CHECK-NEXT:    [[VAL23]] = fsub float [[PEAKCOUNT_01]], [[VAL22]]
60 ; CHECK-NEXT:    [[VAL24]] = add i32 [[LOPART_02]], 1
61 ; CHECK-NEXT:    br label [[BB3]]
62 ; CHECK:       bb3:
63 ; CHECK-NEXT:    [[VAL25:%.*]] = fcmp ogt float [[VAL19]], 2.500000e+00
64 ; CHECK-NEXT:    br i1 [[VAL25]], label [[BB2]], label [[BB3_BB5_PREHEADER_CRIT_EDGE:%.*]]
65 ; CHECK:       bb3.bb5.preheader_crit_edge:
66 ; CHECK-NEXT:    [[VAL24_LCSSA:%.*]] = phi i32 [ [[VAL24]], [[BB3]] ]
67 ; CHECK-NEXT:    [[VAL23_LCSSA:%.*]] = phi float [ [[VAL23]], [[BB3]] ]
68 ; CHECK-NEXT:    [[VAL19_LCSSA:%.*]] = phi float [ [[VAL19]], [[BB3]] ]
69 ; CHECK-NEXT:    br label [[BB5_PREHEADER]]
70 ; CHECK:       bb5.preheader:
71 ; CHECK-NEXT:    [[DISTERBLO_0_LCSSA]] = phi float [ [[VAL19_LCSSA]], [[BB3_BB5_PREHEADER_CRIT_EDGE]] ], [ [[DISTERBLO_0_PH]], [[BB3_PREHEADER]] ]
72 ; CHECK-NEXT:    [[LOPART_0_LCSSA]] = phi i32 [ [[VAL24_LCSSA]], [[BB3_BB5_PREHEADER_CRIT_EDGE]] ], [ [[LOPART_118]], [[BB3_PREHEADER]] ]
73 ; CHECK-NEXT:    [[PEAKCOUNT_0_LCSSA:%.*]] = phi float [ [[VAL23_LCSSA]], [[BB3_BB5_PREHEADER_CRIT_EDGE]] ], [ [[PEAKCOUNT_117]], [[BB3_PREHEADER]] ]
74 ; CHECK-NEXT:    [[DOTNOT10:%.*]] = fcmp olt float [[DISTERBHI_0_PH]], 2.500000e+00
75 ; CHECK-NEXT:    [[VAL26:%.*]] = icmp sgt i32 [[VAL3]], [[HIPART_119]]
76 ; CHECK-NEXT:    [[OR_COND11:%.*]] = and i1 [[VAL26]], [[DOTNOT10]]
77 ; CHECK-NEXT:    br i1 [[OR_COND11]], label [[BB_NPH12:%.*]], label [[BB7:%.*]]
78 ; CHECK:       bb.nph12:
79 ; CHECK-NEXT:    [[TMP3:%.*]] = sext i32 [[HIPART_119]] to i64
80 ; CHECK-NEXT:    br label [[BB4:%.*]]
81 ; CHECK:       bb4:
82 ; CHECK-NEXT:    [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[BB5:%.*]] ], [ [[TMP3]], [[BB_NPH12]] ]
83 ; CHECK-NEXT:    [[DISTERBHI_29:%.*]] = phi float [ [[VAL30:%.*]], [[BB5]] ], [ [[DISTERBHI_0_PH]], [[BB_NPH12]] ]
84 ; CHECK-NEXT:    [[PEAKCOUNT_27:%.*]] = phi float [ [[VAL35:%.*]], [[BB5]] ], [ [[PEAKCOUNT_0_LCSSA]], [[BB_NPH12]] ]
85 ; CHECK-NEXT:    [[VAL28:%.*]] = getelementptr float, ptr [[PVAL1]], i64 [[INDVARS_IV]]
86 ; CHECK-NEXT:    [[VAL29:%.*]] = load float, ptr [[VAL28]], align 4
87 ; CHECK-NEXT:    [[VAL30]] = fadd float [[VAL29]], [[DISTERBHI_29]]
88 ; CHECK-NEXT:    [[INDVARS_IV_NEXT]] = add nsw i64 [[INDVARS_IV]], 1
89 ; CHECK-NEXT:    [[VAL33:%.*]] = getelementptr float, ptr [[PEAKWEIGHT]], i64 [[INDVARS_IV_NEXT]]
90 ; CHECK-NEXT:    [[VAL34:%.*]] = load float, ptr [[VAL33]], align 4
91 ; CHECK-NEXT:    [[VAL35]] = fadd float [[VAL34]], [[PEAKCOUNT_27]]
92 ; CHECK-NEXT:    br label [[BB5]]
93 ; CHECK:       bb5:
94 ; CHECK-NEXT:    [[DOTNOT:%.*]] = fcmp olt float [[VAL30]], 2.500000e+00
95 ; CHECK-NEXT:    [[VAL36:%.*]] = icmp sgt i64 [[TMP0]], [[INDVARS_IV_NEXT]]
96 ; CHECK-NEXT:    [[OR_COND:%.*]] = and i1 [[VAL36]], [[DOTNOT]]
97 ; CHECK-NEXT:    br i1 [[OR_COND]], label [[BB4]], label [[BB5_BB7_CRIT_EDGE:%.*]]
98 ; CHECK:       bb5.bb7_crit_edge:
99 ; CHECK-NEXT:    [[VAL35_LCSSA:%.*]] = phi float [ [[VAL35]], [[BB5]] ]
100 ; CHECK-NEXT:    [[VAL31_LCSSA_WIDE:%.*]] = phi i64 [ [[INDVARS_IV_NEXT]], [[BB5]] ]
101 ; CHECK-NEXT:    [[VAL30_LCSSA:%.*]] = phi float [ [[VAL30]], [[BB5]] ]
102 ; CHECK-NEXT:    [[TMP4:%.*]] = trunc i64 [[VAL31_LCSSA_WIDE]] to i32
103 ; CHECK-NEXT:    br label [[BB7]]
104 ; CHECK:       bb7:
105 ; CHECK-NEXT:    [[DISTERBHI_2_LCSSA]] = phi float [ [[VAL30_LCSSA]], [[BB5_BB7_CRIT_EDGE]] ], [ [[DISTERBHI_0_PH]], [[BB5_PREHEADER]] ]
106 ; CHECK-NEXT:    [[HIPART_0_LCSSA]] = phi i32 [ [[TMP4]], [[BB5_BB7_CRIT_EDGE]] ], [ [[HIPART_119]], [[BB5_PREHEADER]] ]
107 ; CHECK-NEXT:    [[PEAKCOUNT_2_LCSSA]] = phi float [ [[VAL35_LCSSA]], [[BB5_BB7_CRIT_EDGE]] ], [ [[PEAKCOUNT_0_LCSSA]], [[BB5_PREHEADER]] ]
108 ; CHECK-NEXT:    [[VAL37:%.*]] = fadd float [[DISTERBLO_0_LCSSA]], [[DISTERBHI_2_LCSSA]]
109 ; CHECK-NEXT:    [[VAL38:%.*]] = fdiv float [[PEAKCOUNT_2_LCSSA]], [[VAL37]]
110 ; CHECK-NEXT:    [[VAL39:%.*]] = fmul float [[VAL38]], [[VAL1]]
111 ; CHECK-NEXT:    [[VAL40:%.*]] = fmul float [[VAL39]], [[VAL39]]
112 ; CHECK-NEXT:    [[VAL41:%.*]] = fmul float [[VAL40]], [[VAL40]]
113 ; CHECK-NEXT:    [[VAL42:%.*]] = fadd float [[VAL41]], 1.000000e+00
114 ; CHECK-NEXT:    [[VAL43:%.*]] = fdiv float 1.000000e+00, [[VAL42]]
115 ; CHECK-NEXT:    [[VAL45:%.*]] = getelementptr float, ptr [[NRGREDUCEPEAKRATE]], i64 [[INDVARS_IV1]]
116 ; CHECK-NEXT:    store float [[VAL43]], ptr [[VAL45]], align 4
117 ; CHECK-NEXT:    [[INDVARS_IV_NEXT2]] = add nuw nsw i64 [[INDVARS_IV1]], 1
118 ; CHECK-NEXT:    br label [[BB8]]
119 ; CHECK:       bb8:
120 ; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp ne i64 [[INDVARS_IV_NEXT2]], [[WIDE_TRIP_COUNT]]
121 ; CHECK-NEXT:    br i1 [[EXITCOND]], label [[BB]], label [[BB8_RETURN_CRIT_EDGE:%.*]]
122 ; CHECK:       bb8.return_crit_edge:
123 ; CHECK-NEXT:    br label [[RETURN]]
124 ; CHECK:       return:
125 ; CHECK-NEXT:    ret void
127 entry:
128   %val = load float, ptr %peakWeight, align 4           ; <float> [#uses=1]
129   %val2 = icmp sgt i32 %bandEdgeIndex, 0                ; <i1> [#uses=1]
130   br i1 %val2, label %bb.nph22, label %return
132 bb.nph22:               ; preds = %entry
133   %val3 = add i32 %bandEdgeIndex, -1            ; <i32> [#uses=2]
134   br label %bb
136 bb:             ; preds = %bb8, %bb.nph22
137   %distERBhi.121 = phi float [ %distERBhi.2.lcssa, %bb8 ], [ 0.000000e+00, %bb.nph22 ]          ; <float> [#uses=2]
138   %distERBlo.120 = phi float [ %distERBlo.0.lcssa, %bb8 ], [ 0.000000e+00, %bb.nph22 ]          ; <float> [#uses=2]
139   %hiPart.119 = phi i32 [ %hiPart.0.lcssa, %bb8 ], [ 0, %bb.nph22 ]             ; <i32> [#uses=3]
140   %loPart.118 = phi i32 [ %loPart.0.lcssa, %bb8 ], [ 0, %bb.nph22 ]             ; <i32> [#uses=2]
141   %peakCount.117 = phi float [ %peakCount.2.lcssa, %bb8 ], [ %val, %bb.nph22 ]          ; <float> [#uses=2]
142   %part.016 = phi i32 [ %val46, %bb8 ], [ 0, %bb.nph22 ]                ; <i32> [#uses=5]
143   %val4 = icmp sgt i32 %part.016, 0             ; <i1> [#uses=1]
144   br i1 %val4, label %bb1, label %bb3.preheader
146 bb1:            ; preds = %bb
147   %val5 = add i32 %part.016, -1         ; <i32> [#uses=1]
148   %val6 = sext i32 %val5 to i64         ; <i64> [#uses=1]
149   %val7 = getelementptr float, ptr %pval1, i64 %val6            ; <ptr> [#uses=1]
150   %val8 = load float, ptr %val7, align 4                ; <float> [#uses=1]
151   %val9 = fadd float %val8, %distERBlo.120              ; <float> [#uses=1]
152   %val10 = add i32 %part.016, -1                ; <i32> [#uses=1]
153   %val11 = sext i32 %val10 to i64               ; <i64> [#uses=1]
154   %val12 = getelementptr float, ptr %pval1, i64 %val11          ; <ptr> [#uses=1]
155   %val13 = load float, ptr %val12, align 4              ; <float> [#uses=1]
156   %val14 = fsub float %distERBhi.121, %val13            ; <float> [#uses=1]
157   br label %bb3.preheader
159 bb3.preheader:          ; preds = %bb1, %bb
160   %distERBlo.0.ph = phi float [ %distERBlo.120, %bb ], [ %val9, %bb1 ]          ; <float> [#uses=3]
161   %distERBhi.0.ph = phi float [ %distERBhi.121, %bb ], [ %val14, %bb1 ]         ; <float> [#uses=3]
162   %val15 = fcmp ogt float %distERBlo.0.ph, 2.500000e+00         ; <i1> [#uses=1]
163   br i1 %val15, label %bb.nph, label %bb5.preheader
165 bb.nph:         ; preds = %bb3.preheader
166   br label %bb2
168 bb2:            ; preds = %bb3, %bb.nph
169   %distERBlo.03 = phi float [ %val19, %bb3 ], [ %distERBlo.0.ph, %bb.nph ]              ; <float> [#uses=1]
170   %loPart.02 = phi i32 [ %val24, %bb3 ], [ %loPart.118, %bb.nph ]               ; <i32> [#uses=3]
171   %peakCount.01 = phi float [ %val23, %bb3 ], [ %peakCount.117, %bb.nph ]               ; <float> [#uses=1]
172   %val16 = sext i32 %loPart.02 to i64           ; <i64> [#uses=1]
173   %val17 = getelementptr float, ptr %pval1, i64 %val16          ; <ptr> [#uses=1]
174   %val18 = load float, ptr %val17, align 4              ; <float> [#uses=1]
175   %val19 = fsub float %distERBlo.03, %val18             ; <float> [#uses=3]
176   %val20 = sext i32 %loPart.02 to i64           ; <i64> [#uses=1]
177   %val21 = getelementptr float, ptr %peakWeight, i64 %val20             ; <ptr> [#uses=1]
178   %val22 = load float, ptr %val21, align 4              ; <float> [#uses=1]
179   %val23 = fsub float %peakCount.01, %val22             ; <float> [#uses=2]
180   %val24 = add i32 %loPart.02, 1                ; <i32> [#uses=2]
181   br label %bb3
183 bb3:            ; preds = %bb2
184   %val25 = fcmp ogt float %val19, 2.500000e+00          ; <i1> [#uses=1]
185   br i1 %val25, label %bb2, label %bb3.bb5.preheader_crit_edge
187 bb3.bb5.preheader_crit_edge:            ; preds = %bb3
188   %val24.lcssa = phi i32 [ %val24, %bb3 ]               ; <i32> [#uses=1]
189   %val23.lcssa = phi float [ %val23, %bb3 ]             ; <float> [#uses=1]
190   %val19.lcssa = phi float [ %val19, %bb3 ]             ; <float> [#uses=1]
191   br label %bb5.preheader
193 bb5.preheader:          ; preds = %bb3.bb5.preheader_crit_edge, %bb3.preheader
194   %distERBlo.0.lcssa = phi float [ %val19.lcssa, %bb3.bb5.preheader_crit_edge ], [ %distERBlo.0.ph, %bb3.preheader ]            ; <float> [#uses=2]
195   %loPart.0.lcssa = phi i32 [ %val24.lcssa, %bb3.bb5.preheader_crit_edge ], [ %loPart.118, %bb3.preheader ]             ; <i32> [#uses=1]
196   %peakCount.0.lcssa = phi float [ %val23.lcssa, %bb3.bb5.preheader_crit_edge ], [ %peakCount.117, %bb3.preheader ]             ; <float> [#uses=2]
197   %.not10 = fcmp olt float %distERBhi.0.ph, 2.500000e+00                ; <i1> [#uses=1]
198   %val26 = icmp sgt i32 %val3, %hiPart.119              ; <i1> [#uses=1]
199   %or.cond11 = and i1 %val26, %.not10           ; <i1> [#uses=1]
200   br i1 %or.cond11, label %bb.nph12, label %bb7
202 bb.nph12:               ; preds = %bb5.preheader
203   br label %bb4
204 bb4:            ; preds = %bb5, %bb.nph12
205   %distERBhi.29 = phi float [ %val30, %bb5 ], [ %distERBhi.0.ph, %bb.nph12 ]            ; <float> [#uses=1]
206   %hiPart.08 = phi i32 [ %val31, %bb5 ], [ %hiPart.119, %bb.nph12 ]             ; <i32> [#uses=2]
207   %peakCount.27 = phi float [ %val35, %bb5 ], [ %peakCount.0.lcssa, %bb.nph12 ]         ; <float> [#uses=1]
208   %val27 = sext i32 %hiPart.08 to i64           ; <i64> [#uses=1]
209   %val28 = getelementptr float, ptr %pval1, i64 %val27          ; <ptr> [#uses=1]
210   %val29 = load float, ptr %val28, align 4              ; <float> [#uses=1]
211   %val30 = fadd float %val29, %distERBhi.29             ; <float> [#uses=3]
212   %val31 = add i32 %hiPart.08, 1                ; <i32> [#uses=4]
213   %val32 = sext i32 %val31 to i64               ; <i64> [#uses=1]
214   %val33 = getelementptr float, ptr %peakWeight, i64 %val32             ; <ptr> [#uses=1]
215   %val34 = load float, ptr %val33, align 4              ; <float> [#uses=1]
216   %val35 = fadd float %val34, %peakCount.27             ; <float> [#uses=2]
217   br label %bb5
219 bb5:            ; preds = %bb4
220   %.not = fcmp olt float %val30, 2.500000e+00           ; <i1> [#uses=1]
221   %val36 = icmp sgt i32 %val3, %val31           ; <i1> [#uses=1]
222   %or.cond = and i1 %val36, %.not               ; <i1> [#uses=1]
223   br i1 %or.cond, label %bb4, label %bb5.bb7_crit_edge
225 bb5.bb7_crit_edge:              ; preds = %bb5
226   %val35.lcssa = phi float [ %val35, %bb5 ]             ; <float> [#uses=1]
227   %val31.lcssa = phi i32 [ %val31, %bb5 ]               ; <i32> [#uses=1]
228   %val30.lcssa = phi float [ %val30, %bb5 ]             ; <float> [#uses=1]
229   br label %bb7
231 bb7:            ; preds = %bb5.bb7_crit_edge, %bb5.preheader
232   %distERBhi.2.lcssa = phi float [ %val30.lcssa, %bb5.bb7_crit_edge ], [ %distERBhi.0.ph, %bb5.preheader ]              ; <float> [#uses=2]
233   %hiPart.0.lcssa = phi i32 [ %val31.lcssa, %bb5.bb7_crit_edge ], [ %hiPart.119, %bb5.preheader ]               ; <i32> [#uses=1]
234   %peakCount.2.lcssa = phi float [ %val35.lcssa, %bb5.bb7_crit_edge ], [ %peakCount.0.lcssa, %bb5.preheader ]           ; <float> [#uses=2]
235   %val37 = fadd float %distERBlo.0.lcssa, %distERBhi.2.lcssa            ; <float> [#uses=1]
236   %val38 = fdiv float %peakCount.2.lcssa, %val37                ; <float> [#uses=1]
237   %val39 = fmul float %val38, %val1             ; <float> [#uses=2]
238   %val40 = fmul float %val39, %val39            ; <float> [#uses=2]
239   %val41 = fmul float %val40, %val40            ; <float> [#uses=1]
240   %val42 = fadd float %val41, 1.000000e+00              ; <float> [#uses=1]
241   %val43 = fdiv float 1.000000e+00, %val42              ; <float> [#uses=1]
242   %val44 = sext i32 %part.016 to i64            ; <i64> [#uses=1]
243   %val45 = getelementptr float, ptr %nrgReducePeakrate, i64 %val44              ; <ptr> [#uses=1]
244   store float %val43, ptr %val45, align 4
245   %val46 = add i32 %part.016, 1         ; <i32> [#uses=2]
246   br label %bb8
248 bb8:            ; preds = %bb7
249   %val47 = icmp slt i32 %val46, %bandEdgeIndex          ; <i1> [#uses=1]
250   br i1 %val47, label %bb, label %bb8.return_crit_edge
252 bb8.return_crit_edge:           ; preds = %bb8
253   br label %return
255 return:         ; preds = %bb8.return_crit_edge, %entry
256   ret void