Handles custom instruction selections.
122 if (n->isMachineOpcode()) {
128 if (n->getOpcode() >= ISD::BUILTIN_OP_END &&
132 }
else if (n->getOpcode() == ISD::BR) {
133 SDValue chain = n->getOperand(0);
135 MachineBasicBlock* dest =
136 cast<BasicBlockSDNode>(n->getOperand(1))->getBasicBlock();
138 n, TCE::TCEBR, MVT::Other, CurDAG->getBasicBlock(dest), chain);
139 }
else if (n->getOpcode() == ISD::FrameIndex) {
140 int fi = cast<FrameIndexSDNode>(n)->getIndex();
142 if (n->hasOneUse()) {
147 auto fiN = CurDAG->getMachineNode(
153 }
else if (n->getOpcode() == ISD::VSELECT ||
154 (n->getOpcode() == ISD::SELECT &&
155 !n->getOperand(1).getValueType().isVector())) {
156 SDNode* node2 = dyn_cast<SDNode>(n->getOperand(0));
157 if (node2->getOpcode() == ISD::SETCC) {
158 SDValue val1 = n->getOperand(1);
159 SDValue val2 = n->getOperand(2);
161 SDValue n2val1 = node2->getOperand(0);
162 SDValue n2val2 = node2->getOperand(1);
164 if (val1 == n2val1 && val2 == n2val2 && node2->hasOneUse()) {
166 ISD::CondCode cc = cast<CondCodeSDNode>(
167 node2->getOperand(2))->get();
177 n,opc, n->getSimpleValueType(0), val1, val2);
187 n, opc, n->getSimpleValueType(0), val1, val2);
195 n, opc, n->getSimpleValueType(0), val1, val2);
203 n, opc, n->getSimpleValueType(0), val1, val2);
211 }
else if (n->getOpcode() == ISD::SHL ||
212 n->getOpcode() == ISD::SRA ||
213 n->getOpcode() == ISD::SRL) {
214 SDValue shifted = n->getOperand(0);
215 SDValue shifter = n->getOperand(1);
216 EVT shiftedVt = shifted.getValueType();
217 EVT shifterVt = shifter.getValueType();
219 }
else if (n->getOpcode() == ISD::AND ||
220 n->getOpcode() == ISD::OR ||
221 n->getOpcode() == ISD::XOR) {
222 SDValue lhs = n->getOperand(0);
223 SDValue rhs = n->getOperand(1);
224 EVT lhsVt = lhs.getValueType();
225 EVT rhsVt = rhs.getValueType();