Exemplo n.º 1
0
static inline uint64_t
sd_getNumberFromMDTuple(const MDOperand& op) {
  Metadata* md = op.get();
  assert(md);
  ConstantAsMetadata* cam = dyn_cast_or_null<ConstantAsMetadata>(md);
  assert(cam);
  ConstantInt* ci = dyn_cast<ConstantInt>(cam->getValue());
  assert(ci);

  return ci->getSExtValue();
}
Exemplo n.º 2
0
// Parse an MDTuple representing (Key, Val) pair.
static bool getVal(MDTuple *MD, const char *Key, uint64_t &Val) {
  if (!MD)
    return false;
  if (MD->getNumOperands() != 2)
    return false;
  MDString *KeyMD = dyn_cast<MDString>(MD->getOperand(0));
  ConstantAsMetadata *ValMD = dyn_cast<ConstantAsMetadata>(MD->getOperand(1));
  if (!KeyMD || !ValMD)
    return false;
  if (!KeyMD->getString().equals(Key))
    return false;
  Val = cast<ConstantInt>(ValMD->getValue())->getZExtValue();
  return true;
}
Exemplo n.º 3
0
bool TaskDebugBranchCheck::hasAnnotation(Instruction* i, Value *V, StringRef Ann, uint8_t level) {
  // Check instruction metadata.
  //errs() << "0th If\n";
  if (Instruction *I = dyn_cast<Instruction>(V)) {

    if (I->getOpcode() == Instruction::GetElementPtr) {
      MDNode *MD = i->getMetadata("tyann");
      if (MD) {
        MDString *MDS = cast<MDString>(MD->getOperand(0));
        if (MDS->getString().equals(Ann)) {
          return true;
        } else
          return false;
      } else
        return false;
    }

    MDNode *MD = I->getMetadata("tyann");
    //errs() << *V << " 1st If\n";
    if (MD) {
      //errs() << "2nd If\n";
      MDString *MDS = cast<MDString>(MD->getOperand(0));
      if (MDS->getString().equals(Ann)) {
	//errs() << "3rd If\n";
	//return true;
	#if 1
        ConstantAsMetadata *CAM = cast<ConstantAsMetadata>(MD->getOperand(1));
        ConstantInt *CI = cast<ConstantInt>(CAM->getValue());
        if (CI->getValue() == level) {
	  //errs() << CI->getValue() << "Level true\n";
          return true;
        } else {
	  //errs() << CI->getValue() << "Level false\n";
          return false;
        }
	#endif
      }
    }
  } else if (GlobalValue *G = dyn_cast<GlobalValue>(V)) {
    MDNode *MD = i->getMetadata("tyann");
    if (MD) {
      //errs() << "2nd If\n";
      MDString *MDS = cast<MDString>(MD->getOperand(0));
      if (MDS->getString().equals(Ann)) {
	//errs() << "3rd If\n";
	return true;
	#if 0
        ConstantAsMetadata *CAM = cast<ConstantAsMetadata>(MD->getOperand(1));
        ConstantInt *CI = cast<ConstantInt>(CAM->getValue());
        if (CI->getValue() == level) {
	  //errs() << CI->getValue() << "Level true\n";
          return true;
        } else {
	  //errs() << CI->getValue() << "Level false\n";
          return false;
        }
	#endif
      }
    }    
  }

  // TODO: Check for annotations on globals, parameters.

  return false;
}