Don't provide vectorization hints for operations that can be done inplace.

Previously we hinted to the compiler that it should vectorized operations
where the input and output are the same array. This obviously caused problems,
and these hints had to be removed.

In the future we need to first check for aliased arrays, and go from there.
This commit is contained in:
Robert Maynard 2016-03-15 16:15:11 -04:00
parent 177b31f330
commit 73b90a2e44

@ -225,14 +225,10 @@ public:
//The ICC compiler has been found to improperly optimize the copy_backwards
//into a standard copy, causing the above issue.
T lastValue = inputPortal.Get(numberOfValues - 1);
VTKM_VECTORIZATION_PRE_LOOP
for(vtkm::Id i=(numberOfValues-1); i >= 1; --i)
{
//nothing for gcc as input & output could be the same
VTKM_VECTORIZATION_IN_LOOP
{
outputPortal.Set(i, inputPortal.Get(i-1));
}
}
outputPortal.Set(0, initialValue);
std::partial_sum(vtkm::cont::ArrayPortalToIteratorBegin(outputPortal),
@ -358,11 +354,9 @@ private:
PortalI indexPortal = index.PrepareForInput(Device());
PortalVout valuesOutPortal = values_out.PrepareForOutput(n, Device());
VTKM_VECTORIZATION_PRE_LOOP
for (vtkm::Id i=0; i<n; i++)
{
VTKM_VECTORIZATION_IN_LOOP
valuesOutPortal.Set( i, valuesPortal.Get(indexPortal.Get(i)) );
valuesOutPortal.Set( i, valuesPortal.Get(indexPortal.Get(i)) );
}
}