From dda12ef034f647c295ea044e517c849b6ad5d7d1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EB=B0=95=EC=A2=85=ED=98=84/On-Device=20Lab=28SR=29/Staff?= =?utf8?q?=20Engineer/=EC=82=BC=EC=84=B1=EC=A0=84=EC=9E=90?= Date: Tue, 11 Jun 2019 16:19:20 +0900 Subject: [PATCH] [loco] Introduce CanonicalDialect singleton (#3729) This commit introduces CanonicalDialect singleton which serves as an in-memory unique identifier. Signed-off-by: Jonghyun Park --- contrib/loco/include/loco/IR/CanonicalDialect.h | 45 +++++++++++++++++++++++++ contrib/loco/src/IR/CanonicalDialect.cpp | 28 +++++++++++++++ contrib/loco/src/IR/CanonicalDialect.test.cpp | 29 ++++++++++++++++ 3 files changed, 102 insertions(+) create mode 100644 contrib/loco/include/loco/IR/CanonicalDialect.h create mode 100644 contrib/loco/src/IR/CanonicalDialect.cpp create mode 100644 contrib/loco/src/IR/CanonicalDialect.test.cpp diff --git a/contrib/loco/include/loco/IR/CanonicalDialect.h b/contrib/loco/include/loco/IR/CanonicalDialect.h new file mode 100644 index 0000000..fad3caa --- /dev/null +++ b/contrib/loco/include/loco/IR/CanonicalDialect.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2019 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. + */ + +#ifndef __LOCO_IR_CANONICAL_DIALECT_H__ +#define __LOCO_IR_CANONICAL_DIALECT_H__ + +#include "loco/IR/Dialect.h" + +namespace loco +{ + +/** + * @brief A singleton for Canonical Dialect + * + * CanonicalDialect serves as an in-memory unique identifier. + */ +class CanonicalDialect final : public Dialect +{ +private: + CanonicalDialect() = default; + +public: + CanonicalDialect(const CanonicalDialect &) = delete; + CanonicalDialect(CanonicalDialect &&) = delete; + +public: + static Dialect *get(void); +}; + +} // namespace loco + +#endif // __LOCO_IR_CANONICAL_DIALECT_H__ diff --git a/contrib/loco/src/IR/CanonicalDialect.cpp b/contrib/loco/src/IR/CanonicalDialect.cpp new file mode 100644 index 0000000..b46269d --- /dev/null +++ b/contrib/loco/src/IR/CanonicalDialect.cpp @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2019 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 "loco/IR/CanonicalDialect.h" + +namespace loco +{ + +Dialect *CanonicalDialect::get(void) +{ + static CanonicalDialect d; + return &d; +} + +} // namespace loco diff --git a/contrib/loco/src/IR/CanonicalDialect.test.cpp b/contrib/loco/src/IR/CanonicalDialect.test.cpp new file mode 100644 index 0000000..96b4821 --- /dev/null +++ b/contrib/loco/src/IR/CanonicalDialect.test.cpp @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2019 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 "loco/IR/CanonicalDialect.h" + +#include + +TEST(CanonicalDialectTest, get) +{ + auto d = loco::CanonicalDialect::get(); + + // get() SHOULD return a valid(non-null) pointer + ASSERT_NE(d, nullptr); + // The return value SHOULD be stable across multiple invocations + ASSERT_EQ(d, loco::CanonicalDialect::get()); +} -- 2.7.4