[PATCH] D155101: [RISCV] Fold ops into vmv.v.v as vmerge with all-ones mask
    Philip Reames via Phabricator via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Thu Jul 13 12:59:34 PDT 2023
    
    
  
reames requested changes to this revision.
reames added a comment.
This revision now requires changes to proceed.
Generally much better than the alternative, but needs a bit of restructuring.
================
Comment at: llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp:3241
+                                       AllOnesMask, SDValue());
+  SDValue Mask = DAG->getRegister(RISCV::V0, MaskVT);
+
----------------
Creating a new vmset here is bad if the caller ends up returning.
You can leave the Merge as an uninitialized SDValue, and lazily create the alls ones mask on demand if needed.
================
Comment at: llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp:3265
+  // mask.
+  if (!getVMergeOpsFromVMv(N, CurDAG, VMergeOps))
+    VMergeOps = SmallVector<SDValue>(N->ops());
----------------
This structure is really hard to read.
If you handle the vmerge case inside the helper, you can just unconditionally return the ops array.
Repository:
  rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D155101/new/
https://reviews.llvm.org/D155101
    
    
More information about the llvm-commits
mailing list