[clang] [llvm] UEFI backend for x86_64 (PR #109320)

2024-12-20 Thread via cfe-commits

Prabhuk wrote:

> Some of the clang changes seem kinda _odd_, maybe some of this work and 
> #120632 could be conjoined? The LLVM stuff itself looks great, it's mainly 
> the target stuff in clang seems odd to me.

I can drop the Clang changes in this PR once #120632 lands. This is a draft PR.

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


[clang] [llvm] UEFI backend for x86_64 (PR #109320)

2024-12-20 Thread Tristan Ross via cfe-commits

RossComputerGuy wrote:

Some of the clang changes seem kinda *odd*, maybe some of this work and #120632 
could be conjoined? The LLVM stuff itself looks great, it's mainly the target 
stuff in clang seems odd to me.

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


[clang] [llvm] UEFI backend for x86_64 (PR #109320)

2024-12-20 Thread via cfe-commits

Prabhuk wrote:

@RossComputerGuy FYI

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


[clang] [llvm] UEFI backend for x86_64 (PR #109320)

2024-12-13 Thread yu shan wei via cfe-commits

yushanwei wrote:

It's just a format conversion issue,not up to the level of  backend.

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


[clang] [llvm] UEFI backend for x86_64 (PR #109320)

2024-10-02 Thread via cfe-commits

https://github.com/Prabhuk updated 
https://github.com/llvm/llvm-project/pull/109320

>From 6fc7aceab6bc193616fe78e21b796efb4dbffb58 Mon Sep 17 00:00:00 2001
From: prabhukr 
Date: Tue, 3 Sep 2024 21:02:15 -0700
Subject: [PATCH 1/2] UEFI backend for x86_64

---
 clang/lib/Basic/Targets/OSTargets.h   | 11 --
 clang/lib/Basic/Targets/X86.h |  9 +++--
 .../X86/MCTargetDesc/X86MCTargetDesc.cpp  |  4 +-
 llvm/lib/Target/X86/X86CallingConv.td | 17 -
 llvm/lib/Target/X86/X86FrameLowering.cpp  | 20 ++
 llvm/lib/Target/X86/X86ISelLowering.cpp   | 37 ---
 llvm/lib/Target/X86/X86RegisterInfo.cpp   | 11 +++---
 llvm/lib/Target/X86/X86RegisterInfo.h |  6 ++-
 llvm/lib/Target/X86/X86Subtarget.h| 15 ++--
 llvm/lib/Target/X86/X86TargetMachine.cpp  |  2 +-
 llvm/test/CodeGen/X86/mangle-question-mark.ll |  1 +
 llvm/test/CodeGen/X86/sse-regcall.ll  |  1 +
 llvm/test/CodeGen/X86/win32-preemption.ll |  2 +
 13 files changed, 101 insertions(+), 35 deletions(-)

diff --git a/clang/lib/Basic/Targets/OSTargets.h 
b/clang/lib/Basic/Targets/OSTargets.h
index a83d6464e789d6..195b4f15136327 100644
--- a/clang/lib/Basic/Targets/OSTargets.h
+++ b/clang/lib/Basic/Targets/OSTargets.h
@@ -778,12 +778,18 @@ class LLVM_LIBRARY_VISIBILITY ZOSTargetInfo : public 
OSTargetInfo {
   }
 };
 
+void addWindowsDefines(const llvm::Triple &Triple, const LangOptions &Opts,
+   MacroBuilder &Builder);
+
 // UEFI target
 template 
 class LLVM_LIBRARY_VISIBILITY UEFITargetInfo : public OSTargetInfo {
 protected:
   void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
-MacroBuilder &Builder) const override {}
+MacroBuilder &Builder) const override {
+Builder.defineMacro("__UEFI__");  
+addWindowsDefines(Triple, Opts, Builder);
+  }
 
 public:
   UEFITargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
@@ -793,8 +799,7 @@ class LLVM_LIBRARY_VISIBILITY UEFITargetInfo : public 
OSTargetInfo {
   }
 };
 
-void addWindowsDefines(const llvm::Triple &Triple, const LangOptions &Opts,
-   MacroBuilder &Builder);
+
 
 // Windows target
 template 
diff --git a/clang/lib/Basic/Targets/X86.h b/clang/lib/Basic/Targets/X86.h
index a99ae62984c7d5..07c98d880ab778 100644
--- a/clang/lib/Basic/Targets/X86.h
+++ b/clang/lib/Basic/Targets/X86.h
@@ -826,10 +826,11 @@ class LLVM_LIBRARY_VISIBILITY UEFIX86_64TargetInfo
   "i64:64-i128:128-f80:128-n8:16:32:64-S128");
   }
 
