[PATCH] D124438: [RISCV] Support VP_SETCC mask operations

WangLian via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 27 00:57:50 PDT 2022


Jimerlife marked an inline comment as done.
Jimerlife added inline comments.


================
Comment at: llvm/lib/Target/RISCV/RISCVISelLowering.cpp:6289
+  }
+  case ISD::SETLT:
+  case ISD::SETULT: {
----------------
craig.topper wrote:
> I don't think these are correct. Here's the equivalent code for regular setcc
> 
> ```
>     case ISD::SETGT:  // X >s Y   -->  X == 0 & Y == 1  -->  ~X & Y
>     case ISD::SETULT: // X <u Y   -->  X == 0 & Y == 1  -->  ~X & Y
>       Temp = DAG.getNOT(dl, N0, OpVT);
>       N0 = DAG.getNode(ISD::AND, dl, OpVT, N1, Temp);
>       if (!DCI.isCalledByLegalizer())
>         DCI.AddToWorklist(Temp.getNode());
>       break;
>     case ISD::SETLT:  // X <s Y   --> X == 1 & Y == 0  -->  ~Y & X
>     case ISD::SETUGT: // X >u Y   --> X == 1 & Y == 0  -->  ~Y & X
>       Temp = DAG.getNOT(dl, N1, OpVT);
>       N0 = DAG.getNode(ISD::AND, dl, OpVT, N0, Temp);
>       if (!DCI.isCalledByLegalizer())
>         DCI.AddToWorklist(Temp.getNode());
>       break;
>     case ISD::SETULE: // X <=u Y  --> X == 0 | Y == 1  -->  ~X | Y
>     case ISD::SETGE:  // X >=s Y  --> X == 0 | Y == 1  -->  ~X | Y
>       Temp = DAG.getNOT(dl, N0, OpVT);
>       N0 = DAG.getNode(ISD::OR, dl, OpVT, N1, Temp);
>       if (!DCI.isCalledByLegalizer())
>         DCI.AddToWorklist(Temp.getNode());
>       break;
>     case ISD::SETUGE: // X >=u Y  --> X == 1 | Y == 0  -->  ~Y | X
>     case ISD::SETLE:  // X <=s Y  --> X == 1 | Y == 0  -->  ~Y | X
>       Temp = DAG.getNOT(dl, N1, OpVT);
>       N0 = DAG.getNode(ISD::OR, dl, OpVT, N0, Temp);
>       break;
>     }
> ```
I have adjusted code according to regular setcc. Thanks for your advice.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D124438/new/

https://reviews.llvm.org/D124438



More information about the llvm-commits mailing list