[llvm-commits] [PATCH] Fix NOP encodings in ARM backend.

Jim Grosbach grosbach at apple.com
Mon Aug 15 10:47:02 PDT 2011


Hi Kristof,

This is a lot closer. Using Target/TargetSubtargetInfo.h is a layering violation, however. Nothing in the MC layer, which includes the AsmBackend, should reference anything in the Target layer. In this case, just include MC/MCSubtargetInfo.h directly, instead.

Also, please add test cases to the LLVM MC tests (in test/MC/ARM) to verify that this is doing what you expect. If you're not already familiar with it, there are some examples in there (prefetch.ll is a good one) for how to use the -check-prefix option FileCheck for this sort of conditional behaviour.

Thanks again!

-Jim


On Aug 10, 2011, at 6:41 AM, Kristof Beyls wrote:

> Hi Jim,
> 
> Thanks to have a look!
> 
> 1.  I need the exact functionality provided by ARMSubTarget::HasV6T2Ops.
> Therefore, in trying not to reinvent the wheel, and 
> to avoid code duplication, I'm trying to use ARMSubTarget::HasV6T2Ops. I
> think I've found a way to create an ARMSubTarget object from the Triple, so
> that it doesn't have to be passed across a lot of interfaces. The patch now
> only changes lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp (see attachment).
> Since it no longer touches Clang, I dropped the cfe-commits list. Could you
> have another look and see if this patch is closer to being acceptable?
> 
> 2. I've created the following bug report:
> http://llvm.org/bugs/show_bug.cgi?id=10632
> 
> 
> Thanks,
> 
> Kristof
> 
> -----Original Message-----
> From: Jim Grosbach [mailto:grosbach at apple.com] 
> Sent: 10 August 2011 00:08
> To: Kristof Beyls
> Cc: llvm-commits at cs.uiuc.edu; cfe-commits at cs.uiuc.edu
> Subject: Re: [llvm-commits] [PATCH] Fix NOP encodings in ARM backend.
> 
> Hi Kristof,
> 
> Thanks for looking at this.
> 
> 1. You should be able to derive the needed information from the Triple,
> which is already passed in. There's already some code there that does
> something similar to set the CPU Subtype correctly for Darwin MachO files.
> See the factory method createARMAsmBackend() for details. There shouldn't be
> any need to change the top level constructors or the target-independent
> bits.
> 
> 2. That sounds like a nasty bug. A bugzilla with a test case would be great.
> 
> -Jim
> 
> On Aug 8, 2011, at 6:54 AM, Kristof Beyls wrote:
> 
>> Hi,
>> 
>> With the attached patch, I'm trying to fix a FIXME in the ARM backend.
> This
>> patch fixes ARMAsmBackend::WriteNopData, so that it takes into account the
>> version of the ARM architecture that is being targeted. For versions
> before
>> ARMv6T2, there is no NOP instruction, and NOPs are encoded as MOV r0,r0
> (in
>> ARM
>> mode) or MOV r8,r8 (in Thumb mode). For targets later than ARMv6T2, the
>> encoding for the NOP instruction is created.
>> 
>> I have a few questions about this patch:
>> 
>> 1. To make sure that ARMAsmBackend::WriteNopData can figure out which ARM
>>  sub-target it compiles for, I had to adapt the
> Target::MCAsmBackendCtorTy
>> to
>>  also pass on an MCSubtargetInfo argument. Is this the best way to get
>>  sub-target information to the ARMAsmBackend object?
>>  (this change results in a few function signature changes in the
>>   ARM, PowerPC, X86 and MBlaze backends).
>> 
>> 2. It's hard to create test cases to test this properly, since I think
>>  that there is another bug in lib/MC/MCAssembler.cpp, where processing 
>>  an alignment fragment results in calling ARMAsmBackend::WriteNopData,
> but
>>  without putting the ARMAsmBackend in the right ARM or Thumb state.
>>  Therefore, e.g. when processing an assembler file with .align directives
>>  in the middle of a Thumb code section, still ARM NOP encodings are 
>>  generated instead of Thumb NOP encodings.
>>  Question 2a: Is it OK to write a FIXME to indicate this brokenness?
>> Should
>>  I also file a bugzilla issue?
>>  Question 2b: Is it OK to leave that fix for a later, separate, patch?
> For
>>  that fix, it will be easier to create good test cases that will also
> test
>>  this patch.
>> 
>> Thanks,
>> 
>> Kristof
>> 
>> PS. I'm cc-ing to the cfe-commits list because the change in
>> Target::MCAsmBackendCtorTy requires 2 lines to change in Clang too, see
>> attached file
> clang_arm_nop_encoding.patch.<llvm_arm_nop_encoding.patch><clang_arm_nop_enc
> oding.patch>_______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> 
> 
> <llvm_arm_nop_encoding_v2.patch>




More information about the llvm-commits mailing list