annotate lib/Target/Sparc/SparcISelLowering.h @ 148:63bd29f05246

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