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
15using namespace mlir;
16
17TEST(IRMapping, TypedValue) {
18 MLIRContext context;
19
20 context.loadDialect<test::TestDialect>();
21
22 OpBuilder builder(&context);
23 Location loc = builder.getUnknownLoc();
24
25 Block block;
26 builder.setInsertionPointToEnd(&block);
27
28 Value i64Val = builder.create<test::TestOpConstant>(
29 loc, builder.getI64Type(), builder.getI64IntegerAttr(0));
30 Value f64Val = builder.create<test::TestOpConstant>(
31 loc, builder.getF64Type(), builder.getF64FloatAttr(0.0));
32
33 IRMapping mapping;
34 mapping.map(from: i64Val, to: f64Val);
35 auto typedI64Val = cast<TypedValue<IntegerType>>(Val&: i64Val);
36 EXPECT_EQ(mapping.lookup(typedI64Val), f64Val);
37}
38
39TEST(IRMapping, OperationClone) {
40 MLIRContext ctx;
41 ctx.allowUnregisteredDialects();
42
43 OperationState state(UnknownLoc::get(&ctx), "no_results");
44 Operation *noResultsOp = Operation::create(state);
45
46 OperationState owner(UnknownLoc::get(&ctx), "owner");
47 owner.addRegion()->emplaceBlock().push_back(op: noResultsOp);
48 OwningOpRef<Operation *> ownerOp = Operation::create(state: owner);
49
50 IRMapping irMap;
51 OwningOpRef<Operation *> clonedOwnerOp = (*ownerOp)->clone(mapper&: irMap);
52
53 EXPECT_EQ(irMap.lookupOrNull(*ownerOp), *clonedOwnerOp);
54 EXPECT_EQ(irMap.lookupOrNull(noResultsOp),
55 &(*clonedOwnerOp)->getRegion(0).front().front());
56}
57

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