@@ -1209,23 +1209,27 @@ T2C_OP(cbeqz, {
12091209 LLVMBasicBlockRef taken = LLVMAppendBasicBlock (start , "taken" );
12101210 LLVMBuilderRef builder2 = LLVMCreateBuilder ();
12111211 LLVMPositionBuilderAtEnd (builder2 , taken );
1212- if (ir -> branch_taken )
1212+ if (ir -> branch_taken &&
1213+ t2c_check_valid_blk (rv , block , ir -> branch_taken -> pc )) {
12131214 * taken_builder = builder2 ;
1214- else {
1215+ } else {
12151216 T2C_LLVM_GEN_STORE_IMM32 (builder2 , ir -> pc + ir -> imm , addr_PC );
12161217 T2C_STORE_TIMER (builder2 , start , insn_counter );
12171218 LLVMBuildRetVoid (builder2 );
1219+ LLVMDisposeBuilder (builder2 );
12181220 }
12191221
12201222 LLVMBasicBlockRef untaken = LLVMAppendBasicBlock (start , "untaken" );
12211223 LLVMBuilderRef builder3 = LLVMCreateBuilder ();
12221224 LLVMPositionBuilderAtEnd (builder3 , untaken );
1223- if (ir -> branch_untaken )
1225+ if (ir -> branch_untaken &&
1226+ t2c_check_valid_blk (rv , block , ir -> branch_untaken -> pc )) {
12241227 * untaken_builder = builder3 ;
1225- else {
1228+ } else {
12261229 T2C_LLVM_GEN_STORE_IMM32 (builder3 , ir -> pc + 2 , addr_PC );
12271230 T2C_STORE_TIMER (builder3 , start , insn_counter );
12281231 LLVMBuildRetVoid (builder3 );
1232+ LLVMDisposeBuilder (builder3 );
12291233 }
12301234 LLVMBuildCondBr (* builder , cmp , taken , untaken );
12311235})
@@ -1237,23 +1241,27 @@ T2C_OP(cbnez, {
12371241 LLVMBasicBlockRef taken = LLVMAppendBasicBlock (start , "taken" );
12381242 LLVMBuilderRef builder2 = LLVMCreateBuilder ();
12391243 LLVMPositionBuilderAtEnd (builder2 , taken );
1240- if (ir -> branch_taken )
1244+ if (ir -> branch_taken &&
1245+ t2c_check_valid_blk (rv , block , ir -> branch_taken -> pc )) {
12411246 * taken_builder = builder2 ;
1242- else {
1247+ } else {
12431248 T2C_LLVM_GEN_STORE_IMM32 (builder2 , ir -> pc + ir -> imm , addr_PC );
12441249 T2C_STORE_TIMER (builder2 , start , insn_counter );
12451250 LLVMBuildRetVoid (builder2 );
1251+ LLVMDisposeBuilder (builder2 );
12461252 }
12471253
12481254 LLVMBasicBlockRef untaken = LLVMAppendBasicBlock (start , "untaken" );
12491255 LLVMBuilderRef builder3 = LLVMCreateBuilder ();
12501256 LLVMPositionBuilderAtEnd (builder3 , untaken );
1251- if (ir -> branch_untaken )
1257+ if (ir -> branch_untaken &&
1258+ t2c_check_valid_blk (rv , block , ir -> branch_untaken -> pc )) {
12521259 * untaken_builder = builder3 ;
1253- else {
1260+ } else {
12541261 T2C_LLVM_GEN_STORE_IMM32 (builder3 , ir -> pc + 2 , addr_PC );
12551262 T2C_STORE_TIMER (builder3 , start , insn_counter );
12561263 LLVMBuildRetVoid (builder3 );
1264+ LLVMDisposeBuilder (builder3 );
12571265 }
12581266 LLVMBuildCondBr (* builder , cmp , taken , untaken );
12591267})
@@ -1683,6 +1691,7 @@ T2C_OP(fuse12, {
16831691 T2C_LLVM_GEN_STORE_IMM32 (builder2 , ir -> pc + 4 + ir -> imm2 , addr_PC );
16841692 T2C_STORE_TIMER (builder2 , start , insn_counter );
16851693 LLVMBuildRetVoid (builder2 );
1694+ LLVMDisposeBuilder (builder2 );
16861695 }
16871696 LLVMBasicBlockRef untaken = LLVMAppendBasicBlock (start , "untaken" );
16881697 LLVMBuilderRef builder3 = LLVMCreateBuilder ();
@@ -1695,6 +1704,7 @@ T2C_OP(fuse12, {
16951704 T2C_LLVM_GEN_STORE_IMM32 (builder3 , ir -> pc + 8 , addr_PC );
16961705 T2C_STORE_TIMER (builder3 , start , insn_counter );
16971706 LLVMBuildRetVoid (builder3 );
1707+ LLVMDisposeBuilder (builder3 );
16981708 }
16991709 LLVMBuildCondBr (* builder , cmp , taken , untaken );
17001710})
0 commit comments