hi Tim,guys,
it was regarding splitting 16-bit ADDC to two 8-bit ADDC+ADDE.
the 8-bit ADDE instruction is defined as:
let Constraints="$dst=$op0",mayStore=1,
hasSideEffects=0,neverHasSideEffects=1 in
def ADDErm: myInstr
<0x0,
(outs Intregs:$dst) (ins Intregs:$op0,MEMi:$op1),
"",
[set IntRegs:$dest (adde IntRegs:$op0, (load ADDRi:$op1))]
very unlucky, this instruction failed.
in the generated match table, there was flag OPFL_Chain.
it caused a token factor node to be created in switch case
OPC_EmitMergeInputChains in SelectCodeCommon.
very bad, all uses of input chain was replaced with ADDErm Node.
so the created token factor node depends on the ADDErm node after the
replacement.
very bad the ADDCrm node depends on above token factor.
because of the glue, a cycle formed. ADDE-->ADDC-->TF-->ADDE.
after I removed the flag OPFL_Chain in the match table, the problem was
gone.
So, my question was obvious:how could I make the table gen tool not add
the said flag?
thanks
hilbert