14d67b278SJeff Niu //===- IRMapping.cpp --------------------------------------------*- C++ -*-===//
24d67b278SJeff Niu //
34d67b278SJeff Niu // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
44d67b278SJeff Niu // See https://llvm.org/LICENSE.txt for license information.
54d67b278SJeff Niu // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
64d67b278SJeff Niu //
74d67b278SJeff Niu //===----------------------------------------------------------------------===//
84d67b278SJeff Niu
94d67b278SJeff Niu #include "mlir/IR/IRMapping.h"
104d67b278SJeff Niu #include "mlir/IR/Builders.h"
114d67b278SJeff Niu #include "gtest/gtest.h"
124d67b278SJeff Niu
134d67b278SJeff Niu #include "../../test/lib/Dialect/Test/TestDialect.h"
14*e95e94adSJeff Niu #include "../../test/lib/Dialect/Test/TestOps.h"
154d67b278SJeff Niu
164d67b278SJeff Niu using namespace mlir;
174d67b278SJeff Niu
TEST(IRMapping,TypedValue)184d67b278SJeff Niu TEST(IRMapping, TypedValue) {
194d67b278SJeff Niu MLIRContext context;
204d67b278SJeff Niu
214d67b278SJeff Niu context.loadDialect<test::TestDialect>();
224d67b278SJeff Niu
234d67b278SJeff Niu OpBuilder builder(&context);
244d67b278SJeff Niu Location loc = builder.getUnknownLoc();
254d67b278SJeff Niu
264d67b278SJeff Niu Block block;
274d67b278SJeff Niu builder.setInsertionPointToEnd(&block);
284d67b278SJeff Niu
294d67b278SJeff Niu Value i64Val = builder.create<test::TestOpConstant>(
304d67b278SJeff Niu loc, builder.getI64Type(), builder.getI64IntegerAttr(0));
314d67b278SJeff Niu Value f64Val = builder.create<test::TestOpConstant>(
324d67b278SJeff Niu loc, builder.getF64Type(), builder.getF64FloatAttr(0.0));
334d67b278SJeff Niu
344d67b278SJeff Niu IRMapping mapping;
354d67b278SJeff Niu mapping.map(i64Val, f64Val);
360ce25b12SRahul Kayaith auto typedI64Val = cast<TypedValue<IntegerType>>(i64Val);
374d67b278SJeff Niu EXPECT_EQ(mapping.lookup(typedI64Val), f64Val);
384d67b278SJeff Niu }
394d67b278SJeff Niu
TEST(IRMapping,OperationClone)404d67b278SJeff Niu TEST(IRMapping, OperationClone) {
414d67b278SJeff Niu MLIRContext ctx;
424d67b278SJeff Niu ctx.allowUnregisteredDialects();
434d67b278SJeff Niu
444d67b278SJeff Niu OperationState state(UnknownLoc::get(&ctx), "no_results");
454d67b278SJeff Niu Operation *noResultsOp = Operation::create(state);
464d67b278SJeff Niu
474d67b278SJeff Niu OperationState owner(UnknownLoc::get(&ctx), "owner");
484d67b278SJeff Niu owner.addRegion()->emplaceBlock().push_back(noResultsOp);
494d67b278SJeff Niu OwningOpRef<Operation *> ownerOp = Operation::create(owner);
504d67b278SJeff Niu
514d67b278SJeff Niu IRMapping irMap;
524d67b278SJeff Niu OwningOpRef<Operation *> clonedOwnerOp = (*ownerOp)->clone(irMap);
534d67b278SJeff Niu
544d67b278SJeff Niu EXPECT_EQ(irMap.lookupOrNull(*ownerOp), *clonedOwnerOp);
554d67b278SJeff Niu EXPECT_EQ(irMap.lookupOrNull(noResultsOp),
564d67b278SJeff Niu &(*clonedOwnerOp)->getRegion(0).front().front());
574d67b278SJeff Niu }
58