[PATCH] MIR Parser: verify the implicit register operands.
Quentin Colombet
qcolombet at apple.com
Tue Jul 7 11:15:05 PDT 2015
> On Jun 27, 2015, at 8:27 AM, Duncan P. N. Exon Smith <dexonsmith at apple.com> wrote:
>
>
>> On 2015 Jun 26, at 15:34, Alex Lorenz <arphaman at gmail.com> wrote:
>>
>> Hi dexonsmith, bob.wilson, bogner,
>>
>
> +quentin
>
>> This patch is based on a previous serialization patch that serializes implicit register flags (http://reviews.llvm.org/D10709).
>>
>> This patch verifies that the parsed machine instructions have implicit register operands as specified by MCInstrDesc. Variadic and call instructions aren't verified.
>>
>
> I'm not sure this is the right long term direction. This seems better:
>
> 1. Implicitly add the `-machineverifier` pass to the beginning of the
> pass pipeline. Alternatively, create a free function that calls the
> machine verifier right after parsing MIR (much like `verifyModule()`
> at the IR-level).
> 2. Assuming these checks are valid (are instructions *incorrect* if they
> list the wrong implicit flags) and missing from the machine verifier,
> add them there.
>
> Quentin, what do you think?
I agree that we should check in the verifier that we have the implicit operands defined by the MC description. Now, for instruction that list “wrong” implicit flags, I guess it depends how wrong that is. E.g., it is valid, though redundant, to have an implicit use of a sub register of a flag that is already a use (or implicit use).
The question is more likely, what do you want to catch here?
FWIW, I would prefer to have the check only in the verifier. I do not think the problem will occur often enough to have a location to find what is wrong.
Cheers,
-Quentin
>
> Regardless of the long term, this obviously is useful in its current form
> for bootstrapping MIR serialization. We can move/delete/change it later.
> I say commit it with a well-placed:
>
> // FIXME: Move to the -machineverifier.
>
> LGTM with that.
>
> BTW, most of the review I'm doing here could just as easily be done
> post-commit, especially given that you basically own MIR serialization ;).
>
>> REPOSITORY
>> rL LLVM
>>
>> http://reviews.llvm.org/D10781
>>
>> Files:
>> lib/CodeGen/MIRParser/MIParser.cpp
>> test/CodeGen/MIR/X86/expected-different-implicit-operand.mir
>> test/CodeGen/MIR/X86/expected-different-implicit-register-flag.mir
>> test/CodeGen/MIR/X86/expected-number-after-bb.mir
>> test/CodeGen/MIR/X86/global-value-operands.mir
>> test/CodeGen/MIR/X86/large-index-number-error.mir
>> test/CodeGen/MIR/X86/machine-basic-block-operands.mir
>> test/CodeGen/MIR/X86/machine-instructions.mir
>> test/CodeGen/MIR/X86/missing-implicit-operand.mir
>> test/CodeGen/MIR/X86/named-registers.mir
>> test/CodeGen/MIR/X86/register-mask-operands.mir
>> test/CodeGen/MIR/X86/unknown-machine-basic-block.mir
>> test/CodeGen/MIR/X86/unknown-named-machine-basic-block.mir
>>
>> EMAIL PREFERENCES
>> http://reviews.llvm.org/settings/panel/emailpreferences/
>> <D10781.28604.patch>
>
More information about the llvm-commits
mailing list