Hi John,
Thanks for your reply. “While deleting” is not in my code.
I have carefully checked my pass code, and test.bc which I will run for test, there is no global variable named myFlag. It’s a bit weird. This global variable is added by myself in the pass. And the operation I do is just to load the global variable and store it. I really do not know the reason.
Module* JFIX::insertCounterMod(Module* mod,Instruction* OptAplusOne,Value* pthreadPID){ //insert myPid[flag++] = pid,after Operation A
//type definition, myPid[20]
ArrayType* ArrayTy_3 = ArrayType::get(IntegerType::get(mod->getContext(), 64), 20);
ConstantInt* const_int32_20 = ConstantInt::get(mod->getContext(), APInt(32, StringRef(“0”), 10)); //constant definition
ConstantAggregateZero* const_array_23 = ConstantAggregateZero::get(ArrayTy_3);
ConstantInt* const_int32_24 = ConstantInt::get(mod->getContext(), APInt(32, StringRef(“1”), 10));
GlobalVariable* gvar_int32_myFlag = getGlobalFromMap(mod->getModuleIdentifier(),“myFlag”);
GlobalVariable* gvar_array_myPid = getGlobalFromMap(mod->getModuleIdentifier(),“myPid”);
gvar_int32_myFlag->setInitializer(const_int32_20); //Global Variable Definitions
gvar_array_myPid->setInitializer(const_array_23);
gvar_int32_myFlag->dump();
gvar_array_myPid->dump();
LoadInst* int64_64 = new LoadInst(pthreadPID, “”, false, OptAplusOne); //do myPid[flag++] = pthreadID
int64_64->setAlignment(8);
LoadInst* int32_65 = new LoadInst(gvar_int32_myFlag, “”, false, OptAplusOne);
int32_65->setAlignment(4);
BinaryOperator* int32_inc = BinaryOperator::Create(Instruction::Add, int32_65, const_int32_24, “inc”, OptAplusOne);
StoreInst* void_66 = new StoreInst(int32_inc, gvar_int32_myFlag, false, OptAplusOne);
void_66->setAlignment(4);
CastInst* int64_idxprom = new SExtInst(int32_65, IntegerType::get(mod->getContext(), 64), “idxprom”, OptAplusOne);
std::vector<Value*> ptr_arrayidx_indices;
ptr_arrayidx_indices.push_back(const_int32_20);
ptr_arrayidx_indices.push_back(int64_idxprom);
Instruction* ptr_arrayidx = GetElementPtrInst::Create(gvar_array_myPid, ptr_arrayidx_indices, “arrayidx”, OptAplusOne);
StoreInst* void_67 = new StoreInst(int64_64, ptr_arrayidx, false, OptAplusOne);
void_67->setAlignment(8);
return mod;
}
Best,
Yuxi