[LLVMdev] inserting a fucntion call at the end of basic bloc
Nabila ABDESSAIED
nabila.abdessaied at gmail.com
Tue Apr 26 06:50:29 PDT 2011
2011/4/26 Duncan Sands <baldrick at free.fr>
> Hi Nabila,
>
>
> where did the "noalias" attribute and "tail call" (rather than "call")
>> come
>> from? Are you setting these yourself or running some optimization pass
>> after
>> your pass?
>>
>>
>> i have written a module pass and i have compiled it and then
>>
>
> you didn't answer my questions, you just repeated what you said before.
>
> Ciao, Duncan.
>
>
> opt -load /home/inspiron/PhdWork/llvm-2.8/Release/lib/Example.so
>> -Example2 <
>> hello.bc > /dev/null
>> i get the error message
>> Wrong type for attribute noalias
>> tail call void @consume(i32 noalias 3, i32* @y) nounwind
>> Broken module found, compilation aborted!
>> 0 libLLVM-2.8.so.1 0x019bc628
>> Stack dump:
>> 0.Program arguments: opt -load
>> /home/inspiron/PhdWork/llvm-2.8/Release/lib/Example.so -Example2
>> 1.Running pass 'Function Pass Manager' on module '<stdin>'.
>> 2.Running pass 'Module Verifier' on function '@main'
>> Aborted
>>
>>> No, i'm not setting them by my self
>>>
>>
>> and are you running any optimization passes? Another possibility is that
>> the
>> the problem was present already in hello.bc. Did you check that hello.bc
>> passes
>> the verifier? Did you build LLVM with assertions enabled (you should)?
>> How did
>> you add the declaration of "consume" to the module? Finally, try running
>> under
>> valgrind.
>>
>>
no I do not use any optimisation pass only my pass
hello.bc works and i have check it with lli hello.bc
no without assertion enabled
i don't want to modify the original hello.bc
if would like to apply the changes found in the pass i just put instead of
this
opt -load /home/inspiron/PhdWork/llvm-2.8/Release/lib/Example.so -Example2 <
hello.bc > /dev/null
i put this
opt -load /home/inspiron/PhdWork/llvm-2.8/Release/lib/Example.so -Example2 <
hello.bc > hello2.bc
the declaration is:
PointerType* PointerTy_0 = PointerType::get(IntegerType::get(M.getContext(),
32), 0);
std::vector<const Type*>FuncTy_3_args;
FuncTy_3_args.push_back(IntegerType::get(M.getContext(), 32));
FuncTy_3_args.push_back(PointerTy_0);
FunctionType* FuncTy_3 = FunctionType::get(
/*Result=*/Type::getVoidTy(M.getContext()),
/*Params=*/FuncTy_3_args,
/*isVarArg=*/false);
Constant *consum = M.getOrInsertFunction("consume", FuncTy_3);
llvm::Function* func_consume = llvm::cast<llvm::Function >
(consum);
func_consume ->setLinkage(GlobalValue::ExternalLinkage);
func_consume->setCallingConv(CallingConv::C);
AttrListPtr func_consume_PAL;
func_consume->setAttributes(func_consume_PAL);
i have tried to modify the method consume so that it is
void consume(int*)
and chaged the declaration also
and it works
now when i have modified the method consume like this void consume(int)
and modified the declaration
it doesn't work
I don't know valgrid:(
Sorry I always forget to clic the reply all :)
Ciao, Duncan.
>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110426/33362af6/attachment.html>
More information about the llvm-dev
mailing list