<div dir="ltr"><div>Hi</div><div>I am writing a pattern to select ushr+or into usra on AArch64. I changed the following pattern from add to add_and_or_is_add. One test case test/CodeGen/AArch64/GlobalISel/combine-udiv.ll that uses global isel starts to fail and what was selected into usra is now selected into ushr+add. This only happens in global isel, how can i debug this ?<br></div><div><br></div><div><div>6471 defm USRA     : SIMDScalarRShiftDTied<   1, 0b00010, "usra",<br>6472     TriOpFrag<(add_and_or_is_add /* changed from add */ node:$LHS,<br>6473                    (AArch64vlshr node:$MHS, node:$RHS))>>;<br></div><div><br></div></div><div>6345 // Match add node and also treat an 'or' node is as an 'add' if the or'ed operands<br>6346 // have no common bits.<br>6347 def add_and_or_is_add : PatFrags<(ops node:$lhs, node:$rhs),<br>6348                          [(add node:$lhs, node:$rhs), (or node:$lhs, node:$rhs)],[{<br>6349    if (N->getOpcode() == ISD::ADD)<br>6350      return true;<br>6351    return CurDAG->haveNoCommonBitsSet(N->getOperand(0), N->getOperand(1));<br>6352 }]>;<br></div><div><br></div><div><div>Thanks </div><div>-Adrian</div><div><br class="gmail-Apple-interchange-newline"></div></div></div>