From 65f92b2a6d4c8033fbcf773775c0f239f4fd9c29 Mon Sep 17 00:00:00 2001 From: LiXiaoQi Date: Fri, 28 Oct 2022 13:45:02 +0800 Subject: [PATCH] update README for TA to debug --- README.md | 24 +- tests/3-ir-gen/testcases/lv3/complex4.ll | 581 +++++++++++++++++++++++ 2 files changed, 602 insertions(+), 3 deletions(-) create mode 100644 tests/3-ir-gen/testcases/lv3/complex4.ll diff --git a/README.md b/README.md index 9e8d769..7288fa2 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,18 @@ +# 重现问题 + +- 构建`cminusfc` + +- ``` + $ # at path `2022fall-compiler_cminus` + $ cd tests/3-ir-gen/testcases/lv3/ + $ cminusfc complex4.cminus + terminate called after throwing an instance of 'std::out_of_range' + what(): basic_string::erase: __pos (which is 18446744073709551615) > this->size() (which is 8) + [1] 22357 IOT instruction (core dumped) cminusfc complex4.cminus + ``` + +- + # 实验说明 请 fork 此 repo 到自己的仓库下,随后在自己的仓库中完成实验,请确保自己的 repo 为 Private。 @@ -5,13 +20,16 @@ ## 目前已布置的实验 * [lab1](./Documentations/1-parser/) - + DDL:2022-10-03 23:59:59 (UTC+8) + + DDL:2022-10-03 23:59:59 (UTC+8) + * [lab2](./Documentations/2-ir-gen-warmup/) - + DDL:2022-10-23 23:59:59 (UTC+8) + + + DDL:2022-10-23 23:59:59 (UTC+8) * [lab3](./Documentations/3-ir-gen/) - + DDL:2022-11-07 23:59:59 (UTC+8) + + + DDL:2022-11-07 23:59:59 (UTC+8) ## FAQ: How to merge upstream remote branches diff --git a/tests/3-ir-gen/testcases/lv3/complex4.ll b/tests/3-ir-gen/testcases/lv3/complex4.ll new file mode 100644 index 0000000..30f0ce5 --- /dev/null +++ b/tests/3-ir-gen/testcases/lv3/complex4.ll @@ -0,0 +1,581 @@ +; 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 +} -- GitLab