[LLVMdev] Possible bug in getCallPreservedMask for CallingConv::Intel_OCL_BI
Duncan P. N. Exon Smith
dexonsmith at apple.com
Fri Mar 14 09:37:26 PDT 2014
On 2014 Mar 14, at 09:20, Duncan P. N. Exon Smith <dexonsmith at apple.com> wrote:
> +elena.demikhovsky at intel.com, who added the tests in question.
>
> On 2014 Mar 13, at 10:30, Philip Reames <listmail at philipreames.com> wrote:
>
>> Not sure who owns this bit of code, so sending this to the general list.
>>
>> It looks like there may be an unintentional fall through happening in the X86RegisterInfo::getCallPreservedMask function.
>>
>> http://llvm.org/docs/doxygen/html/X86RegisterInfo_8cpp_source.html
>>
>> case CallingConv::Intel_OCL_BI
>> : {
>>
>> if
>> (IsWin64 && HasAVX512)
>>
>> return
>> CSR_Win64_Intel_OCL_BI_AVX512_RegMask;
>>
>> if
>> (Is64Bit && HasAVX512)
>>
>> return
>> CSR_64_Intel_OCL_BI_AVX512_RegMask;
>>
>> if
>> (IsWin64 && HasAVX)
>>
>> return
>> CSR_Win64_Intel_OCL_BI_AVX_RegMask;
>>
>> if
>> (Is64Bit && HasAVX)
>>
>> return
>> CSR_64_Intel_OCL_BI_AVX_RegMask;
>>
>> if
>> (!HasAVX && !IsWin64 && Is64Bit)
>>
>> return
>> CSR_64_Intel_OCL_BI_RegMask;
>> // Missing break/return?
>> }
>>
>> It _may_ be intentional - it falls through to the Cold calling convention and then general C convention, but it really looks suspicious.
>>
>> If it is intentional, please add an explicit note about the desired fall through behaviour. I found this by inserting a new case in the switch and having tests fail. The two tests that seem to hit the fallthrough behavor are: CodeGen/X86/avx-intel-ocl.ll and CodeGen/X86/sse-intel-ocl.ll
>>
>> Philip
>
> It looks like a bug to me. getCalleeSavedRegs() should have essentially identical logic, and there’s a break there.
>
> I’ve committed r203934 and r203939 which both should have NFC. I’ll construct a testcase that exposes the problem with the missing break statement; once I have that, I can commit that change too.
>
> Elena, does this sound right to you?
I went ahead and committed r203943 without a testcase. The accidental fallthrough is not observable.
More information about the llvm-dev
mailing list