@@ -1044,18 +1044,20 @@ void shared_bufferst::affected_by_delay(
1044
1044
local_may
1045
1045
#endif
1046
1046
); // NOLINT(whitespace/parens)
1047
- for (const auto &w_entry : rw_set.w_entries )
1047
+ for (const auto &w_entry : rw_set.w_entries )
1048
+ {
1049
+ for (const auto &r_entry : rw_set.r_entries )
1048
1050
{
1049
- for (const auto &r_entry : rw_set.r_entries )
1051
+ message.debug () << " debug: " << id2string (w_entry.second .object )
1052
+ << " reads from " << id2string (r_entry.second .object )
1053
+ << messaget::eom;
1054
+ if (is_buffered_in_general (r_entry.second .symbol_expr , true ))
1050
1055
{
1051
- message.debug () <<" debug: " <<id2string (w_entry.second .object )
1052
- <<" reads from " <<id2string (r_entry.second .object )
1053
- <<messaget::eom;
1054
- if (is_buffered_in_general (r_entry.second .symbol_expr , true ))
1055
- // shouldn't it be true? false => overapprox
1056
- affected_by_delay_set.insert (w_entry.second .object );
1056
+ // shouldn't it be true? false => overapprox
1057
+ affected_by_delay_set.insert (w_entry.second .object );
1057
1058
}
1058
1059
}
1060
+ }
1059
1061
}
1060
1062
}
1061
1063
}
@@ -1157,10 +1159,14 @@ void shared_bufferst::cfg_visitort::weak_memory(
1157
1159
{
1158
1160
for (const auto &r_entry : rw_set.r_entries )
1159
1161
{
1160
- if (shared_buffers.is_buffered (ns, r_entry.second .symbol_expr , true ))
1162
+ if (shared_buffers.is_buffered (
1163
+ ns, r_entry.second .symbol_expr , true ))
1161
1164
{
1162
1165
shared_buffers.delay_read (
1163
- goto_program, i_it, source_location, r_entry.second .object ,
1166
+ goto_program,
1167
+ i_it,
1168
+ source_location,
1169
+ r_entry.second .object ,
1164
1170
w_entry.second .object );
1165
1171
}
1166
1172
}
@@ -1169,8 +1175,11 @@ void shared_bufferst::cfg_visitort::weak_memory(
1169
1175
if (shared_buffers.is_buffered (ns, w_entry.second .symbol_expr , true ))
1170
1176
{
1171
1177
shared_buffers.write (
1172
- goto_program, i_it, source_location,
1173
- w_entry.second .object , original_instruction,
1178
+ goto_program,
1179
+ i_it,
1180
+ source_location,
1181
+ w_entry.second .object ,
1182
+ original_instruction,
1174
1183
current_thread);
1175
1184
}
1176
1185
else
@@ -1180,23 +1189,24 @@ void shared_bufferst::cfg_visitort::weak_memory(
1180
1189
{
1181
1190
for (const auto &r_entry : rw_set.r_entries )
1182
1191
{
1183
- if (shared_buffers.affected_by_delay_set .find (
1184
- r_entry.second .object )!=
1185
- shared_buffers.affected_by_delay_set .end ())
1192
+ if (
1193
+ shared_buffers.affected_by_delay_set .find (
1194
+ r_entry.second .object ) !=
1195
+ shared_buffers.affected_by_delay_set .end ())
1186
1196
{
1187
- shared_buffers.message .debug () << " second: "
1188
- << r_entry.second .object << messaget::eom;
1189
- const varst &vars= (shared_buffers)(r_entry.second .object );
1197
+ shared_buffers.message .debug ()
1198
+ << " second: " << r_entry.second .object << messaget::eom;
1199
+ const varst &vars = (shared_buffers)(r_entry.second .object );
1190
1200
1191
- shared_buffers.message .debug () << " writer "
1192
- <<w_entry.second .object
1193
- <<" reads " << r_entry.second .object << messaget::eom;
1201
+ shared_buffers.message .debug ()
1202
+ << " writer " << w_entry.second .object << " reads "
1203
+ << r_entry.second .object << messaget::eom;
1194
1204
1195
1205
// TO FIX: how to deal with rhs including calls?
1196
1206
// if a read is delayed, use its alias instead of itself
1197
1207
// -- or not
1198
- symbol_exprt to_replace_expr= symbol_exprt (
1199
- r_entry.second .object , vars.type );
1208
+ symbol_exprt to_replace_expr =
1209
+ symbol_exprt ( r_entry.second .object , vars.type );
1200
1210
symbol_exprt new_read_expr=symbol_exprt (
1201
1211
vars.read_delayed_var ,
1202
1212
pointer_type (vars.type ));
@@ -1227,16 +1237,22 @@ void shared_bufferst::cfg_visitort::weak_memory(
1227
1237
to_replace_expr); // original_instruction.code.op1());
1228
1238
1229
1239
shared_buffers.assignment (
1230
- goto_program, i_it, source_location,
1231
- r_entry.second .object , rhs);
1240
+ goto_program,
1241
+ i_it,
1242
+ source_location,
1243
+ r_entry.second .object ,
1244
+ rhs);
1232
1245
}
1233
1246
}
1234
1247
}
1235
1248
1236
1249
// normal assignment
1237
1250
shared_buffers.assignment (
1238
- goto_program, i_it, source_location,
1239
- w_entry.second .object , original_instruction.code .op1 ());
1251
+ goto_program,
1252
+ i_it,
1253
+ source_location,
1254
+ w_entry.second .object ,
1255
+ original_instruction.code .op1 ());
1240
1256
}
1241
1257
}
1242
1258
@@ -1247,19 +1263,22 @@ void shared_bufferst::cfg_visitort::weak_memory(
1247
1263
{
1248
1264
if (shared_buffers.is_buffered (ns, r_entry.second .symbol_expr , false ))
1249
1265
{
1250
- shared_buffers.message .debug () << " flush restore: "
1251
- << r_entry.second .object << messaget::eom;
1252
- const varst vars= (shared_buffers)(r_entry.second .object );
1266
+ shared_buffers.message .debug ()
1267
+ << " flush restore: " << r_entry.second .object << messaget::eom;
1268
+ const varst vars = (shared_buffers)(r_entry.second .object );
1253
1269
const exprt delayed_expr=symbol_exprt (vars.flush_delayed ,
1254
1270
bool_typet ());
1255
1271
const symbol_exprt mem_value_expr=symbol_exprt (vars.mem_tmp ,
1256
1272
vars.type );
1257
- const exprt cond_expr= if_exprt (delayed_expr, mem_value_expr,
1258
- r_entry.second .symbol_expr );
1273
+ const exprt cond_expr = if_exprt (
1274
+ delayed_expr, mem_value_expr, r_entry.second .symbol_expr );
1259
1275
1260
1276
shared_buffers.assignment (
1261
- goto_program, i_it, source_location,
1262
- r_entry.second .object , cond_expr);
1277
+ goto_program,
1278
+ i_it,
1279
+ source_location,
1280
+ r_entry.second .object ,
1281
+ cond_expr);
1263
1282
shared_buffers.assignment (
1264
1283
goto_program, i_it, source_location,
1265
1284
vars.flush_delayed , false_exprt ());
0 commit comments