You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I was going to compile this primitive, fixing many bugs in the meta-compiler and bah.... BUT I arrived at a problem that is better to see in another issue.
Now the primitive "works" (store the expected value in the expected object) but it is returning a trash value:
The problem is a phi function created during tail duplication:
since we duplicate a block, then new merge points are created, and the phi should be propagated. See DRBasicBlock >> mergeInstructionsWithDuplicatedBlock: duplicatedBlock withSuccessors: successors usingUsers: getUsersBlock
this algorithm creates phis of phis based on the dominator tree (ok), and it leaves Null values if any value dominates the phi (bad).
in this case, the problem is on splitting the exitBlock, which has many predecessors.
this is a "real" problem because, in the end, a copy to Null is saved as result:
but the CodeGenerator is ignoring the copies to Null:
I was going to compile this primitive, fixing many bugs in the meta-compiler and bah.... BUT I arrived at a problem that is better to see in another issue.
Now the primitive "works" (store the expected value in the expected object) but it is returning a trash value:
The problem is a phi function created during tail duplication:
DRBasicBlock >> mergeInstructionsWithDuplicatedBlock: duplicatedBlock withSuccessors: successors usingUsers: getUsersBlock
Null
values if any value dominates the phi (bad).exitBlock
, which has many predecessors.druid/Druid/DRCogitCodeGenerator.class.st
Lines 851 to 855 in 6f8878a
ReceiverResultReg
👎The text was updated successfully, but these errors were encountered: