annotate lib/Target/Sparc/SparcISelLowering.h @ 134:3a76565eade5 LLVM5.0.1

update 5.0.1
author mir3636
date Sat, 17 Feb 2018 09:57:20 +0900
parents 803732b1fca8
children c2174574ed3a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 //===-- SparcISelLowering.h - Sparc DAG Lowering Interface ------*- C++ -*-===//
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 //
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 // The LLVM Compiler Infrastructure
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 //
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 // This file is distributed under the University of Illinois Open Source
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 // License. See LICENSE.TXT for details.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 //
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 //===----------------------------------------------------------------------===//
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 //
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 // This file defines the interfaces that Sparc uses to lower LLVM code into a
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 // selection DAG.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 //
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 //===----------------------------------------------------------------------===//
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
15 #ifndef LLVM_LIB_TARGET_SPARC_SPARCISELLOWERING_H
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
16 #define LLVM_LIB_TARGET_SPARC_SPARCISELLOWERING_H
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 #include "Sparc.h"
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
19 #include "llvm/CodeGen/TargetLowering.h"
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 namespace llvm {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 class SparcSubtarget;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 namespace SPISD {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
25 enum NodeType : unsigned {
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 FIRST_NUMBER = ISD::BUILTIN_OP_END,
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 CMPICC, // Compare two GPR operands, set icc+xcc.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 CMPFCC, // Compare two FP operands, set fcc.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 BRICC, // Branch to dest on icc condition
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 BRXCC, // Branch to dest on xcc condition (64-bit only).
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 BRFCC, // Branch to dest on fcc condition
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 SELECT_ICC, // Select between two values using the current ICC flags.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 SELECT_XCC, // Select between two values using the current XCC flags.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 SELECT_FCC, // Select between two values using the current FCC flags.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
36 EH_SJLJ_SETJMP, // builtin setjmp operation
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
37 EH_SJLJ_LONGJMP, // builtin longjmp operation
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
38
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 Hi, Lo, // Hi/Lo operations, typically on a global address.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 FTOI, // FP to Int within a FP register.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 ITOF, // Int to FP within a FP register.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 FTOX, // FP to Int64 within a FP register.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 XTOF, // Int64 to FP within a FP register.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 CALL, // A call instruction.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 RET_FLAG, // Return with a flag operand.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 GLOBAL_BASE_REG, // Global base reg for PIC.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 FLUSHW, // FLUSH register windows to stack.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 TLS_ADD, // For Thread Local Storage (TLS).
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 TLS_LD,
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 TLS_CALL
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 };
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 class SparcTargetLowering : public TargetLowering {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 const SparcSubtarget *Subtarget;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 public:
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
60 SparcTargetLowering(const TargetMachine &TM, const SparcSubtarget &STI);
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
61 SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const override;
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
62
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
63 bool useSoftFloat() const override;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
64
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
65 /// computeKnownBitsForTargetNode - Determine which of the bits specified
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 /// in Mask are known to be either zero or one and return them in the
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 /// KnownZero/KnownOne bitsets.
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
68 void computeKnownBitsForTargetNode(const SDValue Op,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
69 KnownBits &Known,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
70 const APInt &DemandedElts,
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
71 const SelectionDAG &DAG,
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
72 unsigned Depth = 0) const override;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
74 MachineBasicBlock *
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
75 EmitInstrWithCustomInserter(MachineInstr &MI,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
76 MachineBasicBlock *MBB) const override;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
78 const char *getTargetNodeName(unsigned Opcode) const override;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
80 ConstraintType getConstraintType(StringRef Constraint) const override;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
81 ConstraintWeight
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
82 getSingleConstraintMatchWeight(AsmOperandInfo &info,
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
83 const char *constraint) const override;
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
84 void LowerAsmOperandForConstraint(SDValue Op,
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
85 std::string &Constraint,
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
86 std::vector<SDValue> &Ops,
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
87 SelectionDAG &DAG) const override;
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
88
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
89 unsigned
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
90 getInlineAsmMemConstraint(StringRef ConstraintCode) const override {
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
91 if (ConstraintCode == "o")
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
92 return InlineAsm::Constraint_o;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
93 return TargetLowering::getInlineAsmMemConstraint(ConstraintCode);
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
94 }
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
95
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
96 std::pair<unsigned, const TargetRegisterClass *>
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
97 getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
98 StringRef Constraint, MVT VT) const override;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
100 bool isOffsetFoldingLegal(const GlobalAddressSDNode *GA) const override;
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
101 MVT getScalarShiftAmountTy(const DataLayout &, EVT) const override {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
102 return MVT::i32;
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
103 }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
105 unsigned getRegisterByName(const char* RegName, EVT VT,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
106 SelectionDAG &DAG) const override;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
107
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
108 /// If a physical register, this returns the register that receives the
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
109 /// exception address on entry to an EH pad.
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
110 unsigned
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
111 getExceptionPointerRegister(const Constant *PersonalityFn) const override {
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
112 return SP::I0;
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
113 }
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
114
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
115 /// If a physical register, this returns the register that receives the
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
116 /// exception typeid on entry to a landing pad.
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
117 unsigned
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
118 getExceptionSelectorRegister(const Constant *PersonalityFn) const override {
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
119 return SP::I1;
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
120 }
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
121
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
122 /// Override to support customized stack guard loading.
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
123 bool useLoadStackGuardNode() const override;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
124 void insertSSPDeclarations(Module &M) const override;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
125
33
e4204d083e25 LLVM 3.5
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
126 /// getSetCCResultType - Return the ISD::SETCC ValueType
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
127 EVT getSetCCResultType(const DataLayout &DL, LLVMContext &Context,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
128 EVT VT) const override;
33
e4204d083e25 LLVM 3.5
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
129
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
130 SDValue
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
131 LowerFormalArguments(SDValue Chain, CallingConv::ID CallConv, bool isVarArg,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
132 const SmallVectorImpl<ISD::InputArg> &Ins,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
133 const SDLoc &dl, SelectionDAG &DAG,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
134 SmallVectorImpl<SDValue> &InVals) const override;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
135 SDValue LowerFormalArguments_32(SDValue Chain, CallingConv::ID CallConv,
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 bool isVarArg,
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 const SmallVectorImpl<ISD::InputArg> &Ins,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
138 const SDLoc &dl, SelectionDAG &DAG,
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
139 SmallVectorImpl<SDValue> &InVals) const;
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
140 SDValue LowerFormalArguments_64(SDValue Chain, CallingConv::ID CallConv,
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 bool isVarArg,
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
142 const SmallVectorImpl<ISD::InputArg> &Ins,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
143 const SDLoc &dl, SelectionDAG &DAG,
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
144 SmallVectorImpl<SDValue> &InVals) const;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
145
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
146 SDValue
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
147 LowerCall(TargetLowering::CallLoweringInfo &CLI,
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
148 SmallVectorImpl<SDValue> &InVals) const override;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 SDValue LowerCall_32(TargetLowering::CallLoweringInfo &CLI,
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
150 SmallVectorImpl<SDValue> &InVals) const;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
151 SDValue LowerCall_64(TargetLowering::CallLoweringInfo &CLI,
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
152 SmallVectorImpl<SDValue> &InVals) const;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
153
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
154 SDValue LowerReturn(SDValue Chain, CallingConv::ID CallConv, bool isVarArg,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
155 const SmallVectorImpl<ISD::OutputArg> &Outs,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
156 const SmallVectorImpl<SDValue> &OutVals,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
157 const SDLoc &dl, SelectionDAG &DAG) const override;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
158 SDValue LowerReturn_32(SDValue Chain, CallingConv::ID CallConv,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
159 bool IsVarArg,
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
160 const SmallVectorImpl<ISD::OutputArg> &Outs,
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
161 const SmallVectorImpl<SDValue> &OutVals,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
162 const SDLoc &DL, SelectionDAG &DAG) const;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
163 SDValue LowerReturn_64(SDValue Chain, CallingConv::ID CallConv,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
164 bool IsVarArg,
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
165 const SmallVectorImpl<ISD::OutputArg> &Outs,
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
166 const SmallVectorImpl<SDValue> &OutVals,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
167 const SDLoc &DL, SelectionDAG &DAG) const;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
168
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
169 SDValue LowerGlobalAddress(SDValue Op, SelectionDAG &DAG) const;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 SDValue LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
171 SDValue LowerConstantPool(SDValue Op, SelectionDAG &DAG) const;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
172 SDValue LowerBlockAddress(SDValue Op, SelectionDAG &DAG) const;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
173
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
174 SDValue LowerEH_SJLJ_SETJMP(SDValue Op, SelectionDAG &DAG,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
175 const SparcTargetLowering &TLI) const ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
176 SDValue LowerEH_SJLJ_LONGJMP(SDValue Op, SelectionDAG &DAG,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
177 const SparcTargetLowering &TLI) const ;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
178
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
179 unsigned getSRetArgSize(SelectionDAG &DAG, SDValue Callee) const;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
180 SDValue withTargetFlags(SDValue Op, unsigned TF, SelectionDAG &DAG) const;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
181 SDValue makeHiLoPair(SDValue Op, unsigned HiTF, unsigned LoTF,
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 SelectionDAG &DAG) const;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
183 SDValue makeAddress(SDValue Op, SelectionDAG &DAG) const;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
184
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
185 SDValue LowerF128_LibCallArg(SDValue Chain, ArgListTy &Args, SDValue Arg,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
186 const SDLoc &DL, SelectionDAG &DAG) const;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
187 SDValue LowerF128Op(SDValue Op, SelectionDAG &DAG,
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
188 const char *LibFuncName,
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
189 unsigned numArgs) const;
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
190 SDValue LowerF128Compare(SDValue LHS, SDValue RHS, unsigned &SPCC,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
191 const SDLoc &DL, SelectionDAG &DAG) const;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
192
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
193 SDValue LowerINTRINSIC_WO_CHAIN(SDValue Op, SelectionDAG &DAG) const;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
194
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
195 bool ShouldShrinkFPConstant(EVT VT) const override {
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
196 // Do not shrink FP constpool if VT == MVT::f128.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
197 // (ldd, call _Q_fdtoq) is more expensive than two ldds.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
198 return VT != MVT::f128;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
199 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
200
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
201 bool shouldInsertFencesForAtomic(const Instruction *I) const override {
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
202 // FIXME: We insert fences for each atomics and generate
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
203 // sub-optimal code for PSO/TSO. (Approximately nobody uses any
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
204 // mode but TSO, which makes this even more silly)
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
205 return true;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
206 }
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
207
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
208 AtomicExpansionKind shouldExpandAtomicRMWInIR(AtomicRMWInst *AI) const override;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
209
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
210 void ReplaceNodeResults(SDNode *N,
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
211 SmallVectorImpl<SDValue>& Results,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
212 SelectionDAG &DAG) const override;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
213
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
214 MachineBasicBlock *expandSelectCC(MachineInstr &MI, MachineBasicBlock *BB,
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 33
diff changeset
215 unsigned BROpcode) const;
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
216 MachineBasicBlock *emitEHSjLjSetJmp(MachineInstr &MI,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
217 MachineBasicBlock *MBB) const;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
218 MachineBasicBlock *emitEHSjLjLongJmp(MachineInstr &MI,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
219 MachineBasicBlock *MBB) const;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
220 };
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
221 } // end namespace llvm
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
222
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
223 #endif // SPARC_ISELLOWERING_H