; ModuleID = 'cminus' source_filename = "complex4.cminus" declare i32 @input() declare void @output(i32) declare void @outputFloat(float) declare void @neg_idx_except() define float @get(float* %arg0, i32 %arg1, i32 %arg2, i32 %arg3) { label_entry: %op4 = alloca float* store float* %arg0, float** %op4 %op5 = alloca i32 store i32 %arg1, i32* %op5 %op6 = alloca i32 store i32 %arg2, i32* %op6 %op7 = alloca i32 store i32 %arg3, i32* %op7 %op8 = load i32, i32* %op5 %op9 = load i32, i32* %op7 %op10 = mul i32 %op8, %op9 %op11 = load i32, i32* %op6 %op12 = add i32 %op10, %op11 %op13 = icmp slt i32 %op12, 0 br i1 %op13, label %label14, label %label15 label14: ; preds = %label_entry call void @neg_idx_except() br label %label15 label15: ; preds = %label_entry, %label14 %op16 = load float*, float** %op4 %op17 = getelementptr float, float* %op16, i32 %op12 %op18 = load float, float* %op17 ret float %op18 } define float @abs(float %arg0) { label_entry: %op1 = alloca float store float %arg0, float* %op1 %op2 = load float, float* %op1 %op3 = sitofp i32 0 to float %op4 = fcmp ugt float %op2,%op3 br i1 %op4, label %label5, label %label8 label5: ; preds = %label_entry %op6 = load float, float* %op1 ret float %op6 br label %label7 label7: ; preds = %label5, %label8 ret float 0x0 label8: ; preds = %label_entry %op9 = load float, float* %op1 %op10 = sitofp i32 0 to float %op11 = fsub float %op10, %op9 ret float %op11 br label %label7 } define float @isZero(float %arg0) { label_entry: %op1 = alloca float store float %arg0, float* %op1 %op2 = load float, float* %op1 %op3 = call float @abs(float %op2) %op4 = fcmp ult float %op3,0x3eb0c6f7a0000000 %op5 = sitofp i1 %op4 to float ret float %op5 } define i32 @gauss(float* %arg0, float* %arg1, i32 %arg2) { label_entry: %op3 = alloca float* store float* %arg0, float** %op3 %op4 = alloca float* store float* %arg1, float** %op4 %op5 = alloca i32 store i32 %arg2, i32* %op5 %op6 = alloca i32 %op7 = alloca i32 %op8 = alloca i32 %op9 = alloca i32 %op10 = alloca i32 %op11 = alloca i32 %op12 = alloca i32 %op13 = load i32, i32* %op5 %op14 = add i32 %op13, 1 store i32 %op14, i32* %op9 store i32 0, i32* %op6 br label %label15 label15: ; preds = %label_entry, %label24 %op16 = load i32, i32* %op6 %op17 = load i32, i32* %op5 %op18 = icmp slt i32 %op16, %op17 br i1 %op18, label %label19, label %label22 label19: ; preds = %label15 %op20 = load i32, i32* %op6 %op21 = icmp slt i32 %op20, 0 br i1 %op21, label %label23, label %label24 label22: ; preds = %label15 store i32 0, i32* %op11 store i32 0, i32* %op8 br label %label30 label23: ; preds = %label19 call void @neg_idx_except() br label %label24 label24: ; preds = %label19, %label23 %op25 = load float*, float** %op3 %op26 = getelementptr float, float* %op25, i32 %op20 %op27 = sitofp i32 0 to float store float %op27, float* %op26 %op28 = load i32, i32* %op6 %op29 = add i32 %op28, 1 store i32 %op29, i32* %op6 br label %label15 label30: ; preds = %label22, %label122 %op31 = load i32, i32* %op8 %op32 = load i32, i32* %op5 %op33 = icmp slt i32 %op31, %op32 br i1 %op33, label %label34, label %label38 label34: ; preds = %label30 %op35 = load i32, i32* %op8 store i32 %op35, i32* %op10 %op36 = load i32, i32* %op8 %op37 = add i32 %op36, 1 store i32 %op37, i32* %op6 br label %label41 label38: ; preds = %label30 %op39 = load i32, i32* %op5 %op40 = sub i32 %op39, 1 store i32 %op40, i32* %op6 br label %label200 label41: ; preds = %label34, %label65 %op42 = load i32, i32* %op6 %op43 = load i32, i32* %op5 %op44 = icmp slt i32 %op42, %op43 br i1 %op44, label %label45, label %label59 label45: ; preds = %label41 %op46 = load float*, float** %op4 %op47 = load i32, i32* %op6 %op48 = load i32, i32* %op11 %op49 = load i32, i32* %op9 %op50 = call float @get(float* %op46, i32 %op47, i32 %op48, i32 %op49) %op51 = call float @abs(float %op50) %op52 = load float*, float** %op4 %op53 = load i32, i32* %op10 %op54 = load i32, i32* %op11 %op55 = load i32, i32* %op9 %op56 = call float @get(float* %op52, i32 %op53, i32 %op54, i32 %op55) %op57 = call float @abs(float %op56) %op58 = fcmp ugt float %op51,%op57 br i1 %op58, label %label63, label %label65 label59: ; preds = %label41 %op60 = load i32, i32* %op10 %op61 = load i32, i32* %op8 %op62 = icmp ne i32 %op60, %op61 br i1 %op62, label %label68, label %label70 label63: ; preds = %label45 %op64 = load i32, i32* %op6 store i32 %op64, i32* %op10 br label %label65 label65: ; preds = %label45, %label63 %op66 = load i32, i32* %op6 %op67 = add i32 %op66, 1 store i32 %op67, i32* %op6 br label %label41 label68: ; preds = %label59 %op69 = load i32, i32* %op8 store i32 %op69, i32* %op7 br label %label78 label70: ; preds = %label59, %label95 %op71 = load float*, float** %op4 %op72 = load i32, i32* %op8 %op73 = load i32, i32* %op11 %op74 = load i32, i32* %op9 %op75 = call float @get(float* %op71, i32 %op72, i32 %op73, i32 %op74) %op76 = call float @isZero(float %op75) %op77 = fcmp une float %op76,0x0 br i1 %op77, label %label119, label %label127 label78: ; preds = %label68, %label112 %op79 = load i32, i32* %op7 %op80 = load i32, i32* %op9 %op81 = icmp slt i32 %op79, %op80 br i1 %op81, label %label82, label %label95 label82: ; preds = %label78 %op83 = load float*, float** %op4 %op84 = load i32, i32* %op8 %op85 = load i32, i32* %op7 %op86 = load i32, i32* %op9 %op87 = call float @get(float* %op83, i32 %op84, i32 %op85, i32 %op86) %op88 = fptosi float %op87 to i32 store i32 %op88, i32* %op12 %op89 = load i32, i32* %op8 %op90 = load i32, i32* %op9 %op91 = mul i32 %op89, %op90 %op92 = load i32, i32* %op7 %op93 = add i32 %op91, %op92 %op94 = icmp slt i32 %op93, 0 br i1 %op94, label %label96, label %label97 label95: ; preds = %label78 br label %label70 label96: ; preds = %label82 call void @neg_idx_except() br label %label97 label97: ; preds = %label82, %label96 %op98 = load float*, float** %op4 %op99 = getelementptr float, float* %op98, i32 %op93 %op100 = load float*, float** %op4 %op101 = load i32, i32* %op10 %op102 = load i32, i32* %op7 %op103 = load i32, i32* %op9 %op104 = call float @get(float* %op100, i32 %op101, i32 %op102, i32 %op103) store float %op104, float* %op99 %op105 = load i32, i32* %op10 %op106 = load i32, i32* %op9 %op107 = mul i32 %op105, %op106 %op108 = load i32, i32* %op7 %op109 = add i32 %op107, %op108 %op110 = icmp slt i32 %op109, 0 br i1 %op110, label %label111, label %label112 label111: ; preds = %label97 call void @neg_idx_except() br label %label112 label112: ; preds = %label97, %label111 %op113 = load float*, float** %op4 %op114 = getelementptr float, float* %op113, i32 %op109 %op115 = load i32, i32* %op12 %op116 = sitofp i32 %op115 to float store float %op116, float* %op114 %op117 = load i32, i32* %op7 %op118 = add i32 %op117, 1 store i32 %op118, i32* %op7 br label %label78 label119: ; preds = %label70 %op120 = load i32, i32* %op8 %op121 = sub i32 %op120, 1 store i32 %op121, i32* %op8 br label %label122 label122: ; preds = %label119, %label144 %op123 = load i32, i32* %op8 %op124 = add i32 %op123, 1 store i32 %op124, i32* %op8 %op125 = load i32, i32* %op11 %op126 = add i32 %op125, 1 store i32 %op126, i32* %op11 br label %label30 label127: ; preds = %label70 %op128 = load i32, i32* %op8 %op129 = add i32 %op128, 1 store i32 %op129, i32* %op6 br label %label130 label130: ; preds = %label127, %label159 %op131 = load i32, i32* %op6 %op132 = load i32, i32* %op5 %op133 = icmp slt i32 %op131, %op132 br i1 %op133, label %label134, label %label144 label134: ; preds = %label130 %op135 = load float*, float** %op4 %op136 = load i32, i32* %op6 %op137 = load i32, i32* %op11 %op138 = load i32, i32* %op9 %op139 = call float @get(float* %op135, i32 %op136, i32 %op137, i32 %op138) %op140 = call float @isZero(float %op139) %op141 = sitofp i32 1 to float %op142 = fsub float %op141, %op140 %op143 = fcmp une float %op142,0x0 br i1 %op143, label %label145, label %label159 label144: ; preds = %label130 br label %label122 label145: ; preds = %label134 %op146 = load float*, float** %op4 %op147 = load i32, i32* %op6 %op148 = load i32, i32* %op11 %op149 = load i32, i32* %op9 %op150 = call float @get(float* %op146, i32 %op147, i32 %op148, i32 %op149) %op151 = load float*, float** %op4 %op152 = load i32, i32* %op8 %op153 = load i32, i32* %op11 %op154 = load i32, i32* %op9 %op155 = call float @get(float* %op151, i32 %op152, i32 %op153, i32 %op154) %op156 = fdiv float %op150, %op155 %op157 = fptosi float %op156 to i32 store i32 %op157, i32* %op12 %op158 = load i32, i32* %op11 store i32 %op158, i32* %op7 br label %label162 label159: ; preds = %label134, %label173 %op160 = load i32, i32* %op6 %op161 = add i32 %op160, 1 store i32 %op161, i32* %op6 br label %label130 label162: ; preds = %label145, %label185 %op163 = load i32, i32* %op7 %op164 = load i32, i32* %op9 %op165 = icmp slt i32 %op163, %op164 br i1 %op165, label %label166, label %label173 label166: ; preds = %label162 %op167 = load i32, i32* %op6 %op168 = load i32, i32* %op9 %op169 = mul i32 %op167, %op168 %op170 = load i32, i32* %op7 %op171 = add i32 %op169, %op170 %op172 = icmp slt i32 %op171, 0 br i1 %op172, label %label174, label %label175 label173: ; preds = %label162 br label %label159 label174: ; preds = %label166 call void @neg_idx_except() br label %label175 label175: ; preds = %label166, %label174 %op176 = load float*, float** %op4 %op177 = getelementptr float, float* %op176, i32 %op171 %op178 = load i32, i32* %op6 %op179 = load i32, i32* %op9 %op180 = mul i32 %op178, %op179 %op181 = load i32, i32* %op7 %op182 = add i32 %op180, %op181 %op183 = icmp slt i32 %op182, 0 br i1 %op183, label %label184, label %label185 label184: ; preds = %label175 call void @neg_idx_except() br label %label185 label185: ; preds = %label175, %label184 %op186 = load float*, float** %op4 %op187 = getelementptr float, float* %op186, i32 %op182 %op188 = load float, float* %op187 %op189 = load float*, float** %op4 %op190 = load i32, i32* %op8 %op191 = load i32, i32* %op7 %op192 = load i32, i32* %op9 %op193 = call float @get(float* %op189, i32 %op190, i32 %op191, i32 %op192) %op194 = load i32, i32* %op12 %op195 = sitofp i32 %op194 to float %op196 = fmul float %op193, %op195 %op197 = fsub float %op188, %op196 store float %op197, float* %op177 %op198 = load i32, i32* %op7 %op199 = add i32 %op198, 1 store i32 %op199, i32* %op7 br label %label162 label200: ; preds = %label38, %label252 %op201 = load i32, i32* %op6 %op202 = icmp sge i32 %op201, 0 br i1 %op202, label %label203, label %label212 label203: ; preds = %label200 %op204 = load float*, float** %op4 %op205 = load i32, i32* %op6 %op206 = load i32, i32* %op5 %op207 = load i32, i32* %op9 %op208 = call float @get(float* %op204, i32 %op205, i32 %op206, i32 %op207) %op209 = fptosi float %op208 to i32 store i32 %op209, i32* %op12 %op210 = load i32, i32* %op6 %op211 = add i32 %op210, 1 store i32 %op211, i32* %op7 br label %label213 label212: ; preds = %label200 ret i32 0 label213: ; preds = %label203, %label239 %op214 = load i32, i32* %op7 %op215 = load i32, i32* %op5 %op216 = icmp slt i32 %op214, %op215 br i1 %op216, label %label217, label %label227 label217: ; preds = %label213 %op218 = load float*, float** %op4 %op219 = load i32, i32* %op6 %op220 = load i32, i32* %op7 %op221 = load i32, i32* %op9 %op222 = call float @get(float* %op218, i32 %op219, i32 %op220, i32 %op221) %op223 = call float @isZero(float %op222) %op224 = sitofp i32 1 to float %op225 = fsub float %op224, %op223 %op226 = fcmp une float %op225,0x0 br i1 %op226, label %label230, label %label239 label227: ; preds = %label213 %op228 = load i32, i32* %op6 %op229 = icmp slt i32 %op228, 0 br i1 %op229, label %label251, label %label252 label230: ; preds = %label217 %op231 = load i32, i32* %op12 %op232 = load float*, float** %op4 %op233 = load i32, i32* %op6 %op234 = load i32, i32* %op7 %op235 = load i32, i32* %op9 %op236 = call float @get(float* %op232, i32 %op233, i32 %op234, i32 %op235) %op237 = load i32, i32* %op7 %op238 = icmp slt i32 %op237, 0 br i1 %op238, label %label242, label %label243 label239: ; preds = %label217, %label243 %op240 = load i32, i32* %op7 %op241 = add i32 %op240, 1 store i32 %op241, i32* %op7 br label %label213 label242: ; preds = %label230 call void @neg_idx_except() br label %label243 label243: ; preds = %label230, %label242 %op244 = load float*, float** %op3 %op245 = getelementptr float, float* %op244, i32 %op237 %op246 = load float, float* %op245 %op247 = fmul float %op236, %op246 %op248 = sitofp i32 %op231 to float %op249 = fsub float %op248, %op247 %op250 = fptosi float %op249 to i32 store i32 %op250, i32* %op12 br label %label239 label251: ; preds = %label227 call void @neg_idx_except() br label %label252 label252: ; preds = %label227, %label251 %op253 = load float*, float** %op3 %op254 = getelementptr float, float* %op253, i32 %op228 %op255 = load i32, i32* %op12 %op256 = load float*, float** %op4 %op257 = load i32, i32* %op6 %op258 = load i32, i32* %op6 %op259 = load i32, i32* %op9 %op260 = call float @get(float* %op256, i32 %op257, i32 %op258, i32 %op259) %op261 = sitofp i32 %op255 to float %op262 = fdiv float %op261, %op260 store float %op262, float* %op254 %op263 = load i32, i32* %op6 %op264 = sub i32 %op263, 1 store i32 %op264, i32* %op6 br label %label200 } define void @main() { label_entry: %op0 = alloca i32 %op1 = alloca [3 x float] %op2 = alloca [12 x float] %op3 = icmp slt i32 0, 0 br i1 %op3, label %label4, label %label5 label4: ; preds = %label_entry call void @neg_idx_except() br label %label5 label5: ; preds = %label_entry, %label4 %op6 = getelementptr [12 x float], [12 x float]* %op2, i32 0, i32 0 %op7 = sitofp i32 1 to float store float %op7, float* %op6 %op8 = icmp slt i32 1, 0 br i1 %op8, label %label9, label %label10 label9: ; preds = %label5 call void @neg_idx_except() br label %label10 label10: ; preds = %label5, %label9 %op11 = getelementptr [12 x float], [12 x float]* %op2, i32 0, i32 1 %op12 = sitofp i32 2 to float store float %op12, float* %op11 %op13 = icmp slt i32 2, 0 br i1 %op13, label %label14, label %label15 label14: ; preds = %label10 call void @neg_idx_except() br label %label15 label15: ; preds = %label10, %label14 %op16 = getelementptr [12 x float], [12 x float]* %op2, i32 0, i32 2 %op17 = sitofp i32 1 to float store float %op17, float* %op16 %op18 = icmp slt i32 3, 0 br i1 %op18, label %label19, label %label20 label19: ; preds = %label15 call void @neg_idx_except() br label %label20 label20: ; preds = %label15, %label19 %op21 = getelementptr [12 x float], [12 x float]* %op2, i32 0, i32 3 %op22 = sitofp i32 1 to float store float %op22, float* %op21 %op23 = mul i32 1, 4 %op24 = add i32 %op23, 0 %op25 = icmp slt i32 %op24, 0 br i1 %op25, label %label26, label %label27 label26: ; preds = %label20 call void @neg_idx_except() br label %label27 label27: ; preds = %label20, %label26 %op28 = getelementptr [12 x float], [12 x float]* %op2, i32 0, i32 %op24 %op29 = sitofp i32 2 to float store float %op29, float* %op28 %op30 = mul i32 1, 4 %op31 = add i32 %op30, 1 %op32 = icmp slt i32 %op31, 0 br i1 %op32, label %label33, label %label34 label33: ; preds = %label27 call void @neg_idx_except() br label %label34 label34: ; preds = %label27, %label33 %op35 = getelementptr [12 x float], [12 x float]* %op2, i32 0, i32 %op31 %op36 = sitofp i32 3 to float store float %op36, float* %op35 %op37 = mul i32 1, 4 %op38 = add i32 %op37, 2 %op39 = icmp slt i32 %op38, 0 br i1 %op39, label %label40, label %label41 label40: ; preds = %label34 call void @neg_idx_except() br label %label41 label41: ; preds = %label34, %label40 %op42 = getelementptr [12 x float], [12 x float]* %op2, i32 0, i32 %op38 %op43 = sitofp i32 4 to float store float %op43, float* %op42 %op44 = mul i32 1, 4 %op45 = add i32 %op44, 3 %op46 = icmp slt i32 %op45, 0 br i1 %op46, label %label47, label %label48 label47: ; preds = %label41 call void @neg_idx_except() br label %label48 label48: ; preds = %label41, %label47 %op49 = getelementptr [12 x float], [12 x float]* %op2, i32 0, i32 %op45 %op50 = sitofp i32 3 to float store float %op50, float* %op49 %op51 = mul i32 2, 4 %op52 = add i32 %op51, 0 %op53 = icmp slt i32 %op52, 0 br i1 %op53, label %label54, label %label55 label54: ; preds = %label48 call void @neg_idx_except() br label %label55 label55: ; preds = %label48, %label54 %op56 = getelementptr [12 x float], [12 x float]* %op2, i32 0, i32 %op52 %op57 = sitofp i32 1 to float store float %op57, float* %op56 %op58 = mul i32 2, 4 %op59 = add i32 %op58, 1 %op60 = icmp slt i32 %op59, 0 br i1 %op60, label %label61, label %label62 label61: ; preds = %label55 call void @neg_idx_except() br label %label62 label62: ; preds = %label55, %label61 %op63 = getelementptr [12 x float], [12 x float]* %op2, i32 0, i32 %op59 %op64 = sitofp i32 1 to float store float %op64, float* %op63 %op65 = mul i32 2, 4 %op66 = add i32 %op65, 2 %op67 = icmp slt i32 %op66, 0 br i1 %op67, label %label68, label %label69 label68: ; preds = %label62 call void @neg_idx_except() br label %label69 label69: ; preds = %label62, %label68 %op70 = getelementptr [12 x float], [12 x float]* %op2, i32 0, i32 %op66 %op71 = sub i32 0, 2 %op72 = sitofp i32 %op71 to float store float %op72, float* %op70 %op73 = mul i32 2, 4 %op74 = add i32 %op73, 3 %op75 = icmp slt i32 %op74, 0 br i1 %op75, label %label76, label %label77 label76: ; preds = %label69 call void @neg_idx_except() br label %label77 label77: ; preds = %label69, %label76 %op78 = getelementptr [12 x float], [12 x float]* %op2, i32 0, i32 %op74 %op79 = sitofp i32 0 to float store float %op79, float* %op78 %op80 = getelementptr [3 x float], [3 x float]* %op1, i32 0, i32 0 %op81 = getelementptr [12 x float], [12 x float]* %op2, i32 0, i32 0 %op82 = call i32 @gauss(float* %op80, float* %op81, i32 3) store i32 0, i32* %op0 br label %label83 label83: ; preds = %label77, %label91 %op84 = load i32, i32* %op0 %op85 = icmp slt i32 %op84, 3 br i1 %op85, label %label86, label %label89 label86: ; preds = %label83 %op87 = load i32, i32* %op0 %op88 = icmp slt i32 %op87, 0 br i1 %op88, label %label90, label %label91 label89: ; preds = %label83 ret void label90: ; preds = %label86 call void @neg_idx_except() br label %label91 label91: ; preds = %label86, %label90 %op92 = getelementptr [3 x float], [3 x float]* %op1, i32 0, i32 %op87 %op93 = load float, float* %op92 call void @outputFloat(float %op93) %op94 = load i32, i32* %op0 %op95 = add i32 %op94, 1 store i32 %op95, i32* %op0 br label %label83 }