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>