[llvm] 601d5bd - [Target][XCOFF] Correctly halt when mixing AIX or XCOFF with ppc64le

Hubert Tong via llvm-commits llvm-commits at lists.llvm.org
Fri May 8 13:51:48 PDT 2020


Author: Hubert Tong
Date: 2020-05-08T16:51:34-04:00
New Revision: 601d5bd516ec7b99affb9cd4623ec3c027e63aa3

URL: https://github.com/llvm/llvm-project/commit/601d5bd516ec7b99affb9cd4623ec3c027e63aa3
DIFF: https://github.com/llvm/llvm-project/commit/601d5bd516ec7b99affb9cd4623ec3c027e63aa3.diff

LOG: [Target][XCOFF] Correctly halt when mixing AIX or XCOFF with ppc64le

The code to prevent using `PPCXCOFFMCAsmInfo` with little-endian targets
used an incorrect check. Also, there does not appear to be sufficient
earlier checking to prevent failing this check, so the check here is
upgraded to be a `report_fatal_error`.

`PPCAIXAsmPrinter` was also missing a check against use with
little-endian targets. This patch adds such a check in.

Added: 
    llvm/test/CodeGen/PowerPC/aix-xcoff-endian-error.ll

Modified: 
    llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.cpp
    llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.cpp
index 39c5c0fa9746..d9587ec9bc0f 100644
--- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.cpp
+++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.cpp
@@ -56,6 +56,7 @@ PPCELFMCAsmInfo::PPCELFMCAsmInfo(bool is64Bit, const Triple& T) {
 void PPCXCOFFMCAsmInfo::anchor() {}
 
 PPCXCOFFMCAsmInfo::PPCXCOFFMCAsmInfo(bool Is64Bit, const Triple &T) {
-  assert(!IsLittleEndian && "Little-endian XCOFF not supported.");
+  if (T.getArch() == Triple::ppc64le)
+    report_fatal_error("XCOFF is not supported for little-endian targets");
   CodePointerSize = CalleeSaveStackSlotSize = Is64Bit ? 8 : 4;
 }

diff  --git a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
index 241a19d48027..2915f333849a 100644
--- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
@@ -151,7 +151,11 @@ class PPCAIXAsmPrinter : public PPCAsmPrinter {
 
 public:
   PPCAIXAsmPrinter(TargetMachine &TM, std::unique_ptr<MCStreamer> Streamer)
-      : PPCAsmPrinter(TM, std::move(Streamer)) {}
+      : PPCAsmPrinter(TM, std::move(Streamer)) {
+    if (MAI->isLittleEndian())
+      report_fatal_error(
+          "cannot create AIX PPC Assembly Printer for a little-endian target");
+  }
 
   StringRef getPassName() const override { return "AIX PPC Assembly Printer"; }
 

diff  --git a/llvm/test/CodeGen/PowerPC/aix-xcoff-endian-error.ll b/llvm/test/CodeGen/PowerPC/aix-xcoff-endian-error.ll
new file mode 100644
index 000000000000..4c5a73ed530d
--- /dev/null
+++ b/llvm/test/CodeGen/PowerPC/aix-xcoff-endian-error.ll
@@ -0,0 +1,13 @@
+; Check that use of the AIX/XCOFF related classes with ppc64le would
+; cause llc to die with an appropriate message instead of proceeding
+; with an invalid state.
+
+; RUN: not --crash llc < %s -mtriple powerpc64le--aix-xcoff 2>&1 \
+; RUN:   | FileCheck --check-prefix=AIXXCOFF %s
+; AIXXCOFF: ERROR: XCOFF is not supported for little-endian
+
+; RUN: not --crash llc < %s -mtriple powerpc64le--aix-macho 2>&1 \
+; RUN:   | FileCheck --check-prefix=AIXMACHO %s
+; AIXMACHO: ERROR: cannot create AIX PPC Assembly Printer for a little-endian target
+
+define i32 @a() { ret i32 0 }


        


More information about the llvm-commits mailing list