[LLVMdev] global variable
Yuxi Chen
chenyuxi at uchicago.edu
Wed Mar 4 21:17:25 PST 2015
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
________________________________
From: John Criswell [jtcriswel at gmail.com]
Sent: Wednesday, March 04, 2015 9:48 PM
To: Yuxi Chen; llvmdev at cs.uiuc.edu
Subject: Re: [LLVMdev] global variable
On 3/4/15 10:13 PM, Yuxi Chen wrote:
Hi all,
I am newbie for llvm. I just create a global variable, there are some statements in my pass like:
LoadInst* int64_64 = new LoadInst(pthreadPID, "", false, OptAplusOne);
int64_64->setAlignment(8);
int64_64->dump();
LoadInst* int32_65 = new LoadInst(gvar_int32_myFlag, "", false, OptAplusOne);
int32_65->setAlignment(4);
int32_65->dump();
But when I run my pass, it generates an error, I don't know why.
@myFlag = global i32 0, align 4
@myPid = common global [20 x i64] zeroinitializer, align 16 //this is the global,
%117 = load i64* %t, align 8
%118 = load i32* @myFlag, align 4
While deleting: i32* %myFlag
Use still stuck around after Def is destroyed:@myFlag = global i32 <null operand!>, align 4
I am sure I initialize the global variable myFlag, I don't delete this global variable.
Can anyone give some hints, or suggestions?
What code is printing the "While deleting:" text? Is it your code that prints that, or is it some existing LLVM pass?
It looks like something is trying to remove the myFlag global variable, but I don't know what code is trying to do that. I suggest you find that code and figure out why it's trying to remove a global variable that you're still using.
Regards,
John Criswell
Yuxi
_______________________________________________
LLVM Developers mailing list
LLVMdev at cs.uiuc.edu<mailto:LLVMdev at cs.uiuc.edu> http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
--
John Criswell
Assistant Professor
Department of Computer Science, University of Rochester
http://www.cs.rochester.edu/u/criswell
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150305/6acab1cc/attachment.html>
More information about the llvm-dev
mailing list