Skip to content

Commit af28d7f

Browse files
authored
Merge pull request #2292 from adriendelsalle/fix-simd-assign
Fix simd assign_data
2 parents 78f5d17 + 7c37f4b commit af28d7f

File tree

3 files changed

+32
-6
lines changed

3 files changed

+32
-6
lines changed

include/xtensor/xassign.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ namespace xt
375375
using traits = xassign_traits<E1, E2>;
376376

377377
bool linear_assign = traits::linear_assign(de1, de2, trivial);
378-
constexpr bool simd_assign = traits::simd_linear_assign();
378+
constexpr bool simd_assign = traits::simd_assign();
379379
constexpr bool simd_linear_assign = traits::simd_linear_assign();
380380
constexpr bool simd_strided_assign = traits::simd_strided_assign();
381381
if (linear_assign)

include/xtensor/xcontainer.hpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -912,14 +912,12 @@ namespace xt
912912
std::size_t dim = shape.size();
913913
if (m_shape.size() != dim || !std::equal(std::begin(shape), std::end(shape), std::begin(m_shape)) || force)
914914
{
915-
if (D::static_layout == layout_type::dynamic && m_layout == layout_type::dynamic)
916-
{
917-
m_layout = XTENSOR_DEFAULT_LAYOUT; // fall back to default layout
918-
}
915+
layout_type layout = (D::static_layout == layout_type::dynamic && m_layout == layout_type::dynamic) ? XTENSOR_DEFAULT_LAYOUT : m_layout;
919916
m_shape = xtl::forward_sequence<shape_type, S>(shape);
917+
920918
resize_container(m_strides, dim);
921919
resize_container(m_backstrides, dim);
922-
size_type data_size = compute_strides<D::static_layout>(m_shape, m_layout, m_strides, m_backstrides);
920+
size_type data_size = compute_strides<D::static_layout>(m_shape, layout, m_strides, m_backstrides);
923921
detail::resize_data_container(this->storage(), data_size);
924922
}
925923
}

test/test_xmanipulation.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,34 @@ namespace xt
137137
EXPECT_EQ(iter, view.end());
138138
}
139139

140+
TEST(xmanipulation, flatten_simd_linear_assign_trait)
141+
{
142+
xtensor<double, 3> a = linspace<double>(1., 100., 100).reshape({2, 5, 10});
143+
auto v = view(a, range(0, 2), range(0, 3), range(0, 3));
144+
145+
{
146+
auto e = flatten<XTENSOR_DEFAULT_LAYOUT>(a);
147+
xtensor<double, 1> fl = e;
148+
using assign_traits = xassign_traits<decltype(fl), decltype(e)>;
149+
150+
#if XTENSOR_USE_XSIMD
151+
EXPECT_TRUE(assign_traits::simd_linear_assign());
152+
EXPECT_TRUE(assign_traits::simd_linear_assign(fl, e));
153+
#else
154+
EXPECT_FALSE(assign_traits::simd_linear_assign());
155+
EXPECT_FALSE(assign_traits::simd_linear_assign(fl, e));
156+
#endif
157+
}
158+
159+
{
160+
auto e = flatten<XTENSOR_DEFAULT_LAYOUT>(v);
161+
xtensor<double, 1> fl = e;
162+
using assign_traits = xassign_traits<decltype(fl), decltype(e)>;
163+
EXPECT_FALSE(assign_traits::simd_linear_assign());
164+
EXPECT_FALSE(assign_traits::simd_linear_assign(fl, e));
165+
}
166+
}
167+
140168
TEST(xmanipulation, flatnonzero)
141169
{
142170
xt::xtensor<int, 1> a = arange(-2, 3);

0 commit comments

Comments
 (0)