/**
* @brief Insert Copy before Load if necessary
+ *
+ * @require "load" should be bounded
*/
void insert_copy_before_load(coco::Load *load)
{
+ assert(load->parent() != nullptr);
+ assert(load->parent()->parent() != nullptr);
+
if (auto obj = load->object())
{
if (auto ifm = obj->asFeature())
{
/**
- * @brief Return the set of all of allocated Load Op(s) in a given module
+ * @brief Return the set of all of bounded Load Op(s) in a given module
*/
std::set<coco::Load *> loads(coco::Module *m)
{
for (uint32_t n = 0; n < m->entity()->op()->size(); ++n)
{
+ auto op = m->entity()->op()->at(n);
+
+ if (op->parent() == nullptr)
+ {
+ continue;
+ }
+
+ if (op->parent()->parent() == nullptr)
+ {
+ continue;
+ }
+
if (auto load = m->entity()->op()->at(n)->asLoad())
{
res.insert(load);
--- /dev/null
+/*
+ * Copyright (c) 2018 Samsung Electronics Co., Ltd. All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "DataLayoutConversion.h"
+
+#include <gtest/gtest.h>
+
+TEST(DataLayoutConversionTest, case_000)
+{
+ auto m = coco::Module::create();
+
+ // Create a "free" Load op
+ m->entity()->instr()->create<coco::Eval>();
+
+ enco::Code code{m.get(), nullptr};
+ ASSERT_EQ(m->entity()->instr()->size(), 1);
+
+ // "conver_data_layout" SHOULD NOT crash even if there is a "free" Load op
+ enco::convert_data_layout(&code);
+}