周书林 via llvm-dev
2021-Jun-18 02:06 UTC
[llvm-dev] When I got a Operator by iterating a Value's User, how can I got the relevant Instruction?
Hi Craig, I started from GlobalVaribles, so there are situations that I met the ConstantExprs, i.e. some Operators. Craig Topper <craig.topper at gmail.com> 于2021年6月18日周五 上午8:37写道:> How did you choose where you started from? An Instruction can only be used > by another Instruction, but it seems you've started from a Constant which > can be used by ConstantExprs. > > ~Craig > > > On Thu, Jun 17, 2021 at 5:25 PM 周书林 via llvm-dev <llvm-dev at lists.llvm.org> > wrote: > >> Hi Michael, >> >> Thank you very much! >> I have a further question: if I want to get the dataflow of a target >> Value, is there any way to handle these situations when iterate the >> Users?Or only by iterator all the instructions and their operands? >> >> Sincerely, >> Shulin >> >> Michael Kruse <llvmdev at meinersbur.de> 于2021年6月18日周五 上午5:11写道: >> >>> Am Do., 17. Juni 2021 um 10:24 Uhr schrieb 周书林 via llvm-dev >>> <llvm-dev at lists.llvm.org>: >>> > %39 = load i32, i32* getelementptr inbounds (%struct.TTT, %struct.TTT* >>> @ttt, i32 0, i32 2), align 8, !dbg !971 >>> >>> %39 is the LoadInst, while getelementptr is its second operand. It is >>> inlined because it is an llvm::Constant, not an instruction. Constants >>> do not participate in use/user-chains and hence there is no link from >>> GEP to the LoadInst that is using it. The constant GEP object may be >>> used by an arbitrary number of other instructions, other constants in >>> the same or other functions. >>> >>> Node that there "GEPOperator" can represent either a GetElementPtrInst >>> (i.e. an instruction) or a GEP constant expression (derived from >>> ConstantExpr) >>> >>> Michael >>> >> _______________________________________________ >> 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/20210618/4f2eb529/attachment.html>
Craig Topper via llvm-dev
2021-Jun-18 02:13 UTC
[llvm-dev] When I got a Operator by iterating a Value's User, how can I got the relevant Instruction?
I see so you want to see where the GlobalVariable is accesssed. You should be able to get the Users of the ConstantExpr as well, those will either be another ConstantExpr or an Instruction. In your example, one of the Users of the GEPOperator should be the LoadInst. ~Craig On Thu, Jun 17, 2021 at 7:06 PM 周书林 <zhoushulin1992 at gmail.com> wrote:> Hi Craig, > > I started from GlobalVaribles, so there are situations that I met the > ConstantExprs, i.e. some Operators. > > Craig Topper <craig.topper at gmail.com> 于2021年6月18日周五 上午8:37写道: > >> How did you choose where you started from? An Instruction can only be >> used by another Instruction, but it seems you've started from a Constant >> which can be used by ConstantExprs. >> >> ~Craig >> >> >> On Thu, Jun 17, 2021 at 5:25 PM 周书林 via llvm-dev <llvm-dev at lists.llvm.org> >> wrote: >> >>> Hi Michael, >>> >>> Thank you very much! >>> I have a further question: if I want to get the dataflow of a target >>> Value, is there any way to handle these situations when iterate the >>> Users?Or only by iterator all the instructions and their operands? >>> >>> Sincerely, >>> Shulin >>> >>> Michael Kruse <llvmdev at meinersbur.de> 于2021年6月18日周五 上午5:11写道: >>> >>>> Am Do., 17. Juni 2021 um 10:24 Uhr schrieb 周书林 via llvm-dev >>>> <llvm-dev at lists.llvm.org>: >>>> > %39 = load i32, i32* getelementptr inbounds (%struct.TTT, >>>> %struct.TTT* @ttt, i32 0, i32 2), align 8, !dbg !971 >>>> >>>> %39 is the LoadInst, while getelementptr is its second operand. It is >>>> inlined because it is an llvm::Constant, not an instruction. Constants >>>> do not participate in use/user-chains and hence there is no link from >>>> GEP to the LoadInst that is using it. The constant GEP object may be >>>> used by an arbitrary number of other instructions, other constants in >>>> the same or other functions. >>>> >>>> Node that there "GEPOperator" can represent either a GetElementPtrInst >>>> (i.e. an instruction) or a GEP constant expression (derived from >>>> ConstantExpr) >>>> >>>> Michael >>>> >>> _______________________________________________ >>> 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/20210617/0bb2f225/attachment.html>