[LLVMdev] Update PHINode after extracting code

Vu Le vmle at ucdavis.edu
Tue Jan 25 00:33:28 PST 2011


Hi all,
I have problem with ExtractCodeRegion (CodeExtractor.cpp).
My original program is as follows.
bb:
  ...
  %tmp.15 = load %struct.MYSQL_ROWS** %3, align 4
  ...
bb1:
  ...
  %tmp.1 = load %struct.MYSQL_ROWS** %6, align 4
  ...
bb4:                                              ; preds = %bb1, %bb,
%entry
  %tmp.0 = phi %struct.MYSQL_ROWS* [ null, %entry ], [ %tmp.15, %bb ], [
%tmp.1, %bb1 ]

%tmp.0 is the PHINode whose value is from entry, bb and bb1.
After extracting bb and bb1 into new function, the program becomes

codeRepl:                                         ; preds = %entry
  call void @mysql_data_seek_bb(%struct.MYSQL_DATA* %1, i64 %row,
%struct.MYSQL_ROWS** %tmp.15.loc, %struct.MYSQL_ROWS** %tmp.1.loc)
*  %tmp.15.reload = load %struct.MYSQL_ROWS** %tmp.15.loc
  %tmp.1.reload = load %struct.MYSQL_ROWS** %tmp.1.loc
*  br label %bb4

bb4:                                              ; preds = %codeRepl,
%entry
*  %tmp.0 = phi %struct.MYSQL_ROWS* [ null, %entry ], [ %tmp.15.reload,
%codeRepl ], [ %tmp.1.reload, %codeRepl ]

*bb4 now has only 2 predecessors since bb and bb1 are replaced by codeRepl.
The PHINode in bb4, on the other hand, still has 3 incoming values and that
make the assertion failed.
I do want to extract this code region into function. Does anyone have a
solution for this?
Thanks a lot.
Vu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110125/52155bdb/attachment.html>


More information about the llvm-dev mailing list