From 9963610b308bbf79e0f2e0f3e0c1af1b7bc40b1b Mon Sep 17 00:00:00 2001 From: WormHeamer Date: Tue, 5 Aug 2025 01:47:10 -0400 Subject: convert divisions to right-shifts --- ir.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ir.c b/ir.c index c0de33c..e52e0b9 100644 --- a/ir.c +++ b/ir.c @@ -568,6 +568,12 @@ Node *node_idealize(Node *n, Proc *p, Lexer *l) { if (node_eql_i64(CDR(n), 0)) { lex_error_at(l, CDR(n)->src_pos, LE_ERROR, S("divisor always evaluates to zero")); } + { + int po2; + if (T(CDR(n), N_LIT) && CDR(n)->val.type.t == T_INT && (po2 = u64_power_of_2(CDR(n)->val.u))) {; + return NODE(N_OP_SHR, CAR(n), node_new_lit_i64(p, po2)); + } + } break; case N_OP_OR: if (same) return CAR(n); -- cgit v1.2.3