[llvm-dev] Modified LLVM IR

Sandeep Kumar Singh via llvm-dev llvm-dev at lists.llvm.org
Wed Feb 10 03:41:55 PST 2016


Hi,

My goal is to edit a C object file and introduce a new function call within
another function.
In my first post I edited IR file and then generate obj file with command,
llc -filetype=obj -o test.obj test.ll

In test.obj file I achieved my goal, but I have done this edition in IR
file manually.
I want to control this by adding some IR passes in LLVM.

I am trying to add pass as per your suggested link. I built LLVM with cmake
and now I have a question,
where I have to place .cpp file so it can build with cmake without any
error.

Thank you for your pointers,
Deepika

On Wed, Feb 10, 2016 at 4:31 PM, mats petersson <mats at planetcatfish.com>
wrote:

> So, I think we need to take one (or a dozen) step(s) back and look at what
> you are ACTUALLY trying to do. In other words, your question is a bit of an
> XY Question - like someone with a car with a punctured tyre, asking a
> mechanic how to undo the wheel nuts, because that's what immediately comes
> to mind for taking the wheel off. But you should ask "how do I fix a
> puncture" (because the right steps and order of them is more than just undo
> the nuts that hold the wheel in place).
>
> So what is your "fix a puncture" goal here?
>
> --
> Magts
>
> On 10 February 2016 at 10:49, Sandeep Kumar Singh <deepdondo007 at gmail.com>
> wrote:
>
>> Hi,
>>
>> My requirement is something like as given below,
>> a.c => a.obj contains a1() and a2() function
>> b.c => b.obj  contains b1() and b2() function
>> main.c => main.obj call to a1, a2, b1, b2
>>
>> Now, I want to move a1(), a2() from a.obj to b2.obj and on top of
>> function b1()
>> When I call b1() from main, it should call first a1, a2 and then function
>> definition of b1
>>
>> Can you please give me some pointers for my requirement.
>>
>> Thank you in advance.
>> Deepika
>>
>> On Wed, Feb 10, 2016 at 2:54 PM, mats petersson <mats at planetcatfish.com>
>> wrote:
>>
>>> This is the starting point:
>>> http://llvm.org/docs/WritingAnLLVMPass.html
>>>
>>> I suspect you want either a "FunctionPass" or a "BlockPass".
>>>
>>> The question you stil haven't answered is how you know what you are
>>> going to insert function calls for. Inserting the call itself is relatively
>>> simple, detecting the right place may or may not be simple - and this is
>>> where the above advice may not be at all meaningful - since for example
>>> modifying the AST in the Clang part of the compiler may be more suitable,
>>> since that is where you have the knowledge of what the original source code
>>> looks like, rather than LLVM IR which is more disconnected from the
>>> original source.
>>>
>>> --
>>> Mats
>>>
>>> On 10 February 2016 at 08:07, Sandeep Kumar Singh <
>>> deepdondo007 at gmail.com> wrote:
>>>
>>>> Hi,
>>>>
>>>> Yes I am looking for IR pass that will do insert call of functions that
>>>> defined in another file.
>>>> Links/suggestions that guide me to start for adding IR pass will help
>>>> me so much.
>>>>
>>>> Regards,
>>>> Deepika
>>>>
>>>> On Wed, Feb 10, 2016 at 1:03 PM, mats petersson <mats at planetcatfish.com
>>>> > wrote:
>>>>
>>>>> So how do you know what you want to modify (conceptually)?
>>>>>
>>>>> Have you got a IR pass that you are working on, or are you asking for
>>>>> links/suggestions on how to start on one?
>>>>>
>>>>> --
>>>>> Mats
>>>>>
>>>>> On 10 February 2016 at 04:04, Sandeep Kumar Singh <
>>>>> deepdondo007 at gmail.com> wrote:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I want to call/add some functions(that defined in another file) on
>>>>>> top of some functions, and reflect the same changes in object file.
>>>>>> No, I am not looking for contractor.
>>>>>>
>>>>>> Thanks,
>>>>>> Deepika
>>>>>>
>>>>>> On Tue, Feb 9, 2016 at 7:04 PM, mats petersson <
>>>>>> mats at planetcatfish.com> wrote:
>>>>>>
>>>>>>> What is the condition for adding this code?
>>>>>>>
>>>>>>> What have you tried so far? [Or are you looking for a contractor
>>>>>>> that can write code for you - I'm not sure this is quite the right place
>>>>>>> for that, but there are probably some people like that on this mailing list]
>>>>>>>
>>>>>>> --
>>>>>>> Mats
>>>>>>>
>>>>>>> On 9 February 2016 at 09:34, Sandeep Kumar Singh via llvm-dev <
>>>>>>> llvm-dev at lists.llvm.org> wrote:
>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> I want to edit LLVM generated IR file, like as given below,
>>>>>>>>
>>>>>>>> Original LLVM IR file,
>>>>>>>> @.str2 = private unnamed_addr constant [17 x i8] c"\0AI am in
>>>>>>>> one_11\0A\00", align 1
>>>>>>>>
>>>>>>>> ; Function Attrs: nounwind
>>>>>>>> define i32 @one_1(i32 %ivar1, i32 %ivar2) #0 {
>>>>>>>> entry:
>>>>>>>>   %ivar1.addr = alloca i32, align 4
>>>>>>>>   %ivar2.addr = alloca i32, align 4
>>>>>>>>   %isum = alloca i32, align 4
>>>>>>>>   store i32 %ivar1, i32* %ivar1.addr, align 4
>>>>>>>>   store i32 %ivar2, i32* %ivar2.addr, align 4
>>>>>>>>   store i32 0, i32* %isum, align 4
>>>>>>>>   %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds
>>>>>>>> ([16 x i8]* @.str, i32 0, i32 0)) #1
>>>>>>>>   %0 = load i32* %ivar1.addr, align 4
>>>>>>>>   %1 = load i32* %ivar2.addr, align 4
>>>>>>>>   %call1 = call i32 @one_11(i32 %0, i32 %1)
>>>>>>>>   store i32 %call1, i32* %isum, align 4
>>>>>>>>   %2 = load i32* %isum, align 4
>>>>>>>>   ret i32 %2
>>>>>>>> }
>>>>>>>>
>>>>>>>> Modified LLVM IR file,
>>>>>>>> @.str2 = private unnamed_addr constant [17 x i8] c"\0AI am in
>>>>>>>> one_11\0A\00", align 1
>>>>>>>> @.str3 = private unnamed_addr constant [17 x i8] c"\0AI am in
>>>>>>>> one_12\0A\00", align 1
>>>>>>>>
>>>>>>>> ; Function Attrs: nounwind
>>>>>>>> define i32 @one_1(i32 %ivar1, i32 %ivar2) #0 {
>>>>>>>> entry:
>>>>>>>>   %ivar1.addr = alloca i32, align 4
>>>>>>>>   %ivar2.addr = alloca i32, align 4
>>>>>>>>   %isum = alloca i32, align 4
>>>>>>>>   store i32 %ivar1, i32* %ivar1.addr, align 4
>>>>>>>>   store i32 %ivar2, i32* %ivar2.addr, align 4
>>>>>>>>   store i32 0, i32* %isum, align 4
>>>>>>>>   %call1 = call i32 @one_12(i32 %0, i32 %1) <==
>>>>>>>>   store i32 %call1, i32* %isum, align       <==
>>>>>>>>   %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds
>>>>>>>> ([16 x i8]* @.str, i32 0, i32 0)) #1
>>>>>>>>   %0 = load i32* %ivar1.addr, align 4
>>>>>>>>   %1 = load i32* %ivar2.addr, align 4
>>>>>>>>   %call2 = call i32 @one_11(i32 %0, i32 %1) <==
>>>>>>>>   store i32 %call2, i32* %isum, align 4     <==
>>>>>>>>   %2 = load i32* %isum, align 4
>>>>>>>>   ret i32 %2
>>>>>>>> }
>>>>>>>>
>>>>>>>> With llc tool, I want to generate object file for modified llvm ir
>>>>>>>> file and it should call function
>>>>>>>> first "one_12"" and then function "one_11".
>>>>>>>>
>>>>>>>> Can someone please tell me how I can do my above requirement.
>>>>>>>>
>>>>>>>> Thanks in advance,
>>>>>>>> Deepika
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> LLVM Developers mailing list
>>>>>>>> llvm-dev at lists.llvm.org
>>>>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>>
>>>>>> Thanks and Regards,
>>>>>> Sandeep Kumar Singh
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>>
>>>> Thanks and Regards,
>>>> Sandeep Kumar Singh
>>>>
>>>
>>>
>>
>>
>> --
>>
>> Thanks and Regards,
>> Sandeep Kumar Singh
>>
>
>


-- 

Thanks and Regards,
Sandeep Kumar Singh
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160210/502be23d/attachment.html>


More information about the llvm-dev mailing list