The getValue() in Pass.cpp can't tell whether a value comes from existing values from LHS or from the newly synthesized instructions. The getValue() creates a new LLVM value for each instruction in RHS, even when the instruction is harvested as cand from LHS. This brings the dup instructions in the result IR. When the cand contains phi, souper crashes.
yes, this totally makes sense, I wrote that code at a time when CEGIS was incapable of reusing LHS components on the RHS, but did not think to document this silly limitation. thanks!
The getValue() in Pass.cpp can't tell whether a value comes from existing values from LHS or from the newly synthesized instructions. The getValue() creates a new LLVM value for each instruction in RHS, even when the instruction is harvested as cand from LHS. This brings the dup instructions in the result IR. When the cand contains phi, souper crashes.
I'll get it fixed soon.