Hi all,<br>I have problem with ExtractCodeRegion (CodeExtractor.cpp).<br>My original program is as follows.<br>bb:<br> ...<br> %tmp.15 = load %struct.MYSQL_ROWS** %3, align 4<br> ...<br>bb1:<br> ...<br> %tmp.1 = load %struct.MYSQL_ROWS** %6, align 4<br>
...<br>bb4: ; preds = %bb1, %bb, %entry<br> %tmp.0 = phi %struct.MYSQL_ROWS* [ null, %entry ], [ %tmp.15, %bb ], [ %tmp.1, %bb1 ]<br><br>%tmp.0 is the PHINode whose value is from entry, bb and bb1.<br>
After extracting bb and bb1 into new function, the program becomes<br><br>codeRepl: ; preds = %entry<br> call void @mysql_data_seek_bb(%struct.MYSQL_DATA* %1, i64 %row, %struct.MYSQL_ROWS** %tmp.15.loc, %struct.MYSQL_ROWS** %tmp.1.loc)<br>
<b> %tmp.15.reload = load %struct.MYSQL_ROWS** %tmp.15.loc<br> %tmp.1.reload = load %struct.MYSQL_ROWS** %tmp.1.loc<br></b> br label %bb4<br><br>bb4: ; preds = %codeRepl, %entry<br>
<b> %tmp.0 = phi %struct.MYSQL_ROWS* [ null, %entry ], [ %tmp.15.reload, %codeRepl ], [ %tmp.1.reload, %codeRepl ]<br><br></b>bb4 now has only 2 predecessors since bb and bb1 are replaced by codeRepl.<br>The PHINode in bb4, on the other hand, still has 3 incoming values and that make the assertion failed.<br>
I do want to extract this code region into function. Does anyone have a solution for this?<br>Thanks a lot.<br>Vu<br><br><br><br><br><br>