xref: /llvm-project/mlir/test/python/ir/affine_expr.py (revision fd45dcca26d6031fcbaa907d8d6c0d9755b36699)
19f3f6d7bSStella Laurenzo# RUN: %PYTHON %s | FileCheck %s
29f3f6d7bSStella Laurenzo
39f3f6d7bSStella Laurenzoimport gc
49f3f6d7bSStella Laurenzofrom mlir.ir import *
59f3f6d7bSStella Laurenzo
6f9008e63STobias Hieta
79f3f6d7bSStella Laurenzodef run(f):
89f3f6d7bSStella Laurenzo    print("\nTEST:", f.__name__)
99f3f6d7bSStella Laurenzo    f()
109f3f6d7bSStella Laurenzo    gc.collect()
119f3f6d7bSStella Laurenzo    assert Context._get_live_count() == 0
1278f2dae0SAlex Zinenko    return f
139f3f6d7bSStella Laurenzo
149f3f6d7bSStella Laurenzo
159f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAffineExprCapsule
1678f2dae0SAlex Zinenko@run
179f3f6d7bSStella Laurenzodef testAffineExprCapsule():
189f3f6d7bSStella Laurenzo    with Context() as ctx:
199f3f6d7bSStella Laurenzo        affine_expr = AffineExpr.get_constant(42)
209f3f6d7bSStella Laurenzo
219f3f6d7bSStella Laurenzo    affine_expr_capsule = affine_expr._CAPIPtr
229f3f6d7bSStella Laurenzo    # CHECK: capsule object
239f3f6d7bSStella Laurenzo    # CHECK: mlir.ir.AffineExpr._CAPIPtr
249f3f6d7bSStella Laurenzo    print(affine_expr_capsule)
259f3f6d7bSStella Laurenzo
269f3f6d7bSStella Laurenzo    affine_expr_2 = AffineExpr._CAPICreate(affine_expr_capsule)
279f3f6d7bSStella Laurenzo    assert affine_expr == affine_expr_2
289f3f6d7bSStella Laurenzo    assert affine_expr_2.context == ctx
299f3f6d7bSStella Laurenzo
309f3f6d7bSStella Laurenzo
319f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAffineExprEq
3278f2dae0SAlex Zinenko@run
339f3f6d7bSStella Laurenzodef testAffineExprEq():
349f3f6d7bSStella Laurenzo    with Context():
359f3f6d7bSStella Laurenzo        a1 = AffineExpr.get_constant(42)
369f3f6d7bSStella Laurenzo        a2 = AffineExpr.get_constant(42)
379f3f6d7bSStella Laurenzo        a3 = AffineExpr.get_constant(43)
389f3f6d7bSStella Laurenzo        # CHECK: True
399f3f6d7bSStella Laurenzo        print(a1 == a1)
409f3f6d7bSStella Laurenzo        # CHECK: True
419f3f6d7bSStella Laurenzo        print(a1 == a2)
429f3f6d7bSStella Laurenzo        # CHECK: False
439f3f6d7bSStella Laurenzo        print(a1 == a3)
449f3f6d7bSStella Laurenzo        # CHECK: False
45*fd45dccaSEisuke Kawashima        print(a1 is None)
469f3f6d7bSStella Laurenzo        # CHECK: False
479f3f6d7bSStella Laurenzo        print(a1 == "foo")
489f3f6d7bSStella Laurenzo
499f3f6d7bSStella Laurenzo
509f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAffineExprContext
5178f2dae0SAlex Zinenko@run
529f3f6d7bSStella Laurenzodef testAffineExprContext():
539f3f6d7bSStella Laurenzo    with Context():
549f3f6d7bSStella Laurenzo        a1 = AffineExpr.get_constant(42)
559f3f6d7bSStella Laurenzo    with Context():
569f3f6d7bSStella Laurenzo        a2 = AffineExpr.get_constant(42)
579f3f6d7bSStella Laurenzo
589f3f6d7bSStella Laurenzo    # CHECK: False
599f3f6d7bSStella Laurenzo    print(a1 == a2)
609f3f6d7bSStella Laurenzo
61f9008e63STobias Hieta
629f3f6d7bSStella Laurenzorun(testAffineExprContext)
639f3f6d7bSStella Laurenzo
649f3f6d7bSStella Laurenzo
659f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAffineExprConstant
6678f2dae0SAlex Zinenko@run
679f3f6d7bSStella Laurenzodef testAffineExprConstant():
689f3f6d7bSStella Laurenzo    with Context():
699f3f6d7bSStella Laurenzo        a1 = AffineExpr.get_constant(42)
709f3f6d7bSStella Laurenzo        # CHECK: 42
719f3f6d7bSStella Laurenzo        print(a1.value)
729f3f6d7bSStella Laurenzo        # CHECK: 42
739f3f6d7bSStella Laurenzo        print(a1)
749f3f6d7bSStella Laurenzo
759f3f6d7bSStella Laurenzo        a2 = AffineConstantExpr.get(42)
769f3f6d7bSStella Laurenzo        # CHECK: 42
779f3f6d7bSStella Laurenzo        print(a2.value)
789f3f6d7bSStella Laurenzo        # CHECK: 42
799f3f6d7bSStella Laurenzo        print(a2)
809f3f6d7bSStella Laurenzo
819f3f6d7bSStella Laurenzo        assert a1 == a2
829f3f6d7bSStella Laurenzo
839f3f6d7bSStella Laurenzo
849f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAffineExprDim
8578f2dae0SAlex Zinenko@run
869f3f6d7bSStella Laurenzodef testAffineExprDim():
879f3f6d7bSStella Laurenzo    with Context():
889f3f6d7bSStella Laurenzo        d1 = AffineExpr.get_dim(1)
899f3f6d7bSStella Laurenzo        d11 = AffineDimExpr.get(1)
909f3f6d7bSStella Laurenzo        d2 = AffineDimExpr.get(2)
919f3f6d7bSStella Laurenzo
929f3f6d7bSStella Laurenzo        # CHECK: 1
939f3f6d7bSStella Laurenzo        print(d1.position)
949f3f6d7bSStella Laurenzo        # CHECK: d1
959f3f6d7bSStella Laurenzo        print(d1)
969f3f6d7bSStella Laurenzo
979f3f6d7bSStella Laurenzo        # CHECK: 2
989f3f6d7bSStella Laurenzo        print(d2.position)
999f3f6d7bSStella Laurenzo        # CHECK: d2
1009f3f6d7bSStella Laurenzo        print(d2)
1019f3f6d7bSStella Laurenzo
1029f3f6d7bSStella Laurenzo        assert d1 == d11
1039f3f6d7bSStella Laurenzo        assert d1 != d2
1049f3f6d7bSStella Laurenzo
1059f3f6d7bSStella Laurenzo
1069f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAffineExprSymbol
10778f2dae0SAlex Zinenko@run
1089f3f6d7bSStella Laurenzodef testAffineExprSymbol():
1099f3f6d7bSStella Laurenzo    with Context():
1109f3f6d7bSStella Laurenzo        s1 = AffineExpr.get_symbol(1)
1119f3f6d7bSStella Laurenzo        s11 = AffineSymbolExpr.get(1)
1129f3f6d7bSStella Laurenzo        s2 = AffineSymbolExpr.get(2)
1139f3f6d7bSStella Laurenzo
1149f3f6d7bSStella Laurenzo        # CHECK: 1
1159f3f6d7bSStella Laurenzo        print(s1.position)
1169f3f6d7bSStella Laurenzo        # CHECK: s1
1179f3f6d7bSStella Laurenzo        print(s1)
1189f3f6d7bSStella Laurenzo
1199f3f6d7bSStella Laurenzo        # CHECK: 2
1209f3f6d7bSStella Laurenzo        print(s2.position)
121a7fa5febSZequan Wu        # CHECK: s2
1229f3f6d7bSStella Laurenzo        print(s2)
1239f3f6d7bSStella Laurenzo
1249f3f6d7bSStella Laurenzo        assert s1 == s11
1259f3f6d7bSStella Laurenzo        assert s1 != s2
1269f3f6d7bSStella Laurenzo
1279f3f6d7bSStella Laurenzo
1289f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAffineAddExpr
12978f2dae0SAlex Zinenko@run
1309f3f6d7bSStella Laurenzodef testAffineAddExpr():
1319f3f6d7bSStella Laurenzo    with Context():
1329f3f6d7bSStella Laurenzo        d1 = AffineDimExpr.get(1)
1339f3f6d7bSStella Laurenzo        d2 = AffineDimExpr.get(2)
1349f3f6d7bSStella Laurenzo        d12 = AffineExpr.get_add(d1, d2)
1359f3f6d7bSStella Laurenzo        # CHECK: d1 + d2
1369f3f6d7bSStella Laurenzo        print(d12)
1379f3f6d7bSStella Laurenzo
1389f3f6d7bSStella Laurenzo        d12op = d1 + d2
1399f3f6d7bSStella Laurenzo        # CHECK: d1 + d2
1409f3f6d7bSStella Laurenzo        print(d12op)
1419f3f6d7bSStella Laurenzo
142fc7594ccSAlex Zinenko        d1cst_op = d1 + 2
143fc7594ccSAlex Zinenko        # CHECK: d1 + 2
144fc7594ccSAlex Zinenko        print(d1cst_op)
145fc7594ccSAlex Zinenko
146fc7594ccSAlex Zinenko        d1cst_op2 = 2 + d1
147fc7594ccSAlex Zinenko        # CHECK: d1 + 2
148fc7594ccSAlex Zinenko        print(d1cst_op2)
149fc7594ccSAlex Zinenko
1509f3f6d7bSStella Laurenzo        assert d12 == d12op
1519f3f6d7bSStella Laurenzo        assert d12.lhs == d1
1529f3f6d7bSStella Laurenzo        assert d12.rhs == d2
1539f3f6d7bSStella Laurenzo
1549f3f6d7bSStella Laurenzo
1559f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAffineMulExpr
15678f2dae0SAlex Zinenko@run
1579f3f6d7bSStella Laurenzodef testAffineMulExpr():
1589f3f6d7bSStella Laurenzo    with Context():
1599f3f6d7bSStella Laurenzo        d1 = AffineDimExpr.get(1)
1609f3f6d7bSStella Laurenzo        c2 = AffineConstantExpr.get(2)
1619f3f6d7bSStella Laurenzo        expr = AffineExpr.get_mul(d1, c2)
1629f3f6d7bSStella Laurenzo        # CHECK: d1 * 2
1639f3f6d7bSStella Laurenzo        print(expr)
1649f3f6d7bSStella Laurenzo
1659f3f6d7bSStella Laurenzo        # CHECK: d1 * 2
1669f3f6d7bSStella Laurenzo        op = d1 * c2
1679f3f6d7bSStella Laurenzo        print(op)
1689f3f6d7bSStella Laurenzo
169fc7594ccSAlex Zinenko        # CHECK: d1 * 2
170fc7594ccSAlex Zinenko        op_cst = d1 * 2
171fc7594ccSAlex Zinenko        print(op_cst)
172fc7594ccSAlex Zinenko
173fc7594ccSAlex Zinenko        # CHECK: d1 * 2
174fc7594ccSAlex Zinenko        op_cst2 = 2 * d1
175fc7594ccSAlex Zinenko        print(op_cst2)
176fc7594ccSAlex Zinenko
1779f3f6d7bSStella Laurenzo        assert expr == op
178fc7594ccSAlex Zinenko        assert expr == op_cst
1799f3f6d7bSStella Laurenzo        assert expr.lhs == d1
1809f3f6d7bSStella Laurenzo        assert expr.rhs == c2
1819f3f6d7bSStella Laurenzo
1829f3f6d7bSStella Laurenzo
1839f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAffineModExpr
18478f2dae0SAlex Zinenko@run
1859f3f6d7bSStella Laurenzodef testAffineModExpr():
1869f3f6d7bSStella Laurenzo    with Context():
1879f3f6d7bSStella Laurenzo        d1 = AffineDimExpr.get(1)
1889f3f6d7bSStella Laurenzo        c2 = AffineConstantExpr.get(2)
1899f3f6d7bSStella Laurenzo        expr = AffineExpr.get_mod(d1, c2)
1909f3f6d7bSStella Laurenzo        # CHECK: d1 mod 2
1919f3f6d7bSStella Laurenzo        print(expr)
1929f3f6d7bSStella Laurenzo
1939f3f6d7bSStella Laurenzo        # CHECK: d1 mod 2
1949f3f6d7bSStella Laurenzo        op = d1 % c2
1959f3f6d7bSStella Laurenzo        print(op)
1969f3f6d7bSStella Laurenzo
197fc7594ccSAlex Zinenko        # CHECK: d1 mod 2
198fc7594ccSAlex Zinenko        op_cst = d1 % 2
199fc7594ccSAlex Zinenko        print(op_cst)
200fc7594ccSAlex Zinenko
201fc7594ccSAlex Zinenko        # CHECK: 2 mod d1
202fc7594ccSAlex Zinenko        print(2 % d1)
203fc7594ccSAlex Zinenko
2049f3f6d7bSStella Laurenzo        assert expr == op
205fc7594ccSAlex Zinenko        assert expr == op_cst
2069f3f6d7bSStella Laurenzo        assert expr.lhs == d1
2079f3f6d7bSStella Laurenzo        assert expr.rhs == c2
2089f3f6d7bSStella Laurenzo
209fc7594ccSAlex Zinenko        expr2 = AffineExpr.get_mod(c2, d1)
210fc7594ccSAlex Zinenko        expr3 = AffineExpr.get_mod(2, d1)
211fc7594ccSAlex Zinenko        expr4 = AffineExpr.get_mod(d1, 2)
212fc7594ccSAlex Zinenko
213fc7594ccSAlex Zinenko        # CHECK: 2 mod d1
214fc7594ccSAlex Zinenko        print(expr2)
215fc7594ccSAlex Zinenko        # CHECK: 2 mod d1
216fc7594ccSAlex Zinenko        print(expr3)
217fc7594ccSAlex Zinenko        # CHECK: d1 mod 2
218fc7594ccSAlex Zinenko        print(expr4)
219fc7594ccSAlex Zinenko
220fc7594ccSAlex Zinenko        assert expr2 == expr3
221fc7594ccSAlex Zinenko        assert expr4 == expr
222fc7594ccSAlex Zinenko
2239f3f6d7bSStella Laurenzo
2249f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAffineFloorDivExpr
22578f2dae0SAlex Zinenko@run
2269f3f6d7bSStella Laurenzodef testAffineFloorDivExpr():
2279f3f6d7bSStella Laurenzo    with Context():
2289f3f6d7bSStella Laurenzo        d1 = AffineDimExpr.get(1)
2299f3f6d7bSStella Laurenzo        c2 = AffineConstantExpr.get(2)
2309f3f6d7bSStella Laurenzo        expr = AffineExpr.get_floor_div(d1, c2)
2319f3f6d7bSStella Laurenzo        # CHECK: d1 floordiv 2
2329f3f6d7bSStella Laurenzo        print(expr)
2339f3f6d7bSStella Laurenzo
2349f3f6d7bSStella Laurenzo        assert expr.lhs == d1
2359f3f6d7bSStella Laurenzo        assert expr.rhs == c2
2369f3f6d7bSStella Laurenzo
237fc7594ccSAlex Zinenko        expr2 = AffineExpr.get_floor_div(c2, d1)
238fc7594ccSAlex Zinenko        expr3 = AffineExpr.get_floor_div(2, d1)
239fc7594ccSAlex Zinenko        expr4 = AffineExpr.get_floor_div(d1, 2)
240fc7594ccSAlex Zinenko
241fc7594ccSAlex Zinenko        # CHECK: 2 floordiv d1
242fc7594ccSAlex Zinenko        print(expr2)
243fc7594ccSAlex Zinenko        # CHECK: 2 floordiv d1
244fc7594ccSAlex Zinenko        print(expr3)
245fc7594ccSAlex Zinenko        # CHECK: d1 floordiv 2
246fc7594ccSAlex Zinenko        print(expr4)
247fc7594ccSAlex Zinenko
248fc7594ccSAlex Zinenko        assert expr2 == expr3
249fc7594ccSAlex Zinenko        assert expr4 == expr
250fc7594ccSAlex Zinenko
2519f3f6d7bSStella Laurenzo
2529f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAffineCeilDivExpr
25378f2dae0SAlex Zinenko@run
2549f3f6d7bSStella Laurenzodef testAffineCeilDivExpr():
2559f3f6d7bSStella Laurenzo    with Context():
2569f3f6d7bSStella Laurenzo        d1 = AffineDimExpr.get(1)
2579f3f6d7bSStella Laurenzo        c2 = AffineConstantExpr.get(2)
2589f3f6d7bSStella Laurenzo        expr = AffineExpr.get_ceil_div(d1, c2)
2599f3f6d7bSStella Laurenzo        # CHECK: d1 ceildiv 2
2609f3f6d7bSStella Laurenzo        print(expr)
2619f3f6d7bSStella Laurenzo
2629f3f6d7bSStella Laurenzo        assert expr.lhs == d1
2639f3f6d7bSStella Laurenzo        assert expr.rhs == c2
2649f3f6d7bSStella Laurenzo
265fc7594ccSAlex Zinenko        expr2 = AffineExpr.get_ceil_div(c2, d1)
266fc7594ccSAlex Zinenko        expr3 = AffineExpr.get_ceil_div(2, d1)
267fc7594ccSAlex Zinenko        expr4 = AffineExpr.get_ceil_div(d1, 2)
268fc7594ccSAlex Zinenko
269fc7594ccSAlex Zinenko        # CHECK: 2 ceildiv d1
270fc7594ccSAlex Zinenko        print(expr2)
271fc7594ccSAlex Zinenko        # CHECK: 2 ceildiv d1
272fc7594ccSAlex Zinenko        print(expr3)
273fc7594ccSAlex Zinenko        # CHECK: d1 ceildiv 2
274fc7594ccSAlex Zinenko        print(expr4)
275fc7594ccSAlex Zinenko
276fc7594ccSAlex Zinenko        assert expr2 == expr3
277fc7594ccSAlex Zinenko        assert expr4 == expr
278fc7594ccSAlex Zinenko
2799f3f6d7bSStella Laurenzo
2809f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAffineExprSub
28178f2dae0SAlex Zinenko@run
2829f3f6d7bSStella Laurenzodef testAffineExprSub():
2839f3f6d7bSStella Laurenzo    with Context():
2849f3f6d7bSStella Laurenzo        d1 = AffineDimExpr.get(1)
2859f3f6d7bSStella Laurenzo        d2 = AffineDimExpr.get(2)
2869f3f6d7bSStella Laurenzo        expr = d1 - d2
2879f3f6d7bSStella Laurenzo        # CHECK: d1 - d2
2889f3f6d7bSStella Laurenzo        print(expr)
2899f3f6d7bSStella Laurenzo
2909f3f6d7bSStella Laurenzo        assert expr.lhs == d1
2919f3f6d7bSStella Laurenzo        rhs = AffineMulExpr(expr.rhs)
2929f3f6d7bSStella Laurenzo        # CHECK: d2
2939f3f6d7bSStella Laurenzo        print(rhs.lhs)
2949f3f6d7bSStella Laurenzo        # CHECK: -1
2959f3f6d7bSStella Laurenzo        print(rhs.rhs)
2969f3f6d7bSStella Laurenzo
297fc7594ccSAlex Zinenko        # CHECK: d1 - 42
298fc7594ccSAlex Zinenko        print(d1 - 42)
299fc7594ccSAlex Zinenko        # CHECK: -d1 + 42
300fc7594ccSAlex Zinenko        print(42 - d1)
301fc7594ccSAlex Zinenko
302fc7594ccSAlex Zinenko        c42 = AffineConstantExpr.get(42)
303fc7594ccSAlex Zinenko        assert d1 - 42 == d1 - c42
304fc7594ccSAlex Zinenko        assert 42 - d1 == c42 - d1
305fc7594ccSAlex Zinenko
306f9008e63STobias Hieta
30778f2dae0SAlex Zinenko# CHECK-LABEL: TEST: testClassHierarchy
30878f2dae0SAlex Zinenko@run
3099f3f6d7bSStella Laurenzodef testClassHierarchy():
3109f3f6d7bSStella Laurenzo    with Context():
3119f3f6d7bSStella Laurenzo        d1 = AffineDimExpr.get(1)
3129f3f6d7bSStella Laurenzo        c2 = AffineConstantExpr.get(2)
3139f3f6d7bSStella Laurenzo        add = AffineAddExpr.get(d1, c2)
3149f3f6d7bSStella Laurenzo        mul = AffineMulExpr.get(d1, c2)
3159f3f6d7bSStella Laurenzo        mod = AffineModExpr.get(d1, c2)
3169f3f6d7bSStella Laurenzo        floor_div = AffineFloorDivExpr.get(d1, c2)
3179f3f6d7bSStella Laurenzo        ceil_div = AffineCeilDivExpr.get(d1, c2)
3189f3f6d7bSStella Laurenzo
3199f3f6d7bSStella Laurenzo        # CHECK: False
3209f3f6d7bSStella Laurenzo        print(isinstance(d1, AffineBinaryExpr))
3219f3f6d7bSStella Laurenzo        # CHECK: False
3229f3f6d7bSStella Laurenzo        print(isinstance(c2, AffineBinaryExpr))
3239f3f6d7bSStella Laurenzo        # CHECK: True
3249f3f6d7bSStella Laurenzo        print(isinstance(add, AffineBinaryExpr))
3259f3f6d7bSStella Laurenzo        # CHECK: True
3269f3f6d7bSStella Laurenzo        print(isinstance(mul, AffineBinaryExpr))
3279f3f6d7bSStella Laurenzo        # CHECK: True
3289f3f6d7bSStella Laurenzo        print(isinstance(mod, AffineBinaryExpr))
3299f3f6d7bSStella Laurenzo        # CHECK: True
3309f3f6d7bSStella Laurenzo        print(isinstance(floor_div, AffineBinaryExpr))
3319f3f6d7bSStella Laurenzo        # CHECK: True
3329f3f6d7bSStella Laurenzo        print(isinstance(ceil_div, AffineBinaryExpr))
3339f3f6d7bSStella Laurenzo
3349f3f6d7bSStella Laurenzo        try:
3359f3f6d7bSStella Laurenzo            AffineBinaryExpr(d1)
3369f3f6d7bSStella Laurenzo        except ValueError as e:
3379f3f6d7bSStella Laurenzo            # CHECK: Cannot cast affine expression to AffineBinaryExpr
3389f3f6d7bSStella Laurenzo            print(e)
3399f3f6d7bSStella Laurenzo
3409f3f6d7bSStella Laurenzo        try:
3419f3f6d7bSStella Laurenzo            AffineBinaryExpr(c2)
3429f3f6d7bSStella Laurenzo        except ValueError as e:
3439f3f6d7bSStella Laurenzo            # CHECK: Cannot cast affine expression to AffineBinaryExpr
3449f3f6d7bSStella Laurenzo            print(e)
3459f3f6d7bSStella Laurenzo
346f9008e63STobias Hieta
34778f2dae0SAlex Zinenko# CHECK-LABEL: TEST: testIsInstance
34878f2dae0SAlex Zinenko@run
34978f2dae0SAlex Zinenkodef testIsInstance():
35078f2dae0SAlex Zinenko    with Context():
35178f2dae0SAlex Zinenko        d1 = AffineDimExpr.get(1)
35278f2dae0SAlex Zinenko        c2 = AffineConstantExpr.get(2)
35378f2dae0SAlex Zinenko        add = AffineAddExpr.get(d1, c2)
35478f2dae0SAlex Zinenko        mul = AffineMulExpr.get(d1, c2)
35578f2dae0SAlex Zinenko
35678f2dae0SAlex Zinenko        # CHECK: True
35778f2dae0SAlex Zinenko        print(AffineDimExpr.isinstance(d1))
35878f2dae0SAlex Zinenko        # CHECK: False
35978f2dae0SAlex Zinenko        print(AffineConstantExpr.isinstance(d1))
36078f2dae0SAlex Zinenko        # CHECK: True
36178f2dae0SAlex Zinenko        print(AffineConstantExpr.isinstance(c2))
36278f2dae0SAlex Zinenko        # CHECK: False
36378f2dae0SAlex Zinenko        print(AffineMulExpr.isinstance(c2))
36478f2dae0SAlex Zinenko        # CHECK: True
36578f2dae0SAlex Zinenko        print(AffineAddExpr.isinstance(add))
36678f2dae0SAlex Zinenko        # CHECK: False
36778f2dae0SAlex Zinenko        print(AffineMulExpr.isinstance(add))
36878f2dae0SAlex Zinenko        # CHECK: True
36978f2dae0SAlex Zinenko        print(AffineMulExpr.isinstance(mul))
37078f2dae0SAlex Zinenko        # CHECK: False
37178f2dae0SAlex Zinenko        print(AffineAddExpr.isinstance(mul))
372fc7594ccSAlex Zinenko
373fc7594ccSAlex Zinenko
374fc7594ccSAlex Zinenko# CHECK-LABEL: TEST: testCompose
375fc7594ccSAlex Zinenko@run
376fc7594ccSAlex Zinenkodef testCompose():
377fc7594ccSAlex Zinenko    with Context():
378fc7594ccSAlex Zinenko        # d0 + d2.
379fc7594ccSAlex Zinenko        expr = AffineAddExpr.get(AffineDimExpr.get(0), AffineDimExpr.get(2))
380fc7594ccSAlex Zinenko
381fc7594ccSAlex Zinenko        # (d0, d1, d2)[s0, s1] -> (d0 + s1, d1 + s0, d0 + d1 + d2)
382fc7594ccSAlex Zinenko        map1 = AffineAddExpr.get(AffineDimExpr.get(0), AffineSymbolExpr.get(1))
383fc7594ccSAlex Zinenko        map2 = AffineAddExpr.get(AffineDimExpr.get(1), AffineSymbolExpr.get(0))
384fc7594ccSAlex Zinenko        map3 = AffineAddExpr.get(
385fc7594ccSAlex Zinenko            AffineAddExpr.get(AffineDimExpr.get(0), AffineDimExpr.get(1)),
386f9008e63STobias Hieta            AffineDimExpr.get(2),
387f9008e63STobias Hieta        )
388fc7594ccSAlex Zinenko        map = AffineMap.get(3, 2, [map1, map2, map3])
389fc7594ccSAlex Zinenko
390fc7594ccSAlex Zinenko        # CHECK: d0 + s1 + d0 + d1 + d2
391fc7594ccSAlex Zinenko        print(expr.compose(map))
392fc7594ccSAlex Zinenko
393fc7594ccSAlex Zinenko
394fc7594ccSAlex Zinenko# CHECK-LABEL: TEST: testHash
395fc7594ccSAlex Zinenko@run
396fc7594ccSAlex Zinenkodef testHash():
397fc7594ccSAlex Zinenko    with Context():
398fc7594ccSAlex Zinenko        d0 = AffineDimExpr.get(0)
399fc7594ccSAlex Zinenko        s1 = AffineSymbolExpr.get(1)
400fc7594ccSAlex Zinenko        assert hash(d0) == hash(AffineDimExpr.get(0))
401fc7594ccSAlex Zinenko        assert hash(d0 + s1) == hash(AffineAddExpr.get(d0, s1))
402fc7594ccSAlex Zinenko
403fc7594ccSAlex Zinenko        dictionary = dict()
404fc7594ccSAlex Zinenko        dictionary[d0] = 0
405fc7594ccSAlex Zinenko        dictionary[s1] = 1
406fc7594ccSAlex Zinenko        assert d0 in dictionary
407fc7594ccSAlex Zinenko        assert s1 in dictionary
408