llvm: garbage-collect local changes for now-retired loongson platform

Christian Weisgerber <[email protected]>
Newsgroups gmane.os.openbsd.ports
Message-ID <[email protected]>
We have been carrying along some local LLVM fix for loongson that
can now be dropped.  BTW, I'm pretty sure the change to
clang/lib/Driver/ToolChains/Clang.cpp has been mismerged.

I don't know if this affects the build on other platforms.  I've
bumped REVISION, and I intend to test build llvm/22 on amd64 once I
have some free cycles.

I have sent a corresponding patch for base to tech@.

-----------------------------------------------
commit 00c891c247b8c4b1e003736c2959d74c3408299c (mystuff)
from: Christian Weisgerber <[email protected]>
date: Thu Jul 16 22:35:09 2026 UTC
 
 llvm: garbage-collect local changes for now-retired loongson platform
 
 M  devel/clang-tools-extra/Makefile
 M  devel/clang-tools-extra/patches/patch-clang_include_clang_Options_Options_td
 M  devel/clang-tools-extra/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp
 D  devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_AsmParser_MipsAsmParser_cpp
 M  devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_CMakeLists_txt
 D  devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MCTargetDesc_MipsABIInfo_cpp
 D  devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsLoongson2FBTBFix_cpp
 D  devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsTargetMachine_cpp
 D  devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_Mips_h
 M  devel/llvm/19/Makefile
 M  devel/llvm/19/patches/patch-clang_include_clang_Driver_Options_td
 M  devel/llvm/19/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp
 D  devel/llvm/19/patches/patch-llvm_lib_Target_Mips_AsmParser_MipsAsmParser_cpp
 M  devel/llvm/19/patches/patch-llvm_lib_Target_Mips_CMakeLists_txt
 D  devel/llvm/19/patches/patch-llvm_lib_Target_Mips_MCTargetDesc_MipsABIInfo_cpp
 D  devel/llvm/19/patches/patch-llvm_lib_Target_Mips_MipsLoongson2FBTBFix_cpp
 D  devel/llvm/19/patches/patch-llvm_lib_Target_Mips_MipsTargetMachine_cpp
 D  devel/llvm/19/patches/patch-llvm_lib_Target_Mips_Mips_h
 M  devel/llvm/20/Makefile
 M  devel/llvm/20/patches/patch-clang_include_clang_Driver_Options_td
 M  devel/llvm/20/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp
 D  devel/llvm/20/patches/patch-llvm_lib_Target_Mips_AsmParser_MipsAsmParser_cpp
 M  devel/llvm/20/patches/patch-llvm_lib_Target_Mips_CMakeLists_txt
 D  devel/llvm/20/patches/patch-llvm_lib_Target_Mips_MCTargetDesc_MipsABIInfo_cpp
 D  devel/llvm/20/patches/patch-llvm_lib_Target_Mips_MipsLoongson2FBTBFix_cpp
 D  devel/llvm/20/patches/patch-llvm_lib_Target_Mips_MipsTargetMachine_cpp
 D  devel/llvm/20/patches/patch-llvm_lib_Target_Mips_Mips_h
 M  devel/llvm/21/Makefile
 M  devel/llvm/21/patches/patch-clang_include_clang_Driver_Options_td
 M  devel/llvm/21/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp
 D  devel/llvm/21/patches/patch-llvm_lib_Target_Mips_AsmParser_MipsAsmParser_cpp
 M  devel/llvm/21/patches/patch-llvm_lib_Target_Mips_CMakeLists_txt
 D  devel/llvm/21/patches/patch-llvm_lib_Target_Mips_MCTargetDesc_MipsABIInfo_cpp
 D  devel/llvm/21/patches/patch-llvm_lib_Target_Mips_MipsLoongson2FBTBFix_cpp
 D  devel/llvm/21/patches/patch-llvm_lib_Target_Mips_MipsTargetMachine_cpp
 D  devel/llvm/21/patches/patch-llvm_lib_Target_Mips_Mips_h
 M  devel/llvm/22/Makefile
 M  devel/llvm/22/patches/patch-clang_include_clang_Options_Options_td
 M  devel/llvm/22/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp
 D  devel/llvm/22/patches/patch-llvm_lib_Target_Mips_AsmParser_MipsAsmParser_cpp
 M  devel/llvm/22/patches/patch-llvm_lib_Target_Mips_CMakeLists_txt
 D  devel/llvm/22/patches/patch-llvm_lib_Target_Mips_MCTargetDesc_MipsABIInfo_cpp
 D  devel/llvm/22/patches/patch-llvm_lib_Target_Mips_MipsLoongson2FBTBFix_cpp
 D  devel/llvm/22/patches/patch-llvm_lib_Target_Mips_MipsTargetMachine_cpp
 D  devel/llvm/22/patches/patch-llvm_lib_Target_Mips_Mips_h

diff 96ae8a25eba6ef4aff1dd1bf92e487b2298b10c2 00c891c247b8c4b1e003736c2959d74c3408299c
commit - 96ae8a25eba6ef4aff1dd1bf92e487b2298b10c2
commit + 00c891c247b8c4b1e003736c2959d74c3408299c
blob - 74660973b137749b20f9dc32405f2a27ec977798
blob + 5f42a423aa5a5b42766fd4b74d10bae730736e0f
--- devel/clang-tools-extra/Makefile
+++ devel/clang-tools-extra/Makefile
@@ -13,7 +13,7 @@ DPB_PROPERTIES =	parallel
 COMMENT=	Clang extra tools
 
 LLVM_V =	22.1.6
-REVISION =	0
+REVISION =	1
 DISTNAME =	llvm-project-${LLVM_V}.src
 PKGNAME=	clang-tools-extra-${LLVM_V}
 
blob - cacef63a8679267b7edf2b8f7a9652d4fb9cd4e3
blob + 073d246881aacd1101ff9a67b46f6c5846591103
--- devel/clang-tools-extra/patches/patch-clang_include_clang_Options_Options_td
+++ devel/clang-tools-extra/patches/patch-clang_include_clang_Options_Options_td
@@ -22,16 +22,7 @@ Index: clang/include/clang/Options/Options.td
  def ftrivial_auto_var_init_stop_after : Joined<["-"], "ftrivial-auto-var-init-stop-after=">, Group<f_Group>,
    Visibility<[ClangOption, CC1Option, CLOption, DXCOption]>,
    HelpText<"Stop initializing trivial automatic stack variables after the specified number of instances">,
-@@ -5912,6 +5926,8 @@ def mno_check_zero_division : Flag<["-"], "mno-check-z
- def mfix4300 : Flag<["-"], "mfix4300">, Group<m_mips_Features_Group>;
- def mcompact_branches_EQ : Joined<["-"], "mcompact-branches=">,
-                            Group<m_mips_Features_Group>;
-+def mfix_loongson2f_btb : Flag<["-"], "mfix-loongson2f-btb">,
-+                          Group<m_mips_Features_Group>;
- } // let Flags = [TargetSpecific]
- def mbranch_likely : Flag<["-"], "mbranch-likely">, Group<m_Group>,
-   IgnoredGCCCompat;
-@@ -6154,10 +6170,14 @@ def pedantic_errors : Flag<["-", "--"], "pedantic-erro
+@@ -6154,10 +6168,14 @@ def pedantic_errors : Flag<["-", "--"], "pedantic-erro
  def pedantic : Flag<["-", "--"], "pedantic">, Group<pedantic_Group>,
    Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>,
    HelpText<"Warn on language extensions">, MarshallingInfoFlag<DiagnosticOpts<"Pedantic">>;
@@ -47,7 +38,7 @@ Index: clang/include/clang/Options/Options.td
  def pipe : Flag<["-", "--"], "pipe">,
    HelpText<"Use pipes between commands, when possible">;
  def prebind__all__twolevel__modules : Flag<["-"], "prebind_all_twolevel_modules">;
-@@ -7007,6 +7027,8 @@ def mshstk : Flag<["-"], "mshstk">, Group<m_x86_Featur
+@@ -7007,6 +7025,8 @@ def mshstk : Flag<["-"], "mshstk">, Group<m_x86_Featur
  def mno_shstk : Flag<["-"], "mno-shstk">, Group<m_x86_Features_Group>;
  def mretpoline_external_thunk : Flag<["-"], "mretpoline-external-thunk">, Group<m_x86_Features_Group>;
  def mno_retpoline_external_thunk : Flag<["-"], "mno-retpoline-external-thunk">, Group<m_x86_Features_Group>;
blob - 7a9114adfcdeacf412035d04c2a1ca587a9a6e69
blob + 75ca5ab5bb5b5db8becaf85972e54a4857c549f7
--- devel/clang-tools-extra/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp
+++ devel/clang-tools-extra/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp
@@ -1,19 +1,7 @@
 Index: clang/lib/Driver/ToolChains/Clang.cpp
 --- clang/lib/Driver/ToolChains/Clang.cpp.orig
 +++ clang/lib/Driver/ToolChains/Clang.cpp
