134 if (n->isMachineOpcode()) {
140 if (n->getOpcode() >= ISD::BUILTIN_OP_END &&
144 }
else if (n->getOpcode() == ISD::BR) {
145 SDValue chain = n->getOperand(0);
147 MachineBasicBlock* dest =
148 cast<BasicBlockSDNode>(n->getOperand(1))->getBasicBlock();
150 n, TCE::TCEBR, MVT::Other, CurDAG->getBasicBlock(dest), chain);
151 }
else if (n->getOpcode() == ISD::FrameIndex) {
152 int fi = cast<FrameIndexSDNode>(n)->getIndex();
154 if (n->hasOneUse()) {
159 auto fiN = CurDAG->getMachineNode(
165 }
else if (n->getOpcode() == ISD::VSELECT ||
166 (n->getOpcode() == ISD::SELECT &&
167 !n->getOperand(1).getValueType().isVector())) {
168 SDNode* node2 = dyn_cast<SDNode>(n->getOperand(0));
169 if (node2->getOpcode() == ISD::SETCC) {
170 SDValue val1 = n->getOperand(1);
171 SDValue val2 = n->getOperand(2);
173 SDValue n2val1 = node2->getOperand(0);
174 SDValue n2val2 = node2->getOperand(1);
176 if (val1 == n2val1 && val2 == n2val2 && node2->hasOneUse()) {
178 ISD::CondCode cc = cast<CondCodeSDNode>(
179 node2->getOperand(2))->get();
189 n,opc, n->getSimpleValueType(0), val1, val2);
199 n, opc, n->getSimpleValueType(0), val1, val2);
207 n, opc, n->getSimpleValueType(0), val1, val2);
215 n, opc, n->getSimpleValueType(0), val1, val2);
223 }
else if (n->getOpcode() == ISD::SHL ||
224 n->getOpcode() == ISD::SRA ||
225 n->getOpcode() == ISD::SRL) {
226 SDValue shifted = n->getOperand(0);
227 SDValue shifter = n->getOperand(1);
228 EVT shiftedVt = shifted.getValueType();
229 EVT shifterVt = shifter.getValueType();
231 }
else if (n->getOpcode() == ISD::AND ||
232 n->getOpcode() == ISD::OR ||
233 n->getOpcode() == ISD::XOR) {
234 SDValue lhs = n->getOperand(0);
235 SDValue rhs = n->getOperand(1);
236 EVT lhsVt = lhs.getValueType();
237 EVT rhsVt = rhs.getValueType();
250 SDValue addr, SDValue& base, SDValue& offset) {
252 if (FrameIndexSDNode* fin = dyn_cast<FrameIndexSDNode>(addr)) {
253 base = CurDAG->getTargetFrameIndex(fin->getIndex(),
DEFAULT_TYPE);
254 offset = CurDAG->getTargetConstant(0, SDLoc(),
DEFAULT_TYPE);
256 }
else if (addr.getOpcode() == ISD::TargetExternalSymbol ||
257 addr.getOpcode() == ISD::TargetGlobalAddress) {
262 offset = CurDAG->getTargetConstant(0, SDLoc(),
DEFAULT_TYPE);
271 SDValue addr, SDValue& r1, SDValue& r2) {
273 if (addr.getOpcode() == ISD::TargetGlobalAddress) {
278 }
else if (addr.getOpcode() == ISD::TargetExternalSymbol) {
280 }
else if (addr.getOpcode() == ISD::FrameIndex) {
286 r2 = CurDAG->getTargetConstant(0, SDLoc(),
DEFAULT_TYPE);