================
@@ -548,6 +578,65 @@ bool WebAssemblyDAGToDAGISel::SelectAddrOperands64(SDValue 
Op, SDValue &Offset,
   return SelectAddrOperands(MVT::i64, WebAssembly::CONST_I64, Op, Offset, 
Addr);
 }
 
+static MemSDNode *findMemSDNode(SDNode *N) {
+  while (N) {
+    if (auto *MemNode = dyn_cast<MemSDNode>(N))
+      return MemNode;
+    switch (N->getOpcode()) {
+    case ISD::ZERO_EXTEND:
+    case ISD::SIGN_EXTEND:
+    case ISD::ANY_EXTEND:
+    case ISD::SIGN_EXTEND_INREG:
+    case ISD::AssertZext:
+    case ISD::AssertSext:
+    case ISD::TRUNCATE:
+    case ISD::BITCAST:
+    case ISD::AND:
+      N = N->getOperand(0).getNode();
+      break;
+    default:
+      return nullptr;
+    }
----------------
dschuff wrote:

The root can be anything that the pattern matches (in this case 
AtomicAddrOps32). And it matches the whole set of complex patterns (e.g. the 
AtomicAddrOps fragment is included in the AtomicLoadPat pattern which is 
included in the zext_aload_8_64 pattern, which matches a zext of an atomic 
load. So in that case we'd get ISD::ZERO_EXTEND here. So I don't know of a way 
to enumerate all the possibilities. I looked through the patterns and didn't 
see anything there that's not listed here, but I don't see e.g. bitcast in 
there (but it still seems worth having here). And even worse, the possibilities 
can change if we add or change the patterns :/


https://github.com/llvm/llvm-project/pull/184900
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to