[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.
Nadav Rotem
nrotem at apple.com
Mon Sep 23 09:21:33 PDT 2013
Thanks :)
On Sep 23, 2013, at 8:00 AM, Arnold Schwaighofer <aschwaighofer at apple.com> wrote:
> 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