@@ -20,7 +20,6 @@ Author: Daniel Kroening, kroening@kroening.com
2020#include < util/string2int.h>
2121
2222#include " expr2verilog.h"
23- #include " sva_expr.h"
2423#include " verilog_expr.h"
2524#include " verilog_types.h"
2625#include " vtype.h"
@@ -2540,13 +2539,6 @@ exprt verilog_typecheck_exprt::convert_unary_expr(unary_exprt expr)
25402539 make_boolean (expr.op ());
25412540 }
25422541 }
2543- else if (expr.id () == ID_sva_not)
2544- {
2545- convert_expr (expr.op ());
2546- make_boolean (expr.op ());
2547- expr.type () = bool_typet (); // always boolean, never x
2548- return std::move (expr);
2549- }
25502542 else if (expr.id ()==ID_reduction_or || expr.id ()==ID_reduction_and ||
25512543 expr.id ()==ID_reduction_nor || expr.id ()==ID_reduction_nand ||
25522544 expr.id ()==ID_reduction_xor || expr.id ()==ID_reduction_xnor)
@@ -2567,20 +2559,6 @@ exprt verilog_typecheck_exprt::convert_unary_expr(unary_exprt expr)
25672559 no_bool_ops (expr);
25682560 expr.type () = expr.op ().type ();
25692561 }
2570- else if (
2571- expr.id () == ID_sva_always || expr.id () == ID_sva_s_eventually ||
2572- expr.id () == ID_sva_cycle_delay_plus ||
2573- expr.id () == ID_sva_cycle_delay_star || expr.id () == ID_sva_weak ||
2574- expr.id () == ID_sva_strong || expr.id () == ID_sva_nexttime ||
2575- expr.id () == ID_sva_s_nexttime ||
2576- expr.id () == ID_sva_sequence_first_match ||
2577- expr.id () == ID_sva_sequence_repetition_plus ||
2578- expr.id () == ID_sva_sequence_repetition_star)
2579- {
2580- convert_expr (expr.op ());
2581- make_boolean (expr.op ());
2582- expr.type ()=bool_typet ();
2583- }
25842562 else if (expr.id () == ID_verilog_explicit_cast)
25852563 {
25862564 // SystemVerilog has got type'(expr). This is an explicit
@@ -2859,21 +2837,6 @@ exprt verilog_typecheck_exprt::convert_binary_expr(binary_exprt expr)
28592837
28602838 return std::move (expr);
28612839 }
2862- else if (
2863- expr.id () == ID_sva_and || expr.id () == ID_sva_or ||
2864- expr.id () == ID_sva_implies || expr.id () == ID_sva_iff)
2865- {
2866- for (auto &op : expr.operands ())
2867- {
2868- convert_expr (op);
2869- make_boolean (op);
2870- }
2871-
2872- // always boolean, never x
2873- expr.type () = bool_typet ();
2874-
2875- return std::move (expr);
2876- }
28772840 else if (expr.id ()==ID_equal || expr.id ()==ID_notequal)
28782841 {
28792842 expr.type ()=bool_typet ();
@@ -3014,95 +2977,6 @@ exprt verilog_typecheck_exprt::convert_binary_expr(binary_exprt expr)
30142977
30152978 return std::move (expr);
30162979 }
3017- else if (
3018- expr.id () == ID_sva_disable_iff || expr.id () == ID_sva_accept_on ||
3019- expr.id () == ID_sva_reject_on || expr.id () == ID_sva_sync_accept_on ||
3020- expr.id () == ID_sva_sync_reject_on)
3021- {
3022- convert_expr (to_sva_abort_expr (expr).condition ());
3023- make_boolean (to_sva_abort_expr (expr).condition ());
3024- convert_expr (to_sva_abort_expr (expr).property ());
3025- make_boolean (to_sva_abort_expr (expr).property ());
3026- expr.type () = bool_typet ();
3027- return std::move (expr);
3028- }
3029- else if (expr.id () == ID_sva_indexed_nexttime)
3030- {
3031- convert_expr (to_sva_indexed_nexttime_expr (expr).index ());
3032-
3033- auto &op = to_sva_indexed_nexttime_expr (expr).op ();
3034- convert_expr (op);
3035- make_boolean (op);
3036- expr.type () = bool_typet ();
3037-
3038- return std::move (expr);
3039- }
3040- else if (expr.id () == ID_sva_indexed_s_nexttime)
3041- {
3042- convert_expr (to_sva_indexed_s_nexttime_expr (expr).index ());
3043-
3044- auto &op = to_sva_indexed_s_nexttime_expr (expr).op ();
3045- convert_expr (op);
3046- make_boolean (op);
3047- expr.type () = bool_typet ();
3048-
3049- return std::move (expr);
3050- }
3051- else if (
3052- expr.id () == ID_sva_overlapped_implication ||
3053- expr.id () == ID_sva_non_overlapped_implication ||
3054- expr.id () == ID_sva_overlapped_followed_by ||
3055- expr.id () == ID_sva_nonoverlapped_followed_by ||
3056- expr.id () == ID_sva_until || expr.id () == ID_sva_s_until ||
3057- expr.id () == ID_sva_until_with || expr.id () == ID_sva_s_until_with)
3058- {
3059- convert_expr (expr.op0 ());
3060- make_boolean (expr.op0 ());
3061- convert_expr (expr.op1 ());
3062- make_boolean (expr.op1 ());
3063- expr.type ()=bool_typet ();
3064-
3065- return std::move (expr);
3066- }
3067- else if (
3068- expr.id () == ID_sva_sequence_intersect ||
3069- expr.id () == ID_sva_sequence_throughout ||
3070- expr.id () == ID_sva_sequence_within)
3071- {
3072- auto &binary_expr = to_binary_expr (expr);
3073-
3074- convert_expr (binary_expr.lhs ());
3075- make_boolean (binary_expr.lhs ());
3076- convert_expr (binary_expr.rhs ());
3077- make_boolean (binary_expr.rhs ());
3078-
3079- expr.type () = bool_typet ();
3080-
3081- return std::move (expr);
3082- }
3083- else if (
3084- expr.id () == ID_sva_sequence_consecutive_repetition ||
3085- expr.id () == ID_sva_sequence_non_consecutive_repetition ||
3086- expr.id () == ID_sva_sequence_goto_repetition)
3087- {
3088- auto &binary_expr = to_binary_expr (expr);
3089-
3090- convert_expr (binary_expr.lhs ());
3091- make_boolean (binary_expr.lhs ());
3092-
3093- convert_expr (binary_expr.rhs ());
3094-
3095- mp_integer n = elaborate_constant_integer_expression (binary_expr.rhs ());
3096- if (n < 0 )
3097- throw errort ().with_location (binary_expr.rhs ().source_location ())
3098- << " number of repetitions must not be negative" ;
3099-
3100- binary_expr.rhs () = from_integer (n, integer_typet{});
3101-
3102- expr.type () = bool_typet ();
3103-
3104- return std::move (expr);
3105- }
31062980 else if (expr.id ()==ID_hierarchical_identifier)
31072981 {
31082982 return convert_hierarchical_identifier (
@@ -3133,28 +3007,6 @@ exprt verilog_typecheck_exprt::convert_binary_expr(binary_exprt expr)
31333007 << " cannot perform size cast on " << to_string (op_type);
31343008 }
31353009 }
3136- else if (expr.id () == ID_sva_case)
3137- {
3138- auto &case_expr = to_sva_case_expr (expr);
3139- convert_expr (case_expr.case_op ());
3140-
3141- for (auto &case_item : case_expr.case_items ())
3142- {
3143- // same rules as case statement
3144- for (auto &pattern : case_item.patterns ())
3145- {
3146- convert_expr (pattern);
3147- typet t = max_type (pattern.type (), case_expr.case_op ().type ());
3148- propagate_type (pattern, t);
3149- }
3150-
3151- convert_expr (case_item.result ());
3152- make_boolean (case_item.result ());
3153- }
3154-
3155- expr.type () = bool_typet ();
3156- return std::move (expr);
3157- }
31583010 else if (
31593011 expr.id () == ID_verilog_streaming_concatenation_left_to_right ||
31603012 expr.id () == ID_verilog_streaming_concatenation_right_to_left)
@@ -3352,62 +3204,6 @@ exprt verilog_typecheck_exprt::convert_trinary_expr(ternary_exprt expr)
33523204 expr.type ()=expr.op1 ().type ();
33533205 return std::move (expr);
33543206 }
3355- else if (expr.id ()==ID_sva_cycle_delay) // #[1:2] something
3356- {
3357- expr.type ()=bool_typet ();
3358- convert_expr (expr.op0 ());
3359- if (expr.op1 ().is_not_nil ()) convert_expr (expr.op1 ());
3360- convert_expr (expr.op2 ());
3361- make_boolean (expr.op2 ());
3362- return std::move (expr);
3363- }
3364- else if (
3365- expr.id () == ID_sva_eventually || expr.id () == ID_sva_ranged_s_eventually ||
3366- expr.id () == ID_sva_s_always || expr.id () == ID_sva_ranged_always)
3367- {
3368- auto lower = convert_integer_constant_expression (expr.op0 ());
3369-
3370- expr.op0 () =
3371- from_integer (lower, natural_typet ()).with_source_location (expr.op0 ());
3372-
3373- if (expr.op1 ().id () == ID_infinity)
3374- {
3375- }
3376- else
3377- {
3378- auto upper = convert_integer_constant_expression (expr.op1 ());
3379- if (lower > upper)
3380- {
3381- throw errort ().with_location (expr.source_location ())
3382- << " range must be lower <= upper" ;
3383- }
3384-
3385- expr.op1 () =
3386- from_integer (upper, natural_typet ()).with_source_location (expr.op1 ());
3387- }
3388-
3389- convert_expr (expr.op2 ());
3390- make_boolean (expr.op2 ());
3391- expr.type () = bool_typet ();
3392-
3393- return std::move (expr);
3394- }
3395- else if (expr.id () == ID_sva_if)
3396- {
3397- convert_expr (expr.op0 ());
3398- make_boolean (expr.op0 ());
3399-
3400- convert_expr (expr.op1 ());
3401- make_boolean (expr.op1 ());
3402-
3403- if (expr.op2 ().is_not_nil ())
3404- {
3405- convert_expr (expr.op2 ());
3406- make_boolean (expr.op2 ());
3407- }
3408-
3409- return std::move (expr);
3410- }
34113207 else
34123208 {
34133209 throw errort ().with_location (expr.source_location ())
0 commit comments