Hello, I am trying to reset the operands of instructions. What I am doing is, I am finding all Uses of a specific operand in an Instruction and resetting it with a new value using "setOperands(int, Value*)". I am doing as: for (auto vmitr=vm.begin(), vsitr=vs.begin(); vmitr!=vm.end() && vsitr!=vs.end(); vmitr++, vsitr++){ // I have two *Value ( operands) for ( auto myitr =(*vsitr)->user_begin(); myitr!=(*vsitr)->user_end(); ++myitr){ // Finding the uses of one operand for ( int k = 0; k < (*myitr)->getNumOperands(); k++){ // going through the operands of the Instructions that uses it if ((*myitr)->getOperand(k) == *vsitr){ // Find the operand and its position in the instruction (*myitr)->setOperand(k,*vmitr); // Replacing it with the other operand value } } } The problem is that it goes into the end loop. ps. *vsitr and *vmitr are arguments of different call instructions but pointing to the same values. Thanks -- Abid M. Malik ****************************************************** "I have learned silence from the talkative, toleration from the intolerant, and kindness from the unkind"---Gibran "Success is not for the chosen few, but for the few who choose" --- John Maxwell "Being a good person does not depend on your religion or status in life, your race or skin color, political views or culture. IT DEPENDS ON HOW GOOD YOU TREAT OTHERS"--- Abid "The Universe is talking to us, and the language of the Universe is mathematics."----Abid -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200213/f522053a/attachment.html>
Value::replaceAllUsesWith(Value*) ? On Thu, Feb 13, 2020, 7:24 AM Abid Malik via llvm-dev < llvm-dev at lists.llvm.org> wrote:> Hello, > > I am trying to reset the operands of instructions. What I am doing is, I > am finding all Uses of a specific operand in an Instruction and resetting > it with a new value using "setOperands(int, Value*)". I am doing as: > > for (auto vmitr=vm.begin(), vsitr=vs.begin(); vmitr!=vm.end() && > vsitr!=vs.end(); vmitr++, vsitr++){ > // I have two *Value ( operands) > > for ( auto myitr =(*vsitr)->user_begin(); myitr!=(*vsitr)->user_end(); > ++myitr){ > // Finding the uses of one operand > for ( int k = 0; k < (*myitr)->getNumOperands(); k++){ > // going through the operands of the Instructions that uses it > if ((*myitr)->getOperand(k) == *vsitr){ > // Find the operand and its position in the instruction > (*myitr)->setOperand(k,*vmitr); > // Replacing it with the other operand value > } > } > > } > > The problem is that it goes into the end loop. > ps. *vsitr and *vmitr are arguments of different call instructions but > pointing to the same values. > > Thanks > -- > Abid M. Malik > ****************************************************** > "I have learned silence from the talkative, toleration from the > intolerant, and kindness from the unkind"---Gibran > "Success is not for the chosen few, but for the few who choose" --- John > Maxwell > "Being a good person does not depend on your religion or status in life, > your race or skin color, political views or culture. IT DEPENDS ON HOW GOOD > YOU TREAT OTHERS"--- Abid > "The Universe is talking to us, and the language of the Universe is > mathematics."----Abid > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200213/99f70fc0/attachment.html>
Thanks I tried it and it also went to an endless loop. Here is an example of what I am trying to achieve: *store i32 0, i32* %15, align 4 call void @__kmpc_for_static_init_4(%struct.ident_t* @0, i32 %17, i32 34, i32* %15, i32* %12, i32* %13, i32* %14, i32 1, i32 1) %41 = load i32, i32* %13, align 4* I am trying to replace *i32* %15 and i32* %13 with another operand values say i32* %18 and i32* 23. FYI, i32* %15== i32* %18 and . i32* %18==i32* %23 in terms of content values.* On Thu, Feb 13, 2020 at 7:28 AM Ryan Taylor <ryta1203 at gmail.com> wrote:> Value::replaceAllUsesWith(Value*) ? > > On Thu, Feb 13, 2020, 7:24 AM Abid Malik via llvm-dev < > llvm-dev at lists.llvm.org> wrote: > >> Hello, >> >> I am trying to reset the operands of instructions. What I am doing is, I >> am finding all Uses of a specific operand in an Instruction and resetting >> it with a new value using "setOperands(int, Value*)". I am doing as: >> >> for (auto vmitr=vm.begin(), vsitr=vs.begin(); vmitr!=vm.end() && >> vsitr!=vs.end(); vmitr++, vsitr++){ >> // I have two *Value ( operands) >> >> for ( auto myitr =(*vsitr)->user_begin(); myitr!=(*vsitr)->user_end(); >> ++myitr){ >> // Finding the uses of one operand >> for ( int k = 0; k < (*myitr)->getNumOperands(); k++){ >> // going through the operands of the Instructions that uses it >> if ((*myitr)->getOperand(k) == *vsitr){ >> // Find the operand and its position in the instruction >> (*myitr)->setOperand(k,*vmitr); >> // Replacing it with the other operand value >> } >> } >> >> } >> >> The problem is that it goes into the end loop. >> ps. *vsitr and *vmitr are arguments of different call instructions but >> pointing to the same values. >> >> Thanks >> -- >> Abid M. Malik >> ****************************************************** >> "I have learned silence from the talkative, toleration from the >> intolerant, and kindness from the unkind"---Gibran >> "Success is not for the chosen few, but for the few who choose" --- John >> Maxwell >> "Being a good person does not depend on your religion or status in life, >> your race or skin color, political views or culture. IT DEPENDS ON HOW GOOD >> YOU TREAT OTHERS"--- Abid >> "The Universe is talking to us, and the language of the Universe is >> mathematics."----Abid >> >> _______________________________________________ >> LLVM Developers mailing list >> llvm-dev at lists.llvm.org >> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >> >-- Abid M. Malik ****************************************************** "I have learned silence from the talkative, toleration from the intolerant, and kindness from the unkind"---Gibran "Success is not for the chosen few, but for the few who choose" --- John Maxwell "Being a good person does not depend on your religion or status in life, your race or skin color, political views or culture. IT DEPENDS ON HOW GOOD YOU TREAT OTHERS"--- Abid "The Universe is talking to us, and the language of the Universe is mathematics."----Abid -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200213/1c55afca/attachment.html>
Right, so you are replacing a Value with the same Value, thus an endless loop. On Thu, Feb 13, 2020 at 8:02 AM Abid Malik <abidmuslim at gmail.com> wrote:> They are different pointers but have the same values. E.g same loop > iteration step but different opemmp for a loop. So we have different > pointers but they are pointing to the same value. > > Thanks, > Abid > > On Thu, Feb 13, 2020 at 7:54 AM Ryan Taylor <ryta1203 at gmail.com> wrote: > >> Are you replacing the value with the same value? >> >> On Thu, Feb 13, 2020, 7:40 AM Abid Malik <abidmuslim at gmail.com> wrote: >> >>> Thanks >>> I tried it and it also went to an endless loop. Here is an example of >>> what I am trying to achieve: >>> >>> >>> >>> *store i32 0, i32* %15, align 4 call void >>> @__kmpc_for_static_init_4(%struct.ident_t* @0, i32 %17, i32 34, i32* %15, >>> i32* %12, i32* %13, i32* %14, i32 1, i32 1) %41 = load i32, i32* %13, >>> align 4* >>> >>> I am trying to replace *i32* %15 and i32* %13 with another operand >>> values say i32* %18 and i32* 23. FYI, i32* %15== i32* %18 and . i32* >>> %18==i32* %23 in terms of content values.* >>> >>> >>> On Thu, Feb 13, 2020 at 7:28 AM Ryan Taylor <ryta1203 at gmail.com> wrote: >>> >>>> Value::replaceAllUsesWith(Value*) ? >>>> >>>> On Thu, Feb 13, 2020, 7:24 AM Abid Malik via llvm-dev < >>>> llvm-dev at lists.llvm.org> wrote: >>>> >>>>> Hello, >>>>> >>>>> I am trying to reset the operands of instructions. What I am doing is, >>>>> I am finding all Uses of a specific operand in an Instruction and resetting >>>>> it with a new value using "setOperands(int, Value*)". I am doing as: >>>>> >>>>> for (auto vmitr=vm.begin(), vsitr=vs.begin(); vmitr!=vm.end() && >>>>> vsitr!=vs.end(); vmitr++, vsitr++){ >>>>> // I have two *Value ( operands) >>>>> >>>>> for ( auto myitr =(*vsitr)->user_begin(); myitr!=(*vsitr)->user_end(); >>>>> ++myitr){ >>>>> // Finding the uses of one operand >>>>> for ( int k = 0; k < (*myitr)->getNumOperands(); k++){ >>>>> // going through the operands of the Instructions that uses it >>>>> if ((*myitr)->getOperand(k) == *vsitr){ >>>>> // Find the operand and its position in the instruction >>>>> (*myitr)->setOperand(k,*vmitr); >>>>> // Replacing it with the other operand value >>>>> } >>>>> } >>>>> >>>>> } >>>>> >>>>> The problem is that it goes into the end loop. >>>>> ps. *vsitr and *vmitr are arguments of different call instructions but >>>>> pointing to the same values. >>>>> >>>>> Thanks >>>>> -- >>>>> Abid M. Malik >>>>> ****************************************************** >>>>> "I have learned silence from the talkative, toleration from the >>>>> intolerant, and kindness from the unkind"---Gibran >>>>> "Success is not for the chosen few, but for the few who choose" --- >>>>> John Maxwell >>>>> "Being a good person does not depend on your religion or status in >>>>> life, your race or skin color, political views or culture. IT DEPENDS ON >>>>> HOW GOOD YOU TREAT OTHERS"--- Abid >>>>> "The Universe is talking to us, and the language of the Universe is >>>>> mathematics."----Abid >>>>> >>>>> _______________________________________________ >>>>> LLVM Developers mailing list >>>>> llvm-dev at lists.llvm.org >>>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >>>>> >>>> >>> >>> -- >>> Abid M. Malik >>> ****************************************************** >>> "I have learned silence from the talkative, toleration from the >>> intolerant, and kindness from the unkind"---Gibran >>> "Success is not for the chosen few, but for the few who choose" --- John >>> Maxwell >>> "Being a good person does not depend on your religion or status in life, >>> your race or skin color, political views or culture. IT DEPENDS ON HOW GOOD >>> YOU TREAT OTHERS"--- Abid >>> "The Universe is talking to us, and the language of the Universe is >>> mathematics."----Abid >>> >>> >> > > -- > Abid M. Malik > ****************************************************** > "I have learned silence from the talkative, toleration from the > intolerant, and kindness from the unkind"---Gibran > "Success is not for the chosen few, but for the few who choose" --- John > Maxwell > "Being a good person does not depend on your religion or status in life, > your race or skin color, political views or culture. IT DEPENDS ON HOW GOOD > YOU TREAT OTHERS"--- Abid > "The Universe is talking to us, and the language of the Universe is > mathematics."----Abid > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200213/2bc06fa2/attachment.html>