[cfe-dev] [RFC] Call ParseLangArgs for all inputs
Harald van Dijk via cfe-dev
cfe-dev at lists.llvm.org
Thu Sep 10 11:30:43 PDT 2020
ping 2
On 03/09/2020 12:24, Harald van Dijk via cfe-dev wrote:
> ping
>
> On 27/08/2020 12:17, Harald van Dijk via cfe-dev wrote:
>> Hi,
>>
>> clang/lib/CodeGen/BackendUtil.cpp contains multiple checks for
>> attributes of LangOpts. The option processing that sets up LangOpts is
>> mostly done by ParseLangArgs, which is skipped for LLVM IR files.
>> Because of this, there are code generation differences when the
>> -save-temps command line option is used: that command line option
>> causes LLVM IR to be emitted to file and a new process to be spawned
>> to process that file, which does not process options the same way.
>>
>> An example of this is
>>
>> typedef float __attribute__((ext_vector_type(2))) float2;
>> float2 foo (float2 a, float2 b, float2 c) {
>> return a * b + c;
>> }
>>
>> This would generate different code with clang --target=mips
>> -mcpu=mips32r5 -mfp64 -mmsa -O3 -ffp-contract=fast depending on
>> whether -save-temps was also present, because the -ffp-contract=fast
>> option affects instruction selection but was ignored for LLVM IR input
>> files.
>>
>> While CompilerInvocation::CreateFromArgs contained special exceptions
>> for a few options that were handled by ParseLangArgs that also need to
>> be handled for LLVM IR, there are many more, and just allowing
>> ParseLangArgs to be called seems like the simpler fix.
>>
>> I have created a patch for this and uploaded it as
>> <https://reviews.llvm.org/D86695> to get feedback. Does this look like
>> a good approach, or should instead the individual options that would
>> have an effect even for LLVM IR inputs continue to be listed in
>> CompilerInvocation::CreateFromArgs?
>>
>> If the approach I took is a good one, how should -std=* options
>> behave? I decided to continue silently ignoring them for
>> InputKind::Precompiled as I feel it is reasonable to include them, but
>> generate an error for them for LLVM IR inputs as I feel it is
>> unreasonable to include them. Does that make sense too, or should they
>> continue to be silently ignored for LLVM IR inputs as well?
>>
>> The patch I uploaded does not yet include tests as I am not sure what
>> sort of tests should be included. Would a test that the
>> -ffp-contract=fast option is now honored for LLVM IR input files
>> suffice, or should I find more options that were also previously
>> silently ignored, and figure out how to construct test cases for those
>> too?
>>
>> Cheers,
>> Harald van Dijk
More information about the cfe-dev
mailing list