[llvm] r358194 - New document skeleton describing how to add a constrained floating-point

Kevin P. Neal via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 11 10:16:03 PDT 2019


Author: kpn
Date: Thu Apr 11 10:16:03 2019
New Revision: 358194

URL: http://llvm.org/viewvc/llvm-project?rev=358194&view=rev
Log:
New document skeleton describing how to add a constrained floating-point
intrinsic.

Reviewed by:	andrew.w.kaylor, cameron.mcinally
Differential Revision:	https://reviews.llvm.org/D59833

Added:
    llvm/trunk/docs/AddingConstrainedIntrinsics.rst
Modified:
    llvm/trunk/docs/index.rst

Added: llvm/trunk/docs/AddingConstrainedIntrinsics.rst
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/AddingConstrainedIntrinsics.rst?rev=358194&view=auto
==============================================================================
--- llvm/trunk/docs/AddingConstrainedIntrinsics.rst (added)
+++ llvm/trunk/docs/AddingConstrainedIntrinsics.rst Thu Apr 11 10:16:03 2019
@@ -0,0 +1,94 @@
+==================================================
+How To Add A Constrained Floating-Point Intrinsic
+==================================================
+
+.. contents::
+   :local:
+
+.. warning::
+  This is a work in progress.
+
+Add the intrinsic
+=================
+
+Multiple files need to be updated when adding a new constrained intrinsic.
+
+Add the new intrinsic to the table of intrinsics.::
+
+  include/llvm/IR/Intrinsics.td
+
+Update class ConstrainedFPIntrinsic to know about the intrinsics.::
+
+  include/llvm/IR/IntrinsicInst.h
+
+Functions like ConstrainedFPIntrinsic::isUnaryOp() or
+ConstrainedFPIntrinsic::isTernaryOp() may need to know about the new
+intrinsic.::
+
+  lib/IR/IntrinsicInst.cpp
+
+Update the IR verifier::
+
+  lib/IR/Verifier.cpp
+
+Add SelectionDAG node types
+===========================
+
+Add the new STRICT version of the node type to the ISD::NodeType enum.::
+
+  include/llvm/CodeGen/ISDOpcodes.h
+
+In class SDNode update isStrictFPOpcode()::
+
+  include/llvm/CodeGen/SelectionDAGNodes.h
+
+A mapping from the STRICT SDnode type to the non-STRICT is done in
+TargetLoweringBase::getStrictFPOperationAction(). This allows STRICT
+nodes to be legalized similarly to the non-STRICT node type.::
+
+  include/llvm/CodeGen/TargetLowering.h
+
+Building the SelectionDAG
+-------------------------
+
+The switch statement in SelectionDAGBuilder::visitIntrinsicCall() needs
+to be updated to call SelectionDAGBuilder::visitConstrainedFPIntrinsic().
+That function, in turn, needs to be updated to know how to create the
+SDNode for the intrinsic. The new STRICT node will eventually be converted
+to the matching non-STRICT node. For this reason it should have the same
+operands and values as the non-STRICT version but should also use the chain.
+This makes subsequent sharing of code for STRICT and non-STRICT code paths
+easier.::
+
+  lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
+
+Most of the STRICT nodes get legalized the same as their matching non-STRICT
+counterparts. A new STRICT node with this property must get added to the
+switch in SelectionDAGLegalize::LegalizeOp().::
+
+  lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
+
+Other parts of the legalizer may need to be updated as well. Look for
+places where the non-STRICT counterpart is legalized and update as needed.
+Be careful of the chain since STRICT nodes use it but their counterparts
+often don't.::
+
+The code to do the conversion or mutation of the STRICT node to a non-STRICT
+version of the node happens in SelectionDAG::mutateStrictFPToFP(). Be
+careful updating this function since some nodes have the same return type
+as their input operand, but some are different. Both of these cases must
+be properly handled.::
+
+  lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+
+To make debug logs readable it is helpful to update the SelectionDAG's
+debug logger:::
+
+  lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp
+
+Add documentation and tests
+===========================
+
+::
+
+  docs/LangRef.rst

Modified: llvm/trunk/docs/index.rst
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/index.rst?rev=358194&r1=358193&r2=358194&view=diff
==============================================================================
--- llvm/trunk/docs/index.rst (original)
+++ llvm/trunk/docs/index.rst Thu Apr 11 10:16:03 2019
@@ -267,6 +267,7 @@ For API clients and LLVM developers.
    Bugpoint
    CodeGenerator
    ExceptionHandling
+   AddingConstrainedIntrinsics
    LinkTimeOptimization
    SegmentedStacks
    TableGenFundamentals
@@ -345,6 +346,10 @@ For API clients and LLVM developers.
    This document describes the design and implementation of exception handling
    in LLVM.
 
+:doc:`AddingConstrainedIntrinsics`
+   Gives the steps necessary when adding a new constrained math intrinsic
+   to LLVM.
+
 :doc:`Bugpoint`
    Automatic bug finder and test-case reducer description and usage
    information.




More information about the llvm-commits mailing list