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?
Yuxi
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20150305/bd97b141/attachment.html>
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 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/20150304/dfd314d4/attachment.html>
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>
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/5b554977/attachment.html>
On 3/5/15 12:17 AM, Yuxi Chen wrote:> > 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.You should run grep on the LLVM source code to find which code is deleting the global variable (it is probably one of the LLVM optimization passes). Once you find the code that is deleting the global variable, you can look at the code and determine why it is deleting the global variable. Once you know why the global variable is being deleted, you can figure out how to keep it from being deleted (perhaps the code using it is dead, or perhaps it has the wrong linkage type, etc, etc.). Regards, John Criswell> > 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 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 > > > _______________________________________________ > LLVM Developers mailing list > 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/2fb6a950/attachment.html>