xref: /llvm-project/mlir/unittests/IR/IRMapping.cpp (revision e95e94adc6bb748de015ac3053e7f0786b65f351)
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 
16 using namespace mlir;
17 
TEST(IRMapping,TypedValue)18 TEST(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(i64Val, f64Val);
36   auto typedI64Val = cast<TypedValue<IntegerType>>(i64Val);
37   EXPECT_EQ(mapping.lookup(typedI64Val), f64Val);
38 }
39 
TEST(IRMapping,OperationClone)40 TEST(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(noResultsOp);
49   OwningOpRef<Operation *> ownerOp = Operation::create(owner);
50 
51   IRMapping irMap;
52   OwningOpRef<Operation *> clonedOwnerOp = (*ownerOp)->clone(irMap);
53 
54   EXPECT_EQ(irMap.lookupOrNull(*ownerOp), *clonedOwnerOp);
55   EXPECT_EQ(irMap.lookupOrNull(noResultsOp),
56             &(*clonedOwnerOp)->getRegion(0).front().front());
57 }
58