-@@ -3044,6 +3044,11 @@ static void RenderFloatingPointOptions(const ToolChain
-               << LastFpContractOverrideOption
-               << Args.MakeArgString("-ffp-contract=" + Val);
-         }
-+        if (Val.starts_with("-mfix-loongson2f-btb")) {
-+          CmdArgs.push_back("-mllvm");
-+          CmdArgs.push_back("-fix-loongson2f-btb");
-+          continue;
-+        }
- 
-         FPContract = Val;
-         LastSeenFfpContractOption = Val;
-@@ -5807,9 +5812,12 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -5807,9 +5807,12 @@ void Clang::ConstructJob(Compilation &C, const JobActi
        OFastEnabled ? options::OPT_Ofast : options::OPT_fstrict_aliasing;
    // We turn strict aliasing off by default if we're Windows MSVC since MSVC
    // doesn't do any TBAA.
@@ -28,7 +16,7 @@ Index: clang/lib/Driver/ToolChains/Clang.cpp
      CmdArgs.push_back("-relaxed-aliasing");
    if (Args.hasFlag(options::OPT_fno_pointer_tbaa, options::OPT_fpointer_tbaa,
                     false))
-@@ -6918,7 +6926,58 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -6918,7 +6921,58 @@ void Clang::ConstructJob(Compilation &C, const JobActi
    Args.addOptInFlag(CmdArgs, options::OPT_mspeculative_load_hardening,
                      options::OPT_mno_speculative_load_hardening);
  
@@ -88,7 +76,7 @@ Index: clang/lib/Driver/ToolChains/Clang.cpp
    RenderSCPOptions(TC, Args, CmdArgs);
    RenderTrivialAutoVarInitOptions(D, TC, Args, CmdArgs);
  
-@@ -7535,6 +7594,18 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -7535,6 +7589,18 @@ void Clang::ConstructJob(Compilation &C, const JobActi
                                       options::OPT_fno_rewrite_imports, false);
    if (RewriteImports)
      CmdArgs.push_back("-frewrite-imports");
blob - d02d8d98de346b25ad07f6382e531825ca5979b2 (mode 644)
blob + /dev/null
--- devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_AsmParser_MipsAsmParser_cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-Index: llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
---- llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp.orig
-+++ llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
-@@ -69,6 +69,7 @@ class MCInstrInfo;
- 
- extern cl::opt<bool> EmitJalrReloc;
- extern cl::opt<bool> NoZeroDivCheck;
-+extern cl::opt<bool> FixLoongson2FBTB;
- 
- namespace {
- 
-@@ -236,6 +237,9 @@ class MipsAsmParser : public MCTargetAsmParser {
- 
-   bool emitPartialAddress(MipsTargetStreamer &TOut, SMLoc IDLoc, MCSymbol *Sym);
- 
-+  bool emitLoongson2FBTBFlush(MCInst &Inst, MipsTargetStreamer &TOut,
-+                              SMLoc IDLoc, const MCSubtargetInfo *STI);
-+
-   bool expandLoadImm(MCInst &Inst, bool Is32BitImm, SMLoc IDLoc,
-                      MCStreamer &Out, const MCSubtargetInfo *STI);
- 
-@@ -2060,6 +2064,20 @@ bool MipsAsmParser::processInstruction(MCInst &Inst, S
-     Inst = BInst;
-   }
- 
-+  if (FixLoongson2FBTB) {
-+    switch (Inst.getOpcode()) {
-+    case Mips::JALR:
-+    case Mips::JR:
-+    case Mips::JalOneReg:
-+    case Mips::JalTwoReg:
-+      if (emitLoongson2FBTBFlush(Inst, TOut, IDLoc, STI))
-+        return true;
-+      LLVM_FALLTHROUGH;
-+    default:
-+      break;
-+    }
-+  }
-+
-   // This expansion is not in a function called by tryExpandInstruction()
-   // because the pseudo-instruction doesn't have a distinct opcode.
-   if ((Opcode == Mips::JAL || Opcode == Mips::JAL_MM) && inPicMode()) {
-@@ -3356,6 +3374,39 @@ bool MipsAsmParser::emitPartialAddress(MipsTargetStrea
-       TOut.emitRRI(Mips::DSLL, ATReg, ATReg, 16, IDLoc, STI);
-     }
-   }
-+  return false;
-+}
-+
-+bool MipsAsmParser::emitLoongson2FBTBFlush(MCInst &Inst,
-+                                           MipsTargetStreamer &TOut,
-+                                           SMLoc IDLoc,
-+                                           const MCSubtargetInfo *STI) {
-+  unsigned SReg = Inst.getOperand(0).getReg();
-+  if (SReg == Mips::ZERO || SReg == Mips::ZERO_64 ||
-+      SReg == Mips::K0 || SReg == Mips::K0_64 ||
-+      SReg == Mips::K1 || SReg == Mips::K1_64)
-+    return false;
-+
-+  unsigned ATReg = getATReg(IDLoc);
-+  if (ATReg == 0)
-+    return true;
-+
-+  // Direct comparison of SReg and ATReg is not reliable because
-+  // the register classes may differ.
-+  unsigned ATRegIndex = AssemblerOptions.back()->getATRegIndex();
-+  if (ATRegIndex == 0)
-+    return true;
-+  if (SReg == getReg(Mips::GPR32RegClassID, ATRegIndex) ||
-+      SReg == getReg(Mips::GPR64RegClassID, ATRegIndex))
-+    return false;
-+
-+  warnIfNoMacro(IDLoc);
-+
-+  // li $at, COP_0_BTB_CLEAR | COP_0_RAS_DISABLE
-+  TOut.emitRRI(Mips::ORi, ATReg, Mips::ZERO, 3, IDLoc, STI);
-+  // dmtc0 $at, COP_0_DIAG
-+  TOut.emitRRI(Mips::DMTC0, Mips::COP022, ATReg, 0, IDLoc, STI);
-+
-   return false;
- }
- 
blob - a4373c933d582caffc21829f40bb2b5f94c6fbf4
blob + 969504464d309acb72778eca43a9b42748bb59dd
--- devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_CMakeLists_txt
+++ devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_CMakeLists_txt
@@ -1,15 +1,7 @@
 Index: llvm/lib/Target/Mips/CMakeLists.txt
 --- llvm/lib/Target/Mips/CMakeLists.txt.orig
 +++ llvm/lib/Target/Mips/CMakeLists.txt
-@@ -45,6 +45,7 @@ add_llvm_target(MipsCodeGen
-   MipsISelLowering.cpp
-   MipsFrameLowering.cpp
-   MipsLegalizerInfo.cpp
-+  MipsLoongson2FBTBFix.cpp
-   MipsBranchExpansion.cpp
-   MipsMCInstLower.cpp
-   MipsMachineFunction.cpp
-@@ -55,6 +56,7 @@ add_llvm_target(MipsCodeGen
+@@ -55,6 +55,7 @@ add_llvm_target(MipsCodeGen
    MipsPostLegalizerCombiner.cpp
    MipsRegisterBankInfo.cpp
    MipsRegisterInfo.cpp
blob - 858a1f5479a5250f3bd7b51106591e230fa6874c (mode 644)
blob + /dev/null
--- devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MCTargetDesc_MipsABIInfo_cpp
+++ /dev/null
@@ -1,15 +0,0 @@
-Index: llvm/lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp
---- llvm/lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp.orig
-+++ llvm/lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp
-@@ -25,6 +25,11 @@ cl::opt<bool>
-                    cl::desc("MIPS: Don't trap on integer division by zero."),
-                    cl::init(false));
- 
-+cl::opt<bool>
-+FixLoongson2FBTB("fix-loongson2f-btb", cl::Hidden,
-+                 cl::desc("MIPS: Enable Loongson 2F BTB workaround"),
-+                 cl::init(false));
-+
- namespace {
- static const MCPhysReg O32IntRegs[4] = {Mips::A0, Mips::A1, Mips::A2, Mips::A3};
- 
blob - ea3b3c30fa82c65fa4e33ad4c95da9a0bf7864fd (mode 644)
blob + /dev/null
--- devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsLoongson2FBTBFix_cpp
+++ /dev/null
@@ -1,95 +0,0 @@
-Index: llvm/lib/Target/Mips/MipsLoongson2FBTBFix.cpp
---- llvm/lib/Target/Mips/MipsLoongson2FBTBFix.cpp.orig
-+++ llvm/lib/Target/Mips/MipsLoongson2FBTBFix.cpp
-@@ -0,0 +1,91 @@
-+//===- MipsLoongson2FBTBFix.cpp -------------------------------------------===//
-+//
-+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-+// See https://llvm.org/LICENSE.txt for license information.
-+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-+//
-+//===----------------------------------------------------------------------===//
-+
-+#include "Mips.h"
-+#include "MipsTargetMachine.h"
-+#include "llvm/CodeGen/MachineFunctionPass.h"
-+#include "llvm/CodeGen/Passes.h"
-+
-+using namespace llvm;
-+
-+namespace {
-+
-+class MipsLoongson2FBTBFix : public MachineFunctionPass {
-+public:
-+  static char ID;
-+
-+  MipsLoongson2FBTBFix() : MachineFunctionPass(ID) {
-+    initializeMipsLoongson2FBTBFixPass(*PassRegistry::getPassRegistry());
-+  }
-+
-+  bool runOnMachineFunction(MachineFunction &MF) override;
-+
-+  StringRef getPassName() const override {
-+    return "Loongson 2F BTB erratum workaround pass";
-+  }
-+
-+private:
-+  bool runOnBasicBlock(MachineFunction &MF, MachineBasicBlock &MBB);
-+};
-+
-+} // end of anonymous namespace
-+
-+char MipsLoongson2FBTBFix::ID = 0;
-+
-+INITIALIZE_PASS(MipsLoongson2FBTBFix, "loongson2f-btb-fix-pass",
-+                "Mips Loongson 2F BTB erratum workaround", false, false)
-+
-+FunctionPass *llvm::createMipsLoongson2FBTBFix() {
-+  return new MipsLoongson2FBTBFix();
-+}
-+
-+bool MipsLoongson2FBTBFix::runOnMachineFunction(MachineFunction &MF) {
-+  bool Changed = false;
-+
-+  for (auto &MBB : MF) {
-+    Changed |= runOnBasicBlock(MF, MBB);
-+  }
-+  return Changed;
-+}
-+
-+bool MipsLoongson2FBTBFix::runOnBasicBlock(
-+    MachineFunction &MF, MachineBasicBlock &MBB) {
-+  MachineRegisterInfo &MRI = MF.getRegInfo();
-+  const TargetInstrInfo *TII = MF.getSubtarget().getInstrInfo();
-+  bool Changed = false;
-+
-+  for (auto &MI : MBB) {
-+    if (!MI.isCall() && !MI.isIndirectBranch() && !MI.isReturn())
-+      continue;
-+
-+    // Skip calls that are not through a register.
-+    if (MI.isCall()) {
-+      if (MI.getNumOperands() == 0)
-+        continue;
-+      const MachineOperand &MO = MI.getOperand(0);
-+      if (!MO.isReg())
-+        continue;
-+    }
-+
-+    Changed = true;
-+
-+    DebugLoc MBBDL = MI.getDebugLoc();
-+    Register TempReg = MRI.createVirtualRegister(&Mips::GPR64RegClass);
-+
-+    // li $TempReg, COP_0_BTB_CLEAR | COP_0_RAS_DISABLE
-+    BuildMI(MBB, MI, MBBDL, TII->get(Mips::ORi), TempReg)
-+        .addReg(Mips::ZERO)
-+        .addImm(3);
-+    // dmtc0 $TempReg, COP_0_DIAG
-+    BuildMI(MBB, MI, MBBDL, TII->get(Mips::DMTC0))
-+        .addReg(Mips::COP022)
-+        .addReg(TempReg)
-+        .addImm(0);
-+  }
-+  return Changed;
-+}
blob - 6e1b66034f00b70fb0d5ae86574f5a18de70eac1 (mode 644)
blob + /dev/null
--- devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_MipsTargetMachine_cpp
+++ /dev/null
@@ -1,21 +0,0 @@
-Index: llvm/lib/Target/Mips/MipsTargetMachine.cpp
---- llvm/lib/Target/Mips/MipsTargetMachine.cpp.orig
-+++ llvm/lib/Target/Mips/MipsTargetMachine.cpp
-@@ -48,6 +48,7 @@ using namespace llvm;
- 
- #define DEBUG_TYPE "mips"
- 
-+extern cl::opt<bool> FixLoongson2FBTB;
- static cl::opt<bool>
-     EnableMulMulFix("mfix4300", cl::init(false),
-                     cl::desc("Enable the VR4300 mulmul bug fix."), cl::Hidden);
-@@ -253,6 +254,9 @@ bool MipsPassConfig::addInstSelector() {
- 
- void MipsPassConfig::addPreRegAlloc() {
-   addPass(createMipsOptimizePICCallPass());
-+
-+  if (FixLoongson2FBTB)
-+    addPass(createMipsLoongson2FBTBFix());
- }
- 
- TargetTransformInfo
blob - 9e8f5f8a382cd2765218b53fc902ff8072b2daf6 (mode 644)
blob + /dev/null
--- devel/clang-tools-extra/patches/patch-llvm_lib_Target_Mips_Mips_h
+++ /dev/null
@@ -1,19 +0,0 @@
-Index: llvm/lib/Target/Mips/Mips.h
---- llvm/lib/Target/Mips/Mips.h.orig
-+++ llvm/lib/Target/Mips/Mips.h
-@@ -41,6 +41,7 @@ class PassRegistry;
- ModulePass *createMipsOs16Pass();
- ModulePass *createMips16HardFloatPass();
- 
-+FunctionPass *createMipsLoongson2FBTBFix();
- FunctionPass *createMipsModuleISelDagPass();
- FunctionPass *createMipsOptimizePICCallPass();
- FunctionPass *createMipsDelaySlotFillerPass();
-@@ -56,6 +57,7 @@ InstructionSelector *
- createMipsInstructionSelector(const MipsTargetMachine &, const MipsSubtarget &,
-                               const MipsRegisterBankInfo &);
- 
-+void initializeMipsLoongson2FBTBFixPass(PassRegistry &);
- void initializeMicroMipsSizeReducePass(PassRegistry &);
- void initializeMipsAsmPrinterPass(PassRegistry &);
- void initializeMipsBranchExpansionPass(PassRegistry &);
blob - d1139eb87a12b259bae619e1c0ecf26296e1dc94
blob + 8e7117a521c7842f4510025232b17501d2227af8
--- devel/llvm/19/Makefile
+++ devel/llvm/19/Makefile
@@ -2,7 +2,7 @@ LLVM_MAJOR =	19
 LLVM_VERSION =	${LLVM_MAJOR}.1.7
 LLVM_PKGSPEC =	<20
 
-REVISION-main =		14
+REVISION-main =		15
 REVISION-libcxx =	1
 REVISION-lldb =		2
 REVISION-python =	2
blob - f7c3ed2ad49c0caa55b17dca7c010c8eefe35b6c
blob + 783b006dbbdf5852fefb184bdedd2b45861b5757
--- devel/llvm/19/patches/patch-clang_include_clang_Driver_Options_td
+++ devel/llvm/19/patches/patch-clang_include_clang_Driver_Options_td
@@ -22,16 +22,7 @@ Index: clang/include/clang/Driver/Options.td
  def ftrivial_auto_var_init_stop_after : Joined<["-"], "ftrivial-auto-var-init-stop-after=">, Group<f_Group>,
    Visibility<[ClangOption, CC1Option, CLOption, DXCOption]>,
    HelpText<"Stop initializing trivial automatic stack variables after the specified number of instances">,
-@@ -5338,6 +5352,8 @@ def mno_check_zero_division : Flag<["-"], "mno-check-z
- def mfix4300 : Flag<["-"], "mfix4300">, Group<m_mips_Features_Group>;
- def mcompact_branches_EQ : Joined<["-"], "mcompact-branches=">,
-                            Group<m_mips_Features_Group>;
-+def mfix_loongson2f_btb : Flag<["-"], "mfix-loongson2f-btb">,
-+                          Group<m_mips_Features_Group>;
- } // let Flags = [TargetSpecific]
- def mbranch_likely : Flag<["-"], "mbranch-likely">, Group<m_Group>,
-   IgnoredGCCCompat;
-@@ -5554,10 +5570,14 @@ def pedantic_errors : Flag<["-", "--"], "pedantic-erro
+@@ -5554,10 +5568,14 @@ def pedantic_errors : Flag<["-", "--"], "pedantic-erro
  def pedantic : Flag<["-", "--"], "pedantic">, Group<pedantic_Group>,
    Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>,
    HelpText<"Warn on language extensions">, MarshallingInfoFlag<DiagnosticOpts<"Pedantic">>;
@@ -47,7 +38,7 @@ Index: clang/include/clang/Driver/Options.td
  def pipe : Flag<["-", "--"], "pipe">,
    HelpText<"Use pipes between commands, when possible">;
  def prebind__all__twolevel__modules : Flag<["-"], "prebind_all_twolevel_modules">;
-@@ -6368,6 +6388,8 @@ def mshstk : Flag<["-"], "mshstk">, Group<m_x86_Featur
+@@ -6368,6 +6386,8 @@ def mshstk : Flag<["-"], "mshstk">, Group<m_x86_Featur
  def mno_shstk : Flag<["-"], "mno-shstk">, Group<m_x86_Features_Group>;
  def mretpoline_external_thunk : Flag<["-"], "mretpoline-external-thunk">, Group<m_x86_Features_Group>;
  def mno_retpoline_external_thunk : Flag<["-"], "mno-retpoline-external-thunk">, Group<m_x86_Features_Group>;
blob - 24a6bb1a65b40319b8d0a7c18da43ea15e574a79
blob + 6e8819bf5cbd382912215c4961a3f0d6b6678d68
--- devel/llvm/19/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp
+++ devel/llvm/19/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp
@@ -45,19 +45,7 @@ Index: clang/lib/Driver/ToolChains/Clang.cpp
    StringRef ImplicitIt;
    for (const Arg *A :
         Args.filtered(options::OPT_Wa_COMMA, options::OPT_Xassembler,
-@@ -2664,6 +2674,11 @@ static void CollectArgsForIntegratedAssembler(Compilat
-           CmdArgs.push_back("-soft-float");
-           continue;
-         }
-+        if (Value.starts_with("-mfix-loongson2f-btb")) {
-+          CmdArgs.push_back("-mllvm");
-+          CmdArgs.push_back("-fix-loongson2f-btb");
-+          continue;
-+        }
- 
-         MipsTargetFeature = llvm::StringSwitch<const char *>(Value)
-                                 .Case("-mips1", "+mips1")
-@@ -2684,6 +2699,32 @@ static void CollectArgsForIntegratedAssembler(Compilat
+@@ -2684,6 +2694,32 @@ static void CollectArgsForIntegratedAssembler(Compilat
                                  .Default(nullptr);
          if (MipsTargetFeature)
            continue;
@@ -90,7 +78,7 @@ Index: clang/lib/Driver/ToolChains/Clang.cpp
        }
  
        if (Value == "-force_cpusubtype_ALL") {
-@@ -2791,6 +2832,21 @@ static void CollectArgsForIntegratedAssembler(Compilat
+@@ -2791,6 +2827,21 @@ static void CollectArgsForIntegratedAssembler(Compilat
      CmdArgs.push_back(MipsTargetFeature);
    }
  
@@ -112,7 +100,7 @@ Index: clang/lib/Driver/ToolChains/Clang.cpp
    // forward -fembed-bitcode to assmebler
    if (C.getDriver().embedBitcodeEnabled() ||
        C.getDriver().embedBitcodeMarkerOnly())
-@@ -5799,8 +5855,12 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -5799,8 +5850,12 @@ void Clang::ConstructJob(Compilation &C, const JobActi
        OFastEnabled ? options::OPT_Ofast : options::OPT_fstrict_aliasing;
    // We turn strict aliasing off by default if we're Windows MSVC since MSVC
    // doesn't do any TBAA.
@@ -126,7 +114,7 @@ Index: clang/lib/Driver/ToolChains/Clang.cpp
      CmdArgs.push_back("-relaxed-aliasing");
    if (Args.hasFlag(options::OPT_fpointer_tbaa, options::OPT_fno_pointer_tbaa,
                     false))
-@@ -6844,7 +6904,8 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -6844,7 +6899,8 @@ void Clang::ConstructJob(Compilation &C, const JobActi
                                        options::OPT_fno_strict_overflow)) {
      if (A->getOption().matches(options::OPT_fno_strict_overflow))
        CmdArgs.push_back("-fwrapv");
@@ -136,7 +124,7 @@ Index: clang/lib/Driver/ToolChains/Clang.cpp
  
    Args.AddLastArg(CmdArgs, options::OPT_ffinite_loops,
                    options::OPT_fno_finite_loops);
-@@ -6860,7 +6921,58 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -6860,7 +6916,58 @@ void Clang::ConstructJob(Compilation &C, const JobActi
    Args.addOptInFlag(CmdArgs, options::OPT_mspeculative_load_hardening,
                      options::OPT_mno_speculative_load_hardening);
  
@@ -196,7 +184,7 @@ Index: clang/lib/Driver/ToolChains/Clang.cpp
    RenderSCPOptions(TC, Args, CmdArgs);
    RenderTrivialAutoVarInitOptions(D, TC, Args, CmdArgs);
  
-@@ -6938,6 +7050,11 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -6938,6 +7045,11 @@ void Clang::ConstructJob(Compilation &C, const JobActi
    if (Arg *A = Args.getLastArg(options::OPT_fcf_protection_EQ)) {
      CmdArgs.push_back(
          Args.MakeArgString(Twine("-fcf-protection=") + A->getValue()));
@@ -208,7 +196,7 @@ Index: clang/lib/Driver/ToolChains/Clang.cpp
    }
  
    if (Arg *A = Args.getLastArg(options::OPT_mfunction_return_EQ))
-@@ -7466,6 +7583,18 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -7466,6 +7578,18 @@ void Clang::ConstructJob(Compilation &C, const JobActi
                                       options::OPT_fno_rewrite_imports, false);
    if (RewriteImports)
      CmdArgs.push_back("-frewrite-imports");
blob - 52479360826914c2bc6d05cf2ff7ea5d472035f2 (mode 644)
blob + /dev/null
--- devel/llvm/19/patches/patch-llvm_lib_Target_Mips_AsmParser_MipsAsmParser_cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-Index: llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
---- llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp.orig
-+++ llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
-@@ -69,6 +69,7 @@ class MCInstrInfo;
- } // end namespace llvm
- 
- extern cl::opt<bool> EmitJalrReloc;
-+extern cl::opt<bool> FixLoongson2FBTB;
- 
- namespace {
- 
-@@ -235,6 +236,9 @@ class MipsAsmParser : public MCTargetAsmParser {
- 
-   bool emitPartialAddress(MipsTargetStreamer &TOut, SMLoc IDLoc, MCSymbol *Sym);
- 
-+  bool emitLoongson2FBTBFlush(MCInst &Inst, MipsTargetStreamer &TOut,
-+                              SMLoc IDLoc, const MCSubtargetInfo *STI);
-+
-   bool expandLoadImm(MCInst &Inst, bool Is32BitImm, SMLoc IDLoc,
-                      MCStreamer &Out, const MCSubtargetInfo *STI);
- 
-@@ -2104,6 +2108,20 @@ bool MipsAsmParser::processInstruction(MCInst &Inst, S
-     Inst = BInst;
-   }
- 
-+  if (FixLoongson2FBTB) {
-+    switch (Inst.getOpcode()) {
-+    case Mips::JALR:
-+    case Mips::JR:
-+    case Mips::JalOneReg:
-+    case Mips::JalTwoReg:
-+      if (emitLoongson2FBTBFlush(Inst, TOut, IDLoc, STI))
-+        return true;
-+      LLVM_FALLTHROUGH;
-+    default:
-+      break;
-+    }
-+  }
-+
-   // This expansion is not in a function called by tryExpandInstruction()
-   // because the pseudo-instruction doesn't have a distinct opcode.
-   if ((Opcode == Mips::JAL || Opcode == Mips::JAL_MM) && inPicMode()) {
-@@ -3404,6 +3422,39 @@ bool MipsAsmParser::emitPartialAddress(MipsTargetStrea
-       TOut.emitRRI(Mips::DSLL, ATReg, ATReg, 16, IDLoc, STI);
-     }
-   }
-+  return false;
-+}
-+
-+bool MipsAsmParser::emitLoongson2FBTBFlush(MCInst &Inst,
-+                                           MipsTargetStreamer &TOut,
-+                                           SMLoc IDLoc,
-+                                           const MCSubtargetInfo *STI) {
-+  unsigned SReg = Inst.getOperand(0).getReg();
-+  if (SReg == Mips::ZERO || SReg == Mips::ZERO_64 ||
-+      SReg == Mips::K0 || SReg == Mips::K0_64 ||
-+      SReg == Mips::K1 || SReg == Mips::K1_64)
-+    return false;
-+
-+  unsigned ATReg = getATReg(IDLoc);
-+  if (ATReg == 0)
-+    return true;
-+
-+  // Direct comparison of SReg and ATReg is not reliable because
-+  // the register classes may differ.
-+  unsigned ATRegIndex = AssemblerOptions.back()->getATRegIndex();
-+  if (ATRegIndex == 0)
-+    return true;
-+  if (SReg == getReg(Mips::GPR32RegClassID, ATRegIndex) ||
-+      SReg == getReg(Mips::GPR64RegClassID, ATRegIndex))
-+    return false;
-+
-+  warnIfNoMacro(IDLoc);
-+
-+  // li $at, COP_0_BTB_CLEAR | COP_0_RAS_DISABLE
-+  TOut.emitRRI(Mips::ORi, ATReg, Mips::ZERO, 3, IDLoc, STI);
-+  // dmtc0 $at, COP_0_DIAG
-+  TOut.emitRRI(Mips::DMTC0, Mips::COP022, ATReg, 0, IDLoc, STI);
-+
-   return false;
- }
- 
blob - 504b19f4493ffc32b1e3d3c0a0873e9b21c894e9
blob + c619c7c6300661122b04d5f33d7765205c5524a5
--- devel/llvm/19/patches/patch-llvm_lib_Target_Mips_CMakeLists_txt
+++ devel/llvm/19/patches/patch-llvm_lib_Target_Mips_CMakeLists_txt
@@ -1,15 +1,7 @@
 Index: llvm/lib/Target/Mips/CMakeLists.txt
 --- llvm/lib/Target/Mips/CMakeLists.txt.orig
 +++ llvm/lib/Target/Mips/CMakeLists.txt
-@@ -43,6 +43,7 @@ add_llvm_target(MipsCodeGen
-   MipsISelLowering.cpp
-   MipsFrameLowering.cpp
-   MipsLegalizerInfo.cpp
-+  MipsLoongson2FBTBFix.cpp
-   MipsBranchExpansion.cpp
-   MipsMCInstLower.cpp
-   MipsMachineFunction.cpp
-@@ -53,6 +54,7 @@ add_llvm_target(MipsCodeGen
+@@ -53,6 +53,7 @@ add_llvm_target(MipsCodeGen
    MipsPostLegalizerCombiner.cpp
    MipsRegisterBankInfo.cpp
    MipsRegisterInfo.cpp
blob - 21d801e0f0abefb1e13402a620a22917c0b5e436 (mode 644)
blob + /dev/null
--- devel/llvm/19/patches/patch-llvm_lib_Target_Mips_MCTargetDesc_MipsABIInfo_cpp
+++ /dev/null
@@ -1,15 +0,0 @@
-Index: llvm/lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp
---- llvm/lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp.orig
-+++ llvm/lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp
-@@ -22,6 +22,11 @@ EmitJalrReloc("mips-jalr-reloc", cl::Hidden,
-               cl::desc("MIPS: Emit R_{MICRO}MIPS_JALR relocation with jalr"),
-               cl::init(true));
- 
-+cl::opt<bool>
-+FixLoongson2FBTB("fix-loongson2f-btb", cl::Hidden,
-+                 cl::desc("MIPS: Enable Loongson 2F BTB workaround"),
-+                 cl::init(false));
-+
- namespace {
- static const MCPhysReg O32IntRegs[4] = {Mips::A0, Mips::A1, Mips::A2, Mips::A3};
- 
blob - ea3b3c30fa82c65fa4e33ad4c95da9a0bf7864fd (mode 644)
blob + /dev/null
--- devel/llvm/19/patches/patch-llvm_lib_Target_Mips_MipsLoongson2FBTBFix_cpp
+++ /dev/null
@@ -1,95 +0,0 @@
-Index: llvm/lib/Target/Mips/MipsLoongson2FBTBFix.cpp
---- llvm/lib/Target/Mips/MipsLoongson2FBTBFix.cpp.orig
-+++ llvm/lib/Target/Mips/MipsLoongson2FBTBFix.cpp
-@@ -0,0 +1,91 @@
-+//===- MipsLoongson2FBTBFix.cpp -------------------------------------------===//
-+//
-+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-+// See https://llvm.org/LICENSE.txt for license information.
-+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-+//
-+//===----------------------------------------------------------------------===//
-+
-+#include "Mips.h"
-+#include "MipsTargetMachine.h"
-+#include "llvm/CodeGen/MachineFunctionPass.h"
-+#include "llvm/CodeGen/Passes.h"
-+
-+using namespace llvm;
-+
-+namespace {
-+
-+class MipsLoongson2FBTBFix : public MachineFunctionPass {
-+public:
-+  static char ID;
-+
-+  MipsLoongson2FBTBFix() : MachineFunctionPass(ID) {
-+    initializeMipsLoongson2FBTBFixPass(*PassRegistry::getPassRegistry());
-+  }
-+
-+  bool runOnMachineFunction(MachineFunction &MF) override;
-+
-+  StringRef getPassName() const override {
-+    return "Loongson 2F BTB erratum workaround pass";
-+  }
-+
-+private:
-+  bool runOnBasicBlock(MachineFunction &MF, MachineBasicBlock &MBB);
-+};
-+
-+} // end of anonymous namespace
-+
-+char MipsLoongson2FBTBFix::ID = 0;
-+
-+INITIALIZE_PASS(MipsLoongson2FBTBFix, "loongson2f-btb-fix-pass",
-+                "Mips Loongson 2F BTB erratum workaround", false, false)
-+
-+FunctionPass *llvm::createMipsLoongson2FBTBFix() {
-+  return new MipsLoongson2FBTBFix();
-+}
-+
-+bool MipsLoongson2FBTBFix::runOnMachineFunction(MachineFunction &MF) {
-+  bool Changed = false;
-+
-+  for (auto &MBB : MF) {
-+    Changed |= runOnBasicBlock(MF, MBB);
-+  }
-+  return Changed;
-+}
-+
-+bool MipsLoongson2FBTBFix::runOnBasicBlock(
-+    MachineFunction &MF, MachineBasicBlock &MBB) {
-+  MachineRegisterInfo &MRI = MF.getRegInfo();
-+  const TargetInstrInfo *TII = MF.getSubtarget().getInstrInfo();
-+  bool Changed = false;
-+
-+  for (auto &MI : MBB) {
-+    if (!MI.isCall() && !MI.isIndirectBranch() && !MI.isReturn())
-+      continue;
-+
-+    // Skip calls that are not through a register.
-+    if (MI.isCall()) {
-+      if (MI.getNumOperands() == 0)
-+        continue;
-+      const MachineOperand &MO = MI.getOperand(0);
-+      if (!MO.isReg())
-+        continue;
-+    }
-+
-+    Changed = true;
-+
-+    DebugLoc MBBDL = MI.getDebugLoc();
-+    Register TempReg = MRI.createVirtualRegister(&Mips::GPR64RegClass);
-+
-+    // li $TempReg, COP_0_BTB_CLEAR | COP_0_RAS_DISABLE
-+    BuildMI(MBB, MI, MBBDL, TII->get(Mips::ORi), TempReg)
-+        .addReg(Mips::ZERO)
-+        .addImm(3);
-+    // dmtc0 $TempReg, COP_0_DIAG
-+    BuildMI(MBB, MI, MBBDL, TII->get(Mips::DMTC0))
-+        .addReg(Mips::COP022)
-+        .addReg(TempReg)
-+        .addImm(0);
-+  }
-+  return Changed;
-+}
blob - 8d4fd17ba8cedf31178bc4eb1c8f12df801537e9 (mode 644)
blob + /dev/null
--- devel/llvm/19/patches/patch-llvm_lib_Target_Mips_MipsTargetMachine_cpp
+++ /dev/null
@@ -1,21 +0,0 @@
-Index: llvm/lib/Target/Mips/MipsTargetMachine.cpp
---- llvm/lib/Target/Mips/MipsTargetMachine.cpp.orig
-+++ llvm/lib/Target/Mips/MipsTargetMachine.cpp
-@@ -48,6 +48,7 @@ using namespace llvm;
- 
- #define DEBUG_TYPE "mips"
- 
-+extern cl::opt<bool> FixLoongson2FBTB;
- static cl::opt<bool>
-     EnableMulMulFix("mfix4300", cl::init(false),
-                     cl::desc("Enable the VR4300 mulmul bug fix."), cl::Hidden);
-@@ -280,6 +281,9 @@ bool MipsPassConfig::addInstSelector() {
- 
- void MipsPassConfig::addPreRegAlloc() {
-   addPass(createMipsOptimizePICCallPass());
-+
-+  if (FixLoongson2FBTB)
-+    addPass(createMipsLoongson2FBTBFix());
- }
- 
- TargetTransformInfo
blob - 511ccb245ec193cbbd4958c26b16a41e87895905 (mode 644)
blob + /dev/null
--- devel/llvm/19/patches/patch-llvm_lib_Target_Mips_Mips_h
+++ /dev/null
@@ -1,19 +0,0 @@
-Index: llvm/lib/Target/Mips/Mips.h
---- llvm/lib/Target/Mips/Mips.h.orig
-+++ llvm/lib/Target/Mips/Mips.h
-@@ -30,6 +30,7 @@ class PassRegistry;
- ModulePass *createMipsOs16Pass();
- ModulePass *createMips16HardFloatPass();
- 
-+FunctionPass *createMipsLoongson2FBTBFix();
- FunctionPass *createMipsModuleISelDagPass();
- FunctionPass *createMipsOptimizePICCallPass();
- FunctionPass *createMipsDelaySlotFillerPass();
-@@ -45,6 +46,7 @@ InstructionSelector *
- createMipsInstructionSelector(const MipsTargetMachine &, const MipsSubtarget &,
-                               const MipsRegisterBankInfo &);
- 
-+void initializeMipsLoongson2FBTBFixPass(PassRegistry &);
- void initializeMicroMipsSizeReducePass(PassRegistry &);
- void initializeMipsBranchExpansionPass(PassRegistry &);
- void initializeMipsDAGToDAGISelLegacyPass(PassRegistry &);
blob - bec263cb08b95e4beac53549e67f4c71d13feade
blob + 39336dfed350079b8284be1d4e56b85742def280
--- devel/llvm/20/Makefile
+++ devel/llvm/20/Makefile
@@ -5,7 +5,7 @@ LLVM_MAJOR =	20
 LLVM_VERSION =	${LLVM_MAJOR}.1.8
 LLVM_PKGSPEC =	>=20,<21
 
-REVISION-main =		6
+REVISION-main =		7
 REVISION-libcxx =	1
 REVISION-lldb =		1
 REVISION-python =	2
blob - 2ef20831bde2e1bd87284b776b6a0b8dbacc531e
blob + 3c7e4b1e41404723229219cf5793a637241a020c
--- devel/llvm/20/patches/patch-clang_include_clang_Driver_Options_td
+++ devel/llvm/20/patches/patch-clang_include_clang_Driver_Options_td
@@ -22,16 +22,7 @@ Index: clang/include/clang/Driver/Options.td
  def ftrivial_auto_var_init_stop_after : Joined<["-"], "ftrivial-auto-var-init-stop-after=">, Group<f_Group>,
    Visibility<[ClangOption, CC1Option, CLOption, DXCOption]>,
    HelpText<"Stop initializing trivial automatic stack variables after the specified number of instances">,
-@@ -5530,6 +5544,8 @@ def mno_check_zero_division : Flag<["-"], "mno-check-z
- def mfix4300 : Flag<["-"], "mfix4300">, Group<m_mips_Features_Group>;
- def mcompact_branches_EQ : Joined<["-"], "mcompact-branches=">,
-                            Group<m_mips_Features_Group>;
-+def mfix_loongson2f_btb : Flag<["-"], "mfix-loongson2f-btb">,
-+                          Group<m_mips_Features_Group>;
- } // let Flags = [TargetSpecific]
- def mbranch_likely : Flag<["-"], "mbranch-likely">, Group<m_Group>,
-   IgnoredGCCCompat;
-@@ -5760,10 +5776,14 @@ def pedantic_errors : Flag<["-", "--"], "pedantic-erro
+@@ -5760,10 +5774,14 @@ def pedantic_errors : Flag<["-", "--"], "pedantic-erro
  def pedantic : Flag<["-", "--"], "pedantic">, Group<pedantic_Group>,
    Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>,
    HelpText<"Warn on language extensions">, MarshallingInfoFlag<DiagnosticOpts<"Pedantic">>;
@@ -47,7 +38,7 @@ Index: clang/include/clang/Driver/Options.td
  def pipe : Flag<["-", "--"], "pipe">,
    HelpText<"Use pipes between commands, when possible">;
  def prebind__all__twolevel__modules : Flag<["-"], "prebind_all_twolevel_modules">;
-@@ -6618,6 +6638,8 @@ def mshstk : Flag<["-"], "mshstk">, Group<m_x86_Featur
+@@ -6618,6 +6636,8 @@ def mshstk : Flag<["-"], "mshstk">, Group<m_x86_Featur
  def mno_shstk : Flag<["-"], "mno-shstk">, Group<m_x86_Features_Group>;
  def mretpoline_external_thunk : Flag<["-"], "mretpoline-external-thunk">, Group<m_x86_Features_Group>;
  def mno_retpoline_external_thunk : Flag<["-"], "mno-retpoline-external-thunk">, Group<m_x86_Features_Group>;
blob - 7c6365b76946b1deaba40a8642f6a5d642247087
blob + 3706bf27d4e66638afebb6dad7226da74becdec5
--- devel/llvm/20/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp
+++ devel/llvm/20/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp
@@ -98,19 +98,7 @@ Index: clang/lib/Driver/ToolChains/Clang.cpp
    // forward -fembed-bitcode to assmebler
    if (C.getDriver().embedBitcodeEnabled() ||
        C.getDriver().embedBitcodeMarkerOnly())
-@@ -3241,6 +3290,11 @@ static void RenderFloatingPointOptions(const ToolChain
-               << LastFpContractOverrideOption
-               << Args.MakeArgString("-ffp-contract=" + Val);
-         }
-+        if (Val.starts_with("-mfix-loongson2f-btb")) {
-+          CmdArgs.push_back("-mllvm");
-+          CmdArgs.push_back("-fix-loongson2f-btb");
-+          continue;
-+        }
- 
-         FPContract = Val;
-         LastSeenFfpContractOption = Val;
-@@ -5988,8 +6042,12 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -5988,8 +6037,12 @@ void Clang::ConstructJob(Compilation &C, const JobActi
        OFastEnabled ? options::OPT_Ofast : options::OPT_fstrict_aliasing;
    // We turn strict aliasing off by default if we're Windows MSVC since MSVC
    // doesn't do any TBAA.
@@ -124,7 +112,7 @@ Index: clang/lib/Driver/ToolChains/Clang.cpp
      CmdArgs.push_back("-relaxed-aliasing");
    if (Args.hasFlag(options::OPT_fno_pointer_tbaa, options::OPT_fpointer_tbaa,
                     false))
-@@ -7051,7 +7109,58 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -7051,7 +7104,58 @@ void Clang::ConstructJob(Compilation &C, const JobActi
    Args.addOptInFlag(CmdArgs, options::OPT_mspeculative_load_hardening,
                      options::OPT_mno_speculative_load_hardening);
  
@@ -184,7 +172,7 @@ Index: clang/lib/Driver/ToolChains/Clang.cpp
    RenderSCPOptions(TC, Args, CmdArgs);
    RenderTrivialAutoVarInitOptions(D, TC, Args, CmdArgs);
  
-@@ -7133,6 +7242,11 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -7133,6 +7237,11 @@ void Clang::ConstructJob(Compilation &C, const JobActi
      if (Arg *SA = Args.getLastArg(options::OPT_mcf_branch_label_scheme_EQ))
        CmdArgs.push_back(Args.MakeArgString(Twine("-mcf-branch-label-scheme=") +
                                             SA->getValue()));
@@ -196,7 +184,7 @@ Index: clang/lib/Driver/ToolChains/Clang.cpp
    }
  
    if (Arg *A = Args.getLastArg(options::OPT_mfunction_return_EQ))
-@@ -7666,6 +7780,18 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -7666,6 +7775,18 @@ void Clang::ConstructJob(Compilation &C, const JobActi
                                       options::OPT_fno_rewrite_imports, false);
    if (RewriteImports)
      CmdArgs.push_back("-frewrite-imports");
blob - f9ba388689e2e7a38db10d6cc8e15b487ade83de (mode 644)
blob + /dev/null
--- devel/llvm/20/patches/patch-llvm_lib_Target_Mips_AsmParser_MipsAsmParser_cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-Index: llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
---- llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp.orig
-+++ llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
-@@ -68,6 +68,7 @@ class MCInstrInfo;
- } // end namespace llvm
- 
- extern cl::opt<bool> EmitJalrReloc;
-+extern cl::opt<bool> FixLoongson2FBTB;
- 
- namespace {
- 
-@@ -234,6 +235,9 @@ class MipsAsmParser : public MCTargetAsmParser {
- 
-   bool emitPartialAddress(MipsTargetStreamer &TOut, SMLoc IDLoc, MCSymbol *Sym);
- 
-+  bool emitLoongson2FBTBFlush(MCInst &Inst, MipsTargetStreamer &TOut,
-+                              SMLoc IDLoc, const MCSubtargetInfo *STI);
-+
-   bool expandLoadImm(MCInst &Inst, bool Is32BitImm, SMLoc IDLoc,
-                      MCStreamer &Out, const MCSubtargetInfo *STI);
- 
-@@ -2103,6 +2107,20 @@ bool MipsAsmParser::processInstruction(MCInst &Inst, S
-     Inst = BInst;
-   }
- 
-+  if (FixLoongson2FBTB) {
-+    switch (Inst.getOpcode()) {
-+    case Mips::JALR:
-+    case Mips::JR:
-+    case Mips::JalOneReg:
-+    case Mips::JalTwoReg:
-+      if (emitLoongson2FBTBFlush(Inst, TOut, IDLoc, STI))
-+        return true;
-+      LLVM_FALLTHROUGH;
-+    default:
-+      break;
-+    }
-+  }
-+
-   // This expansion is not in a function called by tryExpandInstruction()
-   // because the pseudo-instruction doesn't have a distinct opcode.
-   if ((Opcode == Mips::JAL || Opcode == Mips::JAL_MM) && inPicMode()) {
-@@ -3407,6 +3425,39 @@ bool MipsAsmParser::emitPartialAddress(MipsTargetStrea
-       TOut.emitRRI(Mips::DSLL, ATReg, ATReg, 16, IDLoc, STI);
-     }
-   }
-+  return false;
-+}
-+
-+bool MipsAsmParser::emitLoongson2FBTBFlush(MCInst &Inst,
-+                                           MipsTargetStreamer &TOut,
-+                                           SMLoc IDLoc,
-+                                           const MCSubtargetInfo *STI) {
-+  unsigned SReg = Inst.getOperand(0).getReg();
-+  if (SReg == Mips::ZERO || SReg == Mips::ZERO_64 ||
-+      SReg == Mips::K0 || SReg == Mips::K0_64 ||
-+      SReg == Mips::K1 || SReg == Mips::K1_64)
-+    return false;
-+
-+  unsigned ATReg = getATReg(IDLoc);
-+  if (ATReg == 0)
-+    return true;
-+
-+  // Direct comparison of SReg and ATReg is not reliable because
-+  // the register classes may differ.
-+  unsigned ATRegIndex = AssemblerOptions.back()->getATRegIndex();
-+  if (ATRegIndex == 0)
-+    return true;
-+  if (SReg == getReg(Mips::GPR32RegClassID, ATRegIndex) ||
-+      SReg == getReg(Mips::GPR64RegClassID, ATRegIndex))
-+    return false;
-+
-+  warnIfNoMacro(IDLoc);
-+
-+  // li $at, COP_0_BTB_CLEAR | COP_0_RAS_DISABLE
-+  TOut.emitRRI(Mips::ORi, ATReg, Mips::ZERO, 3, IDLoc, STI);
-+  // dmtc0 $at, COP_0_DIAG
-+  TOut.emitRRI(Mips::DMTC0, Mips::COP022, ATReg, 0, IDLoc, STI);
-+
-   return false;
- }
- 
blob - 504b19f4493ffc32b1e3d3c0a0873e9b21c894e9
blob + c619c7c6300661122b04d5f33d7765205c5524a5
--- devel/llvm/20/patches/patch-llvm_lib_Target_Mips_CMakeLists_txt
+++ devel/llvm/20/patches/patch-llvm_lib_Target_Mips_CMakeLists_txt
@@ -1,15 +1,7 @@
 Index: llvm/lib/Target/Mips/CMakeLists.txt
 --- llvm/lib/Target/Mips/CMakeLists.txt.orig
 +++ llvm/lib/Target/Mips/CMakeLists.txt
-@@ -43,6 +43,7 @@ add_llvm_target(MipsCodeGen
-   MipsISelLowering.cpp
-   MipsFrameLowering.cpp
-   MipsLegalizerInfo.cpp
-+  MipsLoongson2FBTBFix.cpp
-   MipsBranchExpansion.cpp
-   MipsMCInstLower.cpp
-   MipsMachineFunction.cpp
-@@ -53,6 +54,7 @@ add_llvm_target(MipsCodeGen
+@@ -53,6 +53,7 @@ add_llvm_target(MipsCodeGen
    MipsPostLegalizerCombiner.cpp
    MipsRegisterBankInfo.cpp
    MipsRegisterInfo.cpp
blob - cdc229843c4fee3b4769fded49c227fade5c04d2 (mode 644)
blob + /dev/null
--- devel/llvm/20/patches/patch-llvm_lib_Target_Mips_MCTargetDesc_MipsABIInfo_cpp
+++ /dev/null
@@ -1,15 +0,0 @@
-Index: llvm/lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp
---- llvm/lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp.orig
-+++ llvm/lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp
-@@ -21,6 +21,11 @@ EmitJalrReloc("mips-jalr-reloc", cl::Hidden,
-               cl::desc("MIPS: Emit R_{MICRO}MIPS_JALR relocation with jalr"),
-               cl::init(true));
- 
-+cl::opt<bool>
-+FixLoongson2FBTB("fix-loongson2f-btb", cl::Hidden,
-+                 cl::desc("MIPS: Enable Loongson 2F BTB workaround"),
-+                 cl::init(false));
-+
- namespace {
- static const MCPhysReg O32IntRegs[4] = {Mips::A0, Mips::A1, Mips::A2, Mips::A3};
- 
blob - ea3b3c30fa82c65fa4e33ad4c95da9a0bf7864fd (mode 644)
blob + /dev/null
--- devel/llvm/20/patches/patch-llvm_lib_Target_Mips_MipsLoongson2FBTBFix_cpp
+++ /dev/null
@@ -1,95 +0,0 @@
-Index: llvm/lib/Target/Mips/MipsLoongson2FBTBFix.cpp
---- llvm/lib/Target/Mips/MipsLoongson2FBTBFix.cpp.orig
-+++ llvm/lib/Target/Mips/MipsLoongson2FBTBFix.cpp
-@@ -0,0 +1,91 @@
-+//===- MipsLoongson2FBTBFix.cpp -------------------------------------------===//
-+//
-+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-+// See https://llvm.org/LICENSE.txt for license information.
-+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-+//
-+//===----------------------------------------------------------------------===//
-+
-+#include "Mips.h"
-+#include "MipsTargetMachine.h"
-+#include "llvm/CodeGen/MachineFunctionPass.h"
-+#include "llvm/CodeGen/Passes.h"
-+
-+using namespace llvm;
-+
-+namespace {
-+
-+class MipsLoongson2FBTBFix : public MachineFunctionPass {
-+public:
-+  static char ID;
-+
-+  MipsLoongson2FBTBFix() : MachineFunctionPass(ID) {
-+    initializeMipsLoongson2FBTBFixPass(*PassRegistry::getPassRegistry());
-+  }
-+
-+  bool runOnMachineFunction(MachineFunction &MF) override;
-+
-+  StringRef getPassName() const override {
-+    return "Loongson 2F BTB erratum workaround pass";
-+  }
-+
-+private:
-+  bool runOnBasicBlock(MachineFunction &MF, MachineBasicBlock &MBB);
-+};
-+
-+} // end of anonymous namespace
-+
-+char MipsLoongson2FBTBFix::ID = 0;
-+
-+INITIALIZE_PASS(MipsLoongson2FBTBFix, "loongson2f-btb-fix-pass",
-+                "Mips Loongson 2F BTB erratum workaround", false, false)
-+
-+FunctionPass *llvm::createMipsLoongson2FBTBFix() {
-+  return new MipsLoongson2FBTBFix();
-+}
-+
-+bool MipsLoongson2FBTBFix::runOnMachineFunction(MachineFunction &MF) {
-+  bool Changed = false;
-+
-+  for (auto &MBB : MF) {
-+    Changed |= runOnBasicBlock(MF, MBB);
-+  }
-+  return Changed;
-+}
-+
-+bool MipsLoongson2FBTBFix::runOnBasicBlock(
-+    MachineFunction &MF, MachineBasicBlock &MBB) {
-+  MachineRegisterInfo &MRI = MF.getRegInfo();
-+  const TargetInstrInfo *TII = MF.getSubtarget().getInstrInfo();
-+  bool Changed = false;
-+
-+  for (auto &MI : MBB) {
-+    if (!MI.isCall() && !MI.isIndirectBranch() && !MI.isReturn())
-+      continue;
-+
-+    // Skip calls that are not through a register.
-+    if (MI.isCall()) {
-+      if (MI.getNumOperands() == 0)
-+        continue;
-+      const MachineOperand &MO = MI.getOperand(0);
-+      if (!MO.isReg())
-+        continue;
-+    }
-+
-+    Changed = true;
-+
-+    DebugLoc MBBDL = MI.getDebugLoc();
-+    Register TempReg = MRI.createVirtualRegister(&Mips::GPR64RegClass);
-+
-+    // li $TempReg, COP_0_BTB_CLEAR | COP_0_RAS_DISABLE
-+    BuildMI(MBB, MI, MBBDL, TII->get(Mips::ORi), TempReg)
-+        .addReg(Mips::ZERO)
-+        .addImm(3);
-+    // dmtc0 $TempReg, COP_0_DIAG
-+    BuildMI(MBB, MI, MBBDL, TII->get(Mips::DMTC0))
-+        .addReg(Mips::COP022)
-+        .addReg(TempReg)
-+        .addImm(0);
-+  }
-+  return Changed;
-+}
blob - 3047a22b271fed0e58fb34b5b574871b3d299aaf (mode 644)
blob + /dev/null
--- devel/llvm/20/patches/patch-llvm_lib_Target_Mips_MipsTargetMachine_cpp
+++ /dev/null
@@ -1,21 +0,0 @@
-Index: llvm/lib/Target/Mips/MipsTargetMachine.cpp
---- llvm/lib/Target/Mips/MipsTargetMachine.cpp.orig
-+++ llvm/lib/Target/Mips/MipsTargetMachine.cpp
-@@ -47,6 +47,7 @@ using namespace llvm;
- 
- #define DEBUG_TYPE "mips"
- 
-+extern cl::opt<bool> FixLoongson2FBTB;
- static cl::opt<bool>
-     EnableMulMulFix("mfix4300", cl::init(false),
-                     cl::desc("Enable the VR4300 mulmul bug fix."), cl::Hidden);
-@@ -286,6 +287,9 @@ bool MipsPassConfig::addInstSelector() {
- 
- void MipsPassConfig::addPreRegAlloc() {
-   addPass(createMipsOptimizePICCallPass());
-+
-+  if (FixLoongson2FBTB)
-+    addPass(createMipsLoongson2FBTBFix());
- }
- 
- TargetTransformInfo
blob - 707bc2494517c567b81a8a2e4e86e9026cc159ba (mode 644)
blob + /dev/null
--- devel/llvm/20/patches/patch-llvm_lib_Target_Mips_Mips_h
+++ /dev/null
@@ -1,19 +0,0 @@
-Index: llvm/lib/Target/Mips/Mips.h
---- llvm/lib/Target/Mips/Mips.h.orig
-+++ llvm/lib/Target/Mips/Mips.h
-@@ -41,6 +41,7 @@ class PassRegistry;
- ModulePass *createMipsOs16Pass();
- ModulePass *createMips16HardFloatPass();
- 
-+FunctionPass *createMipsLoongson2FBTBFix();
- FunctionPass *createMipsModuleISelDagPass();
- FunctionPass *createMipsOptimizePICCallPass();
- FunctionPass *createMipsDelaySlotFillerPass();
-@@ -56,6 +57,7 @@ InstructionSelector *
- createMipsInstructionSelector(const MipsTargetMachine &, const MipsSubtarget &,
-                               const MipsRegisterBankInfo &);
- 
-+void initializeMipsLoongson2FBTBFixPass(PassRegistry &);
- void initializeMicroMipsSizeReducePass(PassRegistry &);
- void initializeMipsBranchExpansionPass(PassRegistry &);
- void initializeMipsDAGToDAGISelLegacyPass(PassRegistry &);
blob - cf0b520a9baa8ba87e4d9ddd510bd90ea8e50722
blob + 374832b2e2d61f1a89b83d6fd1f8f6a4462b7c06
--- devel/llvm/21/Makefile
+++ devel/llvm/21/Makefile
@@ -2,7 +2,7 @@ LLVM_MAJOR =	21
 LLVM_VERSION =	${LLVM_MAJOR}.1.8
 LLVM_PKGSPEC =	>=21,<22
 
-REVISION-main =		4
+REVISION-main =		5
 REVISION-lldb =		2
 REVISION-libcxx =	2
 REVISION-python =	3
blob - b4a8bdafe2296855807dc2532b8647c82a11c779
blob + 77da5fd39f1c62351b5c6f50540a571194c2be13
--- devel/llvm/21/patches/patch-clang_include_clang_Driver_Options_td
+++ devel/llvm/21/patches/patch-clang_include_clang_Driver_Options_td
@@ -22,16 +22,7 @@ Index: clang/include/clang/Driver/Options.td
  def ftrivial_auto_var_init_stop_after : Joined<["-"], "ftrivial-auto-var-init-stop-after=">, Group<f_Group>,
    Visibility<[ClangOption, CC1Option, CLOption, DXCOption]>,
    HelpText<"Stop initializing trivial automatic stack variables after the specified number of instances">,
-@@ -5676,6 +5690,8 @@ def mno_check_zero_division : Flag<["-"], "mno-check-z
- def mfix4300 : Flag<["-"], "mfix4300">, Group<m_mips_Features_Group>;
- def mcompact_branches_EQ : Joined<["-"], "mcompact-branches=">,
-                            Group<m_mips_Features_Group>;
-+def mfix_loongson2f_btb : Flag<["-"], "mfix-loongson2f-btb">,
-+                          Group<m_mips_Features_Group>;
- } // let Flags = [TargetSpecific]
- def mbranch_likely : Flag<["-"], "mbranch-likely">, Group<m_Group>,
-   IgnoredGCCCompat;
-@@ -5919,10 +5935,14 @@ def pedantic_errors : Flag<["-", "--"], "pedantic-erro
+@@ -5919,10 +5933,14 @@ def pedantic_errors : Flag<["-", "--"], "pedantic-erro
  def pedantic : Flag<["-", "--"], "pedantic">, Group<pedantic_Group>,
    Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>,
    HelpText<"Warn on language extensions">, MarshallingInfoFlag<DiagnosticOpts<"Pedantic">>;
@@ -47,7 +38,7 @@ Index: clang/include/clang/Driver/Options.td
  def pipe : Flag<["-", "--"], "pipe">,
    HelpText<"Use pipes between commands, when possible">;
  def prebind__all__twolevel__modules : Flag<["-"], "prebind_all_twolevel_modules">;
-@@ -6780,6 +6800,8 @@ def mshstk : Flag<["-"], "mshstk">, Group<m_x86_Featur
+@@ -6780,6 +6798,8 @@ def mshstk : Flag<["-"], "mshstk">, Group<m_x86_Featur
  def mno_shstk : Flag<["-"], "mno-shstk">, Group<m_x86_Features_Group>;
  def mretpoline_external_thunk : Flag<["-"], "mretpoline-external-thunk">, Group<m_x86_Features_Group>;
  def mno_retpoline_external_thunk : Flag<["-"], "mno-retpoline-external-thunk">, Group<m_x86_Features_Group>;
blob - 4d3e21c94948dfbb967574763540b7c73092d15d
blob + f512a78b414d239f9971b38b76806a2a5416b20f
--- devel/llvm/21/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp
+++ devel/llvm/21/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp
@@ -1,19 +1,7 @@
 Index: clang/lib/Driver/ToolChains/Clang.cpp
 --- clang/lib/Driver/ToolChains/Clang.cpp.orig
 +++ clang/lib/Driver/ToolChains/Clang.cpp
-@@ -3111,6 +3111,11 @@ static void RenderFloatingPointOptions(const ToolChain
-               << LastFpContractOverrideOption
-               << Args.MakeArgString("-ffp-contract=" + Val);
-         }
-+        if (Val.starts_with("-mfix-loongson2f-btb")) {
-+          CmdArgs.push_back("-mllvm");
-+          CmdArgs.push_back("-fix-loongson2f-btb");
-+          continue;
-+        }
- 
-         FPContract = Val;
-         LastSeenFfpContractOption = Val;
-@@ -5822,9 +5827,12 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -5822,9 +5822,12 @@ void Clang::ConstructJob(Compilation &C, const JobActi
        OFastEnabled ? options::OPT_Ofast : options::OPT_fstrict_aliasing;
    // We turn strict aliasing off by default if we're Windows MSVC since MSVC
    // doesn't do any TBAA.
@@ -28,7 +16,7 @@ Index: clang/lib/Driver/ToolChains/Clang.cpp
      CmdArgs.push_back("-relaxed-aliasing");
    if (Args.hasFlag(options::OPT_fno_pointer_tbaa, options::OPT_fpointer_tbaa,
                     false))
-@@ -6896,7 +6904,58 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -6896,7 +6899,58 @@ void Clang::ConstructJob(Compilation &C, const JobActi
    Args.addOptInFlag(CmdArgs, options::OPT_mspeculative_load_hardening,
                      options::OPT_mno_speculative_load_hardening);
  
@@ -88,7 +76,7 @@ Index: clang/lib/Driver/ToolChains/Clang.cpp
    RenderSCPOptions(TC, Args, CmdArgs);
    RenderTrivialAutoVarInitOptions(D, TC, Args, CmdArgs);
  
-@@ -7508,6 +7567,18 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -7508,6 +7562,18 @@ void Clang::ConstructJob(Compilation &C, const JobActi
                                       options::OPT_fno_rewrite_imports, false);
    if (RewriteImports)
      CmdArgs.push_back("-frewrite-imports");
blob - 5bb726afcdf02b5ad642f6be6c49300ca8a33251 (mode 644)
blob + /dev/null
--- devel/llvm/21/patches/patch-llvm_lib_Target_Mips_AsmParser_MipsAsmParser_cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-Index: llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
---- llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp.orig
-+++ llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
-@@ -68,6 +68,7 @@ class MCInstrInfo;
- } // end namespace llvm
- 
- extern cl::opt<bool> EmitJalrReloc;
-+extern cl::opt<bool> FixLoongson2FBTB;
- 
- namespace {
- 
-@@ -235,6 +236,9 @@ class MipsAsmParser : public MCTargetAsmParser {
- 
-   bool emitPartialAddress(MipsTargetStreamer &TOut, SMLoc IDLoc, MCSymbol *Sym);
- 
-+  bool emitLoongson2FBTBFlush(MCInst &Inst, MipsTargetStreamer &TOut,
-+                              SMLoc IDLoc, const MCSubtargetInfo *STI);
-+
-   bool expandLoadImm(MCInst &Inst, bool Is32BitImm, SMLoc IDLoc,
-                      MCStreamer &Out, const MCSubtargetInfo *STI);
- 
-@@ -2058,6 +2062,20 @@ bool MipsAsmParser::processInstruction(MCInst &Inst, S
-     Inst = BInst;
-   }
- 
-+  if (FixLoongson2FBTB) {
-+    switch (Inst.getOpcode()) {
-+    case Mips::JALR:
-+    case Mips::JR:
-+    case Mips::JalOneReg:
-+    case Mips::JalTwoReg:
-+      if (emitLoongson2FBTBFlush(Inst, TOut, IDLoc, STI))
-+        return true;
-+      LLVM_FALLTHROUGH;
-+    default:
-+      break;
-+    }
-+  }
-+
-   // This expansion is not in a function called by tryExpandInstruction()
-   // because the pseudo-instruction doesn't have a distinct opcode.
-   if ((Opcode == Mips::JAL || Opcode == Mips::JAL_MM) && inPicMode()) {
-@@ -3353,6 +3371,39 @@ bool MipsAsmParser::emitPartialAddress(MipsTargetStrea
-       TOut.emitRRI(Mips::DSLL, ATReg, ATReg, 16, IDLoc, STI);
-     }
-   }
-+  return false;
-+}
-+
-+bool MipsAsmParser::emitLoongson2FBTBFlush(MCInst &Inst,
-+                                           MipsTargetStreamer &TOut,
-+                                           SMLoc IDLoc,
-+                                           const MCSubtargetInfo *STI) {
-+  unsigned SReg = Inst.getOperand(0).getReg();
-+  if (SReg == Mips::ZERO || SReg == Mips::ZERO_64 ||
-+      SReg == Mips::K0 || SReg == Mips::K0_64 ||
-+      SReg == Mips::K1 || SReg == Mips::K1_64)
-+    return false;
-+
-+  unsigned ATReg = getATReg(IDLoc);
-+  if (ATReg == 0)
-+    return true;
-+
-+  // Direct comparison of SReg and ATReg is not reliable because
-+  // the register classes may differ.
-+  unsigned ATRegIndex = AssemblerOptions.back()->getATRegIndex();
-+  if (ATRegIndex == 0)
-+    return true;
-+  if (SReg == getReg(Mips::GPR32RegClassID, ATRegIndex) ||
-+      SReg == getReg(Mips::GPR64RegClassID, ATRegIndex))
-+    return false;
-+
-+  warnIfNoMacro(IDLoc);
-+
-+  // li $at, COP_0_BTB_CLEAR | COP_0_RAS_DISABLE
-+  TOut.emitRRI(Mips::ORi, ATReg, Mips::ZERO, 3, IDLoc, STI);
-+  // dmtc0 $at, COP_0_DIAG
-+  TOut.emitRRI(Mips::DMTC0, Mips::COP022, ATReg, 0, IDLoc, STI);
-+
-   return false;
- }
- 
blob - 504b19f4493ffc32b1e3d3c0a0873e9b21c894e9
blob + c619c7c6300661122b04d5f33d7765205c5524a5
--- devel/llvm/21/patches/patch-llvm_lib_Target_Mips_CMakeLists_txt
+++ devel/llvm/21/patches/patch-llvm_lib_Target_Mips_CMakeLists_txt
@@ -1,15 +1,7 @@
 Index: llvm/lib/Target/Mips/CMakeLists.txt
 --- llvm/lib/Target/Mips/CMakeLists.txt.orig
 +++ llvm/lib/Target/Mips/CMakeLists.txt
-@@ -43,6 +43,7 @@ add_llvm_target(MipsCodeGen
-   MipsISelLowering.cpp
-   MipsFrameLowering.cpp
-   MipsLegalizerInfo.cpp
-+  MipsLoongson2FBTBFix.cpp
-   MipsBranchExpansion.cpp
-   MipsMCInstLower.cpp
-   MipsMachineFunction.cpp
-@@ -53,6 +54,7 @@ add_llvm_target(MipsCodeGen
+@@ -53,6 +53,7 @@ add_llvm_target(MipsCodeGen
    MipsPostLegalizerCombiner.cpp
    MipsRegisterBankInfo.cpp
    MipsRegisterInfo.cpp
blob - cdc229843c4fee3b4769fded49c227fade5c04d2 (mode 644)
blob + /dev/null
--- devel/llvm/21/patches/patch-llvm_lib_Target_Mips_MCTargetDesc_MipsABIInfo_cpp
+++ /dev/null
@@ -1,15 +0,0 @@
-Index: llvm/lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp
---- llvm/lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp.orig
-+++ llvm/lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp
-@@ -21,6 +21,11 @@ EmitJalrReloc("mips-jalr-reloc", cl::Hidden,
-               cl::desc("MIPS: Emit R_{MICRO}MIPS_JALR relocation with jalr"),
-               cl::init(true));
- 
-+cl::opt<bool>
-+FixLoongson2FBTB("fix-loongson2f-btb", cl::Hidden,
-+                 cl::desc("MIPS: Enable Loongson 2F BTB workaround"),
-+                 cl::init(false));
-+
- namespace {
- static const MCPhysReg O32IntRegs[4] = {Mips::A0, Mips::A1, Mips::A2, Mips::A3};
- 
blob - ea3b3c30fa82c65fa4e33ad4c95da9a0bf7864fd (mode 644)
blob + /dev/null
--- devel/llvm/21/patches/patch-llvm_lib_Target_Mips_MipsLoongson2FBTBFix_cpp
+++ /dev/null
@@ -1,95 +0,0 @@
-Index: llvm/lib/Target/Mips/MipsLoongson2FBTBFix.cpp
---- llvm/lib/Target/Mips/MipsLoongson2FBTBFix.cpp.orig
-+++ llvm/lib/Target/Mips/MipsLoongson2FBTBFix.cpp
-@@ -0,0 +1,91 @@
-+//===- MipsLoongson2FBTBFix.cpp -------------------------------------------===//
-+//
-+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-+// See https://llvm.org/LICENSE.txt for license information.
-+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-+//
-+//===----------------------------------------------------------------------===//
-+
-+#include "Mips.h"
-+#include "MipsTargetMachine.h"
-+#include "llvm/CodeGen/MachineFunctionPass.h"
-+#include "llvm/CodeGen/Passes.h"
-+
-+using namespace llvm;
-+
-+namespace {
-+
-+class MipsLoongson2FBTBFix : public MachineFunctionPass {
-+public:
-+  static char ID;
-+
-+  MipsLoongson2FBTBFix() : MachineFunctionPass(ID) {
-+    initializeMipsLoongson2FBTBFixPass(*PassRegistry::getPassRegistry());
-+  }
-+
-+  bool runOnMachineFunction(MachineFunction &MF) override;
-+
-+  StringRef getPassName() const override {
-+    return "Loongson 2F BTB erratum workaround pass";
-+  }
-+
-+private:
-+  bool runOnBasicBlock(MachineFunction &MF, MachineBasicBlock &MBB);
-+};
-+
-+} // end of anonymous namespace
-+
-+char MipsLoongson2FBTBFix::ID = 0;
-+
-+INITIALIZE_PASS(MipsLoongson2FBTBFix, "loongson2f-btb-fix-pass",
-+                "Mips Loongson 2F BTB erratum workaround", false, false)
-+
-+FunctionPass *llvm::createMipsLoongson2FBTBFix() {
-+  return new MipsLoongson2FBTBFix();
-+}
-+
-+bool MipsLoongson2FBTBFix::runOnMachineFunction(MachineFunction &MF) {
-+  bool Changed = false;
-+
-+  for (auto &MBB : MF) {
-+    Changed |= runOnBasicBlock(MF, MBB);
-+  }
-+  return Changed;
-+}
-+
-+bool MipsLoongson2FBTBFix::runOnBasicBlock(
-+    MachineFunction &MF, MachineBasicBlock &MBB) {
-+  MachineRegisterInfo &MRI = MF.getRegInfo();
-+  const TargetInstrInfo *TII = MF.getSubtarget().getInstrInfo();
-+  bool Changed = false;
-+
-+  for (auto &MI : MBB) {
-+    if (!MI.isCall() && !MI.isIndirectBranch() && !MI.isReturn())
-+      continue;
-+
-+    // Skip calls that are not through a register.
-+    if (MI.isCall()) {
-+      if (MI.getNumOperands() == 0)
-+        continue;
-+      const MachineOperand &MO = MI.getOperand(0);
-+      if (!MO.isReg())
-+        continue;
-+    }
-+
-+    Changed = true;
-+
-+    DebugLoc MBBDL = MI.getDebugLoc();
-+    Register TempReg = MRI.createVirtualRegister(&Mips::GPR64RegClass);
-+
-+    // li $TempReg, COP_0_BTB_CLEAR | COP_0_RAS_DISABLE
-+    BuildMI(MBB, MI, MBBDL, TII->get(Mips::ORi), TempReg)
-+        .addReg(Mips::ZERO)
-+        .addImm(3);
-+    // dmtc0 $TempReg, COP_0_DIAG
-+    BuildMI(MBB, MI, MBBDL, TII->get(Mips::DMTC0))
-+        .addReg(Mips::COP022)
-+        .addReg(TempReg)
-+        .addImm(0);
-+  }
-+  return Changed;
-+}
blob - e9d83fb21bc1ed01dd62e9f42107c70c489e6ec0 (mode 644)
blob + /dev/null
--- devel/llvm/21/patches/patch-llvm_lib_Target_Mips_MipsTargetMachine_cpp
+++ /dev/null
@@ -1,21 +0,0 @@
-Index: llvm/lib/Target/Mips/MipsTargetMachine.cpp
---- llvm/lib/Target/Mips/MipsTargetMachine.cpp.orig
-+++ llvm/lib/Target/Mips/MipsTargetMachine.cpp
-@@ -48,6 +48,7 @@ using namespace llvm;
- 
- #define DEBUG_TYPE "mips"
- 
-+extern cl::opt<bool> FixLoongson2FBTB;
- static cl::opt<bool>
-     EnableMulMulFix("mfix4300", cl::init(false),
-                     cl::desc("Enable the VR4300 mulmul bug fix."), cl::Hidden);
-@@ -289,6 +290,9 @@ bool MipsPassConfig::addInstSelector() {
- 
- void MipsPassConfig::addPreRegAlloc() {
-   addPass(createMipsOptimizePICCallPass());
-+
-+  if (FixLoongson2FBTB)
-+    addPass(createMipsLoongson2FBTBFix());
- }
- 
- TargetTransformInfo
blob - 9e8f5f8a382cd2765218b53fc902ff8072b2daf6 (mode 644)
blob + /dev/null
--- devel/llvm/21/patches/patch-llvm_lib_Target_Mips_Mips_h
+++ /dev/null
@@ -1,19 +0,0 @@
-Index: llvm/lib/Target/Mips/Mips.h
---- llvm/lib/Target/Mips/Mips.h.orig
-+++ llvm/lib/Target/Mips/Mips.h
-@@ -41,6 +41,7 @@ class PassRegistry;
- ModulePass *createMipsOs16Pass();
- ModulePass *createMips16HardFloatPass();
- 
-+FunctionPass *createMipsLoongson2FBTBFix();
- FunctionPass *createMipsModuleISelDagPass();
- FunctionPass *createMipsOptimizePICCallPass();
- FunctionPass *createMipsDelaySlotFillerPass();
-@@ -56,6 +57,7 @@ InstructionSelector *
- createMipsInstructionSelector(const MipsTargetMachine &, const MipsSubtarget &,
-                               const MipsRegisterBankInfo &);
- 
-+void initializeMipsLoongson2FBTBFixPass(PassRegistry &);
- void initializeMicroMipsSizeReducePass(PassRegistry &);
- void initializeMipsAsmPrinterPass(PassRegistry &);
- void initializeMipsBranchExpansionPass(PassRegistry &);
blob - 778a7d06b15923494fa01234a4d6c2dc8486fb47
blob + d41a9d4ac66420ebf60dca318d2543885a4662ec
--- devel/llvm/22/Makefile
+++ devel/llvm/22/Makefile
@@ -2,7 +2,7 @@ LLVM_MAJOR =	22
 LLVM_VERSION =	${LLVM_MAJOR}.1.8
 LLVM_PKGSPEC =	>=22,<23
 
-REVISION-main =		1
+REVISION-main =		2
 REVISION-libcxx =	0
 REVISION-lldb =		0
 REVISION-python =	0
blob - cacef63a8679267b7edf2b8f7a9652d4fb9cd4e3
blob + 073d246881aacd1101ff9a67b46f6c5846591103
--- devel/llvm/22/patches/patch-clang_include_clang_Options_Options_td
+++ devel/llvm/22/patches/patch-clang_include_clang_Options_Options_td
@@ -22,16 +22,7 @@ Index: clang/include/clang/Options/Options.td
  def ftrivial_auto_var_init_stop_after : Joined<["-"], "ftrivial-auto-var-init-stop-after=">, Group<f_Group>,
    Visibility<[ClangOption, CC1Option, CLOption, DXCOption]>,
    HelpText<"Stop initializing trivial automatic stack variables after the specified number of instances">,
-@@ -5912,6 +5926,8 @@ def mno_check_zero_division : Flag<["-"], "mno-check-z
- def mfix4300 : Flag<["-"], "mfix4300">, Group<m_mips_Features_Group>;
- def mcompact_branches_EQ : Joined<["-"], "mcompact-branches=">,
-                            Group<m_mips_Features_Group>;
-+def mfix_loongson2f_btb : Flag<["-"], "mfix-loongson2f-btb">,
-+                          Group<m_mips_Features_Group>;
- } // let Flags = [TargetSpecific]
- def mbranch_likely : Flag<["-"], "mbranch-likely">, Group<m_Group>,
-   IgnoredGCCCompat;
-@@ -6154,10 +6170,14 @@ def pedantic_errors : Flag<["-", "--"], "pedantic-erro
+@@ -6154,10 +6168,14 @@ def pedantic_errors : Flag<["-", "--"], "pedantic-erro
  def pedantic : Flag<["-", "--"], "pedantic">, Group<pedantic_Group>,
    Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>,
    HelpText<"Warn on language extensions">, MarshallingInfoFlag<DiagnosticOpts<"Pedantic">>;
@@ -47,7 +38,7 @@ Index: clang/include/clang/Options/Options.td
  def pipe : Flag<["-", "--"], "pipe">,
    HelpText<"Use pipes between commands, when possible">;
  def prebind__all__twolevel__modules : Flag<["-"], "prebind_all_twolevel_modules">;
-@@ -7007,6 +7027,8 @@ def mshstk : Flag<["-"], "mshstk">, Group<m_x86_Featur
+@@ -7007,6 +7025,8 @@ def mshstk : Flag<["-"], "mshstk">, Group<m_x86_Featur
  def mno_shstk : Flag<["-"], "mno-shstk">, Group<m_x86_Features_Group>;
  def mretpoline_external_thunk : Flag<["-"], "mretpoline-external-thunk">, Group<m_x86_Features_Group>;
  def mno_retpoline_external_thunk : Flag<["-"], "mno-retpoline-external-thunk">, Group<m_x86_Features_Group>;
blob - 7a9114adfcdeacf412035d04c2a1ca587a9a6e69
blob + 75ca5ab5bb5b5db8becaf85972e54a4857c549f7
--- devel/llvm/22/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp
+++ devel/llvm/22/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp
@@ -1,19 +1,7 @@
 Index: clang/lib/Driver/ToolChains/Clang.cpp
 --- clang/lib/Driver/ToolChains/Clang.cpp.orig
 +++ clang/lib/Driver/ToolChains/Clang.cpp
-@@ -3044,6 +3044,11 @@ static void RenderFloatingPointOptions(const ToolChain
-               << LastFpContractOverrideOption
-               << Args.MakeArgString("-ffp-contract=" + Val);
-         }
-+        if (Val.starts_with("-mfix-loongson2f-btb")) {
-+          CmdArgs.push_back("-mllvm");
-+          CmdArgs.push_back("-fix-loongson2f-btb");
-+          continue;
-+        }
- 
-         FPContract = Val;
-         LastSeenFfpContractOption = Val;
-@@ -5807,9 +5812,12 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -5807,9 +5807,12 @@ void Clang::ConstructJob(Compilation &C, const JobActi
        OFastEnabled ? options::OPT_Ofast : options::OPT_fstrict_aliasing;
    // We turn strict aliasing off by default if we're Windows MSVC since MSVC
    // doesn't do any TBAA.
@@ -28,7 +16,7 @@ Index: clang/lib/Driver/ToolChains/Clang.cpp
      CmdArgs.push_back("-relaxed-aliasing");
    if (Args.hasFlag(options::OPT_fno_pointer_tbaa, options::OPT_fpointer_tbaa,
                     false))
-@@ -6918,7 +6926,58 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -6918,7 +6921,58 @@ void Clang::ConstructJob(Compilation &C, const JobActi
    Args.addOptInFlag(CmdArgs, options::OPT_mspeculative_load_hardening,
                      options::OPT_mno_speculative_load_hardening);
  
@@ -88,7 +76,7 @@ Index: clang/lib/Driver/ToolChains/Clang.cpp
    RenderSCPOptions(TC, Args, CmdArgs);
    RenderTrivialAutoVarInitOptions(D, TC, Args, CmdArgs);
  
-@@ -7535,6 +7594,18 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -7535,6 +7589,18 @@ void Clang::ConstructJob(Compilation &C, const JobActi
                                       options::OPT_fno_rewrite_imports, false);
    if (RewriteImports)
      CmdArgs.push_back("-frewrite-imports");
blob - d02d8d98de346b25ad07f6382e531825ca5979b2 (mode 644)
blob + /dev/null
--- devel/llvm/22/patches/patch-llvm_lib_Target_Mips_AsmParser_MipsAsmParser_cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-Index: llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
---- llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp.orig
-+++ llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
-@@ -69,6 +69,7 @@ class MCInstrInfo;
- 
- extern cl::opt<bool> EmitJalrReloc;
- extern cl::opt<bool> NoZeroDivCheck;
-+extern cl::opt<bool> FixLoongson2FBTB;
- 
- namespace {
- 
-@@ -236,6 +237,9 @@ class MipsAsmParser : public MCTargetAsmParser {
- 
-   bool emitPartialAddress(MipsTargetStreamer &TOut, SMLoc IDLoc, MCSymbol *Sym);
- 
-+  bool emitLoongson2FBTBFlush(MCInst &Inst, MipsTargetStreamer &TOut,
-+                              SMLoc IDLoc, const MCSubtargetInfo *STI);
-+
-   bool expandLoadImm(MCInst &Inst, bool Is32BitImm, SMLoc IDLoc,
-                      MCStreamer &Out, const MCSubtargetInfo *STI);
- 
-@@ -2060,6 +2064,20 @@ bool MipsAsmParser::processInstruction(MCInst &Inst, S
-     Inst = BInst;
-   }
- 
-+  if (FixLoongson2FBTB) {
-+    switch (Inst.getOpcode()) {
-+    case Mips::JALR:
-+    case Mips::JR:
-+    case Mips::JalOneReg:
-+    case Mips::JalTwoReg:
-+      if (emitLoongson2FBTBFlush(Inst, TOut, IDLoc, STI))
-+        return true;
-+      LLVM_FALLTHROUGH;
-+    default:
-+      break;
-+    }
-+  }
-+
-   // This expansion is not in a function called by tryExpandInstruction()
-   // because the pseudo-instruction doesn't have a distinct opcode.
-   if ((Opcode == Mips::JAL || Opcode == Mips::JAL_MM) && inPicMode()) {
-@@ -3356,6 +3374,39 @@ bool MipsAsmParser::emitPartialAddress(MipsTargetStrea
-       TOut.emitRRI(Mips::DSLL, ATReg, ATReg, 16, IDLoc, STI);
-     }
-   }
-+  return false;
-+}
-+
-+bool MipsAsmParser::emitLoongson2FBTBFlush(MCInst &Inst,
-+                                           MipsTargetStreamer &TOut,
-+                                           SMLoc IDLoc,
-+                                           const MCSubtargetInfo *STI) {
-+  unsigned SReg = Inst.getOperand(0).getReg();
-+  if (SReg == Mips::ZERO || SReg == Mips::ZERO_64 ||
-+      SReg == Mips::K0 || SReg == Mips::K0_64 ||
-+      SReg == Mips::K1 || SReg == Mips::K1_64)
-+    return false;
-+
-+  unsigned ATReg = getATReg(IDLoc);
-+  if (ATReg == 0)
-+    return true;
-+
-+  // Direct comparison of SReg and ATReg is not reliable because
-+  // the register classes may differ.
-+  unsigned ATRegIndex = AssemblerOptions.back()->getATRegIndex();
-+  if (ATRegIndex == 0)
-+    return true;
-+  if (SReg == getReg(Mips::GPR32RegClassID, ATRegIndex) ||
-+      SReg == getReg(Mips::GPR64RegClassID, ATRegIndex))
-+    return false;
-+
-+  warnIfNoMacro(IDLoc);
-+
-+  // li $at, COP_0_BTB_CLEAR | COP_0_RAS_DISABLE
-+  TOut.emitRRI(Mips::ORi, ATReg, Mips::ZERO, 3, IDLoc, STI);
-+  // dmtc0 $at, COP_0_DIAG
-+  TOut.emitRRI(Mips::DMTC0, Mips::COP022, ATReg, 0, IDLoc, STI);
-+
-   return false;
- }
- 
blob - a4373c933d582caffc21829f40bb2b5f94c6fbf4
blob + 969504464d309acb72778eca43a9b42748bb59dd
--- devel/llvm/22/patches/patch-llvm_lib_Target_Mips_CMakeLists_txt
+++ devel/llvm/22/patches/patch-llvm_lib_Target_Mips_CMakeLists_txt
@@ -1,15 +1,7 @@
 Index: llvm/lib/Target/Mips/CMakeLists.txt
 --- llvm/lib/Target/Mips/CMakeLists.txt.orig
 +++ llvm/lib/Target/Mips/CMakeLists.txt
-@@ -45,6 +45,7 @@ add_llvm_target(MipsCodeGen
-   MipsISelLowering.cpp
-   MipsFrameLowering.cpp
-   MipsLegalizerInfo.cpp
-+  MipsLoongson2FBTBFix.cpp
-   MipsBranchExpansion.cpp
-   MipsMCInstLower.cpp
-   MipsMachineFunction.cpp
-@@ -55,6 +56,7 @@ add_llvm_target(MipsCodeGen
+@@ -55,6 +55,7 @@ add_llvm_target(MipsCodeGen
    MipsPostLegalizerCombiner.cpp
    MipsRegisterBankInfo.cpp
    MipsRegisterInfo.cpp
blob - 858a1f5479a5250f3bd7b51106591e230fa6874c (mode 644)
blob + /dev/null
--- devel/llvm/22/patches/patch-llvm_lib_Target_Mips_MCTargetDesc_MipsABIInfo_cpp
+++ /dev/null
@@ -1,15 +0,0 @@
-Index: llvm/lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp
---- llvm/lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp.orig
-+++ llvm/lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp
-@@ -25,6 +25,11 @@ cl::opt<bool>
-                    cl::desc("MIPS: Don't trap on integer division by zero."),
-                    cl::init(false));
- 
-+cl::opt<bool>
-+FixLoongson2FBTB("fix-loongson2f-btb", cl::Hidden,
-+                 cl::desc("MIPS: Enable Loongson 2F BTB workaround"),
-+                 cl::init(false));
-+
- namespace {
- static const MCPhysReg O32IntRegs[4] = {Mips::A0, Mips::A1, Mips::A2, Mips::A3};
- 
blob - ea3b3c30fa82c65fa4e33ad4c95da9a0bf7864fd (mode 644)
blob + /dev/null
--- devel/llvm/22/patches/patch-llvm_lib_Target_Mips_MipsLoongson2FBTBFix_cpp
+++ /dev/null
@@ -1,95 +0,0 @@
-Index: llvm/lib/Target/Mips/MipsLoongson2FBTBFix.cpp
---- llvm/lib/Target/Mips/MipsLoongson2FBTBFix.cpp.orig
-+++ llvm/lib/Target/Mips/MipsLoongson2FBTBFix.cpp
-@@ -0,0 +1,91 @@
-+//===- MipsLoongson2FBTBFix.cpp -------------------------------------------===//
-+//
-+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-+// See https://llvm.org/LICENSE.txt for license information.
-+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-+//
-+//===----------------------------------------------------------------------===//
-+
-+#include "Mips.h"
-+#include "MipsTargetMachine.h"
-+#include "llvm/CodeGen/MachineFunctionPass.h"
-+#include "llvm/CodeGen/Passes.h"
-+
-+using namespace llvm;
-+
-+namespace {
-+
-+class MipsLoongson2FBTBFix : public MachineFunctionPass {
-+public:
-+  static char ID;
-+
-+  MipsLoongson2FBTBFix() : MachineFunctionPass(ID) {
-+    initializeMipsLoongson2FBTBFixPass(*PassRegistry::getPassRegistry());
-+  }
-+
-+  bool runOnMachineFunction(MachineFunction &MF) override;
-+
-+  StringRef getPassName() const override {
-+    return "Loongson 2F BTB erratum workaround pass";
-+  }
-+
-+private:
-+  bool runOnBasicBlock(MachineFunction &MF, MachineBasicBlock &MBB);
-+};
-+
-+} // end of anonymous namespace
-+
-+char MipsLoongson2FBTBFix::ID = 0;
-+
-+INITIALIZE_PASS(MipsLoongson2FBTBFix, "loongson2f-btb-fix-pass",
-+                "Mips Loongson 2F BTB erratum workaround", false, false)
-+
-+FunctionPass *llvm::createMipsLoongson2FBTBFix() {
-+  return new MipsLoongson2FBTBFix();
-+}
-+
-+bool MipsLoongson2FBTBFix::runOnMachineFunction(MachineFunction &MF) {
-+  bool Changed = false;
-+
-+  for (auto &MBB : MF) {
-+    Changed |= runOnBasicBlock(MF, MBB);
-+  }
-+  return Changed;
-+}
-+
-+bool MipsLoongson2FBTBFix::runOnBasicBlock(
-+    MachineFunction &MF, MachineBasicBlock &MBB) {
-+  MachineRegisterInfo &MRI = MF.getRegInfo();
-+  const TargetInstrInfo *TII = MF.getSubtarget().getInstrInfo();
-+  bool Changed = false;
-+
-+  for (auto &MI : MBB) {
-+    if (!MI.isCall() && !MI.isIndirectBranch() && !MI.isReturn())
-+      continue;
-+
-+    // Skip calls that are not through a register.
-+    if (MI.isCall()) {
-+      if (MI.getNumOperands() == 0)
-+        continue;
-+      const MachineOperand &MO = MI.getOperand(0);
-+      if (!MO.isReg())
-+        continue;
-+    }
-+
-+    Changed = true;
-+
-+    DebugLoc MBBDL = MI.getDebugLoc();
-+    Register TempReg = MRI.createVirtualRegister(&Mips::GPR64RegClass);
-+
-+    // li $TempReg, COP_0_BTB_CLEAR | COP_0_RAS_DISABLE
-+    BuildMI(MBB, MI, MBBDL, TII->get(Mips::ORi), TempReg)
-+        .addReg(Mips::ZERO)
-+        .addImm(3);
-+    // dmtc0 $TempReg, COP_0_DIAG
-+    BuildMI(MBB, MI, MBBDL, TII->get(Mips::DMTC0))
-+        .addReg(Mips::COP022)
-+        .addReg(TempReg)
-+        .addImm(0);
-+  }
-+  return Changed;
-+}
blob - 6e1b66034f00b70fb0d5ae86574f5a18de70eac1 (mode 644)
blob + /dev/null
--- devel/llvm/22/patches/patch-llvm_lib_Target_Mips_MipsTargetMachine_cpp
+++ /dev/null
@@ -1,21 +0,0 @@
-Index: llvm/lib/Target/Mips/MipsTargetMachine.cpp
---- llvm/lib/Target/Mips/MipsTargetMachine.cpp.orig
-+++ llvm/lib/Target/Mips/MipsTargetMachine.cpp
-@@ -48,6 +48,7 @@ using namespace llvm;
- 
- #define DEBUG_TYPE "mips"
- 
-+extern cl::opt<bool> FixLoongson2FBTB;
- static cl::opt<bool>
-     EnableMulMulFix("mfix4300", cl::init(false),
-                     cl::desc("Enable the VR4300 mulmul bug fix."), cl::Hidden);
-@@ -253,6 +254,9 @@ bool MipsPassConfig::addInstSelector() {
- 
- void MipsPassConfig::addPreRegAlloc() {
-   addPass(createMipsOptimizePICCallPass());
-+
-+  if (FixLoongson2FBTB)
-+    addPass(createMipsLoongson2FBTBFix());
- }
- 
- TargetTransformInfo
blob - 9e8f5f8a382cd2765218b53fc902ff8072b2daf6 (mode 644)
blob + /dev/null
--- devel/llvm/22/patches/patch-llvm_lib_Target_Mips_Mips_h
+++ /dev/null
@@ -1,19 +0,0 @@
-Index: llvm/lib/Target/Mips/Mips.h
---- llvm/lib/Target/Mips/Mips.h.orig
-+++ llvm/lib/Target/Mips/Mips.h
-@@ -41,6 +41,7 @@ class PassRegistry;
- ModulePass *createMipsOs16Pass();
- ModulePass *createMips16HardFloatPass();
- 
-+FunctionPass *createMipsLoongson2FBTBFix();
- FunctionPass *createMipsModuleISelDagPass();
- FunctionPass *createMipsOptimizePICCallPass();
- FunctionPass *createMipsDelaySlotFillerPass();
-@@ -56,6 +57,7 @@ InstructionSelector *
- createMipsInstructionSelector(const MipsTargetMachine &, const MipsSubtarget &,
-                               const MipsRegisterBankInfo &);
- 
-+void initializeMipsLoongson2FBTBFixPass(PassRegistry &);
- void initializeMicroMipsSizeReducePass(PassRegistry &);
- void initializeMipsAsmPrinterPass(PassRegistry &);
- void initializeMipsBranchExpansionPass(PassRegistry &);

-- 
Christian "naddy" Weisgerber                          [email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.