1//===- IRMapping.cpp --------------------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "mlir/IR/IRMapping.h"
10#include "mlir/IR/Builders.h"
11#include "gtest/gtest.h"
12
13#include "../../test/lib/Dialect/Test/TestDialect.h"
14#include "../../test/lib/Dialect/Test/TestOps.h"
15
16using namespace mlir;
17
18TEST(IRMapping, TypedValue) {
19 MLIRContext context;
20
21 context.loadDialect<test::TestDialect>();
22
23 OpBuilder builder(&context);
24 Location loc = builder.getUnknownLoc();
25
26 Block block;
27 builder.setInsertionPointToEnd(&block);
28
29 Value i64Val = builder.create<test::TestOpConstant>(
30 loc, builder.getI64Type(), builder.getI64IntegerAttr(0));
31 Value f64Val = builder.create<test::TestOpConstant>(
32 loc, builder.getF64Type(), builder.getF64FloatAttr(0.0));
33
34 IRMapping mapping;
35 mapping.map(from: i64Val, to: f64Val);
36 auto typedI64Val = cast<TypedValue<IntegerType>>(Val&: i64Val);
37 EXPECT_EQ(mapping.lookup(typedI64Val), f64Val);
38}
39
40TEST(IRMapping, OperationClone) {
41 MLIRContext ctx;
42 ctx.allowUnregisteredDialects();
43
44 OperationState state(UnknownLoc::get(&ctx), "no_results");
45 Operation *noResultsOp = Operation::create(state);
46
47 OperationState owner(UnknownLoc::get(&ctx), "owner");
48 owner.addRegion()->emplaceBlock().push_back(op: noResultsOp);
49 OwningOpRef<Operation *> ownerOp = Operation::create(state: owner);
50
51 IRMapping irMap;
52 OwningOpRef<Operation *> clonedOwnerOp = (*ownerOp)->clone(mapper&: irMap);
53
54 EXPECT_EQ(irMap.lookupOrNull(*ownerOp), *clonedOwnerOp);
55 EXPECT_EQ(irMap.lookupOrNull(noResultsOp),
56 &(*clonedOwnerOp)->getRegion(0).front().front());
57}
58

source code of mlir/unittests/IR/IRMapping.cpp