Skip to content

Commit e45644f

Browse files
committed
CHB:ARM: analyze with loop counters
1 parent 3497338 commit e45644f

File tree

6 files changed

+16
-4
lines changed

6 files changed

+16
-4
lines changed

CodeHawk/CHB/bchanalyze/bCHAnalyzeProcedure.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ let analyze_procedure_with_linear_equalities
9191
begin
9292
analysis_setup#addLinearEqualities;
9393
analysis_setup#setOpSemantics (default_opsemantics "karr");
94-
analysis_setup#analyze_procedure system proc
94+
analysis_setup#analyze_procedure system ~do_loop_counters:true proc
9595
end
9696

9797
let analyze_procedure_with_intervals (proc:procedure_int) (system:system_int) =

CodeHawk/CHB/bchanalyze/bCHExtractInvariants.ml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,16 @@ let extract_external_value_equalities
232232

233233

234234
let extract_relational_facts finfo iaddr domain =
235+
let vars = domain#observer#getObservedVariables in
236+
let lcs =
237+
List.filter (fun v -> match v#getType with NUM_LOOP_COUNTER_TYPE -> true | _ -> false)
238+
vars in
239+
let _ =
240+
ch_diagnostics_log#add
241+
"project out loopcounters"
242+
(LBLOCK [STR iaddr; STR ": ";
243+
pretty_print_list lcs (fun v -> v#toPretty) "[" ", " "]"]) in
244+
let domain = domain#projectOut lcs in
235245
let constraints = domain#observer#getNumericalConstraints ~variables:None () in
236246
List.iter (finfo#finv#add_lineq iaddr) constraints
237247

CodeHawk/CHB/bchlibarm32/bCHARMOperand.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -726,7 +726,7 @@ object (self:'a)
726726
| ARMImmediate _ ->
727727
let num = self#to_numerical in
728728
(try
729-
num#toInt >= 0 && num#toInt < 5
729+
num#toInt >= 0 && num#toInt < 7
730730
with
731731
| _ -> false)
732732
| _ -> false

CodeHawk/CHB/bchlibarm32/bCHFnARMDictionary.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ object (self)
159159
() in
160160
let rewrite_expr ?(restrict:int option) (x: xpr_t): xpr_t =
161161
try
162-
let xpr = floc#inv#rewrite_expr x in
162+
let xpr = floc#inv#rewrite_expr ~loopcounter:true x in
163163
let xpr = simplify_xpr xpr in
164164
let xpr =
165165
let vars = variables_in_expr xpr in

CodeHawk/CHB/bchlibarm32/bCHTranslateARMToCHIF.ml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1987,6 +1987,8 @@ let translate_arm_instruction
19871987
| 2 -> 4
19881988
| 3 -> 8
19891989
| 4 -> 16
1990+
| 5 -> 32
1991+
| 6 -> 64
19901992
| _ -> 1 in (* not reachable by small immediate *)
19911993
let usevars = get_register_vars [rn] in
19921994
let usehigh = get_use_high_vars_r [xxrn_r] in

CodeHawk/CHB/bchlibmips32/bCHTranslateMIPSToCHIF.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ let translate_mips_instruction
268268
let frozenasserts =
269269
List.map (fun (v, fv) -> ASSERT (EQ (v, fv)))
270270
(finfo#get_test_variables ctxtiaddr) in
271-
let rewrite_expr floc x:xpr_t =
271+
let rewrite_expr (floc: floc_int) (x: xpr_t):xpr_t =
272272
let rec expand x =
273273
match x with
274274
| XVar v

0 commit comments

Comments
 (0)