text:
# Copyright (c) 2018-2021, Carnegie Mellon University
# See LICENSE for details

SIMD_ISA_DB.hashAdd(TL(32, 8, 2, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_IxLxI_down( TL(32, 8, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(32, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
          IxLxI_kmn_km( TL(32, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      origtree := IxLxI_IxLxI_down( TL(32, 8, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(32, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
          IxLxI_kmn_km( TL(32, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      measured := 16,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(64, 32, 4, 1).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_km( TL(64, 32, 4, 1).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      origtree := IxLxI_kmn_km( TL(64, 32, 4, 1).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      measured := 16,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(32, 8, 8, 1).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_IxLxI_down( TL(32, 8, 8, 1).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
          SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      origtree := IxLxI_IxLxI_down( TL(32, 8, 8, 1).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
          SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      measured := 32,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(16, 4, 1, 16).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_n( TL(16, 4, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(8, 4, 1, 32).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ) ),
          IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      origtree := IxLxI_kmn_n( TL(16, 4, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(8, 4, 1, 32).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ) ),
          IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      measured := 0,
      globalUnrolling := 64 ) ]);
SIMD_ISA_DB.hashAdd(TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
      origtree := IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
      measured := 0,
      globalUnrolling := 64 ) ]);
SIMD_ISA_DB.hashAdd(TL(32, 2, 4, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_n( TL(32, 2, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_IxLxI_down( TL(16, 2, 8, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_IxLxI_down( TL(16, 4, 8, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
      origtree := IxLxI_kmn_n( TL(32, 2, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_IxLxI_down( TL(16, 2, 8, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_IxLxI_down( TL(16, 4, 8, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
      measured := 48,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(32, 4, 2, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_IxLxI_down( TL(32, 4, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(32, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
          IxLxI_IxLxI_down( TL(32, 8, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_kmn_km( TL(32, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
            IxLxI_kmn_km( TL(32, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
      origtree := IxLxI_IxLxI_down( TL(32, 4, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(32, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
          IxLxI_IxLxI_down( TL(32, 8, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_kmn_km( TL(32, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
            IxLxI_kmn_km( TL(32, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
      measured := 24,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(16, 2, 1, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_IxLxI_down( TL(16, 2, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(16, 8, 1, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_IxLxI_down( TL(16, 4, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 1, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            SIMD_ISA_Bases1( TL(16, 8, 1, 2).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      origtree := IxLxI_IxLxI_down( TL(16, 2, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(16, 8, 1, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_IxLxI_down( TL(16, 4, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 1, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            SIMD_ISA_Bases1( TL(16, 8, 1, 2).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      measured := 6,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(8, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_n( TL(8, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      origtree := IxLxI_kmn_n( TL(8, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      measured := 0,
      globalUnrolling := 64 ) ]);
SIMD_ISA_DB.hashAdd(TL(16, 2, 8, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_IxLxI_down( TL(16, 2, 8, 2).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_IxLxI_down( TL(16, 4, 8, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      origtree := IxLxI_IxLxI_down( TL(16, 2, 8, 2).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_IxLxI_down( TL(16, 4, 8, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      measured := 48,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(64, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_km( TL(64, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_IxLxI_down( TL(32, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
            IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
          IxLxI_kmn_n( TL(8, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      origtree := IxLxI_kmn_km( TL(64, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_IxLxI_down( TL(32, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
            IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
          IxLxI_kmn_n( TL(8, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      measured := 32,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(128, 16, 1, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_km( TL(128, 16, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_IxLxI_down( TL(64, 8, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_kmn_km( TL(64, 32, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
            IxLxI_kmn_km( TL(64, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_IxLxI_down( TL(32, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                  SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                  IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
                IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                  SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                  IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
              IxLxI_kmn_n( TL(8, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
                IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
          IxLxI_kmn_n( TL(16, 2, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_kmn_n( TL(8, 2, 1, 32).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      origtree := IxLxI_kmn_km( TL(128, 16, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_IxLxI_down( TL(64, 8, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_kmn_km( TL(64, 32, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
            IxLxI_kmn_km( TL(64, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_IxLxI_down( TL(32, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                  SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                  IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
                IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                  SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                  IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
              IxLxI_kmn_n( TL(8, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
                IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
          IxLxI_kmn_n( TL(16, 2, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_kmn_n( TL(8, 2, 1, 32).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      measured := 48,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(128, 16, 2, 1).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_n( TL(128, 16, 2, 1).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(64, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_IxLxI_down( TL(32, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
              IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
            IxLxI_kmn_n( TL(8, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
          SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      origtree := IxLxI_kmn_n( TL(128, 16, 2, 1).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(64, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_IxLxI_down( TL(32, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
              IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
            IxLxI_kmn_n( TL(8, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
          SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      measured := 48,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(32, 4, 1, 1).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_IxLxI_down( TL(32, 4, 1, 1).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(32, 16, 1, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_IxLxI_down( TL(32, 8, 1, 1).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(32, 16, 1, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
            SIMD_ISA_Bases1( TL(32, 16, 1, 1).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      origtree := IxLxI_IxLxI_down( TL(32, 4, 1, 1).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(32, 16, 1, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_IxLxI_down( TL(32, 8, 1, 1).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(32, 16, 1, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
            SIMD_ISA_Bases1( TL(32, 16, 1, 1).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      measured := 6,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(64, 8, 1, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_IxLxI_down( TL(64, 8, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(64, 32, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_kmn_km( TL(8, 4, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 1, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
          IxLxI_kmn_km( TL(64, 16, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_IxLxI_down( TL(32, 8, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_kmn_km( TL(32, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
                SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
              IxLxI_kmn_km( TL(32, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
                SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
            IxLxI_kmn_n( TL(8, 2, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 1, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
      origtree := IxLxI_IxLxI_down( TL(64, 8, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(64, 32, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_kmn_km( TL(8, 4, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 1, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
          IxLxI_kmn_km( TL(64, 16, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_IxLxI_down( TL(32, 8, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_kmn_km( TL(32, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
                SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
              IxLxI_kmn_km( TL(32, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
                SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
            IxLxI_kmn_n( TL(8, 2, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 1, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
      measured := 24,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(128, 64, 1, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_km( TL(128, 64, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_kmn_km( TL(16, 8, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_kmn_km( TL(8, 4, 1, 32).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
      origtree := IxLxI_kmn_km( TL(128, 64, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_kmn_km( TL(16, 8, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_kmn_km( TL(8, 4, 1, 32).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
      measured := 16,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(128, 64, 2, 1).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_km( TL(128, 64, 2, 1).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      origtree := IxLxI_kmn_km( TL(128, 64, 2, 1).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      measured := 16,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(8, 4, 1, 32).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_km( TL(8, 4, 1, 32).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      origtree := IxLxI_kmn_km( TL(8, 4, 1, 32).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      measured := 0,
      globalUnrolling := 64 ) ]);
SIMD_ISA_DB.hashAdd(TL(32, 4, 8, 1).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_IxLxI_down( TL(32, 4, 8, 1).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_IxLxI_down( TL(32, 8, 8, 1).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
            SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      origtree := IxLxI_IxLxI_down( TL(32, 4, 8, 1).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_IxLxI_down( TL(32, 8, 8, 1).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
            SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      measured := 48,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(32, 2, 1, 1).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_IxLxI_down( TL(32, 2, 1, 1).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(32, 16, 1, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_IxLxI_down( TL(32, 4, 1, 1).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(32, 16, 1, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_IxLxI_down( TL(32, 8, 1, 1).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(32, 16, 1, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
              SIMD_ISA_Bases1( TL(32, 16, 1, 1).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
      origtree := IxLxI_IxLxI_down( TL(32, 2, 1, 1).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(32, 16, 1, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_IxLxI_down( TL(32, 4, 1, 1).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(32, 16, 1, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_IxLxI_down( TL(32, 8, 1, 1).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(32, 16, 1, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
              SIMD_ISA_Bases1( TL(32, 16, 1, 1).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
      measured := 8,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(8, 2, 1, 32).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_n( TL(8, 2, 1, 32).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      origtree := IxLxI_kmn_n( TL(8, 2, 1, 32).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      measured := 0,
      globalUnrolling := 64 ) ]);
SIMD_ISA_DB.hashAdd(TL(32, 2, 8, 1).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_IxLxI_down( TL(32, 2, 8, 1).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_IxLxI_down( TL(32, 4, 8, 1).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_IxLxI_down( TL(32, 8, 8, 1).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
              SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
      origtree := IxLxI_IxLxI_down( TL(32, 2, 8, 1).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_IxLxI_down( TL(32, 4, 8, 1).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_IxLxI_down( TL(32, 8, 8, 1).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
              SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
      measured := 64,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(64, 8, 4, 1).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_IxLxI_down( TL(64, 8, 4, 1).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(64, 32, 4, 1).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
          IxLxI_kmn_n( TL(64, 16, 4, 1).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
            SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      origtree := IxLxI_IxLxI_down( TL(64, 8, 4, 1).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(64, 32, 4, 1).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
          IxLxI_kmn_n( TL(64, 16, 4, 1).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
            SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      measured := 48,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(32, 16, 1, 1).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := SIMD_ISA_Bases1( TL(32, 16, 1, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
      origtree := SIMD_ISA_Bases1( TL(32, 16, 1, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
      measured := 2,
      globalUnrolling := 8 ) ]);
SIMD_ISA_DB.hashAdd(TL(32, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_IxLxI_down( TL(32, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
          IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      origtree := IxLxI_IxLxI_down( TL(32, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
          IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      measured := 32,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(16, 8, 1, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := SIMD_ISA_Bases1( TL(16, 8, 1, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
      origtree := SIMD_ISA_Bases1( TL(16, 8, 1, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
      measured := 2,
      globalUnrolling := 8 ) ]);
SIMD_ISA_DB.hashAdd(TL(8, 2, 1, 16).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_n( TL(8, 2, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_vtensor( TL(4, 2, 1, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      origtree := IxLxI_kmn_n( TL(8, 2, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_vtensor( TL(4, 2, 1, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      measured := 0,
      globalUnrolling := 64 ) ]);
SIMD_ISA_DB.hashAdd(TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
      origtree := SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
      measured := 16,
      globalUnrolling := 64 ) ]);
SIMD_ISA_DB.hashAdd(TL(16, 8, 1, 16).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_km( TL(16, 8, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_kmn_km( TL(8, 4, 1, 32).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      origtree := IxLxI_kmn_km( TL(16, 8, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_kmn_km( TL(8, 4, 1, 32).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      measured := 0,
      globalUnrolling := 64 ) ]);
SIMD_ISA_DB.hashAdd(TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      origtree := IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      measured := 16,
      globalUnrolling := 64 ) ]);
SIMD_ISA_DB.hashAdd(TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ),
      origtree := IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ),
      measured := 0,
      globalUnrolling := 64 ) ]);
SIMD_ISA_DB.hashAdd(TL(256, 128, 1, 1).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_km( TL(256, 128, 1, 1).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_kmn_km( TL(16, 8, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_kmn_km( TL(8, 4, 1, 32).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
      origtree := IxLxI_kmn_km( TL(256, 128, 1, 1).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_kmn_km( TL(16, 8, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_kmn_km( TL(8, 4, 1, 32).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
      measured := 16,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(16, 2, 1, 16).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_n( TL(16, 2, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_n( TL(8, 2, 1, 32).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ),
          IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      origtree := IxLxI_kmn_n( TL(16, 2, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_n( TL(8, 2, 1, 32).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ),
          IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      measured := 0,
      globalUnrolling := 64 ) ]);
SIMD_ISA_DB.hashAdd(TL(128, 32, 1, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_km( TL(128, 32, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_IxLxI_down( TL(32, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
            IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
          IxLxI_kmn_n( TL(16, 4, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_kmn_km( TL(8, 4, 1, 32).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ) ),
            IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
      origtree := IxLxI_kmn_km( TL(128, 32, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_IxLxI_down( TL(32, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
            IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
          IxLxI_kmn_n( TL(16, 4, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_kmn_km( TL(8, 4, 1, 32).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ) ),
            IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
      measured := 32,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(128, 32, 2, 1).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_n( TL(128, 32, 2, 1).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(64, 32, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
          IxLxI_kmn_km( TL(64, 32, 4, 1).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      origtree := IxLxI_kmn_n( TL(128, 32, 2, 1).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(64, 32, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
          IxLxI_kmn_km( TL(64, 32, 4, 1).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      measured := 32,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(256, 64, 1, 1).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_n( TL(256, 64, 1, 1).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(128, 64, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_kmn_km( TL(16, 8, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_kmn_km( TL(8, 4, 1, 32).withTags([ AVecReg(LRB_16x32f) ]),
                IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
          IxLxI_kmn_km( TL(128, 64, 2, 1).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
      origtree := IxLxI_kmn_n( TL(256, 64, 1, 1).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(128, 64, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_kmn_km( TL(16, 8, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_kmn_km( TL(8, 4, 1, 32).withTags([ AVecReg(LRB_16x32f) ]),
                IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
          IxLxI_kmn_km( TL(128, 64, 2, 1).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
      measured := 32,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      origtree := IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      measured := 0,
      globalUnrolling := 64 ) ]);
SIMD_ISA_DB.hashAdd(TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
      origtree := SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
      measured := 8,
      globalUnrolling := 64 ) ]);
SIMD_ISA_DB.hashAdd(TL(16, 4, 8, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_IxLxI_down( TL(16, 4, 8, 2).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
          SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      origtree := IxLxI_IxLxI_down( TL(16, 4, 8, 2).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
          SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      measured := 32,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(256, 32, 1, 1).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_n( TL(256, 32, 1, 1).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(128, 32, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_IxLxI_down( TL(32, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
              IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
            IxLxI_kmn_n( TL(16, 4, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_kmn_km( TL(8, 4, 1, 32).withTags([ AVecReg(LRB_16x32f) ]),
                IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ) ),
              IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
          IxLxI_kmn_km( TL(64, 32, 4, 1).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      origtree := IxLxI_kmn_n( TL(256, 32, 1, 1).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(128, 32, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_IxLxI_down( TL(32, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
              IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
            IxLxI_kmn_n( TL(16, 4, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_kmn_km( TL(8, 4, 1, 32).withTags([ AVecReg(LRB_16x32f) ]),
                IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ) ),
              IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
          IxLxI_kmn_km( TL(64, 32, 4, 1).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      measured := 48,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(64, 16, 4, 1).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_n( TL(64, 16, 4, 1).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
          SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      origtree := IxLxI_kmn_n( TL(64, 16, 4, 1).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
          SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      measured := 32,
      globalUnrolling := 64 ) ]);
SIMD_ISA_DB.hashAdd(TL(256, 16, 1, 1).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_n( TL(256, 16, 1, 1).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(128, 16, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_IxLxI_down( TL(64, 8, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_kmn_km( TL(64, 32, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
                SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
                  IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
                  IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
              IxLxI_kmn_km( TL(64, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
                IxLxI_IxLxI_down( TL(32, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                  IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                    SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                    IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
                  IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                    SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                    IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
                IxLxI_kmn_n( TL(8, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
                  IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
                  IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
            IxLxI_kmn_n( TL(16, 2, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_kmn_n( TL(8, 2, 1, 32).withTags([ AVecReg(LRB_16x32f) ]),
                IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
          SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      origtree := IxLxI_kmn_n( TL(256, 16, 1, 1).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(128, 16, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_IxLxI_down( TL(64, 8, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_kmn_km( TL(64, 32, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
                SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
                  IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
                  IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
              IxLxI_kmn_km( TL(64, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
                IxLxI_IxLxI_down( TL(32, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                  IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                    SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                    IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
                  IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                    SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                    IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
                IxLxI_kmn_n( TL(8, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
                  IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
                  IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
            IxLxI_kmn_n( TL(16, 2, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_kmn_n( TL(8, 2, 1, 32).withTags([ AVecReg(LRB_16x32f) ]),
                IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
          SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      measured := 64,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(64, 4, 2, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_n( TL(64, 4, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ),
          IxLxI_IxLxI_down( TL(32, 4, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
            IxLxI_IxLxI_down( TL(32, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
              IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ) ),
      origtree := IxLxI_kmn_n( TL(64, 4, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ),
          IxLxI_IxLxI_down( TL(32, 4, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
            IxLxI_IxLxI_down( TL(32, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
              IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ) ),
      measured := 48,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(8, 4, 1, 16).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_km( TL(8, 4, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_vtensor( TL(4, 2, 1, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      origtree := IxLxI_kmn_km( TL(8, 4, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_vtensor( TL(4, 2, 1, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      measured := 0,
      globalUnrolling := 64 ) ]);
SIMD_ISA_DB.hashAdd(TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
      origtree := SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
      measured := 16,
      globalUnrolling := 64 ) ]);
SIMD_ISA_DB.hashAdd(TL(64, 32, 2, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_km( TL(64, 32, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      origtree := IxLxI_kmn_km( TL(64, 32, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      measured := 16,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(4, 2, 1, 32).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_vtensor( TL(4, 2, 1, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
      origtree := IxLxI_vtensor( TL(4, 2, 1, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
      measured := 0,
      globalUnrolling := 64 ) ]);
SIMD_ISA_DB.hashAdd(TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
      origtree := IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
      measured := 0,
      globalUnrolling := 64 ) ]);
SIMD_ISA_DB.hashAdd(TL(16, 4, 4, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_IxLxI_down( TL(16, 4, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
          SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      origtree := IxLxI_IxLxI_down( TL(16, 4, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
          SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      measured := 16,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(64, 16, 1, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_km( TL(64, 16, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_IxLxI_down( TL(32, 8, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_kmn_km( TL(32, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
            IxLxI_kmn_km( TL(32, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
          IxLxI_kmn_n( TL(8, 2, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_vtensor( TL(4, 2, 1, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      origtree := IxLxI_kmn_km( TL(64, 16, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_IxLxI_down( TL(32, 8, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_kmn_km( TL(32, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
            IxLxI_kmn_km( TL(32, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
          IxLxI_kmn_n( TL(8, 2, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_vtensor( TL(4, 2, 1, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      measured := 16,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(64, 4, 4, 1).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_IxLxI_down( TL(64, 4, 4, 1).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(64, 32, 4, 1).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
          IxLxI_IxLxI_down( TL(64, 8, 4, 1).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_kmn_km( TL(64, 32, 4, 1).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
            IxLxI_kmn_n( TL(64, 16, 4, 1).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
              SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
      origtree := IxLxI_IxLxI_down( TL(64, 4, 4, 1).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(64, 32, 4, 1).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
          IxLxI_IxLxI_down( TL(64, 8, 4, 1).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_kmn_km( TL(64, 32, 4, 1).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
            IxLxI_kmn_n( TL(64, 16, 4, 1).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
              SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
      measured := 64,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(64, 32, 1, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_km( TL(64, 32, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_kmn_km( TL(8, 4, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 1, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      origtree := IxLxI_kmn_km( TL(64, 32, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_kmn_km( TL(8, 4, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 1, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      measured := 8,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(64, 8, 2, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_IxLxI_down( TL(64, 8, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(64, 32, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
          IxLxI_kmn_km( TL(64, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_IxLxI_down( TL(32, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
              IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
            IxLxI_kmn_n( TL(8, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
      origtree := IxLxI_IxLxI_down( TL(64, 8, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(64, 32, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
          IxLxI_kmn_km( TL(64, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_IxLxI_down( TL(32, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
              IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
            IxLxI_kmn_n( TL(8, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
      measured := 48,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
      origtree := IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
      measured := 0,
      globalUnrolling := 64 ) ]);
SIMD_ISA_DB.hashAdd(TL(16, 2, 4, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_IxLxI_down( TL(16, 2, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_IxLxI_down( TL(16, 4, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      origtree := IxLxI_IxLxI_down( TL(16, 2, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_IxLxI_down( TL(16, 4, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      measured := 24,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(32, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_km( TL(32, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      origtree := IxLxI_kmn_km( TL(32, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(16, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
          IxLxI_vtensor( TL(4, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      measured := 8,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(32, 4, 4, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_IxLxI_down( TL(32, 4, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
          IxLxI_IxLxI_down( TL(32, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
            IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
      origtree := IxLxI_IxLxI_down( TL(32, 4, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
          IxLxI_IxLxI_down( TL(32, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
            IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ),
      measured := 48,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(16, 4, 1, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_IxLxI_down( TL(16, 4, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(16, 8, 1, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
          SIMD_ISA_Bases1( TL(16, 8, 1, 2).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      origtree := IxLxI_IxLxI_down( TL(16, 4, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(16, 8, 1, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
          SIMD_ISA_Bases1( TL(16, 8, 1, 2).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      measured := 4,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(32, 8, 1, 1).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_IxLxI_down( TL(32, 8, 1, 1).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(32, 16, 1, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
          SIMD_ISA_Bases1( TL(32, 16, 1, 1).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      origtree := IxLxI_IxLxI_down( TL(32, 8, 1, 1).withTags([ AVecReg(LRB_16x32f) ]),
          SIMD_ISA_Bases1( TL(32, 16, 1, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
          SIMD_ISA_Bases1( TL(32, 16, 1, 1).withTags([ AVecReg(LRB_16x32f) ]) ) ),
      measured := 4,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(128, 8, 1, 2).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_kmn_n( TL(128, 8, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(16, 8, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_kmn_km( TL(8, 4, 1, 32).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
          IxLxI_IxLxI_down( TL(64, 8, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_kmn_km( TL(64, 32, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
            IxLxI_kmn_km( TL(64, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_IxLxI_down( TL(32, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                  SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                  IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
                IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                  SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                  IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
              IxLxI_kmn_n( TL(8, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
                IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ) ),
      origtree := IxLxI_kmn_n( TL(128, 8, 1, 2).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(16, 8, 1, 16).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_kmn_km( TL(8, 4, 1, 32).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 1, 64).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
          IxLxI_IxLxI_down( TL(64, 8, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_kmn_km( TL(64, 32, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
              SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
            IxLxI_kmn_km( TL(64, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_IxLxI_down( TL(32, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                  SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                  IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
                IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                  SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                  IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
              IxLxI_kmn_n( TL(8, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
                IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ) ) ),
      measured := 48,
      globalUnrolling := 10000 ) ]);
SIMD_ISA_DB.hashAdd(TL(128, 8, 2, 1).withTags([ AVecReg(LRB_16x32f) ]), [ rec(
      ruletree := IxLxI_IxLxI_down( TL(128, 8, 2, 1).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(128, 64, 2, 1).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
          IxLxI_kmn_n( TL(128, 16, 2, 1).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_kmn_km( TL(64, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_IxLxI_down( TL(32, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                  SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                  IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
                IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                  SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                  IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
              IxLxI_kmn_n( TL(8, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
                IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
            SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      origtree := IxLxI_IxLxI_down( TL(128, 8, 2, 1).withTags([ AVecReg(LRB_16x32f) ]),
          IxLxI_kmn_km( TL(128, 64, 2, 1).withTags([ AVecReg(LRB_16x32f) ]),
            SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ),
            IxLxI_kmn_km( TL(8, 4, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ),
              IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
          IxLxI_kmn_n( TL(128, 16, 2, 1).withTags([ AVecReg(LRB_16x32f) ]),
            IxLxI_kmn_km( TL(64, 16, 2, 2).withTags([ AVecReg(LRB_16x32f) ]),
              IxLxI_IxLxI_down( TL(32, 8, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                  SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                  IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ),
                IxLxI_kmn_km( TL(32, 16, 4, 2).withTags([ AVecReg(LRB_16x32f) ]),
                  SIMD_ISA_Bases1( TL(16, 8, 8, 2).withTags([ AVecReg(LRB_16x32f) ]) ),
                  IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
              IxLxI_kmn_n( TL(8, 2, 2, 16).withTags([ AVecReg(LRB_16x32f) ]),
                IxLxI_vtensor( TL(4, 2, 2, 32).withTags([ AVecReg(LRB_16x32f) ]) ),
                IxLxI_vtensor( TL(4, 2, 4, 16).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
            SIMD_ISA_Bases1( TL(32, 16, 8, 1).withTags([ AVecReg(LRB_16x32f) ]) ) ) ),
      measured := 64,
      globalUnrolling := 10000 ) ]);


text:
"GameInfo"
{
	game 		"Dota 2"
	title 		"Dota 2"

	gamelogo 1
	type		multiplayer_only

	nomodels 1
	nohimodel 1
	nocrosshair 0
	GameData	"dota.fgd"
	SupportsDX8	0
	nodegraph 0
	tonemapping 0 // Hide tonemapping ui in tools mode

	FileSystem
	{
		SteamAppId				570
		BreakpadAppId			373300	// Report crashes under beta DLC, not the S1 game.  Delete this when all clients are switched to S2
		BreakpadAppId_Tools		375360  // Use a separate bucket of buckets for "-tools" crashes so that they don't get drowned out by game crashes. Falls back to BreakpadAppId/SteamAppId if missing

		//
		// The code that loads this file automatically does a few things here:
		//
		// 1. For each "Game" search path, it adds a "GameBin" path, in <dir>\bin
		// 2. For each "Game" search path, it adds another "Game" path in front of it with _<langage> at the end.
		//    For example: c:\hl2\cstrike on a french machine would get a c:\hl2\cstrike_french path added to it.
		// 3. For the first "Game" search path, it adds a search path called "MOD".
		// 4. For the first "Game" search path, it adds a search path called "DEFAULT_WRITE_PATH".
		//

		//
		// Search paths are relative to the exe directory\..\
		//
		SearchPaths
		{
			Game				dota_divine_ui
			Game				dota
			Game				core

			Mod					dota_divine_ui
			Mod					dota

			AddonRoot			dota_addons

			// Note: addon content is included in publiccontent by default.
			PublicContent		dota_core
			PublicContent		core
		}
	}

	MaterialSystem2
	{
		RenderModes
		{
			"game" "Default"
			"game" "DotaDeferred"
			"game" "DotaForward"
			"game" "Depth"

			"tools" "ToolsVis" // Visualization modes for all shaders (lighting only, normal maps only, etc.)
			"tools" "ToolsWireframe" // This should use the ToolsVis mode above instead of being its own mode
			"tools" "ToolsUtil" // Meant to be used to render tools sceneobjects that are mod-independent, like the origin grid
		}
	}

	Engine2
	{
		"HasModAppSystems" "1"
		"Capable64Bit" "1"
		"UsesScaleform" "1"
		"HasGameUI" "1" // dota uses gameui
		"GameUIFromClient" "1"  // AND that gameui comes from client.dll
		"URLName" "dota2"
		"UsesBink" "0"
		"RenderingPipeline"
		{
			"SkipPostProcessing" "1"
			"SupportsMSAA" "0"
		}

		"BugBait"
		{
			// Used by 'bug:' in chat to normalize report settings during playtests
			"Owner" "triage*"
			"Severity" "high"
			"Priority" "none"
			"Category" "---"
			"Product" "dota"
			"Component" "dota"
		}
	}

	SceneSystem
	{
		"NoSunLightManager" "1"
	}

	ToolsEnvironment
	{
		"Engine"	"Source 2"
		"ToolsDir"	"../sdktools"	// NOTE: Default Tools path. This is relative to the mod path.
		"DeveloperHelpURL" "https://intranet.valvesoftware.com/wiki/Source_2_SDK"
		"ToolsProductName" "Dota2 Workshop Tools"
	}

	Hammer
	{
		"fgd"					"../dota/dota.fgd"	// NOTE: This is relative to the 'mod' path.
		"GameFeatureSet"		"Dota"
		"LoadScriptEntities"	"0"
		"DefaultTextureScale"	"0.250000"
		"DefaultSolidEntity"	"trigger_multiple"
		"DefaultPointEntity"	"info_player_start_goodguys"
		"NavMarkupEntity"		"func_nav_markup"
		"EnableDotaTools"		"1"
		"DefaultGridTileSet"	"/maps/tilesets/radiant_basic.vmap"
		"DefaultGridTileSet2"	"/maps/tilesets/dire_basic.vmap"
		"AddonMapCommand"		"dota_launch_custom_game"
		"PostMapLoadCommands"	"jointeam good" // Commands sent to the console by hammer after it finishes building a map and loads it
		"RequiredGameEntities"	"info_player_start_goodguys; info_player_start_badguys; env_global_light; ent_dota_game_events"
	}

	MaterialEditor
	{
		"DefaultShader"			"hero"
	}

	ResourceCompiler
	{
		// Overrides of the default builders as specified in code, this controls which map builder steps
		// will be run when resource compiler is run for a map without specifiying any specific map builder
		// steps. Additionally this controls which builders are displayed in the hammer build dialog.
		DefaultMapBuilders
		{
			"light"		"0"	// Dota does not use baked lighting
			"envmap"	"0"	// Dota doesn't generate environment maps from the map
			"gridnav"	"1"	// Dota generates its grid navigation data by default
		}
	}

	RenderPipelineAliases
	{
		"Tools"			"Dota"
		"EnvMapBake"	"Dota"
	}

	Source1Import
	{
		"importmod"			"dota_divine_ui"
		"importdir"			"..\dota_divine_ui"
		"onlyimportleafiestmod"	"1" // only directly import assets in dota_divine_ui
		"ispeermod"			"1"  // is this mod in a peer dir of dota.
		"ignoreParticleManifest" "1"
		"getSkinningFromLod0ByDefault" "0"
		"createStaticOverlays" "1"	// info_overlay entities will be converted to static overlay nodes instead of preserved as Info_overlay entities
	}
}

ext: gi


text:
# Copyright (c) 2018-2021, Carnegie Mellon University
# See LICENSE for details

Declare(VIxL, VL, VPrm_x_I);

RecursStep.isSymmetric := self >> self.child(1).isSymmetric();
RTWrap.isSymmetric := self >> self.child(1).isSymmetric();
RuleTreeClass.isSymmetric := self >> self.node.isSymmetric();

#   in-register permutations to change complex format
Class(VIxL, BaseContainer, rec(
    new := (self, m, n, v) >> SPL(WithBases(self, rec(
        dimensions := [2*m*v, 2*m*v],
        m:=m,
        n:=n,
        v:=v
    ))),
    dims := self >> Replicate(2, 2*self.m*self.v),

    _children := [],
    rChildren := self >> [],
    from_rChildren := (self, rch) >> ObjId(self)(self.m, self.n, self.v),

    isPermutation := False,
    isReal := True,
    toAMat := self >> AMatSPL(Tensor(I(self.m), L(2*self.v, self.n))),
    sums := self >> self,
    print := (self,i,is) >> Print(self.name, "(", self.m, ", ", self.n, ", ", self.v, ")"),

    implement := meth(self, isa)
        local t, hentry, sums;
        t := TL(2*self.v, self.n, 1, 1).withTags(isa.getTags());
        hentry := HashLookup(SIMD_ISA_DB.getHash(), t);
        if hentry=false then
            return Error("SIMD_ISA_DB lookup failed, tried ", t);
	else
            sums := Tensor(I(self.m), _SPLRuleTree(hentry[1].ruletree)).sums();
            sums := When(IsBound(sums.unroll), sums.unroll(), sums);
            return sums;
	fi;
    end,

    transpose := self >> VIxL(self.m, 2*self.v/self.n, self.v)
));

#   in-register stride perm
Class(VL, BaseContainer, rec(
    new := (self, mn, m) >> SPL(WithBases(self, rec(
        dimensions := [mn, mn],
        mn:=mn,
        m:=m
    ))),
    dims := self >> Replicate(2, self.mn),
    _children := [],

    rChildren := self >> [],
    from_rChildren := (self, rch) >> ObjId(self)(self.mn, self.m),

    isPermutation := False,
    isReal := True,
    toAMat := self >> AMatSPL(L(self.mn, self.m)),
    sums := self >> self,
    print := (self,i,is) >> Print(self.name, "(", self.mn, ", ", self.m, ")"),
    implement := (self, isa) >> _SPLRuleTree(HashLookup(SIMD_ISA_DB.getHash(), TL(self.mn, self.m, 1, 1).withTags(isa.getTags()))[1].ruletree).sums(),
    transpose := self >> VL(self.mn, self.nm/self.m)
));

#   Block diagonal permutation
# NOTE: Franz pls make sure rChildren properly exposes all parameters
Class(BlockVPerm, BaseContainer, rec(
    new := (self, n, vlen, spl, perm) >> SPL(WithBases(self, rec(
        _children := [spl],
        n := n,
        perm := perm,
        dimensions := n * spl.dimensions,
        vlen := vlen
    ))),

    from_rChildren := (self, rch) >> ObjId(self)(self.n, self.vlen, rch[1], self.perm),

    isPermutation := self >> self._children[1].isPermutation(),
    isReal := self >> self._children[1].isReal(),
    toAMat := self >> AMatSPL(Tensor(I(self.n), self._children[1])),

    print := (self,i,is) >> Print(self.name, "(", self.n, ", ", self._children[1].print(i+is, is), ")"),
    sums := self >> self,
    dims := self>>self.dimensions,
    needInterleavedLeft := False,
    needInterleavedRight := False,
#    code := (self, y, x) >> ApplyStrategy(
#   Tensor(I(self.n), self._children[1]).sums(),
#   VectorStrategySum, UntilDone).code(y, x);,
    transpose := self >> When(self.child(1).isSymmetric(), self, Error("transpose not supported"))
));

Class(BlockVPerm2, BlockVPerm);

Declare(VPerm);

#   in-register permutations
Class(VPerm, BaseContainer, rec(
    new := (self, spl, code, vlen, vcost) >> SPL(WithBases(self, rec(
        _children := [spl],
        dimensions := spl.dimensions,
        code:= code,
        vlen :=  vlen,
        _vcost := vcost
    ))),

    # NOTE: Franz pls make sure rChildren properly exposes all parameters
    from_rChildren := (self, rch) >> ObjId(self)(rch[1], self.code, self.vlen, self._vcost),

    isPermutation := False,
    isReal := True,
    toAMat := self >> AMatSPL(self._children[1]),

    printl := (self,i,is) >> Print(self.name, "(", self._children[1].print(i+is, is), ", ", self.code, ", ", self.vlen, ", ", self._vcost, ")"),
    prints := (self,i,is) >> Print(self.name, "(", self._children[1].print(i+is, is), ")"),

    sums := self >> self,
    vcost := self >> self._vcost,
    pshort := meth(self) self.print := self.prints; end,
    plong := meth(self) self.print := self.printl; end,
    needInterleavedLeft := False,
    needInterleavedRight := False,
    transpose := self >> When(self.child(1).isSymmetric(), self, Error("transpose not supported")),
    isSymmetric := self >> self.child(1).isSymmetric(),
    area := (self) >> self.dims()[1]
));

VPerm.pshort();

# ==========================================================================
# VPrm_x_I(<func>, <vlen>) - permutation
# ==========================================================================
Class(VPrm_x_I, Prm, SumsBase, rec(
    #-----------------------------------------------------------------------
    abbrevs := [ (func, v) ->
	Checked(IsFunction(func) or IsFuncExp(func), IsInt(v), [func, v]) ],
    #-----------------------------------------------------------------------
    rChildren := self >> [self.func],
    rSetChild := rSetChildFields("func"),
    from_rChildren := (self, rch) >> ObjId(self)(rch[1], self.v),
    #-----------------------------------------------------------------------
    area := self >> Rows(self) * self.v,
    #-----------------------------------------------------------------------
    new := (self, func, v) >> SPL(WithBases(self, rec(
        func := func, v := v))).setDims(),
    #-----------------------------------------------------------------------
    dims := self >> let(n := self.func.domain(), [n * self.v, n * self.v]),
    #-----------------------------------------------------------------------
    print := (self,i,is) >> Print(
	self.name, "(", self.func, ", ", self.v, ")", self.printA()),
    #-----------------------------------------------------------------------
    toAMat := self >> let(f := self.func.lambda(),
	Tensor(Perm(PermList(List(f.tolist(), EvalScalar) + 1),
                    f.domain()), I(self.v)).toAMat()),
    #-----------------------------------------------------------------------
    sums := self >> self,
    needInterleavedLeft := False,
    needInterleavedRight := False,
    cannotChangeDataFormat := True,
    totallyCannotChangeDataFormat := True,
    transpose := self >> VPrm_x_I(self.func.transpose(), self.v)
));


text:
# Copyright (c) 2018-2021, Carnegie Mellon University
# See LICENSE for details

#############################
# General Case Cooley-Tukey
#############################

# R1 -> (R1, C1, R3) (R1)
# R2 -> (R2, C2, R4) (R1)
PRF12_CT_Children := (N,k,PRFt,DFTt,PRFtp,PRF1) -> Map2(DivisorPairs(N),
    (m,n) -> When(IsEvenInt(n),
	[ PRFt(m,k), DFTt(m,k), PRF1(n,k), PRFtp(m,k) ],
	[ PRFt(m,k), DFTt(m,k), PRF1(n,k) ] )
);

PRF12_CT_Rule := (N,k,C,Conj,Tw) -> let(m:=Cols(C[1]), n:=Cols(C[3]), Nf:=Int(N/2),
    nf:=Int(n/2), nc:=Int((n+1)/2), mf:=Int(m/2), mc:=Int((m+1)/2), j:=Ind(nc-1),

    SUM(
	RC(Scat(H(Nf+1,mf+1,0,n))) * C[1] * Gath(H(2*(nf+1)*m, m, 0, 2*(nf+1))),

	When(nc=1, [],
	ISum(j,
	     RC(Scat(BH(Nf+1,N,m,j+1,n))) *
	     Conj * RC(C[2]) * Tw(j) *
	     RC(Gath(H((nf+1)*m, m, j+1, nf+1))))),

	When(IsOddInt(n), [],
	RC(Scat(H(Nf+1,mc,nf,n))) * C[4] * Gath(H(2*(nf+1)*m, m, 2*nf, 2*(nf+1))))
    ) *
    Tensor(I(m), C[3]) * L(N,m)
);

IPRF12_CT_Rule := (N,k,C,Conj,Tw) -> let(m:=Rows(C[1]), n:=Rows(C[3]), Nf:=Int(N/2),
    nf:=Int(n/2), nc:=Int((n+1)/2), mf:=Int(m/2), mc:=Int((m+1)/2), j:=Ind(nc-1),

    L(N,n) * Tensor(I(m), C[3]) *
    SUM(
	Scat(H(2*(nf+1)*m, m, 0, 2*(nf+1))) * C[1] * RC(Gath(H(Nf+1,mf+1,0,n))),

	When(nc=1, [],
	ISum(j,
	     RC(Scat(H((nf+1)*m, m, j+1, nf+1))) *
	     Tw(j) *
	     RC(C[2]) *
	     Conj *
	     RC(Gath(BH(Nf+1,N,m,j+1,n))))),

	When(IsOddInt(n), [],
	Scat(H(2*(nf+1)*m, m, 2*nf, 2*(nf+1))) * C[4] * RC(Gath(H(Nf+1,mc,nf,n))))
    )
  );

####################
# Prime Factor
####################

PRF12_PF_Children := (N,k,PRFt,DFTt,PRF1) -> Map2(DivisorPairsRP(N),
    (m,n) -> When(IsEvenInt(n),
	[ PRFt(m,k*n), DFTt(m,k*n), PRF1(n,k*m), PRF1(m,k*n) ],
	[ PRFt(m,k*n), DFTt(m,k*n), PRF1(n,k*m) ] )
);

 RC.toAMat := self >> AMatMat(RCMatCyc( MatSPL(self.child(1)) ));

PRF12_PF_Rule := (N,k,C) -> let(m:=Cols(C[1]), n:=Cols(C[3]), Nf:=Int(N/2), Nc:=Int((N+1)/2),
    nf:=Int(n/2), nc:=Int((n+1)/2), mf:=Int(m/2), mc:=Int((m+1)/2), j:=Ind(nc-1),
    alpha := (1/n) mod m,
    beta := (1/m) mod n,
    jj:=Ind(m), q := Ind(2*m),

    SUM(
	RC(Scat(H(Nf+1,mf+1,0,n))) * C[1] * Gath(H(2*(nf+1)*m, m, 0, 2*(nf+1))),

	When(nc=1, [],
	ISum(j,
	     RC(Scat(Refl(Nf+1, N, m, HZ(N, m, (j+1)*m, n)))) *
	     # conjugate those values which indices will be reflected by the scatter Refl
	     # NOTE: Unless 1.0 is used below, vector code will break due to TVect(TInt, ...)
	     Diag(Lambda(q, cond(neq(imod(q, 2),0), cond(leq(imod(n*idiv(q, 2) + (j+1)*m, N), Nc-1), 1.0, -1.0), 1.0))) *
	     RC(C[2]) *
	     RC(Gath(H((nf+1)*m, m, j+1, nf+1))))),

	When(IsOddInt(n), [],
	     let(inds := HZ(N, mc, nc*m, n).tolist(),
		 conj := ConcatList(inds{[1..mc]}, i -> When(i.v > Nf, [1.0,-1.0], [1.0,1.0])),

		 RC(Scat(Refl(Nf+1, N, mc, HZ(N, mc, nc*m, n)))) *
		 #RC(Scat(H(Nf+1, mc, nf, n))) *
		 Diag(conj) * C[4] *
		 Gath(H(2*(nf+1)*m, m, 2*nf, 2*(nf+1)))
	     ))
    ) *
    Tensor(I(m), C[3]) * CRT(m,n,1,1)
);

# s := PRF12_PF_Rule(6,1,PRF12_PF_Children(6,1,PRDFT1, DFT1, PRDFT1)[1]);
# Print(s);
# me := MatSPL(s);
# them := MatSPL(PRDFT(6));

###########
# RDFT    #
###########

Declare(PRDFT1_PF);

RulesFor(PRDFT1, rec(
    PRDFT1_Base1 := BaseRule(PRDFT1, [1, @]),
    PRDFT1_Base2 := BaseRule(PRDFT1, [2, @]),

    #F PRDFT1_CT: projection of DFT_CT
    PRDFT1_CT := rec(
	forcePrimeFactor := false,
	isApplicable := (self, P) >> not IsPrime(P[1]) and
	    When(self.forcePrimeFactor, not PRDFT1_PF.isApplicable(P), true),

	allChildren  := P -> PRF12_CT_Children(P[1], P[2], PRDFT1, DFT1, PRDFT3, PRDFT1),
	rule := (P,C) -> let(N:=P[1], k:=P[2], m:=Cols(C[1]),
	    PRF12_CT_Rule(N, k, C, Diag(BHD(m,1,-1)), j->RC(Diag(fPrecompute(Twid(N,m,k,0,0,j+1))))))),

    #F PRDFT1_Complex: computes PRDFT using half of the outputs of complex DFT
    #F                this rule can be successfully pruned by the compiler, and thus
    #F                works for all sizes, including primes
    PRDFT1_Complex := rec(
	switch           := false,
	isApplicable     := P -> not Is2Power(P[1]),
	allChildren      := P -> [[ DFT(P[1], P[2]) ]],
	forTransposition := false,
	rule             := (P,C) -> let(n := P[1], nn:=Int(n/2)+1,
	    Buf(Gath(H(2*n,2*nn, 0, 1))) *
	    Diag(diagDirsum(fConst(2*nn,1), fConst(2*n-2*nn,0))) *
	    RC(C[1]) *
	    Tensor(I(n), Diag(1,0)) *
	    Buf(Scat(H(2*n,n,0,2)))
	)
    ),

    # transpose of RC(DFT(n)) is RC(DFT(n,-1)), since correct transposition is not implemented,
    # we need a separate rule
    PRDFT1_Complex_T := rec(
	switch           := false,
	isApplicable     := P -> not Is2Power(P[1]),
	allChildren      := P -> [[ DFT(P[1], -P[2]) ]],
	forTransposition := false,
	transposed := true,
	rule             := (P,C) -> let(n := P[1], nn:=Int(n/2)+1,
	    Buf(Gath(H(2*n,n,0,2))) *
	    Tensor(I(n), Diag(1,0)) *
	    RC(C[1]) *
	    Diag(diagDirsum(fConst(2*nn,1), fConst(2*n-2*nn,0))) *
	    Buf(Scat(H(2*n,2*nn, 0, 1)))
	)
    ),

    #F PRDFT1_Trig: PRDFT1_n -> P (DCT1_(n/2+1) dirsum DST1_(n/2-1)) A
    #F
    PRDFT1_Trig := rec(
	isApplicable := P -> P[1] > 2 and IsEvenInt(P[1]) and (P[2] mod P[1]) in [1,-1 mod P[1]],
	allChildren := P -> [[ DCT1(P[1]/2+1), DST1(P[1]/2-1) ]],
	rule := (P, C) -> let(n:=P[1]/2,
	    Z(2*n+2,2) *
	    DirectSum(Mat([[1,0],[0,0],[0,1],[0,0]]), L(2*n-2,n-1)) *
	    DirectSum(Z(n+1,-1)*C[1], Scale(P[2],C[2])) * SymSplit1(n))),

    PRDFT1_PF := rec(
	maxSize := false,
    	isApplicable := (self, P) >> (self.maxSize=false or P[1]<=self.maxSize) and not IsPrime(P[1]) and DivisorPairsRP(P[1])<>[],
    	allChildren  := P -> PRF12_PF_Children(P[1], P[2], PRDFT1, DFT1, PRDFT1),
    	rule := (P,C) -> let(N:=P[1], k:=P[2], m:=Cols(C[1]),
    	    PRF12_PF_Rule(N, k, C)))
));

RulesFor(IPRDFT1, rec(
    IPRDFT1_Base1 := BaseRule(IPRDFT1, [1, @]),
    IPRDFT1_Base2 := BaseRule(IPRDFT1, [2, @]),

    IPRDFT1_CT := rec(
	isApplicable := P -> not IsPrime(P[1]),
	allChildren  := P -> PRF12_CT_Children(P[1], P[2], IPRDFT1, DFT1, IPRDFT2, IPRDFT1),
	rule := (P,C) -> let(N:=P[1], k:=P[2], m:=Rows(C[1]),
	    IPRF12_CT_Rule(N, k, C, Diag(BHD(m,1,-1)), j->RC(Diag(fPrecompute(Twid(N,m,k,0,0,j+1))))))),

    IPRDFT1_Complex := rec(
 	switch           := false,
 	isApplicable     := P -> IsPrime(P[1]),
 	allChildren      := P -> [[ DFT(P[1], P[2]) ]],
	forTransposition := false,
	rule             := (P,C) -> let(n := P[1], nn:=Int(n/2)+1,
	    Mat(MatSPL(Gath(H(2*n,n,0,2)))) *
	    #Tensor(I(n), Diag(1,0)) *
	    RC(C[1]) *
	    Mat(MatSPL(Scat(H(2*n,2*nn, 0, 1))))
	)
    )
));

RulesFor(PRDFT2, rec(
    PRDFT2_Base1 := BaseRule(PRDFT2, [1, @]),
    PRDFT2_Base2 := BaseRule(PRDFT2, [2, @]),

    #F PRDFT2_CT: projection of DFT2_CT
    PRDFT2_CT := rec(
	isApplicable := P -> not IsPrime(P[1]),
	allChildren  := P -> PRF12_CT_Children(P[1], P[2], PRDFT2, DFT2, PRDFT4, PRDFT1),
	rule := (P,C) -> let(N:=P[1], k:=P[2], m:=Cols(C[1]),
	    PRF12_CT_Rule(N, k, C, Diag(BHD(m,-1,1)), j->RC(Diag(fPrecompute(Twid(N,m,k,0,1/2,j+1)))))))
));

RulesFor(IPRDFT3, rec(
    IPRDFT3_Base1 := BaseRule(IPRDFT3, [1, @]),
    IPRDFT3_Base2 := BaseRule(IPRDFT3, [2, @]),

    IPRDFT3_CT := rec(
	isApplicable := P -> not IsPrime(P[1]),
	allChildren  := P -> PRF12_CT_Children(P[1], P[2], IPRDFT3, DFT3, IPRDFT4, IPRDFT1),
	rule := (P,C) -> let(N:=P[1], k:=P[2], m:=Rows(C[1]),
	    IPRF12_CT_Rule(N, k, C, Diag(BHD(m,-1,1)), j->RC(Diag(fPrecompute(Twid(N,m,k,0,1/2,j+1)))))))
));

###########
# Hartley #
###########

RulesFor(PDHT1, rec(
    PDHT1_Base2 := rec(
	isApplicable := P -> P[1]=2,
	rule := (P, C) -> Tensor(I(2), Mat([[1],[1]])) * F(2)
    ),

    PDHT1_CT := rec(
	isApplicable := P -> not IsPrime(P[1]),
	allChildren  := P -> PRF12_CT_Children(P[1], P[2], PDHT1, DFT1, PDHT3, PDHT1),
	rule := (P,C) -> let(N:=P[1], k:=P[2], m:=Cols(C[1]),
	    PRF12_CT_Rule(N, k, C, TopHalf(m, J(2)), j->HTwid(N,m,k,0,0,j+1,J(2)).obj)))
));

RulesFor(PDHT2, rec(
   PDHT2_Base2 := rec(
	isApplicable := P -> P[1]=2,
	rule := (P, C) -> DirectSum(Mat([[1],[1]]), Mat([[1],[-1]])) * Mat(MatSPL(PRDFT2(P[1], P[2])){[1,4]})
    ),
    PDHT2_CT := rec(
	isApplicable := P -> not IsPrime(P[1]),
	allChildren  := P -> PRF12_CT_Children(P[1], P[2], PDHT2, DFT2, PDHT4, PDHT1),
	rule := (P,C) -> let(N:=P[1], k:=P[2], m:=Cols(C[1]),
	    PRF12_CT_Rule(N, k, C, TopHalf(m, -J(2)), j->HTwid(N,m,k,0,1/2,j+1,-J(2)).obj)))
));