[llvm-commits] [PATCH] load/store shift fix

Jim Grosbach grosbach at apple.com
Thu Sep 20 17:45:40 PDT 2012


On Sep 20, 2012, at 5:03 PM, Greg Fitzgerald <garious at gmail.com> wrote:

>> + "lsr #32" gives an MCInst immediate of 0. Encoder and Decoder can be
>> as naive as you like. Printer, parser and selection have to be
>> special.
>> 
>> I think the second is more in line with the goals of the MC layer.
> 

This is correct.


> That'd be fine, but what are you doing to prevent the MCOperand from
> being constructed with #32?  Your patch guards llvm-mc from doing it
> in the AsmParser, but what about llc?

That would be a bug in ISel.

The InstPrinter and the MCCodeEmitter should probably have assert()s in there to validate the range of the immediate operand to help catch such bugs, but I suspect they don't.

-Jim

> 
> -Greg
> 
> 
> On Thu, Sep 20, 2012 at 1:40 PM, Tim Northover <t.p.northover at gmail.com> wrote:
>> Hi Greg,
>> 
>> I'm afraid I disagree with this issue too.
>> 
>>> One small concern however, is that your patch catches shifts of #32 in
>>> the parser and not during encoding.
>>> 
>>> +    if (Imm == 32)
>>> +      Imm = 0;
>>> 
>>> This hides a subtle bug ARMMCCodeEmitter that can't be detected from
>>> llvm-mc once your patch is in place.  LLVM's instruction selection
>>> doesn't use the ASCII gateway to creating MCInst objects, and instead
>>> creates them directly.  If it were to create one with #32, which
>>> requires 6 bits instead of 5 available to encode it, then the code
>>> emitter will foolishly go out of bounds and write over the adjacent
>>> field.
>> 
>> This all comes down to what we want the canonical MCInst for these
>> instructions to be. Our two options are:
>> 
>> + "lsr #32" (etc) gives an MCInst immediate of 32. Encoder and decoder
>> are special (if the decoder isn't special, MCInsts are no longer
>> canonical since "lsr #32" will be decoded to an immediate of 0).
>> Printer and Parser can forget about it. Selection equally special
>> here: "lsr #0" needs special handling to be converted to an MCOperand
>> of 0.
>> + "lsr #32" gives an MCInst immediate of 0. Encoder and Decoder can be
>> as naive as you like. Printer, parser and selection have to be
>> special.
>> 
>> I think the second is more in line with the goals of the MC layer.
>> 
>> Tim.
> _______________________________________________
> 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