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 | |
15 | using namespace mlir; |
16 | |
17 | TEST(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 | |
39 | TEST(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 | |