Esempio n. 1
0
Value* ARMIREmitter::visit(const SDNode *N) {
  // return the parent if we are in IR only territory
  if (N->getOpcode() <= ISD::BUILTIN_OP_END) return IREmitter::visit(N);

  // If we already visited the node, return the result.
  if (VisitMap.find(N) != VisitMap.end()) {
    return VisitMap[N];
  }

  IRB->SetCurrentDebugLocation(N->getDebugLoc());

  DEBUG(Infos << "Visiting ARM specific Opcode.\n");
  switch (N->getOpcode()) {
    default: return NULL;
    case ARMISD::BRCOND: return visitBRCOND(N);
    case ARMISD::RET_FLAG: return visitRET(N);
    case ARMISD::CALL: return visitCALL(N);
  }
}
Esempio n. 2
0
Value* ARMIREmitter::visit(const SDNode *N) {
  // return the parent if we are in IR only territory
  if (N->getOpcode() <= ISD::BUILTIN_OP_END) return IREmitter::visit(N);

  // If we already visited the node, return the result.
  if (VisitMap.find(N) != VisitMap.end()) {
    return VisitMap[N];
  }

  IRB->SetCurrentDebugLocation(N->getDebugLoc());
  DEBUG(Infos << "Visiting ARM specific Opcode.\n");
  switch (N->getOpcode()) {
	default: {
		errs() << "OpCode: " << N->getOperationName(DAG) << "\n";
		// dyn_cast<MachineSDNode>(N);
		llvm_unreachable("ARMIREmitter::visit - Every ARM visit should be implemented...");
		return NULL;
	}
    case ARMISD::Wrapper:				return visitWrapper(N);
    case ARMISD::WrapperPIC:			return visitWrapperPIC(N);
    case ARMISD::WrapperJT:				return visitWrapperJT(N);
    case ARMISD::COPY_STRUCT_BYVAL:		return visitCOPY_STRUCT_BYVAL(N);
    case ARMISD::CALL:					return visitCALL(N);
    case ARMISD::CALL_PRED:				return visitCALL_PRED(N);
    case ARMISD::CALL_NOLINK:			return visitCALL_NOLINK(N);
    case ARMISD::tCALL:					return visittCALL(N);
    case ARMISD::BRCOND:				return visitBRCOND(N);
    case ARMISD::BR_JT:					return visitBR_JT(N);
    case ARMISD::BR2_JT:				return visitBR2_JT(N);
    case ARMISD::RET_FLAG:				return visitRET_FLAG(N);
    case ARMISD::INTRET_FLAG:			return visitINTRET_FLAG(N);
    case ARMISD::PIC_ADD:				return visitPIC_ADD(N);
    case ARMISD::CMP:					return visitCMP(N);
    case ARMISD::CMN:					return visitCMN(N);
    case ARMISD::CMPZ:					return visitCMPZ(N);
    case ARMISD::CMPFP:					return visitCMPFP(N);
    case ARMISD::CMPFPw0:				return visitCMPFPw0(N);
    case ARMISD::FMSTAT:				return visitFMSTAT(N);
    case ARMISD::CMOV:					return visitCMOV(N);
    case ARMISD::BCC_i64:				return visitBCC_i64(N);
    case ARMISD::RBIT:					return visitRBIT(N);
    case ARMISD::FTOSI:					return visitFTOSI(N);
    case ARMISD::FTOUI:					return visitFTOUI(N);
    case ARMISD::SITOF:					return visitSITOF(N);
    case ARMISD::UITOF:					return visitUITOF(N);
    case ARMISD::SRL_FLAG:				return visitSRL_FLAG(N);
    case ARMISD::SRA_FLAG:				return visitSRA_FLAG(N);
    case ARMISD::RRX:					return visitRRX(N);
    case ARMISD::ADDC:					return visitADDC(N);
    case ARMISD::ADDE:					return visitADDE(N);
    case ARMISD::SUBC:					return visitSUBC(N);
    case ARMISD::SUBE:					return visitSUBE(N);
    case ARMISD::VMOVRRD:				return visitVMOVRRD(N);
    case ARMISD::VMOVDRR:				return visitVMOVDRR(N);
    case ARMISD::EH_SJLJ_SETJMP:		return visitEH_SJLJ_SETJMP(N);
    case ARMISD::EH_SJLJ_LONGJMP:		return visitEH_SJLJ_LONGJMP(N);
    case ARMISD::TC_RETURN:				return visitTC_RETURN(N);
    case ARMISD::THREAD_POINTER:		return visitTHREAD_POINTER(N);
    case ARMISD::DYN_ALLOC:				return visitDYN_ALLOC(N);
    case ARMISD::MEMBARRIER_MCR:		return visitMEMBARRIER_MCR(N);
    case ARMISD::PRELOAD:				return visitPRELOAD(N);
    case ARMISD::VCEQ:					return visitVCEQ(N);
    case ARMISD::VCEQZ:					return visitVCEQZ(N);
    case ARMISD::VCGE:					return visitVCGE(N);
    case ARMISD::VCGEZ:					return visitVCGEZ(N);
    case ARMISD::VCLEZ:					return visitVCLEZ(N);
    case ARMISD::VCGEU:					return visitVCGEU(N);
    case ARMISD::VCGT:					return visitVCGT(N);
    case ARMISD::VCGTZ:					return visitVCGTZ(N);
    case ARMISD::VCLTZ:					return visitVCLTZ(N);
    case ARMISD::VCGTU:					return visitVCGTU(N);
    case ARMISD::VTST:					return visitVTST(N);
    case ARMISD::VSHL:					return visitVSHL(N);
    case ARMISD::VSHRs:					return visitVSHRs(N);
    case ARMISD::VSHRu:					return visitVSHRu(N);
      //case ARMISD::VSHLLs:				return visitVSHLLs(N);
      //case ARMISD::VSHLLu:				return visitVSHLLu(N);
      //case ARMISD::VSHLLi:				return visitVSHLLi(N);
      //case ARMISD::VSHRN:					return visitVSHRN(N);
    case ARMISD::VRSHRs:				return visitVRSHRs(N);
    case ARMISD::VRSHRu:				return visitVRSHRu(N);
      //case ARMISD::VRSHRN:				return visitVRSHRN(N);
    case ARMISD::VQSHLs:				return visitVQSHLs(N);
    case ARMISD::VQSHLu:				return visitVQSHLu(N);
    case ARMISD::VQSHLsu:				return visitVQSHLsu(N);
    case ARMISD::VQSHRNs:				return visitVQSHRNs(N);
    case ARMISD::VQSHRNu:				return visitVQSHRNu(N);
    case ARMISD::VQSHRNsu:				return visitVQSHRNsu(N);
    case ARMISD::VQRSHRNs:				return visitVQRSHRNs(N);
    case ARMISD::VQRSHRNu:				return visitVQRSHRNu(N);
    case ARMISD::VQRSHRNsu:				return visitVQRSHRNsu(N);
    case ARMISD::VSLI:					return visitVSLI(N);
    case ARMISD::VSRI:					return visitVSRI(N);
    case ARMISD::VGETLANEu:				return visitVGETLANEu(N);
    case ARMISD::VGETLANEs:				return visitVGETLANEs(N);
    case ARMISD::VMOVIMM:				return visitVMOVIMM(N);
    case ARMISD::VMVNIMM:				return visitVMVNIMM(N);
    case ARMISD::VMOVFPIMM:				return visitVMOVFPIMM(N);
    case ARMISD::VDUP:					return visitVDUP(N);
    case ARMISD::VDUPLANE:				return visitVDUPLANE(N);
    case ARMISD::VEXT:					return visitVEXT(N);
    case ARMISD::VREV64:				return visitVREV64(N);
    case ARMISD::VREV32:				return visitVREV32(N);
    case ARMISD::VREV16:				return visitVREV16(N);
    case ARMISD::VZIP:					return visitVZIP(N);
    case ARMISD::VUZP:					return visitVUZP(N);
    case ARMISD::VTRN:					return visitVTRN(N);
    case ARMISD::VTBL1:					return visitVTBL1(N);
    case ARMISD::VTBL2:					return visitVTBL2(N);
    case ARMISD::VMULLs:				return visitVMULLs(N);
    case ARMISD::VMULLu:				return visitVMULLu(N);
    case ARMISD::UMLAL:					return visitUMLAL(N);
    case ARMISD::SMLAL:					return visitSMLAL(N);
    case ARMISD::BUILD_VECTOR:			return visitBUILD_VECTOR(N);
    case ARMISD::FMAX:					return visitFMAX(N);
    case ARMISD::FMIN:					return visitFMIN(N);
    case ARMISD::VMAXNM:				return visitVMAXNM(N);
    case ARMISD::VMINNM:				return visitVMINNM(N);
    case ARMISD::BFI:					return visitBFI(N);
    case ARMISD::VORRIMM:				return visitVORRIMM(N);
    case ARMISD::VBICIMM:				return visitVBICIMM(N);
    case ARMISD::VBSL:					return visitVBSL(N);
    case ARMISD::VLD2DUP:				return visitVLD2DUP(N);
    case ARMISD::VLD3DUP:				return visitVLD3DUP(N);
    case ARMISD::VLD4DUP:				return visitVLD4DUP(N);
    case ARMISD::VLD1_UPD:				return visitVLD1_UPD(N);
    case ARMISD::VLD2_UPD:				return visitVLD2_UPD(N);
    case ARMISD::VLD3_UPD:				return visitVLD3_UPD(N);
    case ARMISD::VLD4_UPD:				return visitVLD4_UPD(N);
    case ARMISD::VLD2LN_UPD:			return visitVLD2LN_UPD(N);
    case ARMISD::VLD3LN_UPD:			return visitVLD3LN_UPD(N);
    case ARMISD::VLD4LN_UPD:			return visitVLD4LN_UPD(N);
    case ARMISD::VLD2DUP_UPD:			return visitVLD2DUP_UPD(N);
    case ARMISD::VLD3DUP_UPD:			return visitVLD3DUP_UPD(N);
    case ARMISD::VLD4DUP_UPD:			return visitVLD4DUP_UPD(N);
    case ARMISD::VST1_UPD:				return visitVST1_UPD(N);
    case ARMISD::VST2_UPD:				return visitVST2_UPD(N);
    case ARMISD::VST3_UPD:				return visitVST3_UPD(N);
    case ARMISD::VST4_UPD:				return visitVST4_UPD(N);
    case ARMISD::VST2LN_UPD:			return visitVST2LN_UPD(N);
    case ARMISD::VST3LN_UPD:			return visitVST3LN_UPD(N);
    case ARMISD::VST4LN_UPD:			return visitVST4LN_UPD(N);
  }
}