[LLVMdev] RFC: Machine Level IR text-based serialization format

Duncan P. N. Exon Smith dexonsmith at apple.com
Wed Apr 29 21:17:18 PDT 2015


> On 2015 Apr 29, at 19:58, Hayden Livingston <halivingston at gmail.com> wrote:
> 
> Thank you.
> 
> So do you expect clients of LLVM to still continue to supply .ll files
> to llvm-as?
> 
> Or will this new format be new representation?
> 

The LLVM IR is still serialized as .ll and .bc.  This new format is just
for better testing of the backend(s).

(For clarity, `llvm-as` is a developer tool; it shouldn't be part of a
production workflow.  Production tools should use the C++ API.)


> On Wed, Apr 29, 2015 at 7:44 PM, Duncan P. N. Exon Smith
> <dexonsmith at apple.com> wrote:
>> 
>>> On 2015 Apr 29, at 19:13, Hayden Livingston <halivingston at gmail.com> wrote:
>>> 
>>> What is missing in the current textual format that doesn't allow going
>>> all the way to machine code?
>> 
>> Nothing.
>> 
>> What's missing is the ability to serialize the machine level itself.
>> Since many passes have to run to get from .ll to .s, it's currently
>> hard (impossible?) to test individual machine level passes robustly.
>> Having a way to serialize machine IR will let us test each pass in
>> isolation.
>> 
>>> Is the reason for this project because the current .LL format can't
>>> always be put to bitcode?
>> 
>> Nope, .ll and .bc can represent the same things.
>> 
>>> 
>>> On Wed, Apr 29, 2015 at 3:24 PM, Alex L <arphaman at gmail.com> wrote:
>>>> 
>>>> 
>>>> 2015-04-29 11:40 GMT-07:00 Duncan P. N. Exon Smith <dexonsmith at apple.com>:
>>>> 
>>>>> 
>>>>>> On 2015-Apr-29, at 06:40, Krzysztof Parzyszek <kparzysz at codeaurora.org>
>>>>>> wrote:
>>>>>> 
>>>>>> On 4/28/2015 7:13 PM, Alex L wrote:
>>>>>>> 
>>>>>>> 
>>>>>>> 2015-04-28 16:26 GMT-07:00 Matthias Braun <matze at braunis.de
>>>>>>> <mailto:matze at braunis.de>>:
>>>>>>> 
>>>>>>>  For that use case it is worth keeping the following things in mind:
>>>>>>>  - Please try to keep the output of the various dump functions, esp.
>>>>>>>  MachineInstr::dump(), MachineOperand::dump(),
>>>>>>>  MachineBasicBlock::dump() as close as possible to the format you use
>>>>>>>  for serializing.
>>>>>>> [...]
>>>>>>> 
>>>>>>> Ideally the new syntax would replace the existing print/dump syntax.
>>>>>>> The
>>>>>>> new syntax will lead to certain missing information when
>>>>>>> this information can be inferred (e.g. the TiedTo and IsEarlyClobber
>>>>>>> attributes for register operands that I mentioned earlier in this
>>>>>>> thread),
>>>>>>> so maybe we could have some sort of verbose dumping option where
>>>>>>> absolutely everything is dumped.
>>>>>> 
>>>>>> 
>>>>>> I think that the new syntax is less readable than the current format of
>>>>>> the "dump" functions, and in the long term it would be better to have
>>>>>> something more human-friendly.  However, using YAML has the advantage that
>>>>>> it's easier to parse it than the direct output of "dump" and so it will take
>>>>>> less time to implement a YAML-based solution.  My concern is that you may
>>>>>> run out of time to complete this and the file format is not the most
>>>>>> important thing in this project.  Getting it to work, if only as a proof of
>>>>>> concept, would be very helpful to everyone.  Coming up with a fancier
>>>>>> grammar and implementing a parser for it could be done later on top of the
>>>>>> initial implementation.
>>>>>> 
>>>>>> -Krzysztof
>>>>> 
>>>>> Until I got to this email, I was opposed to using YAML here -- I'd
>>>>> prefer a custom grammar and parser -- but I find Krzysztof's point
>>>>> here pretty convincing.
>>>>> 
>>>>> Starting with a (hybrid) YAML representation seems like a reasonable
>>>>> way to bootstrap a machine IR.  Once it's in place and working, we
>>>>> can come back and strip away the YAML parts until it's human-
>>>>> friendly.  (And since YAML is machine-friendly, upgrade scripts for
>>>>> testcases should be straightforward.)
>>>> 
>>>> 
>>>> I think that this would be a good approach.
>>>> I will work on the proposed YAML hybrid format for now and will begin
>>>> sending out the patches soon. Once it's working, people can evaluate it
>>>> for themselves and see if it suits them or if we need to change it to a
>>>> custom format.
>>>> 
>>>>> 
>>>>> 
>>>>> BTW, we probably need some sort of LangRef document for this.  Maybe
>>>>> docs/MIRLangRef.rst?
>>>> 
>>>> 
>>>> That's fine with me.
>>>> 
>>>> Alex
>>>> 
>>>> _______________________________________________
>>>> LLVM Developers mailing list
>>>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>>> 
>> 





More information about the llvm-dev mailing list