-  void getTargetDefines(const LangOptions &Opts,
-MacroBuilder &Builder) const override {
-getOSDefines(Opts, X86TargetInfo::getTriple(), Builder);
-  }
+  // void getTargetDefines(const LangOptions &Opts,
+  //   MacroBuilder &Builder) const override {
+  //   getOSDefines(Opts, X86TargetInfo::getTriple(), Builder);
+  //   Builder.defineMacro("__x86_64__");
+  // }
 
   BuiltinVaListKind getBuiltinVaListKind() const override {
 return TargetInfo::CharPtrBuiltinVaList;
diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp 
b/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp
index fe3c42eeb6e8ec..c1baedda69c6b4 100644
--- a/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp
+++ b/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp
@@ -445,7 +445,7 @@ static MCAsmInfo *createX86MCAsmInfo(const MCRegisterInfo 
&MRI,
 // Force the use of an ELF container.
 MAI = new X86ELFMCAsmInfo(TheTriple);
   } else if (TheTriple.isWindowsMSVCEnvironment() ||
- TheTriple.isWindowsCoreCLREnvironment()) {
+ TheTriple.isWindowsCoreCLREnvironment() || TheTriple.isUEFI()) {
 if (Options.getAssemblyLanguage().equals_insensitive("masm"))
   MAI = new X86MCAsmInfoMicrosoftMASM(TheTriple);
 else
@@ -453,8 +453,6 @@ static MCAsmInfo *createX86MCAsmInfo(const MCRegisterInfo 
&MRI,
   } else if (TheTriple.isOSCygMing() ||
  TheTriple.isWindowsItaniumEnvironment()) {
 MAI = new X86MCAsmInfoGNUCOFF(TheTriple);
-  } else if (TheTriple.isUEFI()) {
-MAI = new X86MCAsmInfoGNUCOFF(TheTriple);
   } else {
 // The default is ELF.
 MAI = new X86ELFMCAsmInfo(TheTriple);
diff --git a/llvm/lib/Target/X86/X86CallingConv.td 
b/llvm/lib/Target/X86/X86CallingConv.td
index 307aeb2ea4c6fd..93d84577801cd6 100644
--- a/llvm/lib/Target/X86/X86CallingConv.td
+++ b/llvm/lib/Target/X86/X86CallingConv.td
@@ -488,13 +488,24 @@ def RetCC_X86_64 : CallingConv<[
 CCIfSubtarget<"isTargetWin64()", 
CCIfRegCallv4>>>,
 
   CCIfCC<"CallingConv::X86_RegCall",
-  CCIfSubtarget<"isTargetWin64()",
+CCIfSubtarget<"isTargetUEFI64()", 
CCIfRegCallv4>>>,
+
+  CCIfCC<"CallingConv::X86_RegCall",
+  CCIfSubtarget<"isTargetWin64()",
 CCDelegateTo>>,
+
+  CCIfCC<"CallingConv::X86_RegCall",
+ 

[clang] [llvm] UEFI backend for x86_64 (PR #109320)

2024-10-02 Thread via cfe-commits

github-actions[bot] wrote:




:warning: C/C++ code formatter, clang-format found issues in your code. 
:warning:



You can test this locally with the following command:


``bash
git-clang-format --diff d1335fb86466221b0499db5fc8f158f1f64d9542 
6fc7aceab6bc193616fe78e21b796efb4dbffb58 --extensions h,cpp -- 
clang/lib/Basic/Targets/OSTargets.h clang/lib/Basic/Targets/X86.h 
llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp 
llvm/lib/Target/X86/X86FrameLowering.cpp 
llvm/lib/Target/X86/X86ISelLowering.cpp llvm/lib/Target/X86/X86RegisterInfo.cpp 
llvm/lib/Target/X86/X86RegisterInfo.h llvm/lib/Target/X86/X86Subtarget.h 
llvm/lib/Target/X86/X86TargetMachine.cpp
``





View the diff from clang-format here.


``diff
diff --git a/clang/lib/Basic/Targets/OSTargets.h 
b/clang/lib/Basic/Targets/OSTargets.h
index 195b4f1513..8806e18e10 100644
--- a/clang/lib/Basic/Targets/OSTargets.h
+++ b/clang/lib/Basic/Targets/OSTargets.h
@@ -787,7 +787,7 @@ class LLVM_LIBRARY_VISIBILITY UEFITargetInfo : public 
OSTargetInfo {
 protected:
   void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
 MacroBuilder &Builder) const override {
-Builder.defineMacro("__UEFI__");  
+Builder.defineMacro("__UEFI__");
 addWindowsDefines(Triple, Opts, Builder);
   }
 
@@ -799,8 +799,6 @@ public:
   }
 };
 
-
-
 // Windows target
 template 
 class LLVM_LIBRARY_VISIBILITY WindowsTargetInfo : public OSTargetInfo {

``




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


[clang] [llvm] UEFI backend for x86_64 (PR #109320)

2024-10-02 Thread via cfe-commits

https://github.com/Prabhuk updated 
https://github.com/llvm/llvm-project/pull/109320

>From 6fc7aceab6bc193616fe78e21b796efb4dbffb58 Mon Sep 17 00:00:00 2001
From: prabhukr 
Date: Tue, 3 Sep 2024 21:02:15 -0700
Subject: [PATCH] UEFI backend for x86_64

---
 clang/lib/Basic/Targets/OSTargets.h   | 11 --
 clang/lib/Basic/Targets/X86.h |  9 +++--
 .../X86/MCTargetDesc/X86MCTargetDesc.cpp  |  4 +-
 llvm/lib/Target/X86/X86CallingConv.td | 17 -
 llvm/lib/Target/X86/X86FrameLowering.cpp  | 20 ++
 llvm/lib/Target/X86/X86ISelLowering.cpp   | 37 ---
 llvm/lib/Target/X86/X86RegisterInfo.cpp   | 11 +++---
 llvm/lib/Target/X86/X86RegisterInfo.h |  6 ++-
 llvm/lib/Target/X86/X86Subtarget.h| 15 ++--
 llvm/lib/Target/X86/X86TargetMachine.cpp  |  2 +-
 llvm/test/CodeGen/X86/mangle-question-mark.ll |  1 +
 llvm/test/CodeGen/X86/sse-regcall.ll  |  1 +
 llvm/test/CodeGen/X86/win32-preemption.ll |  2 +
 13 files changed, 101 insertions(+), 35 deletions(-)

diff --git a/clang/lib/Basic/Targets/OSTargets.h 
b/clang/lib/Basic/Targets/OSTargets.h
index a83d6464e789d6..195b4f15136327 100644
--- a/clang/lib/Basic/Targets/OSTargets.h
+++ b/clang/lib/Basic/Targets/OSTargets.h
@@ -778,12 +778,18 @@ class LLVM_LIBRARY_VISIBILITY ZOSTargetInfo : public 
OSTargetInfo {
   }
 };
 
+void addWindowsDefines(const llvm::Triple &Triple, const LangOptions &Opts,
+   MacroBuilder &Builder);
+
 // UEFI target
 template 
 class LLVM_LIBRARY_VISIBILITY UEFITargetInfo : public OSTargetInfo {
 protected:
   void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
-MacroBuilder &Builder) const override {}
+MacroBuilder &Builder) const override {
+Builder.defineMacro("__UEFI__");  
+addWindowsDefines(Triple, Opts, Builder);
+  }
 
 public:
   UEFITargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
@@ -793,8 +799,7 @@ class LLVM_LIBRARY_VISIBILITY UEFITargetInfo : public 
OSTargetInfo {
   }
 };
 
-void addWindowsDefines(const llvm::Triple &Triple, const LangOptions &Opts,
-   MacroBuilder &Builder);
+
 
 // Windows target
 template 
diff --git a/clang/lib/Basic/Targets/X86.h b/clang/lib/Basic/Targets/X86.h
index a99ae62984c7d5..07c98d880ab778 100644
--- a/clang/lib/Basic/Targets/X86.h
+++ b/clang/lib/Basic/Targets/X86.h
@@ -826,10 +826,11 @@ class LLVM_LIBRARY_VISIBILITY UEFIX86_64TargetInfo
   "i64:64-i128:128-f80:128-n8:16:32:64-S128");
   }
 
