Skip to content

Commit db7f7ce

Browse files
committed
fixes to jitc_var_reindex()
1 parent 3fcf4a0 commit db7f7ce

File tree

1 file changed

+21
-22
lines changed

1 file changed

+21
-22
lines changed

src/op.cpp

+21-22
Original file line numberDiff line numberDiff line change
@@ -1415,7 +1415,7 @@ static uint32_t jitc_var_reindex(uint32_t var_index, uint32_t new_index,
14151415
uint32_t size) {
14161416
Variable *v = jitc_var(var_index);
14171417

1418-
if (v->is_data())
1418+
if (v->is_data() || (VarType) v->type == VarType::Void)
14191419
return 0; // evaluated variable, give up
14201420

14211421
if (v->extra) {
@@ -1424,31 +1424,32 @@ static uint32_t jitc_var_reindex(uint32_t var_index, uint32_t new_index,
14241424
return 0; // "complicated" variable, give up
14251425
}
14261426

1427-
if (v->is_literal()) {
1428-
jitc_var_inc_ref(var_index, v);
1429-
return var_index;
1430-
}
1431-
14321427
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+
}
14441440
}
14451441

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) {
14471447
Variable v2;
14481448
v2.kind = v->kind;
1449-
v2.size = size;
1450-
v2.type = v->type;
14511449
v2.backend = v->backend;
1450+
v2.type = v->type;
1451+
v2.size = size;
1452+
v2.optix = v->optix;
14521453
v2.placeholder = v->placeholder;
14531454
if (v->is_stmt()) {
14541455
if (!v->free_stmt) {
@@ -1465,8 +1466,6 @@ static uint32_t jitc_var_reindex(uint32_t var_index, uint32_t new_index,
14651466
jitc_var_inc_ref(dep[i]);
14661467
}
14671468
return jitc_var_new(v2);
1468-
} else if (v->kind == VarKind::Counter) {
1469-
return jitc_var_new_ref(new_index);
14701469
} else {
14711470
jitc_var_inc_ref(var_index, v);
14721471
return var_index;

0 commit comments

Comments
 (0)