[clang] [llvm] UEFI backend for x86_64 (PR #109320)
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)
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)
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)
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)
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)
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)
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)
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