On Mar 1, 2010, at 10:52 AM, Richard Osborne wrote:> On 23/02/10 14:58, Richard Osborne wrote: >> I've recently changed the XCore target to implement BR_JT as a jump to a >> series jumps. The jump table entries are expand inline in the function >> so there is no longer a need to emit jump tables at the end of the >> function. However the emission of jump tables at the end of a function >> is done inside the AsmPrinter base class and there seems to be no way of >> disabling this. >> >> This also seems to effect code produced for ARM Thumb2. Again each jump >> table is emitted twice - once inline in the code and once at the end of >> the function. The jump tables at the end of the function are unused. >> >> What would be the preferred way of dealing with this? Should I add a >> variable to AsmPrinter that can be set by targets to disable this >> emission at the end? > The attached patch adds a bool to MCAsmInfo that can be used to disable the emission of jump tables at the end of a function and updates the XCore target to set this. Is this OK to commit?Hi Richard, This shouldn't go into MCAsmInfo, it's a "lowering" issue, not a "assembly syntax" issue. ARM also has inline jump tables, how does it work? -Chris
On 01/03/10 21:14, Chris Lattner wrote:> On Mar 1, 2010, at 10:52 AM, Richard Osborne wrote: > >> On 23/02/10 14:58, Richard Osborne wrote: >> >>> I've recently changed the XCore target to implement BR_JT as a jump to a >>> series jumps. The jump table entries are expand inline in the function >>> so there is no longer a need to emit jump tables at the end of the >>> function. However the emission of jump tables at the end of a function >>> is done inside the AsmPrinter base class and there seems to be no way of >>> disabling this. >>> >>> This also seems to effect code produced for ARM Thumb2. Again each jump >>> table is emitted twice - once inline in the code and once at the end of >>> the function. The jump tables at the end of the function are unused. >>> >>> What would be the preferred way of dealing with this? Should I add a >>> variable to AsmPrinter that can be set by targets to disable this >>> emission at the end? >>> >> The attached patch adds a bool to MCAsmInfo that can be used to disable the emission of jump tables at the end of a function and updates the XCore target to set this. Is this OK to commit? >> > Hi Richard, > > This shouldn't go into MCAsmInfo, it's a "lowering" issue, not a "assembly syntax" issue. ARM also has inline jump tables, how does it work? > > -ChrisI've attached the result of running llc -march=arm on test/CodeGen/XCore/switch.ll. The jump table entries are emitted twice, once inside the function after the label .LJTI1_0_0 and then again outside the function after the label .LJTI1_0. The .LJTI1_0 label at the start of the second set of jumptable entries is completely unreferenced. Given that MCAsmInfo is the wrong place would it make sense to describe it instead as a separate type of jump table encoding and add it to the MachineJumpTableInfo::JTEntryKind enum? -- Richard Osborne | XMOS http://www.xmos.com -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: switch.s URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20100302/dc46f567/attachment.ksh>
On Mar 1, 2010, at 4:09 PM, Richard Osborne wrote:> On 01/03/10 21:14, Chris Lattner wrote: >> On Mar 1, 2010, at 10:52 AM, Richard Osborne wrote: >> >>> On 23/02/10 14:58, Richard Osborne wrote: >>> >>>> I've recently changed the XCore target to implement BR_JT as a jump to a >>>> series jumps. The jump table entries are expand inline in the function >>>> so there is no longer a need to emit jump tables at the end of the >>>> function. However the emission of jump tables at the end of a function >>>> is done inside the AsmPrinter base class and there seems to be no way of >>>> disabling this. >>>> >>>> This also seems to effect code produced for ARM Thumb2. Again each jump >>>> table is emitted twice - once inline in the code and once at the end of >>>> the function. The jump tables at the end of the function are unused. >>>> >>>> What would be the preferred way of dealing with this? Should I add a >>>> variable to AsmPrinter that can be set by targets to disable this >>>> emission at the end? >>>> >>> The attached patch adds a bool to MCAsmInfo that can be used to disable the emission of jump tables at the end of a function and updates the XCore target to set this. Is this OK to commit? >>> >> Hi Richard, >> >> This shouldn't go into MCAsmInfo, it's a "lowering" issue, not a "assembly syntax" issue. ARM also has inline jump tables, how does it work? >> >> -Chris > I've attached the result of running llc -march=arm on test/CodeGen/XCore/switch.ll. The jump table entries are emitted twice, once inside the function after the label .LJTI1_0_0 and then again outside the function after the label .LJTI1_0. The .LJTI1_0 label at the start of the second set of jumptable entries is completely unreferenced. >Interesting. Any idea when that started happening? I'm pretty sure that didn't used to be the case. -Jim> Given that MCAsmInfo is the wrong place would it make sense to describe it instead as a separate type of jump table encoding and add it to the MachineJumpTableInfo::JTEntryKind enum?