[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