[PATCH] D129268: Legalise patchpoint arguments.

Matt Arsenault via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 11 11:45:09 PDT 2022


arsenm added inline comments.


================
Comment at: llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp:5526-5527
+
+  if (Op->getOpcode() == ISD::Constant) {
+    ConstantSDNode *CN = cast<ConstantSDNode>(Op);
+    EVT Ty = Op.getValueType();
----------------
vext01 wrote:
> arsenm wrote:
> > dyn_cast to ConstantSDNode
> Forgive me. I'm still fairly new to C++, am I doing this right?
> 
> ```diff
> diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
> index 4ee4ece7d8ef..89c0738f24b0 100644
> --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
> +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
> @@ -5547,8 +5547,7 @@ SDValue DAGTypeLegalizer::ExpandIntOp_STACKMAP(SDNode *N, unsigned OpNo) {
>    for (unsigned I = 0; I < OpNo; I++)
>      NewOps.push_back(N->getOperand(I));
>  
> -  if (Op->getOpcode() == ISD::Constant) {
> -    ConstantSDNode *CN = cast<ConstantSDNode>(Op);
> +  if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(Op)) {
>      EVT Ty = Op.getValueType();
>      if (CN->getConstantIntValue()->getValue().getActiveBits() < 64) {
>        NewOps.push_back(
> @@ -5587,8 +5586,7 @@ SDValue DAGTypeLegalizer::ExpandIntOp_PATCHPOINT(SDNode *N, unsigned OpNo) {
>    for (unsigned I = 0; I < OpNo; I++)
>      NewOps.push_back(N->getOperand(I));
>  
> -  if (Op->getOpcode() == ISD::Constant) {
> -    ConstantSDNode *CN = cast<ConstantSDNode>(Op);
> +  if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(Op)) {
>      EVT Ty = Op.getValueType();
>      if (CN->getConstantIntValue()->getValue().getActiveBits() < 64) {
>        NewOps.push_back(
> diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
> index 25105ee2dbde..0dae6a06ef72 100644
> --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
> +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
> @@ -2201,12 +2201,11 @@ void SelectionDAGISel::pushStackMapLiveVariable(SmallVectorImpl<SDValue> &Ops,
>    // nodes at DAG-construction time.
>    assert(OpNode->getOpcode() != ISD::FrameIndex);
>  
> -  if (OpNode->getOpcode() == ISD::Constant) {
> +  if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(OpNode)) {
>      Ops.push_back(
>          CurDAG->getTargetConstant(StackMaps::ConstantOp, DL, MVT::i64));
>      Ops.push_back(
> -        CurDAG->getTargetConstant(cast<ConstantSDNode>(OpNode)->getZExtValue(),
> -                                  DL, OpVal.getValueType()));
> +        CurDAG->getTargetConstant(CN->getZExtValue(), DL, OpVal.getValueType()));
>    } else {
>      Ops.push_back(OpVal);
>    }
> ```
> 
> This makes tests fail, so can't be equivalent.
The slight difference is ConstantSDNode accepts Constant and TargetConstant but I would expect consistency at this point


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

https://reviews.llvm.org/D129268



More information about the llvm-commits mailing list