Tks Tom, That is my confusing part. How can I make it to "access memory” so it will HasChain? Is there any flag set like in typeProfile, Node, instructions? myLoad, mayStore, SDNPHasChain? -kevin On Jul 18, 2014, at 4:26 PM, Tom Stellard <tom at stellard.net> wrote:> On Fri, Jul 18, 2014 at 04:15:45PM -0400, kewuzhang wrote: >> sure! >> >> class TEST_INTINSIC_FM< string asmstr> : Intrinsic >> <llvm_i32_ty], [llvm_i32_ty, llvm_ptr_ty], >> [IntrReadWriteArgMem], >> !strconcat(“llvm.test”, asmstr),”.float”) >> >; > > Have a look at the SelectionDAGBuilder::visitTargetIntrinsic() > function in lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp. That is > where intrinsics are lowered to SelectionDAG nodes, so you can start > your debugging there to try to figure out why it is INSTRINSIC_WO_CHAIN. > > -Tom > >> >> tks >> On Jul 18, 2014, at 4:06 PM, Tom Stellard <tom at stellard.net> wrote: >> >>> On Fri, Jul 18, 2014 at 03:19:47PM -0400, kewuzhang wrote: >>>> en! >>>> >>>> my test is : %r1 = call<float> @test.adddiv( <float> %r0, <float>* %p0). >>>> since >>>> >>> >>> Can you show us the code from your .td file where you define the intrinsic? >>> >>> -Tom >>> >>>>>> but somehow it always fall into INTRINSIC_WO_CHAIN category. >>>> (caught it in lowering..) >>>> >>>> I think it doesn’t have chain in initial DAG. >>>> >>>> unfortunately the intrinsic “test.adddiv” is defined by me for now. not sure how to make it has a chain. >>>> >>>> kevin >>>> >>>> >>>> On Jul 18, 2014, at 3:06 PM, Krzysztof Parzyszek <kparzysz at codeaurora.org> wrote: >>>> >>>>> On 7/18/2014 2:00 PM, kewuzhang wrote: >>>>>> >>>>>> I am working on an intrinsic function, which will write to a pointer argument. >>>>>> So I am lowering it and think I need to catch it in lowerINTRINSIC_W_CHAIN, but somehow it always fall into INTRINSIC_WO_CHAIN category. >>>>>> >>>>>> I put [IntrReadwriteArgMem] into my Intrinsic class definition, it did not help. >>>>>> tried put [SDNPHasChain] into intrinsic class definition, cause errors” Element type mismatch for list”. >>>>>> >>>>>> wondering how to flag it to INTRINSIC_W_CHAIN? >>>>> >>>>> >>>>> Does it have chain in the initial DAG? >>>>> >>>>> -Krzysztof >>>>> >>>>> >>>>> -- >>>>> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation >>>>> _______________________________________________ >>>>> LLVM Developers mailing list >>>>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >>>> >>>> >>>> _______________________________________________ >>>> LLVM Developers mailing list >>>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >>
I mean, " SelectionDAGBuilder::visitTargetIntrinsic()" called " bool HasChain = !I.doesNotAccessMemory();" first. So I think I must did not set up the "access memory kind flag" earlier. But what can I do to set it up? thought should be in Intrinsic definition, instruction definition..... but failed to make it right. X86 has it... did not quite understand ... any simple example out there ? many many tks! Kevin ________________________________________ From: llvmdev-bounces at cs.uiuc.edu [llvmdev-bounces at cs.uiuc.edu] on behalf of Zhang, Kewu Sent: Friday, July 18, 2014 5:07 PM To: Tom Stellard Cc: llvmdev at cs.uiuc.edu Subject: Re: [LLVMdev] how to define INTRINSIC_W_CHAIN Tks Tom, That is my confusing part. How can I make it to "access memory” so it will HasChain? Is there any flag set like in typeProfile, Node, instructions? myLoad, mayStore, SDNPHasChain? -kevin On Jul 18, 2014, at 4:26 PM, Tom Stellard <tom at stellard.net> wrote:> On Fri, Jul 18, 2014 at 04:15:45PM -0400, kewuzhang wrote: >> sure! >> >> class TEST_INTINSIC_FM< string asmstr> : Intrinsic >> <llvm_i32_ty], [llvm_i32_ty, llvm_ptr_ty], >> [IntrReadWriteArgMem], >> !strconcat(“llvm.test”, asmstr),”.float”) >> >; > > Have a look at the SelectionDAGBuilder::visitTargetIntrinsic() > function in lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp. That is > where intrinsics are lowered to SelectionDAG nodes, so you can start > your debugging there to try to figure out why it is INSTRINSIC_WO_CHAIN. > > -Tom > >> >> tks >> On Jul 18, 2014, at 4:06 PM, Tom Stellard <tom at stellard.net> wrote: >> >>> On Fri, Jul 18, 2014 at 03:19:47PM -0400, kewuzhang wrote: >>>> en! >>>> >>>> my test is : %r1 = call<float> @test.adddiv( <float> %r0, <float>* %p0). >>>> since >>>> >>> >>> Can you show us the code from your .td file where you define the intrinsic? >>> >>> -Tom >>> >>>>>> but somehow it always fall into INTRINSIC_WO_CHAIN category. >>>> (caught it in lowering..) >>>> >>>> I think it doesn’t have chain in initial DAG. >>>> >>>> unfortunately the intrinsic “test.adddiv” is defined by me for now. not sure how to make it has a chain. >>>> >>>> kevin >>>> >>>> >>>> On Jul 18, 2014, at 3:06 PM, Krzysztof Parzyszek <kparzysz at codeaurora.org> wrote: >>>> >>>>> On 7/18/2014 2:00 PM, kewuzhang wrote: >>>>>> >>>>>> I am working on an intrinsic function, which will write to a pointer argument. >>>>>> So I am lowering it and think I need to catch it in lowerINTRINSIC_W_CHAIN, but somehow it always fall into INTRINSIC_WO_CHAIN category. >>>>>> >>>>>> I put [IntrReadwriteArgMem] into my Intrinsic class definition, it did not help. >>>>>> tried put [SDNPHasChain] into intrinsic class definition, cause errors” Element type mismatch for list”. >>>>>> >>>>>> wondering how to flag it to INTRINSIC_W_CHAIN? >>>>> >>>>> >>>>> Does it have chain in the initial DAG? >>>>> >>>>> -Krzysztof >>>>> >>>>> >>>>> -- >>>>> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation >>>>> _______________________________________________ >>>>> LLVM Developers mailing list >>>>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >>>> >>>> >>>> _______________________________________________ >>>> LLVM Developers mailing list >>>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >>_______________________________________________ LLVM Developers mailing list LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
On Sun, Jul 20, 2014 at 09:50:47PM +0000, Zhang, Kewu wrote:> I mean, > " > SelectionDAGBuilder::visitTargetIntrinsic()" > > called > " bool HasChain = !I.doesNotAccessMemory();" > first. > > > So I think I must did not set up the "access memory kind flag" earlier. > But what can I do to set it up? > thought should be in Intrinsic definition, instruction definition..... but failed to make it right. > > X86 has it... did not quite understand ... > > any simple example out there ? >You will have to look at the code to see what it does, but I think that value of I.doesNotAccessMemory() depends on how the intrinsic was defined in LLVM IR and not how it was defined in TableGen. Can you provide the LLVM IR you are trying to compile. -Tom> > many many tks! > > Kevin > > > ________________________________________ > From: llvmdev-bounces at cs.uiuc.edu [llvmdev-bounces at cs.uiuc.edu] on behalf of Zhang, Kewu > Sent: Friday, July 18, 2014 5:07 PM > To: Tom Stellard > Cc: llvmdev at cs.uiuc.edu > Subject: Re: [LLVMdev] how to define INTRINSIC_W_CHAIN > > Tks Tom, > > That is my confusing part. How can I make it to "access memory” so it will HasChain? > > Is there any flag set like in typeProfile, Node, instructions? myLoad, mayStore, SDNPHasChain? > > > -kevin > On Jul 18, 2014, at 4:26 PM, Tom Stellard <tom at stellard.net> wrote: > > > On Fri, Jul 18, 2014 at 04:15:45PM -0400, kewuzhang wrote: > >> sure! > >> > >> class TEST_INTINSIC_FM< string asmstr> : Intrinsic > >> <llvm_i32_ty], [llvm_i32_ty, llvm_ptr_ty], > >> [IntrReadWriteArgMem], > >> !strconcat(“llvm.test”, asmstr),”.float”) > >> >; > > > > Have a look at the SelectionDAGBuilder::visitTargetIntrinsic() > > function in lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp. That is > > where intrinsics are lowered to SelectionDAG nodes, so you can start > > your debugging there to try to figure out why it is INSTRINSIC_WO_CHAIN. > > > > -Tom > > > >> > >> tks > >> On Jul 18, 2014, at 4:06 PM, Tom Stellard <tom at stellard.net> wrote: > >> > >>> On Fri, Jul 18, 2014 at 03:19:47PM -0400, kewuzhang wrote: > >>>> en! > >>>> > >>>> my test is : %r1 = call<float> @test.adddiv( <float> %r0, <float>* %p0). > >>>> since > >>>> > >>> > >>> Can you show us the code from your .td file where you define the intrinsic? > >>> > >>> -Tom > >>> > >>>>>> but somehow it always fall into INTRINSIC_WO_CHAIN category. > >>>> (caught it in lowering..) > >>>> > >>>> I think it doesn’t have chain in initial DAG. > >>>> > >>>> unfortunately the intrinsic “test.adddiv” is defined by me for now. not sure how to make it has a chain. > >>>> > >>>> kevin > >>>> > >>>> > >>>> On Jul 18, 2014, at 3:06 PM, Krzysztof Parzyszek <kparzysz at codeaurora.org> wrote: > >>>> > >>>>> On 7/18/2014 2:00 PM, kewuzhang wrote: > >>>>>> > >>>>>> I am working on an intrinsic function, which will write to a pointer argument. > >>>>>> So I am lowering it and think I need to catch it in lowerINTRINSIC_W_CHAIN, but somehow it always fall into INTRINSIC_WO_CHAIN category. > >>>>>> > >>>>>> I put [IntrReadwriteArgMem] into my Intrinsic class definition, it did not help. > >>>>>> tried put [SDNPHasChain] into intrinsic class definition, cause errors” Element type mismatch for list”. > >>>>>> > >>>>>> wondering how to flag it to INTRINSIC_W_CHAIN? > >>>>> > >>>>> > >>>>> Does it have chain in the initial DAG? > >>>>> > >>>>> -Krzysztof > >>>>> > >>>>> > >>>>> -- > >>>>> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation > >>>>> _______________________________________________ > >>>>> LLVM Developers mailing list > >>>>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > >>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > >>>> > >>>> > >>>> _______________________________________________ > >>>> LLVM Developers mailing list > >>>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > >>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > >> > > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev