[PATCH] D151449: [RISCV] Add DAG combine for CTTZ/CTLZ in the case of input 0
    Craig Topper via Phabricator via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Mon Jun 26 12:46:02 PDT 2023
    
    
  
craig.topper added inline comments.
================
Comment at: llvm/lib/Target/RISCV/RISCVISelLowering.cpp:11427
+
+  // This represents eihter CTTZ or CTLZ instruction.
+  SDValue CTZ;
----------------
eiher -> either
================
Comment at: llvm/lib/Target/RISCV/RISCVISelLowering.cpp:11429
+  SDValue CTZ;
+
+  SDValue ValOnZero;
----------------
mgudim wrote:
> Suggestion: I would use `Count` or `CountZeroes`. On ARM `CTZ` means `CTTZ`.
I agree. ctz is also the trailing zero instruction on RISC-V.
================
Comment at: llvm/lib/Target/RISCV/RISCVISelLowering.cpp:11449
+
+  if (CTZ.getOpcode() == ISD::TRUNCATE || CTZ.getOpcode() == ISD::ZERO_EXTEND)
+    CTZ = CTZ.getOperand(0);
----------------
Do we need to guard against truncating to a type that can't represent the entire bitwidth. Or does that just workout because the AND we create would be all ones in that case?
================
Comment at: llvm/lib/Target/RISCV/RISCVISelLowering.cpp:11459
+
+  SDValue LHS = Cond->getOperand(0);
+  SDValue CTZArgument = CTZ->getOperand(0);
----------------
No need for `LHS` just put `Cond->getOperand(0)` into the `if`
================
Comment at: llvm/lib/Target/RISCV/RISCVISelLowering.cpp:11465
+
+  SDValue CTZZeroDef;
+  switch (CTZ.getOpcode()) {
----------------
Do we need a new variable? Can we assign over CTZ for the _UNDEF cases?
================
Comment at: llvm/lib/Target/RISCV/RISCVISelLowering.cpp:11490
+
+  if (CTZZeroDef.getValueType() == N->getValueType(0))
+    return AndNode;
----------------
This if is unnecessary, getZExtOrtrunc will take care of it.
CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D151449/new/
https://reviews.llvm.org/D151449
    
    
More information about the llvm-commits
mailing list