[LLVMdev] global variable

Yuxi Chen chenyuxi at uchicago.edu
Wed Mar 4 21:19:05 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


    LoadInst* int64_64 = new LoadInst(pthreadPID, "", false, OptAplusOne);   //do myPid[flag++] = pthreadID
    LoadInst* int32_65 = new LoadInst(gvar_int32_myFlag, "", false, OptAplusOne);
    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);
    CastInst* int64_idxprom = new SExtInst(int32_65, IntegerType::get(mod->getContext(), 64), "idxprom", OptAplusOne);
    std::vector<Value*> ptr_arrayidx_indices;
    Instruction* ptr_arrayidx = GetElementPtrInst::Create(gvar_array_myPid, ptr_arrayidx_indices, "arrayidx", OptAplusOne);
    StoreInst* void_67 = new StoreInst(int64_64, ptr_arrayidx, false, OptAplusOne);
    return mod;


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);

    LoadInst* int32_65 = new LoadInst(gvar_int32_myFlag, "", false, OptAplusOne);


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.


John Criswell


LLVM Developers mailing list
LLVMdev at cs.uiuc.edu<mailto:LLVMdev at cs.uiuc.edu>         http://llvm.cs.uiuc.edu

John Criswell
Assistant Professor
Department of Computer Science, University of Rochester
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150305/5b554977/attachment.html>

More information about the llvm-dev mailing list