From e86fe828aaf1c521f5fe288bddc5c3caddf7ad9c Mon Sep 17 00:00:00 2001 From: amesgen <amesgen@amesgen.de> Date: Sat, 8 Jun 2024 19:31:16 +0200 Subject: [PATCH] compiler: refactor lower_CmmExpr_Ptr (cherry picked from commit fb629e249d26e84a27691b4adf55376386f1e0c5) --- compiler/GHC/CmmToAsm/Wasm/FromCmm.hs | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/compiler/GHC/CmmToAsm/Wasm/FromCmm.hs b/compiler/GHC/CmmToAsm/Wasm/FromCmm.hs index 3c774413159..02f0c976ea0 100644 --- a/compiler/GHC/CmmToAsm/Wasm/FromCmm.hs +++ b/compiler/GHC/CmmToAsm/Wasm/FromCmm.hs @@ -999,22 +999,14 @@ lower_CmmExpr_Typed lbl ty expr = do lower_CmmExpr_Ptr :: CLabel -> CmmExpr -> WasmCodeGenM w (WasmExpr w w, Int) lower_CmmExpr_Ptr lbl ptr = do ty_word <- wasmWordTypeM - case ptr of - CmmLit (CmmLabelOff lbl o) - | o >= 0 -> do - instrs <- - lower_CmmExpr_Typed - lbl - ty_word - (CmmLit $ CmmLabel lbl) - pure (instrs, o) - CmmMachOp (MO_Add _) [base, CmmLit (CmmInt o _)] - | o >= 0 -> do - instrs <- lower_CmmExpr_Typed lbl ty_word base - pure (instrs, fromInteger o) - _ -> do - instrs <- lower_CmmExpr_Typed lbl ty_word ptr - pure (instrs, 0) + let (ptr', o) = case ptr of + CmmLit (CmmLabelOff lbl o) + | o >= 0 -> (CmmLit $ CmmLabel lbl, o) + CmmMachOp (MO_Add _) [base, CmmLit (CmmInt o _)] + | o >= 0 -> (base, fromInteger o) + _ -> (ptr, 0) + instrs <- lower_CmmExpr_Typed lbl ty_word ptr' + pure (instrs, o) -- | Push a series of values onto the wasm value stack, returning the -- result stack type. -- GitLab