[LLVMdev] StructReturnToPointer in poolalloc failing with LLVM 3.4

John Criswell criswell at illinois.edu
Sun Mar 16 13:27:01 PDT 2014


On 3/14/14 4:06 PM, Zvonimir Rakamaric wrote:
> Hi,
>
> I've been happily using DSA in a project of mine for quite a while
> now, and recently I noticed that the functionality of
> StructReturnToPointer could be useful to me as well.

DSA isn't supported for LLVM 3.4 yet.  The release_32 branch works with 
LLVM 3.2, and I think the trunk branch compiles with LLVM 3.3 (although 
I haven't used that branch much myself yet).

If you want to use DSA, you'll either need to update it to work with 
LLVM 3.4 or stick with an earlier version of LLVM with which it works.

As far as your specific question on the attribute code, I'm not 
sufficiently familiar with LLVM 3.4 to know why it's not working. If I 
had to take a guess, I'd say that you might want to dump 
F->getAttributes().getParamAttributes(II->getArgNo()) to see if the "+ 
1" in the last line is an off-by-one error.

Sorry I don't know what wrong with particular piece of code,

John Criswell

>
> So I tried using it on a simple example, but I keep getting the
> following exception:
>
> smack: /home/zvonimir/projects/smack-project/llvm/src/lib/IR/Attributes.cpp:912:
> unsigned int llvm::AttributeSet::getSlotIndex(unsigned int) const:
> Assertion `pImpl && Slot < pImpl->getNumAttributes() && "Slot # out of
> range!"' failed.
> 0  smack           0x0000000000a38982 llvm::sys::PrintStackTrace(_IO_FILE*) + 34
> 1  smack           0x0000000000a37d69
> 2  libpthread.so.0 0x00007fc770d81cb0
> 3  libc.so.6       0x00007fc76fdab425 gsignal + 53
> 4  libc.so.6       0x00007fc76fdaeb8b abort + 379
> 5  libc.so.6       0x00007fc76fda40ee
> 6  libc.so.6       0x00007fc76fda4192
> 7  smack           0x000000000090164f
> 8  smack           0x000000000099a984
> llvm::Argument::addAttr(llvm::AttributeSet) + 36
> 9  smack           0x000000000050f294
> llvm::StructRet::runOnModule(llvm::Module&) + 2180
> 10 smack           0x00000000009c2e1f
> llvm::legacy::PassManagerImpl::run(llvm::Module&) + 927
> 11 smack           0x000000000048d448 main + 840
> 12 libc.so.6       0x00007fc76fd9676d __libc_start_main + 237
>
>
>
> Basically, there is a problem with the following piece of code, and I
> suspect it might be due to upgrading to LLVM 3.4:
>      ValueToValueMapTy ValueMap;
>      Function::arg_iterator NI = NF->arg_begin();
>      NI->setName("ret");
>      ++NI;
>      for (Function::arg_iterator II = F->arg_begin(); II !=
> F->arg_end(); ++II, ++NI) {
>        ValueMap[II] = NI;
>        NI->setName(II->getName());
>        NI->addAttr(F->getAttributes().getParamAttributes(II->getArgNo() + 1));
>      }
>
> I've tried to fix this, but no luck so far, and so help would be great
> appreciated.
>
> Thanks!
>
> -- Zvonimir
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev




More information about the llvm-dev mailing list