[LLVMdev] Help with subtarget features and context-dependent asm parsers

Jim Grosbach grosbach at apple.com
Wed Jul 17 10:58:24 PDT 2013

On Jul 17, 2013, at 10:26 AM, Richard Sandiford <rsandifo at linux.vnet.ibm.com> wrote:

> Tim Northover <t.p.northover at gmail.com> writes:
>>> /tmp/foo.s:1:2: error: instruction requires: distinct-ops
>>>        sllk    %r2,%r3,1
>>>        ^
>> That seems like it would be a good improvement for all targets.
> Thanks, sounds like it might be more acceptable than I thought :-)

FWIW, I'm the guy to blame for the current implementation and I like the idea. Getting it right may be marginally tricky, but the direction is good.

Better diagnostics from the assemblers is a very good thing.

>>> ARM seems to rely on the current MatchOperandParserImpl() behaviour,
>>> so I'm not going to suggest changing it unconditionally.
>> Presumably you switched it and looked at what fell over; do you
>> remember what kind of problems ARM had? Perhaps we can fix ARM so that
>> your change works there too.
> Yeah, there were two new MC failures.  The first was:
> /home/richards/llvm/build/Debug+Asserts/bin/llvm-mc -triple=thumbv7-apple-darwin -mcpu=cortex-a8 -show-encoding < /home/richards/llvm/src/test/MC/ARM/basic
> -thumb2-instructions.s | /home/richards/llvm/build/Debug+Asserts/bin/FileCheck /home/richards/llvm/src/test/MC/ARM/basic-thumb2-instructions.s
> --
> Exit Code: 1
> Command Output (stderr): 
> --
> <stdin>:1356:9: error: instruction requires: armv7m
>        mrs  r8, apsr
>        ^
> <stdin>:1357:9: error: instruction requires: armv7m
>        mrs  r8, cpsr
>        ^
> <stdin>:1358:9: error: instruction requires: armv7m
>        mrs  r8, spsr
>        ^
> and the second was the same for basic-arm-instructions.s.  The problem seems
> to be that the MSRMask parser is then always used, even for non-M-class.

This seems fixable. The custom parsers that are only valid for certain sub targets could easily have an explicit early-exit if the active sub target isn't what it's looking for. Would that be sufficient here?


More information about the llvm-dev mailing list