<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <br>
    <p>On Tue, 10 Feb 2026 11:04:41 +0800 fanpeng <fanpeng@loongson.cn>
        wrote:</fanpeng@loongson.cn></p>
    <p><br>
    </p>
    <p>Get the patch from upstream directly.</p>
    <p>Commit ID: e70d41406b5d5638b42c4d8222cd03e76bbfeb86</p>
    <p><br>
    </p>
    <p>--- a/compiler/GHC/CmmToLlvm.hs<br>
      +++ b/compiler/GHC/CmmToLlvm.hs<br>
      @@ -221,7 +221,12 @@ cmmMetaLlvmPrelude = do<br>
                 case platformArch platform of<br>
                   ArchX86_64 | llvmCgAvxEnabled cfg ->
      [mkStackAlignmentMeta 32]<br>
                   _                                 -> []<br>
      -  module_flags_metas <- mkModuleFlagsMeta
      stack_alignment_metas<br>
      +  let codel_model_metas =<br>
      +          case platformArch platform of<br>
      +            -- FIXME: We should not rely on LLVM<br>
      +            ArchLoongArch64 -> [mkCodeModelMeta CMMedium]<br>
      +            _                                 -> []<br>
      +  module_flags_metas <- mkModuleFlagsMeta
      (stack_alignment_metas ++ codel_model_metas)<br>
         let metas = tbaa_metas ++ module_flags_metas<br>
         cfg <- getConfig<br>
         renderLlvm (ppLlvmMetas cfg metas)<br>
      @@ -244,6 +249,15 @@ mkStackAlignmentMeta :: Integer ->
      ModuleFlag<br>
       mkStackAlignmentMeta alignment =<br>
           ModuleFlag MFBError "override-stack-alignment" (MetaLit $
      LMIntLit alignment i32)<br>
      <br>
      +-- LLVM's @LLVM::CodeModel::Model@ enumeration<br>
      +data CodeModel = CMMedium<br>
      +<br>
      +-- Pass -mcmodel=medium option to LLVM on LoongArch64<br>
      +mkCodeModelMeta :: CodeModel -> ModuleFlag<br>
      +mkCodeModelMeta codemodel =<br>
      +    ModuleFlag MFBError "Code Model" (MetaLit $ LMIntLit n i32)<br>
      +  where<br>
      +    n = case codemodel of CMMedium -> 3 -- as of LLVM 8<br>
      <br>
       --
-----------------------------------------------------------------------------<br>
       -- | Marks variables as used where necessary<br>
    </p>
    <p><br>
      <fanpeng@loongson.cn></fanpeng@loongson.cn></p>
    <fanpeng@loongson.cn>> From
      e70d41406b5d5638b42c4d8222cd03e76bbfeb86 Mon Sep 17 00:00:00 2001<br>
      > From: Xin Wang <wangxin03@loongson.cn><br>
        > Date: Mon, 13 Dec 2024 10:45:20 +0800<br>
        > Subject: [PATCH] llvmGen: Pass mcmodel medium option to
        LLVM backend on LoongArch<br>
        > <br>
        > ---<br>
        > compiler/GHC/CmmToLlvm.hs | 17 ++++++++++++++++-<br>
        > 1 file changed, 16 insertions(+), 1 deletion(-)<br>
        > <br>
        > --- a/compiler/GHC/CmmToLlvm.hs<br>
        > +++ b/compiler/GHC/CmmToLlvm.hs<br>
        > @@ -219,7 +219,13 @@ cmmMetaLlvmPrelude = do<br>
        > ArchX86_64 | llvmCgAvxEnabled cfg ->
        [mkStackAlignmentMeta 32]<br>
        > _ -> []<br>
        > module_flags_metas <- mkModuleFlagsMeta
        stack_alignment_metas<br>
        > - let metas = tbaa_metas ++ module_flags_metas<br>
        > + let code_model_metas =<br>
        > + case platformArch platform of<br>
        > + -- FIXME: We should not rely on LLVM<br>
        > + ArchLoongArch64 -> [mkCodeModelMeta CMMedium]<br>
        > + _ -> []<br>
        > + mcmodel_flags_metas <- mkModuleFlagsMeta
        code_model_metas<br>
        > + let metas = tbaa_metas ++ module_flags_metas ++
        mcmodel_flags_metas<br>
        > cfg <- getConfig<br>
        > renderLlvm (ppLlvmMetas cfg metas)<br>
        > (ppLlvmMetas cfg metas)<br>
        > @@ -241,6 +247,15 @@ mkStackAlignmentMeta :: Integer ->
        ModuleFlag<br>
        > mkStackAlignmentMeta alignment =<br>
        > ModuleFlag MFBError "override-stack-alignment" (MetaLit $
        LMIntLit alignment i32)<br>
        > <br>
        > +-- LLVM's @LLVM::CodeModel::Model@ enumeration<br>
        > +data CodeModel = CMMedium<br>
        > +<br>
        > +-- Pass -mcmodel=medium option to LLVM on LoongArch64<br>
        > +mkCodeModelMeta :: CodeModel -> ModuleFlag<br>
        > +mkCodeModelMeta codemodel =<br>
        > + ModuleFlag MFBError "Code Model" (MetaLit $ LMIntLit n
        i32)<br>
        > + where<br>
        > + n = case codemodel of CMMedium -> 3 -- as of LLVM 8<br>
        > <br>
        > --
-----------------------------------------------------------------------------<br>
        > -- | Marks variables as used where necessary<br>
      </wangxin03@loongson.cn></fanpeng@loongson.cn><br>
  </body>
</html>