|
7 | 7 |
|
8 | 8 | Copyright (c) 2005-2019 Kestrel Technology LLC |
9 | 9 | Copyright (c) 2020-2021 Henny Sipma |
10 | | - Copyright (c) 2022-2024 Aarno Labs LLC |
| 10 | + Copyright (c) 2022-2025 Aarno Labs LLC |
11 | 11 |
|
12 | 12 | Permission is hereby granted, free of charge, to any person obtaining a copy |
13 | 13 | of this software and associated documentation files (the "Software"), to deal |
@@ -42,7 +42,7 @@ let simplify = S.simplify_xpr |
42 | 42 |
|
43 | 43 |
|
44 | 44 | let testname = "xsimplifyTest" |
45 | | -let lastupdated = "2024-06-19" |
| 45 | +let lastupdated = "2025-02-07" |
46 | 46 |
|
47 | 47 |
|
48 | 48 | let basic () = |
@@ -562,6 +562,61 @@ let reduce_plus () = |
562 | 562 | r (simplify |
563 | 563 | (XOp (XPlus, [XOp (XShiftlt, [x; a]); XOp (XShiftlt, [x; b])])))); |
564 | 564 |
|
| 565 | + (* (xbase + a) ==> (xbase + a) *) |
| 566 | + TS.add_simple_test |
| 567 | + ~title: "base_no_move" |
| 568 | + (fun () -> |
| 569 | + let a = XG.mk_ix 2 in |
| 570 | + let v = XG.mk_var "x" in |
| 571 | + let x = XOp (XPlus, [XOp ((Xf "addressofvar"), [XVar v]); a]) in |
| 572 | + XA.equal_xpr x (simplify x)); |
| 573 | + |
| 574 | + (* (a + xbase) -> (xbase + a) *) |
| 575 | + TS.add_simple_test |
| 576 | + ~title: "base_move" |
| 577 | + (fun () -> |
| 578 | + let a = XG.mk_ix 2 in |
| 579 | + let aofv = XG.mk_addressof "v" in |
| 580 | + let r = XOp (XPlus, [aofv; a]) in |
| 581 | + let x = XOp (XPlus, [a; aofv]) in |
| 582 | + XA.equal_xpr r (simplify x)); |
| 583 | + |
| 584 | + (* (a + xbase) - b ==> xbase + (a - b) *) |
| 585 | + TS.add_simple_test |
| 586 | + ~title: "base_move_out" |
| 587 | + (fun () -> |
| 588 | + let a = XVar (XG.mk_var "x") in |
| 589 | + let b = XVar (XG.mk_var "y") in |
| 590 | + let aofv = XG.mk_addressof "v" in |
| 591 | + let x = XOp (XMinus, [XOp (XPlus, [a; aofv]); b]) in |
| 592 | + let r = XOp (XPlus, [aofv; XOp (XMinus, [a; b])]) in |
| 593 | + XA.equal_xpr r (simplify x)); |
| 594 | + |
| 595 | + (* (xbase + ((x * y) - z)) => unchanged *) |
| 596 | + TS.add_simple_test |
| 597 | + ~title: "base_index_expr" |
| 598 | + (fun () -> |
| 599 | + let x = XVar (XG.mk_var "x") in |
| 600 | + let y = XVar (XG.mk_var "y") in |
| 601 | + let z = XG.mk_ix 2 in |
| 602 | + let aofv = XG.mk_addressof "v" in |
| 603 | + let p = XOp (XMult, [x; y]) in |
| 604 | + let xx = XOp (XPlus, [aofv; XOp (XMinus, [p; z])]) in |
| 605 | + XA.equal_xpr xx (simplify xx)); |
| 606 | + |
| 607 | + (* ((xbase + y) + z) ==> (xbase + (y + z)) *) |
| 608 | + TS.add_simple_test |
| 609 | + ~title:"base_p_move_out" |
| 610 | + (fun () -> |
| 611 | + let aofv = XG.mk_addressof "v" in |
| 612 | + let y = XVar (XG.mk_var "y") in |
| 613 | + let z = XVar (XG.mk_var "z") in |
| 614 | + let x = XOp (XPlus, [XOp (XPlus, [aofv; y]); z]) in |
| 615 | + let r = XOp (XPlus, [aofv; XOp (XPlus, [y; z])]) in |
| 616 | + XA.equal_xpr r (simplify x)); |
| 617 | + |
| 618 | + (* ((addressofvar (gv_0x5e1e1c) + ((68 * R0_in[4]_in) - 68)) + 40) *) |
| 619 | + |
565 | 620 | TS.launch_tests () |
566 | 621 | end |
567 | 622 |
|
|
0 commit comments