[clang] [Clang][MIPS] Create correct linker arguments for Windows toolchains (PR #121041)

2025-01-02 Thread Hervé Poussineau via cfe-commits

hpoussin wrote:

Ping

https://github.com/llvm/llvm-project/pull/121041
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][MIPS] Send correct architecture for MinGW toolchains (PR #121042)

2025-01-02 Thread Hervé Poussineau via cfe-commits

hpoussin wrote:

Ping

https://github.com/llvm/llvm-project/pull/121042
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][MIPS] Create specific targets for MIPS PE/COFF (PR #121040)

2024-12-24 Thread Hervé Poussineau via cfe-commits

https://github.com/hpoussin created 
https://github.com/llvm/llvm-project/pull/121040

Implement GNU and MSVC variants.
When using them, _WIN32 and _M_MRX000/_MIPS_ macros are correctly defined.

From cc5d9af37b0d78f4caeb05ce4f7203a8bcde644b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= 
Date: Sun, 22 Oct 2023 17:01:02 +0200
Subject: [PATCH] [Clang][MIPS] Create specific targets for MIPS PE/COFF

Implement GNU and MSVC variants.
When using them, _WIN32 and _M_MRX000/_MIPS_ macros are correctly defined.
---
 clang/lib/Basic/Targets.cpp   |  8 +++
 clang/lib/Basic/Targets/Mips.cpp  | 59 +++
 clang/lib/Basic/Targets/Mips.h| 37 
 .../test/Preprocessor/predefined-win-macros.c | 16 +
 4 files changed, 120 insertions(+)

diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp
index 706a391023b3a3..d0815ad33bc759 100644
--- a/clang/lib/Basic/Targets.cpp
+++ b/clang/lib/Basic/Targets.cpp
@@ -297,6 +297,14 @@ std::unique_ptr AllocateTarget(const 
llvm::Triple &Triple,
 case llvm::Triple::NaCl:
   return std::make_unique>(Triple,
 Opts);
+case llvm::Triple::Win32:
+  switch (Triple.getEnvironment()) {
+  case llvm::Triple::GNU:
+return std::make_unique(Triple, Opts);
+  case llvm::Triple::MSVC:
+  default: // Assume MSVC for unknown environments
+return std::make_unique(Triple, Opts);
+  }
 default:
   return std::make_unique(Triple, Opts);
 }
diff --git a/clang/lib/Basic/Targets/Mips.cpp b/clang/lib/Basic/Targets/Mips.cpp
index 174bc9d2ab9967..d56995e3ccc48e 100644
--- a/clang/lib/Basic/Targets/Mips.cpp
+++ b/clang/lib/Basic/Targets/Mips.cpp
@@ -304,3 +304,62 @@ bool MipsTargetInfo::validateTarget(DiagnosticsEngine 
&Diags) const {
 
   return true;
 }
+
+WindowsMipsTargetInfo::WindowsMipsTargetInfo(const llvm::Triple &Triple,
+ const TargetOptions &Opts)
+: WindowsTargetInfo(Triple, Opts), Triple(Triple) {}
+
+void WindowsMipsTargetInfo::getVisualStudioDefines(
+const LangOptions &Opts, MacroBuilder &Builder) const {
+  Builder.defineMacro("_M_MRX000", "4000");
+}
+
+TargetInfo::BuiltinVaListKind
+WindowsMipsTargetInfo::getBuiltinVaListKind() const {
+  return TargetInfo::CharPtrBuiltinVaList;
+}
+
+TargetInfo::CallingConvCheckResult
+WindowsMipsTargetInfo::checkCallingConvention(CallingConv CC) const {
+  switch (CC) {
+  case CC_X86StdCall:
+  case CC_X86ThisCall:
+  case CC_X86FastCall:
+  case CC_X86VectorCall:
+return CCCR_Ignore;
+  case CC_C:
+  case CC_OpenCLKernel:
+  case CC_PreserveMost:
+  case CC_PreserveAll:
+  case CC_Swift:
+  case CC_SwiftAsync:
+return CCCR_OK;
+  default:
+return CCCR_Warning;
+  }
+}
+
+// Windows MIPS, MS (C++) ABI
+MicrosoftMipsTargetInfo::MicrosoftMipsTargetInfo(const llvm::Triple &Triple,
+ const TargetOptions &Opts)
+: WindowsMipsTargetInfo(Triple, Opts) {
+  TheCXXABI.set(TargetCXXABI::Microsoft);
+}
+
+void MicrosoftMipsTargetInfo::getTargetDefines(const LangOptions &Opts,
+   MacroBuilder &Builder) const {
+  WindowsMipsTargetInfo::getTargetDefines(Opts, Builder);
+  WindowsMipsTargetInfo::getVisualStudioDefines(Opts, Builder);
+}
+
+MinGWMipsTargetInfo::MinGWMipsTargetInfo(const llvm::Triple &Triple,
+ const TargetOptions &Opts)
+: WindowsMipsTargetInfo(Triple, Opts) {
+  TheCXXABI.set(TargetCXXABI::GenericMIPS);
+}
+
+void MinGWMipsTargetInfo::getTargetDefines(const LangOptions &Opts,
+   MacroBuilder &Builder) const {
+  WindowsMipsTargetInfo::getTargetDefines(Opts, Builder);
+  Builder.defineMacro("_MIPS_");
+}
diff --git a/clang/lib/Basic/Targets/Mips.h b/clang/lib/Basic/Targets/Mips.h
index 8acaf56523b218..7ddcd57053cb2b 100644
--- a/clang/lib/Basic/Targets/Mips.h
+++ b/clang/lib/Basic/Targets/Mips.h
@@ -13,6 +13,7 @@
 #ifndef LLVM_CLANG_LIB_BASIC_TARGETS_MIPS_H
 #define LLVM_CLANG_LIB_BASIC_TARGETS_MIPS_H
 
+#include "OSTargets.h"
 #include "clang/Basic/TargetInfo.h"
 #include "clang/Basic/TargetOptions.h"
 #include "llvm/Support/Compiler.h"
@@ -450,6 +451,42 @@ class LLVM_LIBRARY_VISIBILITY MipsTargetInfo : public 
TargetInfo {
 return std::make_pair(32, 32);
   }
 };
