2525#include " llvm/CodeGen/Analysis.h"
2626#include " llvm/CodeGen/ISDOpcodes.h"
2727#include " llvm/CodeGen/MachineFunction.h"
28- #include " llvm/CodeGen/MachineJumpTableInfo.h"
2928#include " llvm/CodeGen/MachineMemOperand.h"
3029#include " llvm/CodeGen/SelectionDAG.h"
3130#include " llvm/CodeGen/SelectionDAGNodes.h"
@@ -583,7 +582,9 @@ NVPTXTargetLowering::NVPTXTargetLowering(const NVPTXTargetMachine &TM,
583582 setOperationAction (ISD::ROTR, MVT::i8 , Expand);
584583 setOperationAction (ISD::BSWAP, MVT::i16 , Expand);
585584
586- setOperationAction (ISD::BR_JT, MVT::Other, Custom);
585+ // Indirect branch is not supported.
586+ // This also disables Jump Table creation.
587+ setOperationAction (ISD::BR_JT, MVT::Other, Expand);
587588 setOperationAction (ISD::BRIND, MVT::Other, Expand);
588589
589590 setOperationAction (ISD::GlobalAddress, MVT::i32 , Custom);
@@ -944,9 +945,6 @@ const char *NVPTXTargetLowering::getTargetNodeName(unsigned Opcode) const {
944945 MAKE_CASE (NVPTXISD::Dummy)
945946 MAKE_CASE (NVPTXISD::MUL_WIDE_SIGNED)
946947 MAKE_CASE (NVPTXISD::MUL_WIDE_UNSIGNED)
947- MAKE_CASE (NVPTXISD::BrxEnd)
948- MAKE_CASE (NVPTXISD::BrxItem)
949- MAKE_CASE (NVPTXISD::BrxStart)
950948 MAKE_CASE (NVPTXISD::Tex1DFloatS32)
951949 MAKE_CASE (NVPTXISD::Tex1DFloatFloat)
952950 MAKE_CASE (NVPTXISD::Tex1DFloatFloatLevel)
@@ -2787,8 +2785,6 @@ NVPTXTargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const {
27872785 return LowerFP_ROUND (Op, DAG);
27882786 case ISD::FP_EXTEND:
27892787 return LowerFP_EXTEND (Op, DAG);
2790- case ISD::BR_JT:
2791- return LowerBR_JT (Op, DAG);
27922788 case ISD::VAARG:
27932789 return LowerVAARG (Op, DAG);
27942790 case ISD::VASTART:
@@ -2814,41 +2810,6 @@ NVPTXTargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const {
28142810 }
28152811}
28162812
2817- SDValue NVPTXTargetLowering::LowerBR_JT (SDValue Op, SelectionDAG &DAG) const {
2818- SDLoc DL (Op);
2819- SDValue Chain = Op.getOperand (0 );
2820- const auto *JT = cast<JumpTableSDNode>(Op.getOperand (1 ));
2821- SDValue Index = Op.getOperand (2 );
2822-
2823- unsigned JId = JT->getIndex ();
2824- MachineJumpTableInfo *MJTI = DAG.getMachineFunction ().getJumpTableInfo ();
2825- ArrayRef<MachineBasicBlock *> MBBs = MJTI->getJumpTables ()[JId].MBBs ;
2826-
2827- SDValue IdV = DAG.getConstant (JId, DL, MVT::i32 );
2828-
2829- // Generate BrxStart node
2830- SDVTList VTs = DAG.getVTList (MVT::Other, MVT::Glue);
2831- Chain = DAG.getNode (NVPTXISD::BrxStart, DL, VTs, Chain, IdV);
2832-
2833- // Generate BrxItem nodes
2834- assert (!MBBs.empty ());
2835- for (MachineBasicBlock *MBB : MBBs.drop_back ())
2836- Chain = DAG.getNode (NVPTXISD::BrxItem, DL, VTs, Chain.getValue (0 ),
2837- DAG.getBasicBlock (MBB), Chain.getValue (1 ));
2838-
2839- // Generate BrxEnd nodes
2840- SDValue EndOps[] = {Chain.getValue (0 ), DAG.getBasicBlock (MBBs.back ()), Index,
2841- IdV, Chain.getValue (1 )};
2842- SDValue BrxEnd = DAG.getNode (NVPTXISD::BrxEnd, DL, VTs, EndOps);
2843-
2844- return BrxEnd;
2845- }
2846-
2847- // This will prevent AsmPrinter from trying to print the jump tables itself.
2848- unsigned NVPTXTargetLowering::getJumpTableEncoding () const {
2849- return MachineJumpTableInfo::EK_Inline;
2850- }
2851-
28522813// This function is almost a copy of SelectionDAG::expandVAArg().
28532814// The only diff is that this one produces loads from local address space.
28542815SDValue NVPTXTargetLowering::LowerVAARG (SDValue Op, SelectionDAG &DAG) const {
0 commit comments