There have been some useful replies to my question. In particular, Eli Friedman explained that my change to LegalizeDAG.cpp was wrong and suggested that I use a MERGE_VALUES node in ARMISelLowering.cpp.
Unfortunately, that hasn't solved the problem I was having. I still get the same old assertion failure: "#operands for dag node doesn't match .td file!"
However, here's an updated version of the patch, for the record.
read_world.patch (5.21 KB)