How can  I prevent some nodes from being combined in DAGCombine.cpp?<br><br>Maybe what I want to do below doesn't follow the philosophy of LLVM, but I'd like to know if there is any way to avoid node from being combined. TargetLowering::PerformDAGCombine() is only called if DAGCombiner cannot combine a specific node. It seems that there is no chance to stop it from combining a node.<br>
<br>I need the shuffle mask in the machine instruction but sometimes if a vector_shuffle can only return LHS or RHS, it's removed/combined so that I cannot match vector_shuffle in the instruction selector.<br><br>If the vector_shuffle is combined, I have to write the instruction selector like these:<br>
<br>def SUBvv: MyInst<(ins REG:$src0, imm:$mask0, REG:$src1, imm:$mask1),<br>           [sub (vector_shuffle REG:$src0, REG:$src0, imm:$mask0),<br>           (vector_shuffle REG:$src1, REG:$src1, imm:$mask1)]<br><br>def SUBrv: MyInst<(ins REG:$src0, REG:$src1, imm:$mask1),<br>
           [sub REG:$src0,<br>                (vector_shuffle REG:$src1, REG:$src1, imm:$mask1)]<br><br>def SUBvr: MyInst<(ins REG:$src0, imm:$mask0, REG:$src1),<br>           [sub (vector_shuffle REG:$src0, REG:$src0, imm:$mask0),<br>
                REG:$src1)]<br>
<br>Otherwise, I can write:<br><br>def SUB: MyInst<(ins REG:$src0, imm:$mask0, REG:$src1, imm:$mask1),<br>
           [sub (vector_shuffle REG:$src0, REG:$src0, imm:$mask0),<br>
           (vector_shuffle REG:$src1, REG:$src1, imm:$mask1)]<br>
<br>And processing MachineInstr will be easier since the operand index of writemask is always the same for all instructions.<br>