+
+class LLVM_LIBRARY_VISIBILITY WindowsMipsTargetInfo
+: public WindowsTargetInfo {
+  const llvm::Triple Triple;
+
+public:
+  WindowsMipsTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts);
+
+  void getVisualStudioDefines(const LangOptions &Opts,
+  MacroBuilder &Builder) const;
+
+  BuiltinVaListKind getBuiltinVaListKind() const override;
+
+  CallingConvCheckResult checkCallingConvention(CallingConv CC) const override;
+};
+
+// Windows MIPS, MS (C++) ABI
+class LLVM_L

[clang] [Clang][MIPS] Create correct linker arguments for Windows toolchains (PR #121041)

2024-12-24 Thread Hervé Poussineau via cfe-commits

https://github.com/hpoussin created 
https://github.com/llvm/llvm-project/pull/121041

None

From 63841bfbc4367d7ffca989d5cdecf74cdc32db2f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= 
Date: Fri, 10 Nov 2023 23:06:52 +0100
Subject: [PATCH] [Clang][MIPS] Create correct linker arguments for Windows
 toolchains

---
 clang/lib/CodeGen/CodeGenModule.cpp |  2 ++
 clang/lib/CodeGen/TargetInfo.h  |  3 +++
 clang/lib/CodeGen/Targets/Mips.cpp  | 23 +++
 clang/test/CodeGen/pragma-comment.c |  1 +
 4 files changed, 29 insertions(+)

diff --git a/clang/lib/CodeGen/CodeGenModule.cpp 
b/clang/lib/CodeGen/CodeGenModule.cpp
index c49f7631488285..2ec12eb8b7b04e 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -119,6 +119,8 @@ createTargetCodeGenInfo(CodeGenModule &CGM) {
   case llvm::Triple::mipsel:
 if (Triple.getOS() == llvm::Triple::NaCl)
   return createPNaClTargetCodeGenInfo(CGM);
+else if (Triple.getOS() == llvm::Triple::Win32)
+  return createWindowsMIPSTargetCodeGenInfo(CGM, /*IsOS32=*/true);
 return createMIPSTargetCodeGenInfo(CGM, /*IsOS32=*/true);
 
   case llvm::Triple::mips64:
diff --git a/clang/lib/CodeGen/TargetInfo.h b/clang/lib/CodeGen/TargetInfo.h
index ab3142bdea684e..4a66683a3b91fd 100644
--- a/clang/lib/CodeGen/TargetInfo.h
+++ b/clang/lib/CodeGen/TargetInfo.h
@@ -522,6 +522,9 @@ createM68kTargetCodeGenInfo(CodeGenModule &CGM);
 std::unique_ptr
 createMIPSTargetCodeGenInfo(CodeGenModule &CGM, bool IsOS32);
 
+std::unique_ptr
+createWindowsMIPSTargetCodeGenInfo(CodeGenModule &CGM, bool IsOS32);
+
 std::unique_ptr
 createMSP430TargetCodeGenInfo(CodeGenModule &CGM);
 
diff --git a/clang/lib/CodeGen/Targets/Mips.cpp 
b/clang/lib/CodeGen/Targets/Mips.cpp
index 06d9b6d4a57615..e7601564f67d1d 100644
--- a/clang/lib/CodeGen/Targets/Mips.cpp
+++ b/clang/lib/CodeGen/Targets/Mips.cpp
@@ -105,6 +105,24 @@ class MIPSTargetCodeGenInfo : public TargetCodeGenInfo {
 return SizeOfUnwindException;
   }
 };
+
+class WindowsMIPSTargetCodeGenInfo : public MIPSTargetCodeGenInfo {
+public:
+  WindowsMIPSTargetCodeGenInfo(CodeGenTypes &CGT, bool IsO32)
+: MIPSTargetCodeGenInfo(CGT, IsO32) {}
+
+  void getDependentLibraryOption(llvm::StringRef Lib,
+ llvm::SmallString<24> &Opt) const override {
+Opt = "/DEFAULTLIB:";
+Opt += qualifyWindowsLibrary(Lib);
+  }
+
+  void getDetectMismatchOption(llvm::StringRef Name,
+   llvm::StringRef Value,
+   llvm::SmallString<32> &Opt) const override {
+Opt = "/FAILIFMISMATCH:\"" + Name.str() + "=" + Value.str() + "\"";
+  }
+};
 }
 
 void MipsABIInfo::CoerceToIntArgs(
@@ -436,3 +454,8 @@ std::unique_ptr
 CodeGen::createMIPSTargetCodeGenInfo(CodeGenModule &CGM, bool IsOS32) {
   return std::make_unique(CGM.getTypes(), IsOS32);
 }
+
+std::unique_ptr
+CodeGen::createWindowsMIPSTargetCodeGenInfo(CodeGenModule &CGM, bool IsOS32) {
+  return std::make_unique(CGM.getTypes(), 
IsOS32);
+}
diff --git a/clang/test/CodeGen/pragma-comment.c 
b/clang/test/CodeGen/pragma-comment.c
index a4746f5c47bf6b..a966840f7c26fc 100644
--- a/clang/test/CodeGen/pragma-comment.c
+++ b/clang/test/CodeGen/pragma-comment.c
@@ -6,6 +6,7 @@
 // RUN: %clang_cc1 %s -triple x86_64-scei-ps4 -fms-extensions -emit-llvm -o - 
| FileCheck -check-prefix ELF %s --implicit-check-not llvm.linker.options
 // RUN: %clang_cc1 %s -triple x86_64-sie-ps5 -fms-extensions -emit-llvm -o - | 
FileCheck -check-prefix ELF %s --implicit-check-not llvm.linker.options
 // RUN: %clang_cc1 %s -triple aarch64-windows-msvc -fms-extensions -emit-llvm 
-o - | FileCheck %s
+// RUN: %clang_cc1 %s -triple mipsel-windows-msvc -fms-extensions -emit-llvm 
-o - | FileCheck %s
 
 #pragma comment(lib, "msvcrt.lib")
 #pragma comment(lib, "kernel32")

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][MIPS] Send correct architecture for MinGW toolchains (PR #121042)

2024-12-24 Thread Hervé Poussineau via cfe-commits

https://github.com/hpoussin created 
https://github.com/llvm/llvm-project/pull/121042

'mipspe' name was chosen by binutils, when the project was able to create 
executables for Windows CE/MIPS.

From 932c9cea721b45ffeee2e3f77be903241beab33a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= 
Date: Fri, 10 Nov 2023 23:09:05 +0100
Subject: [PATCH] [Clang][MIPS] Send correct architecture for MinGW toolchains

'mipspe' name was chosen by binutils, when the project was able to create
executables for Windows CE/MIPS.
---
 clang/lib/Driver/ToolChains/MinGW.cpp | 3 +++
 clang/test/Driver/mingw.cpp   | 4 
 2 files changed, 7 insertions(+)

diff --git a/clang/lib/Driver/ToolChains/MinGW.cpp 
b/clang/lib/Driver/ToolChains/MinGW.cpp
index 963de81027ca9f..9f0c6160a309ec 100644
--- a/clang/lib/Driver/ToolChains/MinGW.cpp
+++ b/clang/lib/Driver/ToolChains/MinGW.cpp
@@ -138,6 +138,9 @@ void tools::MinGW::Linker::ConstructJob(Compilation &C, 
const JobAction &JA,
 else
   CmdArgs.push_back("arm64pe");
 break;
+  case llvm::Triple::mipsel:
+CmdArgs.push_back("mipspe");
+break;
   default:
 D.Diag(diag::err_target_unknown_triple) << TC.getEffectiveTriple().str();
   }
diff --git a/clang/test/Driver/mingw.cpp b/clang/test/Driver/mingw.cpp
index 9790c86a364f85..66da0c97f41668 100644
--- a/clang/test/Driver/mingw.cpp
+++ b/clang/test/Driver/mingw.cpp
@@ -85,6 +85,10 @@
 // RUN:   | FileCheck %s --check-prefix CHECK_MINGW_EC_LINK
 // CHECK_MINGW_EC_LINK: "-m" "arm64ecpe"
 
+// RUN: %clang --target=mipsel-windows-gnu -### -o /dev/null %s 2>&1 \
+// RUN:   | FileCheck %s --check-prefix CHECK_MINGW_MIPSPE
+// CHECK_MINGW_MIPSPE: "-m" "mipspe"
+
 // RUN: %clang --target=i686-windows-gnu -fms-hotpatch -### -- %s 2>&1 \
 // RUN:| FileCheck %s --check-prefix=FUNCTIONPADMIN
 // FUNCTIONPADMIN: "--functionpadmin"

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][MIPS] Create correct linker arguments for Windows toolchains (PR #121041)

2024-12-24 Thread Hervé Poussineau via cfe-commits

https://github.com/hpoussin updated 
https://github.com/llvm/llvm-project/pull/121041

From 946baa36101b99bfd512a0b7dbca757a93f68891 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= 
Date: Fri, 10 Nov 2023 23:06:52 +0100
Subject: [PATCH] [Clang][MIPS] Create correct linker arguments for Windows
 toolchains

---
 clang/lib/CodeGen/CodeGenModule.cpp |  2 ++
 clang/lib/CodeGen/TargetInfo.h  |  3 +++
 clang/lib/CodeGen/Targets/Mips.cpp  | 22 ++
 clang/test/CodeGen/pragma-comment.c |  1 +
 4 files changed, 28 insertions(+)

diff --git a/clang/lib/CodeGen/CodeGenModule.cpp 
b/clang/lib/CodeGen/CodeGenModule.cpp
index c49f7631488285..2ec12eb8b7b04e 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -119,6 +119,8 @@ createTargetCodeGenInfo(CodeGenModule &CGM) {
   case llvm::Triple::mipsel:
 if (Triple.getOS() == llvm::Triple::NaCl)
   return createPNaClTargetCodeGenInfo(CGM);
+else if (Triple.getOS() == llvm::Triple::Win32)
+  return createWindowsMIPSTargetCodeGenInfo(CGM, /*IsOS32=*/true);
 return createMIPSTargetCodeGenInfo(CGM, /*IsOS32=*/true);
 
   case llvm::Triple::mips64:
diff --git a/clang/lib/CodeGen/TargetInfo.h b/clang/lib/CodeGen/TargetInfo.h
index ab3142bdea684e..4a66683a3b91fd 100644
--- a/clang/lib/CodeGen/TargetInfo.h
+++ b/clang/lib/CodeGen/TargetInfo.h
@@ -522,6 +522,9 @@ createM68kTargetCodeGenInfo(CodeGenModule &CGM);
 std::unique_ptr
 createMIPSTargetCodeGenInfo(CodeGenModule &CGM, bool IsOS32);
 
+std::unique_ptr
+createWindowsMIPSTargetCodeGenInfo(CodeGenModule &CGM, bool IsOS32);
+
 std::unique_ptr
 createMSP430TargetCodeGenInfo(CodeGenModule &CGM);
 
diff --git a/clang/lib/CodeGen/Targets/Mips.cpp 
b/clang/lib/CodeGen/Targets/Mips.cpp
index 06d9b6d4a57615..771a85c84b3571 100644
--- a/clang/lib/CodeGen/Targets/Mips.cpp
+++ b/clang/lib/CodeGen/Targets/Mips.cpp
@@ -105,6 +105,23 @@ class MIPSTargetCodeGenInfo : public TargetCodeGenInfo {
 return SizeOfUnwindException;
   }
 };
+
+class WindowsMIPSTargetCodeGenInfo : public MIPSTargetCodeGenInfo {
+public:
+  WindowsMIPSTargetCodeGenInfo(CodeGenTypes &CGT, bool IsO32)
+  : MIPSTargetCodeGenInfo(CGT, IsO32) {}
+
+  void getDependentLibraryOption(llvm::StringRef Lib,
+ llvm::SmallString<24> &Opt) const override {
+Opt = "/DEFAULTLIB:";
+Opt += qualifyWindowsLibrary(Lib);
+  }
+
+  void getDetectMismatchOption(llvm::StringRef Name, llvm::StringRef Value,
+   llvm::SmallString<32> &Opt) const override {
+Opt = "/FAILIFMISMATCH:\"" + Name.str() + "=" + Value.str() + "\"";
+  }
+};
 }
 
 void MipsABIInfo::CoerceToIntArgs(
@@ -436,3 +453,8 @@ std::unique_ptr
 CodeGen::createMIPSTargetCodeGenInfo(CodeGenModule &CGM, bool IsOS32) {
   return std::make_unique(CGM.getTypes(), IsOS32);
 }
+
+std::unique_ptr
+CodeGen::createWindowsMIPSTargetCodeGenInfo(CodeGenModule &CGM, bool IsOS32) {
+  return std::make_unique(CGM.getTypes(), 
IsOS32);
+}
diff --git a/clang/test/CodeGen/pragma-comment.c 
b/clang/test/CodeGen/pragma-comment.c
index a4746f5c47bf6b..a966840f7c26fc 100644
--- a/clang/test/CodeGen/pragma-comment.c
+++ b/clang/test/CodeGen/pragma-comment.c
@@ -6,6 +6,7 @@
 // RUN: %clang_cc1 %s -triple x86_64-scei-ps4 -fms-extensions -emit-llvm -o - 
| FileCheck -check-prefix ELF %s --implicit-check-not llvm.linker.options
 // RUN: %clang_cc1 %s -triple x86_64-sie-ps5 -fms-extensions -emit-llvm -o - | 
FileCheck -check-prefix ELF %s --implicit-check-not llvm.linker.options
 // RUN: %clang_cc1 %s -triple aarch64-windows-msvc -fms-extensions -emit-llvm 
-o - | FileCheck %s
+// RUN: %clang_cc1 %s -triple mipsel-windows-msvc -fms-extensions -emit-llvm 
-o - | FileCheck %s
 
 #pragma comment(lib, "msvcrt.lib")
 #pragma comment(lib, "kernel32")

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][MIPS] Send correct architecture for MinGW toolchains (PR #121042)

2024-12-24 Thread Hervé Poussineau via cfe-commits


@@ -85,6 +85,10 @@
 // RUN:   | FileCheck %s --check-prefix CHECK_MINGW_EC_LINK
 // CHECK_MINGW_EC_LINK: "-m" "arm64ecpe"
 
+// RUN: %clang --target=mipsel-windows-gnu -### -o /dev/null %s 2>&1 \
+// RUN:   | FileCheck %s --check-prefix CHECK_MINGW_MIPSPE
+// CHECK_MINGW_MIPSPE: "-m" "mipspe"

hpoussin wrote:

No, binutils removed support for "mipspe" target in 2.31 (2018)

https://github.com/llvm/llvm-project/pull/121042
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [lld] [llvm] [clang][MIPS] Add support for mipsel-windows-* targets (PR #107744)

2024-12-28 Thread Hervé Poussineau via cfe-commits

hpoussin wrote:

Current list of PRs to have a usable toolchain (except linker):
- #120876 [MC][Mips] Generate required IMAGE_REL_MIPS_PAIR relocation
- #120877 [MC][CodeGen][Mips] Add CodeView mapping
- #120912 [Mips] Handle declspec(dllimport) on mipsel-windows-* triples
- #121041 [Clang][MIPS] Create correct linker arguments for Windows toolchains
- #121042 [Clang][MIPS] Send correct architecture for MinGW toolchains
- #121254 [llvm-lib] Handle MIPS architecture

https://github.com/llvm/llvm-project/pull/107744
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang][MIPS] Create correct linker arguments for Windows toolchains (PR #121041)

2025-01-12 Thread Hervé Poussineau via cfe-commits

hpoussin wrote:

Ping

https://github.com/llvm/llvm-project/pull/121041
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Mips] Implement MipsInstrInfo::getNop() operation (PR #135524)

2025-04-12 Thread Hervé Poussineau via cfe-commits

https://github.com/hpoussin created 
https://github.com/llvm/llvm-project/pull/135524

Previously, this was calling TargetInstrInfo::getNop(), which contains:
 llvm_unreachable("Not implemented");

Fixes #134913.

From 34f79c8ba4b8a906a68f4058f0b09d5e7f9e932a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= 
Date: Sun, 13 Apr 2025 07:47:35 +0200
Subject: [PATCH] [Mips] Implement getNop() operation

Previously, this was calling TargetInstrInfo::getNop(),
which contains:
 llvm_unreachable("Not implemented");

Fixes #134913.
---
 clang/test/CodeGen/Mips/unreachable.cpp | 13 +
 llvm/lib/Target/Mips/MipsInstrInfo.cpp  |  7 +++
 llvm/lib/Target/Mips/MipsInstrInfo.h|  2 ++
 3 files changed, 22 insertions(+)
 create mode 100644 clang/test/CodeGen/Mips/unreachable.cpp

diff --git a/clang/test/CodeGen/Mips/unreachable.cpp 
b/clang/test/CodeGen/Mips/unreachable.cpp
new file mode 100644
index 0..04fec8598088d
--- /dev/null
+++ b/clang/test/CodeGen/Mips/unreachable.cpp
@@ -0,0 +1,13 @@
+// REQUIRES: mips-registered-target
+// RUN: %clang_cc1 -triple mipsel-w64-windows-gnu -x c++ -mrelocation-model 
static -emit-obj %s -o - | llvm-objdump -a - | FileCheck %s
+// CHECK: file format coff-mips
+
+[[__noreturn__]] inline void g() {
+  __builtin_unreachable();
+}
+
+void f(int i)
+{
+  if (i == 0)
+g();
+}
diff --git a/llvm/lib/Target/Mips/MipsInstrInfo.cpp 
b/llvm/lib/Target/Mips/MipsInstrInfo.cpp
index b81bb1186de72..0abe228b7547a 100644
--- a/llvm/lib/Target/Mips/MipsInstrInfo.cpp
+++ b/llvm/lib/Target/Mips/MipsInstrInfo.cpp
@@ -87,6 +87,13 @@ MipsInstrInfo::GetMemOperand(MachineBasicBlock &MBB, int FI,
  MFI.getObjectAlign(FI));
 }
 
+MCInst MipsInstrInfo::getNop() const {
+  MCInst Nop;
+  // using Mips::NOP gives "fatal error: error in backend: Not supported 
instr: "
+  Nop.setOpcode(Mips::SSNOP);
+  return Nop;
+}
+
 
//===--===//
 // Branch Analysis
 
//===--===//
diff --git a/llvm/lib/Target/Mips/MipsInstrInfo.h 
b/llvm/lib/Target/Mips/MipsInstrInfo.h
index 06964c0161b4b..367f0ac5e8390 100644
--- a/llvm/lib/Target/Mips/MipsInstrInfo.h
+++ b/llvm/lib/Target/Mips/MipsInstrInfo.h
@@ -59,6 +59,8 @@ class MipsInstrInfo : public MipsGenInstrInfo {
 
   static const MipsInstrInfo *create(MipsSubtarget &STI);
 
+  MCInst getNop() const override;
+
   /// Branch Analysis
   bool analyzeBranch(MachineBasicBlock &MBB, MachineBasicBlock *&TBB,
  MachineBasicBlock *&FBB,

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Mips] Implement MipsInstrInfo::getNop() operation (PR #135524)

2025-04-12 Thread Hervé Poussineau via cfe-commits

https://github.com/hpoussin updated 
https://github.com/llvm/llvm-project/pull/135524

From 70a55685e63a60f6a8ee65e61eff2bd5f0488c5e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= 
Date: Sun, 13 Apr 2025 07:47:35 +0200
Subject: [PATCH] [Mips] Implement getNop() operation

Previously, this was calling TargetInstrInfo::getNop(),
which contains:
 llvm_unreachable("Not implemented");

Fixes #134913.
---
 clang/test/CodeGen/Mips/unreachable.cpp | 13 +
 llvm/lib/Target/Mips/MipsInstrInfo.cpp  |  8 
 llvm/lib/Target/Mips/MipsInstrInfo.h|  2 ++
 3 files changed, 23 insertions(+)
 create mode 100644 clang/test/CodeGen/Mips/unreachable.cpp

diff --git a/clang/test/CodeGen/Mips/unreachable.cpp 
b/clang/test/CodeGen/Mips/unreachable.cpp
new file mode 100644
index 0..04fec8598088d
--- /dev/null
+++ b/clang/test/CodeGen/Mips/unreachable.cpp
@@ -0,0 +1,13 @@
+// REQUIRES: mips-registered-target
+// RUN: %clang_cc1 -triple mipsel-w64-windows-gnu -x c++ -mrelocation-model 
static -emit-obj %s -o - | llvm-objdump -a - | FileCheck %s
+// CHECK: file format coff-mips
+
+[[__noreturn__]] inline void g() {
+  __builtin_unreachable();
+}
+
+void f(int i)
+{
+  if (i == 0)
+g();
+}
diff --git a/llvm/lib/Target/Mips/MipsInstrInfo.cpp 
b/llvm/lib/Target/Mips/MipsInstrInfo.cpp
index b81bb1186de72..7f7bb259000a5 100644
--- a/llvm/lib/Target/Mips/MipsInstrInfo.cpp
+++ b/llvm/lib/Target/Mips/MipsInstrInfo.cpp
@@ -87,6 +87,14 @@ MipsInstrInfo::GetMemOperand(MachineBasicBlock &MBB, int FI,
  MFI.getObjectAlign(FI));
 }
 
+MCInst MipsInstrInfo::getNop() const {
+  MCInst Nop;
+  // using Mips::NOP gives
+  // "fatal error: error in backend: Not supported instr: "
+  Nop.setOpcode(Mips::SSNOP);
+  return Nop;
+}
+
 
//===--===//
 // Branch Analysis
 
//===--===//
diff --git a/llvm/lib/Target/Mips/MipsInstrInfo.h 
b/llvm/lib/Target/Mips/MipsInstrInfo.h
index 06964c0161b4b..367f0ac5e8390 100644
--- a/llvm/lib/Target/Mips/MipsInstrInfo.h
+++ b/llvm/lib/Target/Mips/MipsInstrInfo.h
@@ -59,6 +59,8 @@ class MipsInstrInfo : public MipsGenInstrInfo {
 
   static const MipsInstrInfo *create(MipsSubtarget &STI);
 
+  MCInst getNop() const override;
+
   /// Branch Analysis
   bool analyzeBranch(MachineBasicBlock &MBB, MachineBasicBlock *&TBB,
  MachineBasicBlock *&FBB,

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [Mips] Implement MipsInstrInfo::getNop() operation (PR #135524)

2025-04-17 Thread Hervé Poussineau via cfe-commits


@@ -87,6 +87,14 @@ MipsInstrInfo::GetMemOperand(MachineBasicBlock &MBB, int FI,
  MFI.getObjectAlign(FI));
 }
 
+MCInst MipsInstrInfo::getNop() const {
+  MCInst Nop;
+  // using Mips::NOP gives
+  // "fatal error: error in backend: Not supported instr: "

hpoussin wrote:

This patch is already an improvement, because it replaces a compiler crash by 
the use of a valid instruction (although deprecated in recent architectures).
However, you're right that it will be better to address this error and use 
Mips::NOP. Unfortunately, I think I won't be able to do it myself.

https://github.com/llvm/llvm-project/pull/135524
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits