@@ -1429,59 +1429,55 @@ def add_struct_tags(self, var_table):
1429
1429
the_slice = cur_tag .arg .the_slice [0 ][0 ]
1430
1430
assert the_slice .step is None
1431
1431
if isinstance (the_slice .start , int ):
1432
- omp_slice_start = the_slice .start
1432
+ start_index_var = ir .Var (None , f"{ cur_tag_var } _start_index_var{ target_num } { uniqueness } " , array_var .loc )
1433
+ start_assign = ir .Assign (ir .Const (the_slice .start , array_var .loc ), start_index_var , array_var .loc )
1434
+
1435
+ typemap [start_index_var .name ] = types .int64
1436
+ lowerer .lower_inst (start_assign )
1437
+ extras_before .append (start_assign )
1438
+ lowerer ._alloca_var (start_index_var .name , typemap [start_index_var .name ])
1439
+ lowerer .loadvar (start_index_var .name )
1433
1440
else :
1434
- omp_slice_start = the_slice .start
1435
- assert isinstance (omp_slice_start , str )
1436
- omp_slice_start = ir .Var (None , omp_slice_start , array_var .loc )
1441
+ start_index_var = the_slice .start
1442
+ assert isinstance (start_index_var , str )
1443
+ start_index_var = ir .Var (None , start_index_var , array_var .loc )
1437
1444
if isinstance (the_slice .stop , int ):
1438
- size_var = the_slice .stop
1445
+ end_index_var = ir .Var (None , f"{ cur_tag_var } _end_index_var{ target_num } { uniqueness } " , array_var .loc )
1446
+ end_assign = ir .Assign (ir .Const (the_slice .stop , array_var .loc ), end_index_var , array_var .loc )
1447
+ typemap [end_index_var .name ] = types .int64
1448
+ lowerer .lower_inst (end_assign )
1449
+ extras_before .append (end_assign )
1450
+ lowerer ._alloca_var (end_index_var .name , typemap [end_index_var .name ])
1451
+ lowerer .loadvar (end_index_var .name )
1439
1452
else :
1440
- size_var = the_slice .stop
1441
- assert isinstance (size_var , str )
1442
- size_var = ir .Var (None , size_var , array_var .loc )
1453
+ end_index_var = the_slice .stop
1454
+ assert isinstance (end_index_var , str )
1455
+ end_index_var = ir .Var (None , end_index_var , array_var .loc )
1456
+
1457
+ num_elements_var = ir .Var (None , f"{ cur_tag_var } _num_elements_var{ target_num } { uniqueness } " , array_var .loc )
1458
+ size_binop = ir .Expr .binop (operator .sub , end_index_var , start_index_var , array_var .loc )
1459
+ size_assign = ir .Assign (size_binop , num_elements_var , array_var .loc )
1460
+ calltypes [size_binop ] = typing .signature (types .int64 , types .int64 , types .int64 )
1443
1461
else :
1444
- omp_slice_start = 0
1445
- size_var = ir .Var (None , f"{ cur_tag_var } _size_var{ target_num } { uniqueness } " , array_var .loc )
1446
- #size_var = array_var.scope.redefine("size_var", array_var.loc)
1462
+ start_index_var = 0
1463
+ num_elements_var = ir .Var (None , f"{ cur_tag_var } _num_elements_var{ target_num } { uniqueness } " , array_var .loc )
1447
1464
size_getattr = ir .Expr .getattr (array_var , "size" , array_var .loc )
1448
- size_assign = ir .Assign (size_getattr , size_var , array_var .loc )
1449
- typemap [size_var .name ] = types .int64
1450
- lowerer .lower_inst (size_assign )
1451
- extras_before .append (size_assign )
1452
- lowerer ._alloca_var (size_var .name , typemap [size_var .name ])
1453
-
1454
- # see core/datamodel/models.py
1455
- loaded_size = lowerer .loadvar (size_var .name )
1456
- loaded_op = loaded_size .operands [0 ]
1457
- loaded_pointee = loaded_op .type .pointee
1458
- loaded_str = str (loaded_pointee ) + " * " + loaded_size ._get_reference ()
1459
-
1460
- #--------
1461
- """
1462
- itemsize_var = ir.Var(None, cur_tag_var + "_itemsize_var", array_var.loc)
1463
- itemsize_getattr = ir.Expr.getattr(array_var, "itemsize", array_var.loc)
1464
- itemsize_assign = ir.Assign(itemsize_getattr, itemsize_var, array_var.loc)
1465
- typemap[itemsize_var.name] = types.int64
1466
- lowerer.lower_inst(itemsize_assign)
1467
- #--------
1468
-
1469
- totalsize_var = ir.Var(None, cur_tag_var + "_totalsize_var", array_var.loc)
1470
- totalsize_binop = ir.Expr.binop(operator.mul, size_var, itemsize_var, array_var.loc)
1471
- totalsize_assign = ir.Assign(totalsize_binop, totalsize_var, array_var.loc)
1472
- calltypes[totalsize_binop] = typing.signature(types.int64, types.int64, types.int64)
1473
- typemap[totalsize_var.name] = types.int64
1474
- lowerer.lower_inst(totalsize_assign)
1475
- #--------
1476
- """
1465
+ size_assign = ir .Assign (size_getattr , num_elements_var , array_var .loc )
1466
+
1467
+ typemap [num_elements_var .name ] = types .int64
1468
+ lowerer .lower_inst (size_assign )
1469
+ extras_before .append (size_assign )
1470
+ lowerer ._alloca_var (num_elements_var .name , typemap [num_elements_var .name ])
1471
+
1472
+ # see core/datamodel/models.py
1473
+ lowerer .loadvar (num_elements_var .name ) # alloca the var
1477
1474
1478
1475
# see core/datamodel/models.py
1479
- if isinstance (size_var , ir .Var ):
1480
- loaded_size = lowerer .loadvar (size_var .name )
1481
- loaded_op = loaded_size .operands [0 ]
1482
- loaded_pointee = loaded_op .type .pointee
1483
- loaded_str = str (loaded_pointee ) + " * " + loaded_size ._get_reference ()
1484
- struct_tags .append (openmp_tag (cur_tag .name + ".STRUCT" , cur_tag_var + "*data" , non_arg = True , omp_slice = (0 , size_var )))
1476
+ if isinstance (start_index_var , ir .Var ):
1477
+ lowerer .loadvar (start_index_var .name ) # alloca the var
1478
+ if isinstance (num_elements_var , ir .Var ):
1479
+ lowerer .loadvar (num_elements_var .name ) # alloca the var
1480
+ struct_tags .append (openmp_tag (cur_tag .name + ".STRUCT" , cur_tag_var + "*data" , non_arg = True , omp_slice = (start_index_var , num_elements_var )))
1485
1481
struct_tags .append (openmp_tag ("QUAL.OMP.MAP.TO.STRUCT" , cur_tag_var + "*shape" , non_arg = True , omp_slice = (0 , 1 )))
1486
1482
struct_tags .append (openmp_tag ("QUAL.OMP.MAP.TO.STRUCT" , cur_tag_var + "*strides" , non_arg = True , omp_slice = (0 , 1 )))
1487
1483
# Peel off NameSlice, it served its purpose and is not
0 commit comments