[llvm] r191122 - LoopVectorizer: Only allow vectorization of intrinsics. We can't know for sure that the functions 'abs' or 'round' are the functions from libm.
Arnold Schwaighofer
aschwaighofer at apple.com
Mon Sep 23 08:00:05 PDT 2013
Committed as 191206
On Sep 23, 2013, at 1:03 AM, Nadav Rotem <nrotem at apple.com> wrote:
> Hi Arnold, Ben, Hal,
>
> Sorry for the delay in response. Thanks for reviewing my commit. I wanted to fix a case where we crash on a local function with the same name as one of the functions that we vectorize, but with different parameters. I understand that disabling all non-intrinsic functions is too restrictive. I like Arnold’s solution of checking for internal linkage and validating the parameters. The patch looks excellent.
>
> Thanks,
> Nadav
>
>
> On Sep 21, 2013, at 4:19 PM, Hal Finkel <hfinkel at anl.gov> wrote:
>
>> ----- Original Message -----
>>>
>>> On Sep 21, 2013, at 5:41 PM, Hal Finkel <hfinkel at anl.gov> wrote:
>>>
>>>> Arnold,
>>>>
>>>> Thanks for looking at this quickly.
>>>>
>>>> +static Intrinsic::ID checkBinaryFloatSignature(const CallInst &I,
>>>> + Intrinsic::ID
>>>> ValidIntrinsicID) {
>>>> + if (I.getNumArgOperands() != 2 ||
>>>> + !I.getArgOperand(0)->getType()->isFloatingPointTy() ||
>>>> + !I.getArgOperand(1)->getType()->isFloatingPointTy() ||
>>>> + I.getType() != I.getArgOperand(0)->getType() ||
>>>> + !I.onlyReadsMemory())
>>>> + return Intrinsic::not_intrinsic;
>>>> +
>>>> + return ValidIntrinsicID;
>>>> +}
>>>>
>>>> To be pedantic, we should check that the two arguments also have
>>>> the same type (to prevent grabbing copysign(float, double)).
>>>
>>> Right.
>>>
>>> Now with
>>>
>>> +static Intrinsic::ID checkBinaryFloatSignature(const CallInst &I,
>>> + Intrinsic::ID
>>> ValidIntrinsicID)
>>> + if (I.getNumArgOperands() != 2 ||
>>> + !I.getArgOperand(0)->getType()->isFloatingPointTy() ||
>>> + !I.getArgOperand(1)->getType()->isFloatingPointTy() ||
>>> + I.getType() != I.getArgOperand(0)->getType() ||
>>> + I.getType() != I.getArgOperand(1)->getType() ||
>>> + !I.onlyReadsMemory())
>>>
>>
>> You might be waiting for Nadav to approve, but LGTM, thanks!
>>
>> -Hal
>>
>>>
>>
>> --
>> Hal Finkel
>> Assistant Computational Scientist
>> Leadership Computing Facility
>> Argonne National Laboratory
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list