@@ -1415,7 +1415,7 @@ static uint32_t jitc_var_reindex(uint32_t var_index, uint32_t new_index,
1415
1415
uint32_t size) {
1416
1416
Variable *v = jitc_var (var_index);
1417
1417
1418
- if (v->is_data ())
1418
+ if (v->is_data () || (VarType) v-> type == VarType::Void )
1419
1419
return 0 ; // evaluated variable, give up
1420
1420
1421
1421
if (v->extra ) {
@@ -1424,31 +1424,32 @@ static uint32_t jitc_var_reindex(uint32_t var_index, uint32_t new_index,
1424
1424
return 0 ; // "complicated" variable, give up
1425
1425
}
1426
1426
1427
- if (v->is_literal ()) {
1428
- jitc_var_inc_ref (var_index, v);
1429
- return var_index;
1430
- }
1431
-
1432
1427
Ref dep[4 ];
1433
- bool rebuild = false ;
1434
- for (uint32_t i = 0 ; i < 4 ; ++i) {
1435
- uint32_t index_2 = v->dep [i];
1436
- if (!index_2)
1437
- continue ;
1438
- dep[i] = steal (jitc_var_reindex (index_2, new_index, size));
1439
- if (!dep[i])
1440
- return 0 ; // recursive call failed, give up
1441
- rebuild |= dep[i] != index_2;
1442
- if (rebuild)
1443
- v = jitc_var (var_index);
1428
+ bool rebuild = v->size != size && v->size != 1 ;
1429
+
1430
+ if (!v->is_literal ()) {
1431
+ for (uint32_t i = 0 ; i < 4 ; ++i) {
1432
+ uint32_t index_2 = v->dep [i];
1433
+ if (!index_2)
1434
+ continue ;
1435
+ dep[i] = steal (jitc_var_reindex (index_2, new_index, size));
1436
+ if (!dep[i])
1437
+ return 0 ; // recursive call failed, give up
1438
+ rebuild |= dep[i] != index_2;
1439
+ }
1444
1440
}
1445
1441
1446
- if (rebuild) {
1442
+ v = jitc_var (var_index);
1443
+
1444
+ if (v->kind == VarKind::Counter) {
1445
+ return jitc_var_new_ref (new_index);
1446
+ } else if (rebuild) {
1447
1447
Variable v2;
1448
1448
v2.kind = v->kind ;
1449
- v2.size = size;
1450
- v2.type = v->type ;
1451
1449
v2.backend = v->backend ;
1450
+ v2.type = v->type ;
1451
+ v2.size = size;
1452
+ v2.optix = v->optix ;
1452
1453
v2.placeholder = v->placeholder ;
1453
1454
if (v->is_stmt ()) {
1454
1455
if (!v->free_stmt ) {
@@ -1465,8 +1466,6 @@ static uint32_t jitc_var_reindex(uint32_t var_index, uint32_t new_index,
1465
1466
jitc_var_inc_ref (dep[i]);
1466
1467
}
1467
1468
return jitc_var_new (v2);
1468
- } else if (v->kind == VarKind::Counter) {
1469
- return jitc_var_new_ref (new_index);
1470
1469
} else {
1471
1470
jitc_var_inc_ref (var_index, v);
1472
1471
return var_index;
0 commit comments