Prabhuk updated this revision to Diff 557221.
Prabhuk added a comment.
Datalayout update.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D152206/new/
https://reviews.llvm.org/D152206
Files:
llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp
llvm/lib/Target/X86/X86CallingConv.td
llvm/lib/Target/X86/X86RegisterInfo.cpp
llvm/lib/Target/X86/X86RegisterInfo.h
llvm/lib/Target/X86/X86Subtarget.h
Index: llvm/lib/Target/X86/X86Subtarget.h
===================================================================
--- llvm/lib/Target/X86/X86Subtarget.h
+++ llvm/lib/Target/X86/X86Subtarget.h
@@ -334,6 +334,10 @@
bool isOSWindows() const { return TargetTriple.isOSWindows(); }
+ bool isUEFI() const { return TargetTriple.isUEFI(); }
+
+ bool isTargetUEFI64() const { return Is64Bit && isUEFI(); }
+
bool isTargetWin64() const { return Is64Bit && isOSWindows(); }
bool isTargetWin32() const { return !Is64Bit && isOSWindows(); }
@@ -349,7 +353,8 @@
bool isCallingConvWin64(CallingConv::ID CC) const {
switch (CC) {
- // On Win64, all these conventions just use the default convention.
+ // On Win64 and UEFI64, all these conventions just use the default
+ // convention.
case CallingConv::C:
case CallingConv::Fast:
case CallingConv::Tail:
@@ -360,7 +365,7 @@
case CallingConv::X86_ThisCall:
case CallingConv::X86_VectorCall:
case CallingConv::Intel_OCL_BI:
- return isTargetWin64();
+ return isTargetWin64() || isTargetUEFI64();
// This convention allows using the Win64 convention on other targets.
case CallingConv::Win64:
return true;
Index: llvm/lib/Target/X86/X86RegisterInfo.h
===================================================================
--- llvm/lib/Target/X86/X86RegisterInfo.h
+++ llvm/lib/Target/X86/X86RegisterInfo.h
@@ -27,10 +27,14 @@
///
bool Is64Bit;
- /// IsWin64 - Is the target on of win64 flavours
+ /// IsWin64 - Is the target one of win64 flavours
///
bool IsWin64;
+ /// IsUEFI64 - Is this UEFI 64 bit target
+ ///
+ bool IsUEFI64;
+
/// SlotSize - Stack slot size in bytes.
///
unsigned SlotSize;
Index: llvm/lib/Target/X86/X86RegisterInfo.cpp
===================================================================
--- llvm/lib/Target/X86/X86RegisterInfo.cpp
+++ llvm/lib/Target/X86/X86RegisterInfo.cpp
@@ -55,6 +55,7 @@
// Cache some information.
Is64Bit = TT.isArch64Bit();
IsWin64 = Is64Bit && TT.isOSWindows();
+ IsUEFI64 = Is64Bit && TT.isUEFI();
// Use a callee-saved register as the base pointer. These registers must
// not conflict with any ABI requirements. For example, in 32-bit mode PIC
@@ -232,7 +233,7 @@
const TargetRegisterClass *
X86RegisterInfo::getGPRsForTailCall(const MachineFunction &MF) const {
const Function &F = MF.getFunction();
- if (IsWin64 || (F.getCallingConv() == CallingConv::Win64))
+ if (IsWin64 || IsUEFI64 || (F.getCallingConv() == CallingConv::Win64))
return &X86::GR64_TCW64RegClass;
else if (Is64Bit)
return &X86::GR64_TCRegClass;
@@ -331,7 +332,7 @@
}
case CallingConv::X86_RegCall:
if (Is64Bit) {
- if (IsWin64) {
+ if (IsWin64 || IsUEFI64) {
return (HasSSE ? CSR_Win64_RegCall_SaveList :
CSR_Win64_RegCall_NoSSE_SaveList);
} else {
@@ -391,7 +392,7 @@
return IsWin64 ? CSR_Win64_SwiftError_SaveList
: CSR_64_SwiftError_SaveList;
- if (IsWin64)
+ if (IsWin64 || IsUEFI64)
return HasSSE ? CSR_Win64_SaveList : CSR_Win64_NoSSE_SaveList;
if (CallsEHReturn)
return CSR_64EHRet_SaveList;
@@ -451,7 +452,7 @@
}
case CallingConv::X86_RegCall:
if (Is64Bit) {
- if (IsWin64) {
+ if (IsWin64 || IsUEFI64) {
return (HasSSE ? CSR_Win64_RegCall_RegMask :
CSR_Win64_RegCall_NoSSE_RegMask);
} else {
@@ -509,7 +510,7 @@
if (IsSwiftCC)
return IsWin64 ? CSR_Win64_SwiftError_RegMask : CSR_64_SwiftError_RegMask;
- return IsWin64 ? CSR_Win64_RegMask : CSR_64_RegMask;
+ return (IsWin64 || IsUEFI64) ? CSR_Win64_RegMask : CSR_64_RegMask;
}
return CSR_32_RegMask;
Index: llvm/lib/Target/X86/X86CallingConv.td
===================================================================
--- llvm/lib/Target/X86/X86CallingConv.td
+++ llvm/lib/Target/X86/X86CallingConv.td
@@ -521,6 +521,9 @@
// Mingw64 and native Win64 use Win64 CC
CCIfSubtarget<"isTargetWin64()", CCDelegateTo<RetCC_X86_Win64_C>>,
+ // UEFI64 uses Win64 CC
+ CCIfSubtarget<"isTargetUEFI64()", CCDelegateTo<RetCC_X86_Win64_C>>,
+
// Otherwise, drop to normal X86-64 CC
CCDelegateTo<RetCC_X86_64_C>
]>;
@@ -1127,6 +1130,9 @@
// Mingw64 and native Win64 use Win64 CC
CCIfSubtarget<"isTargetWin64()", CCDelegateTo<CC_X86_Win64_C>>,
+ // UEFI64 uses Win64 CC
+ CCIfSubtarget<"isTargetUEFI64()", CCDelegateTo<CC_X86_Win64_C>>,
+
// Otherwise, drop to normal X86-64 CC
CCDelegateTo<CC_X86_64_C>
]>;
Index: llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp
===================================================================
--- llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp
+++ llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp
@@ -445,7 +445,7 @@
// 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 @@
} 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);
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits