From 3330b1593c5d591aecbacfdae5a06ade661d9fd6 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Wed, 30 Jan 2019 06:36:39 -0800 Subject: caseql: generate better code. * eval.c (me_case): Replace a code generation pattern of the (if (and x y) z) with the equivalent (and x y z). The motivation behind this is that it effectively coaxes a jump-threading optimization out of our simplistic compiler. The failure cases out of a single *and* all jump past the entire code block, whereas with the cascaded if + and we get a double test of the same failed value threading through two branches. --- eval.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) (limited to 'eval.c') diff --git a/eval.c b/eval.c index c35dab1d..2f803a70 100644 --- a/eval.c +++ b/eval.c @@ -4027,15 +4027,13 @@ static val me_case(val form, val menv) return list(let_s, list(list(tformsym, testform, nao), list(swres, uniq, nao), nao), - list(if_s, - list(and_s, - list(intern(if3(all_keys_integer, - lit("integerp"), lit("chrp")), - user_package), - tformsym, nao), - list(intern(lit("<="), user_package), - minkey, tformsym, maxkey, nao), - nao), + list(and_s, + list(intern(if3(all_keys_integer, + lit("integerp"), lit("chrp")), + user_package), + tformsym, nao), + list(intern(lit("<="), user_package), + minkey, tformsym, maxkey, nao), list(set_s, swres, list(switch_s, -- cgit v1.2.3