-  void getTargetDefines(const LangOptions &Opts,
-MacroBuilder &Builder) const override {
-getOSDefines(Opts, X86TargetInfo::getTriple(), Builder);
-  }
+  // void getTargetDefines(const LangOptions &Opts,
+  //   MacroBuilder &Builder) const override {
+  //   getOSDefines(Opts, X86TargetInfo::getTriple(), Builder);
+  //   Builder.defineMacro("__x86_64__");
+  // }
 
   BuiltinVaListKind getBuiltinVaListKind() const override {
 return TargetInfo::CharPtrBuiltinVaList;
diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp 
b/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp
index fe3c42eeb6e8ec..c1baedda69c6b4 100644
--- a/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp
+++ b/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp
@@ -445,7 +445,7 @@ static MCAsmInfo *createX86MCAsmInfo(const MCRegisterInfo 
&MRI,
 // Force the use of an ELF container.
 MAI = new X86ELFMCAsmInfo(TheTriple);
   } else if (TheTriple.isWindowsMSVCEnvironment() ||
- TheTriple.isWindowsCoreCLREnvironment()) {
+ TheTriple.isWindowsCoreCLREnvironment() || TheTriple.isUEFI()) {
 if (Options.getAssemblyLanguage().equals_insensitive("masm"))
   MAI = new X86MCAsmInfoMicrosoftMASM(TheTriple);
 else
@@ -453,8 +453,6 @@ static MCAsmInfo *createX86MCAsmInfo(const MCRegisterInfo 
&MRI,
   } else if (TheTriple.isOSCygMing() ||
  TheTriple.isWindowsItaniumEnvironment()) {
 MAI = new X86MCAsmInfoGNUCOFF(TheTriple);
-  } else if (TheTriple.isUEFI()) {
-MAI = new X86MCAsmInfoGNUCOFF(TheTriple);
   } else {
 // The default is ELF.
 MAI = new X86ELFMCAsmInfo(TheTriple);
diff --git a/llvm/lib/Target/X86/X86CallingConv.td 
b/llvm/lib/Target/X86/X86CallingConv.td
index 307aeb2ea4c6fd..93d84577801cd6 100644
--- a/llvm/lib/Target/X86/X86CallingConv.td
+++ b/llvm/lib/Target/X86/X86CallingConv.td
@@ -488,13 +488,24 @@ def RetCC_X86_64 : CallingConv<[
 CCIfSubtarget<"isTargetWin64()", 
CCIfRegCallv4>>>,
 
   CCIfCC<"CallingConv::X86_RegCall",
-  CCIfSubtarget<"isTargetWin64()",
+CCIfSubtarget<"isTargetUEFI64()", 
CCIfRegCallv4>>>,
+
+  CCIfCC<"CallingConv::X86_RegCall",
+  CCIfSubtarget<"isTargetWin64()",
 CCDelegateTo>>,
+
+  CCIfCC<"CallingConv::X86_RegCall",
+ 

[clang] [llvm] UEFI backend for x86_64 (PR #109320)

2024-09-19 Thread via cfe-commits

https://github.com/Prabhuk created 
https://github.com/llvm/llvm-project/pull/109320

Continuing the effort to support UEFI target as a first class citizen.
The first backend I am trying to support here is x86_64. 

Original RFC: 
https://discourse.llvm.org/t/rfc-uefi-driver-support-uefi-target/73261

>From 8dec0e65bdf08bd9b1b1c63d601ae0d93584cb2d Mon Sep 17 00:00:00 2001
From: prabhukr 
Date: Tue, 3 Sep 2024 21:02:15 -0700
Subject: [PATCH] UEFI backend for x86_64

---
 clang/lib/Basic/Targets/X86.h |  9 +++--
 .../X86/MCTargetDesc/X86MCTargetDesc.cpp  |  4 +-
 llvm/lib/Target/X86/X86CallingConv.td | 17 -
 llvm/lib/Target/X86/X86FrameLowering.cpp  | 20 ++
 llvm/lib/Target/X86/X86ISelLowering.cpp   | 37 ---
 llvm/lib/Target/X86/X86RegisterInfo.cpp   | 11 +++---
 llvm/lib/Target/X86/X86RegisterInfo.h |  6 ++-
 llvm/lib/Target/X86/X86Subtarget.h| 15 ++--
 llvm/lib/Target/X86/X86TargetMachine.cpp  |  2 +-
 llvm/test/CodeGen/X86/mangle-question-mark.ll |  1 +
 llvm/test/CodeGen/X86/sse-regcall.ll  |  1 +
 llvm/test/CodeGen/X86/win32-preemption.ll |  2 +
 12 files changed, 93 insertions(+), 32 deletions(-)

diff --git a/clang/lib/Basic/Targets/X86.h b/clang/lib/Basic/Targets/X86.h
index a99ae62984c7d5..07c98d880ab778 100644
--- a/clang/lib/Basic/Targets/X86.h
+++ b/clang/lib/Basic/Targets/X86.h
@@ -826,10 +826,11 @@ class LLVM_LIBRARY_VISIBILITY UEFIX86_64TargetInfo
   "i64:64-i128:128-f80:128-n8:16:32:64-S128");
   }
 
-  void getTargetDefines(const LangOptions &Opts,
-MacroBuilder &Builder) const override {
-getOSDefines(Opts, X86TargetInfo::getTriple(), Builder);
-  }
+  // void getTargetDefines(const LangOptions &Opts,
+  //   MacroBuilder &Builder) const override {
+  //   getOSDefines(Opts, X86TargetInfo::getTriple(), Builder);
+  //   Builder.defineMacro("__x86_64__");
+  // }
 
   BuiltinVaListKind getBuiltinVaListKind() const override {
 return TargetInfo::CharPtrBuiltinVaList;
diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp 
b/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp
index fe3c42eeb6e8ec..c1baedda69c6b4 100644
--- a/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp
+++ b/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp
@@ -445,7 +445,7 @@ static MCAsmInfo *createX86MCAsmInfo(const MCRegisterInfo 
&MRI,
 // Force the use of an ELF container.
 MAI = new X86ELFMCAsmInfo(TheTriple);
   } else if (TheTriple.isWindowsMSVCEnvironment() ||
- TheTriple.isWindowsCoreCLREnvironment()) {
+ TheTriple.isWindowsCoreCLREnvironment() || TheTriple.isUEFI()) {
 if (Options.getAssemblyLanguage().equals_insensitive("masm"))
   MAI = new X86MCAsmInfoMicrosoftMASM(TheTriple);
 else
@@ -453,8 +453,6 @@ static MCAsmInfo *createX86MCAsmInfo(const MCRegisterInfo 
&MRI,
   } else if (TheTriple.isOSCygMing() ||
  TheTriple.isWindowsItaniumEnvironment()) {
 MAI = new X86MCAsmInfoGNUCOFF(TheTriple);
-  } else if (TheTriple.isUEFI()) {
-MAI = new X86MCAsmInfoGNUCOFF(TheTriple);
   } else {
 // The default is ELF.
 MAI = new X86ELFMCAsmInfo(TheTriple);
diff --git a/llvm/lib/Target/X86/X86CallingConv.td 
b/llvm/lib/Target/X86/X86CallingConv.td
index 307aeb2ea4c6fd..93d84577801cd6 100644
--- a/llvm/lib/Target/X86/X86CallingConv.td
+++ b/llvm/lib/Target/X86/X86CallingConv.td
@@ -488,13 +488,24 @@ def RetCC_X86_64 : CallingConv<[
 CCIfSubtarget<"isTargetWin64()", 
CCIfRegCallv4>>>,
 
   CCIfCC<"CallingConv::X86_RegCall",
-  CCIfSubtarget<"isTargetWin64()",
+CCIfSubtarget<"isTargetUEFI64()", 
CCIfRegCallv4>>>,
+
+  CCIfCC<"CallingConv::X86_RegCall",
+  CCIfSubtarget<"isTargetWin64()",
 CCDelegateTo>>,
+
+  CCIfCC<"CallingConv::X86_RegCall",
+CCIfSubtarget<"isTargetUEFI64()",
+  CCDelegateTo>>,
+
   CCIfCC<"CallingConv::X86_RegCall", CCDelegateTo>,
   
   // Mingw64 and native Win64 use Win64 CC
   CCIfSubtarget<"isTargetWin64()", CCDelegateTo>,
 
+  // UEFI64 uses Win64 CC
+  CCIfSubtarget<"isTargetUEFI64()", CCDelegateTo>,
+
   // Otherwise, drop to normal X86-64 CC
   CCDelegateTo
 ]>;
@@ -1079,6 +1090,10 @@ def CC_X86_64 : CallingConv<[
 CCIfSubtarget<"isTargetWin64()", 
CCIfRegCallv4>>>,
   CCIfCC<"CallingConv::X86_RegCall",
 CCIfSubtarget<"isTargetWin64()", CCDelegateTo>>,
+  CCIfCC<"CallingConv::X86_RegCall",
+CCIfSubtarget<"isTargetUEFI64()", 
CCIfRegCallv4>>>,
+  CCIfCC<"CallingConv::X86_RegCall",
+CCIfSubtarget<"isTargetUEFI64()", CCDelegateTo>>,
   CCIfCC<"CallingConv::X86_RegCall", CCDelegateTo>,
   CCIfCC<"CallingConv::PreserveNone", CCDelegateTo>,
   CCIfCC<"CallingConv::X86_INTR", CCCustom<"CC_X86_Intr">>,
diff --git a/llvm/lib/Target/X86/X86FrameLowering.cpp 
b/llvm/lib/Target/X86/X86FrameLowering.cpp
index 4f8