[llvm-commits] [PATCH] Teach the MC about UNPREDICTABLE

Owen Anderson resistor at mac.com
Wed Feb 8 10:16:21 PST 2012


Go ahead with it.

--Owen

On Feb 8, 2012, at 12:34 AM, James Molloy wrote:

> Hi Owen,
> 
> Do you have any other comments about this patch or is it OK to commit?
> 
> Cheers,
> 
> James
> 
> -----Original Message-----
> From: llvm-commits-bounces at cs.uiuc.edu
> [mailto:llvm-commits-bounces at cs.uiuc.edu] On Behalf Of James Molloy
> Sent: 06 February 2012 19:15
> To: Owen Anderson
> Cc: llvm-commits at cs.uiuc.edu
> Subject: Re: [llvm-commits] [PATCH] Teach the MC about UNPREDICTABLE
> 
> Hi Owen,
> 
> For the generated disassembler it only adds two lines of code and only on
> instructions that require it. The difference in size before and after this
> patch is +2 lines, because it is only hooked up to tBX.
> 
> There is no noticeable build time difference.
> 
> Cheers,
> 
> James
> ________________________________________
> From: Owen Anderson [resistor at mac.com]
> Sent: 06 February 2012 18:19
> To: James Molloy
> Cc: llvm-commits at cs.uiuc.edu
> Subject: Re: [llvm-commits] [PATCH] Teach the MC about UNPREDICTABLE
> 
> James,
> 
> I like the concept of this feature, and it'd be nice if it could help use
> eliminate more of the hand-written decoding hooks.  However, I'm concerned
> about the impact it will have on LLVM's build time.  Have you looked at how
> much bigger this makes the generated disassembler file?  It already takes a
> very long time to compile, and I'm wage to avoid making it any worse.
> 
> --Owen
> 
> On Feb 6, 2012, at 2:42 AM, James Molloy wrote:
> 
> Hi,
> 
> ARM has the concept of an "unpredictable" instruction - one which is valid
> (and will be executed) but whose results are not defined. An example of an
> unpredictable instruction is a load with address increment and writeback
> where the writeback register is the same as the load destination.
> 
> The MC disassembler has the concept of a "soft failure" which maps well to
> unpredictability (coincidentally because it was added for that purpose).
> However this soft failure can currently only be triggered by manual C++ code
> such as that in ARMDisassembler.cpp - it cannot be triggered from
> tablegen-generated code.
> 
> The attached patch adds this functionality. It adds the ability for the
> FixedLenDecoderEmitter to take into account a bitfield in a tablegen record
> called "SoftFail" that mirrors the "Inst" field.
> 
> If a bitpattern BP matches the Inst field of an instruction record but
> differs from Inst in any bits which are set to '1' in the SoftFail field,
> then that instruction is matched by the disassembler but the status SoftFail
> is returned instead of Success.
> 
> For example, this is a modified Thumb BX instruction with unpredictability
> modelled as per the ARMARM:
> 
> def tBX : TI<(outs), (ins GPR:$Rm, pred:$p), IIC_Br, "bx${p}\t$Rm", []>,
>            T1Special<{1,1,0,?}> {
>    // A6.2.3 & A8.6.25
>    bits<4> Rm;
>    let Inst{6-3} = Rm;
>    let Inst{2-0} = 0b000;
>    // Any of the bottom 3 bits set is unpredictable.
>    let SoftFail{2-0} = 0b111;
>  }
> 
> And this is the generated disassembler code (new code bolded):
> 
> if ((Bits & ARM::ModeThumb)) {
>  if (insn & 0x7)
>    S = MCDisassembler::SoftFail;
>  MI.setOpcode(2662);
>  tmp = fieldFromInstruction16(insn, 3, 4);
>  if (!Check(S, DecodeGPRRegisterClass(MI, tmp, Address, Decoder))) return
> MCDisassembler::Fail;
>    return S; // tBXT
> }
> 
> This results in the MC now correctly identifying such an instruction:
> 
> $ echo '0x01 0x47' | ./bin/llvm-mc -triple thumbv7 -disassemble
> <stdin>:1:1: warning: potentially undefined instruction encoding
> 0x01 0x47
> ^
>                bx           r0
> 
> The patch works by removing any bits that could SoftFail from the set of
> possible disassembly island values, and emitting an extra test if required
> in the generated disassembler. If no SoftFail bits are set, no extra code
> will be emitted.
> 
> In the ARM tablegen files, this patch aliases SoftFail to "Unpredictable" so
> it is more recognisable what it is doing in the ARM world.
> 
> Please review! It wires the new functionality up to "tBX" as a proof of
> concept and testing codepath, and adds a regression test.
> 
> Cheers,
> 
> James
> <softfail.patch>_______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu<mailto:llvm-commits at cs.uiuc.edu>
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> 
> 
> -- IMPORTANT NOTICE: The contents of this email and any attachments are
> confidential and may also be privileged. If you are not the intended
> recipient, please notify the sender immediately and do not disclose the
> contents to any other person, use it for any purpose, or store or copy the
> information in any medium.  Thank you.
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> 
> 
> 
> 




More information about the llvm-commits mailing list