Chris Lattner | 0a1762e | 2008-03-17 03:21:36 +0000 | [diff] [blame] | 1 | //===-- SparcISelLowering.h - Sparc DAG Lowering Interface ------*- C++ -*-===// |
| 2 | // |
| 3 | // The LLVM Compiler Infrastructure |
| 4 | // |
| 5 | // This file is distributed under the University of Illinois Open Source |
| 6 | // License. See LICENSE.TXT for details. |
| 7 | // |
| 8 | //===----------------------------------------------------------------------===// |
| 9 | // |
| 10 | // This file defines the interfaces that Sparc uses to lower LLVM code into a |
| 11 | // selection DAG. |
| 12 | // |
| 13 | //===----------------------------------------------------------------------===// |
| 14 | |
Benjamin Kramer | a7c40ef | 2014-08-13 16:26:38 +0000 | [diff] [blame] | 15 | #ifndef LLVM_LIB_TARGET_SPARC_SPARCISELLOWERING_H |
| 16 | #define LLVM_LIB_TARGET_SPARC_SPARCISELLOWERING_H |
Chris Lattner | 0a1762e | 2008-03-17 03:21:36 +0000 | [diff] [blame] | 17 | |
Chris Lattner | 0a1762e | 2008-03-17 03:21:36 +0000 | [diff] [blame] | 18 | #include "Sparc.h" |
Craig Topper | b25fda9 | 2012-03-17 18:46:09 +0000 | [diff] [blame] | 19 | #include "llvm/Target/TargetLowering.h" |
Chris Lattner | 0a1762e | 2008-03-17 03:21:36 +0000 | [diff] [blame] | 20 | |
| 21 | namespace llvm { |
Jakob Stoklund Olesen | 5ad3b35 | 2013-04-02 04:08:54 +0000 | [diff] [blame] | 22 | class SparcSubtarget; |
| 23 | |
Chris Lattner | 0a1762e | 2008-03-17 03:21:36 +0000 | [diff] [blame] | 24 | namespace SPISD { |
Matthias Braun | d04893f | 2015-05-07 21:33:59 +0000 | [diff] [blame] | 25 | enum NodeType : unsigned { |
Dan Gohman | ed1cf1a | 2008-09-23 18:42:32 +0000 | [diff] [blame] | 26 | FIRST_NUMBER = ISD::BUILTIN_OP_END, |
Jakob Stoklund Olesen | d9bbdfd | 2013-04-03 04:41:44 +0000 | [diff] [blame] | 27 | CMPICC, // Compare two GPR operands, set icc+xcc. |
Chris Lattner | 0a1762e | 2008-03-17 03:21:36 +0000 | [diff] [blame] | 28 | CMPFCC, // Compare two FP operands, set fcc. |
| 29 | BRICC, // Branch to dest on icc condition |
Jakob Stoklund Olesen | d9bbdfd | 2013-04-03 04:41:44 +0000 | [diff] [blame] | 30 | BRXCC, // Branch to dest on xcc condition (64-bit only). |
Chris Lattner | 0a1762e | 2008-03-17 03:21:36 +0000 | [diff] [blame] | 31 | BRFCC, // Branch to dest on fcc condition |
| 32 | SELECT_ICC, // Select between two values using the current ICC flags. |
Jakob Stoklund Olesen | 8cfaffa | 2013-04-04 03:08:00 +0000 | [diff] [blame] | 33 | SELECT_XCC, // Select between two values using the current XCC flags. |
Chris Lattner | 0a1762e | 2008-03-17 03:21:36 +0000 | [diff] [blame] | 34 | SELECT_FCC, // Select between two values using the current FCC flags. |
Anton Korobeynikov | 281cf24 | 2008-10-10 20:28:10 +0000 | [diff] [blame] | 35 | |
Chris Dewhurst | 69fa192 | 2016-05-04 09:33:30 +0000 | [diff] [blame] | 36 | EH_SJLJ_SETJMP, // builtin setjmp operation |
| 37 | EH_SJLJ_LONGJMP, // builtin longjmp operation |
| 38 | |
Chris Lattner | 0a1762e | 2008-03-17 03:21:36 +0000 | [diff] [blame] | 39 | Hi, Lo, // Hi/Lo operations, typically on a global address. |
Anton Korobeynikov | 281cf24 | 2008-10-10 20:28:10 +0000 | [diff] [blame] | 40 | |
Chris Lattner | 0a1762e | 2008-03-17 03:21:36 +0000 | [diff] [blame] | 41 | FTOI, // FP to Int within a FP register. |
| 42 | ITOF, // Int to FP within a FP register. |
Venkatraman Govindaraju | 5ae77f7 | 2013-11-03 12:28:40 +0000 | [diff] [blame] | 43 | FTOX, // FP to Int64 within a FP register. |
| 44 | XTOF, // Int64 to FP within a FP register. |
Anton Korobeynikov | 281cf24 | 2008-10-10 20:28:10 +0000 | [diff] [blame] | 45 | |
Chris Lattner | 0a1762e | 2008-03-17 03:21:36 +0000 | [diff] [blame] | 46 | CALL, // A call instruction. |
Chris Lattner | 840c700 | 2009-09-15 17:46:24 +0000 | [diff] [blame] | 47 | RET_FLAG, // Return with a flag operand. |
Venkatraman Govindaraju | cb1dca6 | 2013-09-22 06:48:52 +0000 | [diff] [blame] | 48 | GLOBAL_BASE_REG, // Global base reg for PIC. |
| 49 | FLUSHW, // FLUSH register windows to stack. |
| 50 | |
| 51 | TLS_ADD, // For Thread Local Storage (TLS). |
| 52 | TLS_LD, |
| 53 | TLS_CALL |
Chris Lattner | 0a1762e | 2008-03-17 03:21:36 +0000 | [diff] [blame] | 54 | }; |
Alexander Kornienko | f00654e | 2015-06-23 09:49:53 +0000 | [diff] [blame] | 55 | } |
Anton Korobeynikov | 281cf24 | 2008-10-10 20:28:10 +0000 | [diff] [blame] | 56 | |
Chris Lattner | 0a1762e | 2008-03-17 03:21:36 +0000 | [diff] [blame] | 57 | class SparcTargetLowering : public TargetLowering { |
Jakob Stoklund Olesen | 5ad3b35 | 2013-04-02 04:08:54 +0000 | [diff] [blame] | 58 | const SparcSubtarget *Subtarget; |
Chris Lattner | 0a1762e | 2008-03-17 03:21:36 +0000 | [diff] [blame] | 59 | public: |
James Y Knight | ef31eaf | 2016-05-03 14:57:18 +0000 | [diff] [blame] | 60 | SparcTargetLowering(const TargetMachine &TM, const SparcSubtarget &STI); |
Craig Topper | b0c941b | 2014-04-29 07:57:13 +0000 | [diff] [blame] | 61 | SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const override; |
Chris Dewhurst | 68388a0 | 2016-05-18 09:14:13 +0000 | [diff] [blame] | 62 | |
| 63 | bool useSoftFloat() const override; |
| 64 | |
Jay Foad | a0653a3 | 2014-05-14 21:14:37 +0000 | [diff] [blame] | 65 | /// computeKnownBitsForTargetNode - Determine which of the bits specified |
Anton Korobeynikov | 281cf24 | 2008-10-10 20:28:10 +0000 | [diff] [blame] | 66 | /// in Mask are known to be either zero or one and return them in the |
Chris Lattner | 0a1762e | 2008-03-17 03:21:36 +0000 | [diff] [blame] | 67 | /// KnownZero/KnownOne bitsets. |
Jay Foad | a0653a3 | 2014-05-14 21:14:37 +0000 | [diff] [blame] | 68 | void computeKnownBitsForTargetNode(const SDValue Op, |
Craig Topper | d0af7e8 | 2017-04-28 05:31:46 +0000 | [diff] [blame] | 69 | KnownBits &Known, |
Simon Pilgrim | 37b536e | 2017-03-31 11:24:16 +0000 | [diff] [blame] | 70 | const APInt &DemandedElts, |
Jay Foad | a0653a3 | 2014-05-14 21:14:37 +0000 | [diff] [blame] | 71 | const SelectionDAG &DAG, |
| 72 | unsigned Depth = 0) const override; |
Anton Korobeynikov | 281cf24 | 2008-10-10 20:28:10 +0000 | [diff] [blame] | 73 | |
Craig Topper | b0c941b | 2014-04-29 07:57:13 +0000 | [diff] [blame] | 74 | MachineBasicBlock * |
Duncan P. N. Exon Smith | e4f5e4f | 2016-06-30 22:52:52 +0000 | [diff] [blame] | 75 | EmitInstrWithCustomInserter(MachineInstr &MI, |
| 76 | MachineBasicBlock *MBB) const override; |
Anton Korobeynikov | 281cf24 | 2008-10-10 20:28:10 +0000 | [diff] [blame] | 77 | |
Craig Topper | b0c941b | 2014-04-29 07:57:13 +0000 | [diff] [blame] | 78 | const char *getTargetNodeName(unsigned Opcode) const override; |
Anton Korobeynikov | 281cf24 | 2008-10-10 20:28:10 +0000 | [diff] [blame] | 79 | |
Benjamin Kramer | 9bfb627 | 2015-07-05 19:29:18 +0000 | [diff] [blame] | 80 | ConstraintType getConstraintType(StringRef Constraint) const override; |
Venkatraman Govindaraju | 407e442 | 2014-01-22 01:29:51 +0000 | [diff] [blame] | 81 | ConstraintWeight |
| 82 | getSingleConstraintMatchWeight(AsmOperandInfo &info, |
Craig Topper | b0c941b | 2014-04-29 07:57:13 +0000 | [diff] [blame] | 83 | const char *constraint) const override; |
Venkatraman Govindaraju | 407e442 | 2014-01-22 01:29:51 +0000 | [diff] [blame] | 84 | void LowerAsmOperandForConstraint(SDValue Op, |
| 85 | std::string &Constraint, |
| 86 | std::vector<SDValue> &Ops, |
Craig Topper | b0c941b | 2014-04-29 07:57:13 +0000 | [diff] [blame] | 87 | SelectionDAG &DAG) const override; |
Chris Dewhurst | 0dfa6bc | 2016-05-20 09:03:01 +0000 | [diff] [blame] | 88 | |
| 89 | unsigned |
| 90 | getInlineAsmMemConstraint(StringRef ConstraintCode) const override { |
| 91 | if (ConstraintCode == "o") |
| 92 | return InlineAsm::Constraint_o; |
| 93 | return TargetLowering::getInlineAsmMemConstraint(ConstraintCode); |
| 94 | } |
| 95 | |
Eric Christopher | 11e4df7 | 2015-02-26 22:38:43 +0000 | [diff] [blame] | 96 | std::pair<unsigned, const TargetRegisterClass *> |
| 97 | getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI, |
Benjamin Kramer | 9bfb627 | 2015-07-05 19:29:18 +0000 | [diff] [blame] | 98 | StringRef Constraint, MVT VT) const override; |
Dan Gohman | 2fe6bee | 2008-10-18 02:06:02 +0000 | [diff] [blame] | 99 | |
Craig Topper | b0c941b | 2014-04-29 07:57:13 +0000 | [diff] [blame] | 100 | bool isOffsetFoldingLegal(const GlobalAddressSDNode *GA) const override; |
Mehdi Amini | eaabc51 | 2015-07-09 15:12:23 +0000 | [diff] [blame] | 101 | MVT getScalarShiftAmountTy(const DataLayout &, EVT) const override { |
Mehdi Amini | 9639d65 | 2015-07-09 02:09:20 +0000 | [diff] [blame] | 102 | return MVT::i32; |
| 103 | } |
Bill Wendling | 31ceb1b | 2009-06-30 22:38:32 +0000 | [diff] [blame] | 104 | |
Chris Dewhurst | ad74117 | 2016-05-20 10:21:01 +0000 | [diff] [blame] | 105 | unsigned getRegisterByName(const char* RegName, EVT VT, |
| 106 | SelectionDAG &DAG) const override; |
| 107 | |
Joseph Tremoulet | f748c89 | 2015-11-07 01:11:31 +0000 | [diff] [blame] | 108 | /// If a physical register, this returns the register that receives the |
| 109 | /// exception address on entry to an EH pad. |
| 110 | unsigned |
| 111 | getExceptionPointerRegister(const Constant *PersonalityFn) const override { |
| 112 | return SP::I0; |
| 113 | } |
| 114 | |
| 115 | /// If a physical register, this returns the register that receives the |
| 116 | /// exception typeid on entry to a landing pad. |
| 117 | unsigned |
| 118 | getExceptionSelectorRegister(const Constant *PersonalityFn) const override { |
| 119 | return SP::I1; |
| 120 | } |
| 121 | |
Marcin Koscielnicki | 33571e2 | 2016-04-26 10:37:14 +0000 | [diff] [blame] | 122 | /// Override to support customized stack guard loading. |
| 123 | bool useLoadStackGuardNode() const override; |
| 124 | void insertSSPDeclarations(Module &M) const override; |
| 125 | |
Venkatraman Govindaraju | f6c8fe9 | 2013-12-09 04:02:15 +0000 | [diff] [blame] | 126 | /// getSetCCResultType - Return the ISD::SETCC ValueType |
Mehdi Amini | 44ede33 | 2015-07-09 02:09:04 +0000 | [diff] [blame] | 127 | EVT getSetCCResultType(const DataLayout &DL, LLVMContext &Context, |
| 128 | EVT VT) const override; |
Venkatraman Govindaraju | f6c8fe9 | 2013-12-09 04:02:15 +0000 | [diff] [blame] | 129 | |
Craig Topper | b0c941b | 2014-04-29 07:57:13 +0000 | [diff] [blame] | 130 | SDValue |
Benjamin Kramer | bdc4956 | 2016-06-12 15:39:02 +0000 | [diff] [blame] | 131 | LowerFormalArguments(SDValue Chain, CallingConv::ID CallConv, bool isVarArg, |
| 132 | const SmallVectorImpl<ISD::InputArg> &Ins, |
| 133 | const SDLoc &dl, SelectionDAG &DAG, |
| 134 | SmallVectorImpl<SDValue> &InVals) const override; |
| 135 | SDValue LowerFormalArguments_32(SDValue Chain, CallingConv::ID CallConv, |
Jakob Stoklund Olesen | 0b21f35 | 2013-04-02 04:09:02 +0000 | [diff] [blame] | 136 | bool isVarArg, |
| 137 | const SmallVectorImpl<ISD::InputArg> &Ins, |
Benjamin Kramer | bdc4956 | 2016-06-12 15:39:02 +0000 | [diff] [blame] | 138 | const SDLoc &dl, SelectionDAG &DAG, |
Jakob Stoklund Olesen | 0b21f35 | 2013-04-02 04:09:02 +0000 | [diff] [blame] | 139 | SmallVectorImpl<SDValue> &InVals) const; |
Benjamin Kramer | bdc4956 | 2016-06-12 15:39:02 +0000 | [diff] [blame] | 140 | SDValue LowerFormalArguments_64(SDValue Chain, CallingConv::ID CallConv, |
Jakob Stoklund Olesen | 0b21f35 | 2013-04-02 04:09:02 +0000 | [diff] [blame] | 141 | bool isVarArg, |
| 142 | const SmallVectorImpl<ISD::InputArg> &Ins, |
Benjamin Kramer | bdc4956 | 2016-06-12 15:39:02 +0000 | [diff] [blame] | 143 | const SDLoc &dl, SelectionDAG &DAG, |
Jakob Stoklund Olesen | 0b21f35 | 2013-04-02 04:09:02 +0000 | [diff] [blame] | 144 | SmallVectorImpl<SDValue> &InVals) const; |
Dan Gohman | f9bbcd1 | 2009-08-05 01:29:28 +0000 | [diff] [blame] | 145 | |
Craig Topper | b0c941b | 2014-04-29 07:57:13 +0000 | [diff] [blame] | 146 | SDValue |
Justin Holewinski | aa58397 | 2012-05-25 16:35:28 +0000 | [diff] [blame] | 147 | LowerCall(TargetLowering::CallLoweringInfo &CLI, |
Craig Topper | b0c941b | 2014-04-29 07:57:13 +0000 | [diff] [blame] | 148 | SmallVectorImpl<SDValue> &InVals) const override; |
Jakob Stoklund Olesen | a30f483 | 2013-04-07 19:10:57 +0000 | [diff] [blame] | 149 | SDValue LowerCall_32(TargetLowering::CallLoweringInfo &CLI, |
| 150 | SmallVectorImpl<SDValue> &InVals) const; |
| 151 | SDValue LowerCall_64(TargetLowering::CallLoweringInfo &CLI, |
| 152 | SmallVectorImpl<SDValue> &InVals) const; |
Dan Gohman | f9bbcd1 | 2009-08-05 01:29:28 +0000 | [diff] [blame] | 153 | |
Benjamin Kramer | bdc4956 | 2016-06-12 15:39:02 +0000 | [diff] [blame] | 154 | SDValue LowerReturn(SDValue Chain, CallingConv::ID CallConv, bool isVarArg, |
| 155 | const SmallVectorImpl<ISD::OutputArg> &Outs, |
| 156 | const SmallVectorImpl<SDValue> &OutVals, |
| 157 | const SDLoc &dl, SelectionDAG &DAG) const override; |
| 158 | SDValue LowerReturn_32(SDValue Chain, CallingConv::ID CallConv, |
| 159 | bool IsVarArg, |
Jakob Stoklund Olesen | edaf66b | 2013-04-06 23:57:33 +0000 | [diff] [blame] | 160 | const SmallVectorImpl<ISD::OutputArg> &Outs, |
| 161 | const SmallVectorImpl<SDValue> &OutVals, |
Benjamin Kramer | bdc4956 | 2016-06-12 15:39:02 +0000 | [diff] [blame] | 162 | const SDLoc &DL, SelectionDAG &DAG) const; |
| 163 | SDValue LowerReturn_64(SDValue Chain, CallingConv::ID CallConv, |
| 164 | bool IsVarArg, |
Jakob Stoklund Olesen | edaf66b | 2013-04-06 23:57:33 +0000 | [diff] [blame] | 165 | const SmallVectorImpl<ISD::OutputArg> &Outs, |
| 166 | const SmallVectorImpl<SDValue> &OutVals, |
Benjamin Kramer | bdc4956 | 2016-06-12 15:39:02 +0000 | [diff] [blame] | 167 | const SDLoc &DL, SelectionDAG &DAG) const; |
Chris Lattner | 840c700 | 2009-09-15 17:46:24 +0000 | [diff] [blame] | 168 | |
Dan Gohman | 21cea8a | 2010-04-17 15:26:15 +0000 | [diff] [blame] | 169 | SDValue LowerGlobalAddress(SDValue Op, SelectionDAG &DAG) const; |
Venkatraman Govindaraju | cb1dca6 | 2013-09-22 06:48:52 +0000 | [diff] [blame] | 170 | SDValue LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const; |
Dan Gohman | 21cea8a | 2010-04-17 15:26:15 +0000 | [diff] [blame] | 171 | SDValue LowerConstantPool(SDValue Op, SelectionDAG &DAG) const; |
Venkatraman Govindaraju | f80d72f | 2013-06-03 05:58:33 +0000 | [diff] [blame] | 172 | SDValue LowerBlockAddress(SDValue Op, SelectionDAG &DAG) const; |
Venkatraman Govindaraju | a82203f | 2011-02-21 03:42:44 +0000 | [diff] [blame] | 173 | |
Chris Dewhurst | 69fa192 | 2016-05-04 09:33:30 +0000 | [diff] [blame] | 174 | SDValue LowerEH_SJLJ_SETJMP(SDValue Op, SelectionDAG &DAG, |
| 175 | const SparcTargetLowering &TLI) const ; |
| 176 | SDValue LowerEH_SJLJ_LONGJMP(SDValue Op, SelectionDAG &DAG, |
| 177 | const SparcTargetLowering &TLI) const ; |
| 178 | |
Venkatraman Govindaraju | a82203f | 2011-02-21 03:42:44 +0000 | [diff] [blame] | 179 | unsigned getSRetArgSize(SelectionDAG &DAG, SDValue Callee) const; |
Jakob Stoklund Olesen | 1fb08a8 | 2013-04-14 01:33:32 +0000 | [diff] [blame] | 180 | SDValue withTargetFlags(SDValue Op, unsigned TF, SelectionDAG &DAG) const; |
| 181 | SDValue makeHiLoPair(SDValue Op, unsigned HiTF, unsigned LoTF, |
| 182 | SelectionDAG &DAG) const; |
Jakob Stoklund Olesen | e0fc832 | 2013-04-14 04:35:16 +0000 | [diff] [blame] | 183 | SDValue makeAddress(SDValue Op, SelectionDAG &DAG) const; |
Venkatraman Govindaraju | 59039dc | 2013-09-03 04:11:59 +0000 | [diff] [blame] | 184 | |
Benjamin Kramer | bdc4956 | 2016-06-12 15:39:02 +0000 | [diff] [blame] | 185 | SDValue LowerF128_LibCallArg(SDValue Chain, ArgListTy &Args, SDValue Arg, |
| 186 | const SDLoc &DL, SelectionDAG &DAG) const; |
Venkatraman Govindaraju | 59039dc | 2013-09-03 04:11:59 +0000 | [diff] [blame] | 187 | SDValue LowerF128Op(SDValue Op, SelectionDAG &DAG, |
| 188 | const char *LibFuncName, |
| 189 | unsigned numArgs) const; |
Benjamin Kramer | bdc4956 | 2016-06-12 15:39:02 +0000 | [diff] [blame] | 190 | SDValue LowerF128Compare(SDValue LHS, SDValue RHS, unsigned &SPCC, |
| 191 | const SDLoc &DL, SelectionDAG &DAG) const; |
Venkatraman Govindaraju | 59039dc | 2013-09-03 04:11:59 +0000 | [diff] [blame] | 192 | |
Marcin Koscielnicki | fafb449 | 2016-04-26 10:37:01 +0000 | [diff] [blame] | 193 | SDValue LowerINTRINSIC_WO_CHAIN(SDValue Op, SelectionDAG &DAG) const; |
| 194 | |
Craig Topper | b0c941b | 2014-04-29 07:57:13 +0000 | [diff] [blame] | 195 | bool ShouldShrinkFPConstant(EVT VT) const override { |
Venkatraman Govindaraju | 59039dc | 2013-09-03 04:11:59 +0000 | [diff] [blame] | 196 | // Do not shrink FP constpool if VT == MVT::f128. |
| 197 | // (ldd, call _Q_fdtoq) is more expensive than two ldds. |
| 198 | return VT != MVT::f128; |
| 199 | } |
Venkatraman Govindaraju | 5ae77f7 | 2013-11-03 12:28:40 +0000 | [diff] [blame] | 200 | |
James Y Knight | f44fc52 | 2016-03-16 22:12:04 +0000 | [diff] [blame] | 201 | bool shouldInsertFencesForAtomic(const Instruction *I) const override { |
| 202 | // FIXME: We insert fences for each atomics and generate |
| 203 | // sub-optimal code for PSO/TSO. (Approximately nobody uses any |
| 204 | // mode but TSO, which makes this even more silly) |
| 205 | return true; |
| 206 | } |
| 207 | |
James Y Knight | 7306cd4 | 2016-03-29 19:09:54 +0000 | [diff] [blame] | 208 | AtomicExpansionKind shouldExpandAtomicRMWInIR(AtomicRMWInst *AI) const override; |
| 209 | |
Craig Topper | b0c941b | 2014-04-29 07:57:13 +0000 | [diff] [blame] | 210 | void ReplaceNodeResults(SDNode *N, |
James Y Knight | 3994be8 | 2015-08-10 19:11:39 +0000 | [diff] [blame] | 211 | SmallVectorImpl<SDValue>& Results, |
| 212 | SelectionDAG &DAG) const override; |
Jakob Stoklund Olesen | 05ae2d6 | 2014-01-24 06:23:31 +0000 | [diff] [blame] | 213 | |
Duncan P. N. Exon Smith | e4f5e4f | 2016-06-30 22:52:52 +0000 | [diff] [blame] | 214 | MachineBasicBlock *expandSelectCC(MachineInstr &MI, MachineBasicBlock *BB, |
Jakob Stoklund Olesen | 05ae2d6 | 2014-01-24 06:23:31 +0000 | [diff] [blame] | 215 | unsigned BROpcode) const; |
Duncan P. N. Exon Smith | e4f5e4f | 2016-06-30 22:52:52 +0000 | [diff] [blame] | 216 | MachineBasicBlock *emitEHSjLjSetJmp(MachineInstr &MI, |
Chris Dewhurst | 69fa192 | 2016-05-04 09:33:30 +0000 | [diff] [blame] | 217 | MachineBasicBlock *MBB) const; |
Duncan P. N. Exon Smith | e4f5e4f | 2016-06-30 22:52:52 +0000 | [diff] [blame] | 218 | MachineBasicBlock *emitEHSjLjLongJmp(MachineInstr &MI, |
Chris Dewhurst | 69fa192 | 2016-05-04 09:33:30 +0000 | [diff] [blame] | 219 | MachineBasicBlock *MBB) const; |
Chris Lattner | 0a1762e | 2008-03-17 03:21:36 +0000 | [diff] [blame] | 220 | }; |
| 221 | } // end namespace llvm |
| 222 | |
| 223 | #endif // SPARC_ISELLOWERING_H |