[llvm] 2cfd427 - [AIX] Don't crash on unimplemented lowerRelativeReference

Jinsong Ji via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 10 10:49:25 PDT 2021


Author: Jinsong Ji
Date: 2021-08-10T17:43:06Z
New Revision: 2cfd42762638168131dd9f2b494825e293758136

URL: https://github.com/llvm/llvm-project/commit/2cfd42762638168131dd9f2b494825e293758136
DIFF: https://github.com/llvm/llvm-project/commit/2cfd42762638168131dd9f2b494825e293758136.diff

LOG: [AIX] Don't crash on unimplemented lowerRelativeReference

We may call lowerRelativeReference in MC to determine whether target
supports this lowering. We should return nullptr instead of crashing
when we haven't implemented the real lowering.

Reviewed By: hubert.reinterpretcast

Differential Revision: https://reviews.llvm.org/D107830

Added: 
    llvm/test/CodeGen/PowerPC/aix-relativeref.ll

Modified: 
    llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
index 3383f5a64a5ff..0c019e7ed3b8a 100644
--- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
@@ -2456,7 +2456,8 @@ MCSection *TargetLoweringObjectFileXCOFF::getStaticDtorSection(
 const MCExpr *TargetLoweringObjectFileXCOFF::lowerRelativeReference(
     const GlobalValue *LHS, const GlobalValue *RHS,
     const TargetMachine &TM) const {
-  report_fatal_error("XCOFF not yet implemented.");
+  /* Not implemented yet, but don't crash, return nullptr. */
+  return nullptr;
 }
 
 XCOFF::StorageClass

diff  --git a/llvm/test/CodeGen/PowerPC/aix-relativeref.ll b/llvm/test/CodeGen/PowerPC/aix-relativeref.ll
new file mode 100644
index 0000000000000..2f5d7c79fe471
--- /dev/null
+++ b/llvm/test/CodeGen/PowerPC/aix-relativeref.ll
@@ -0,0 +1,20 @@
+; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff  < %s | \
+; RUN:   FileCheck --check-prefix=ASM %s
+
+ at __profc_main = private global [1 x i64] zeroinitializer, section "__llvm_prf_cnts", align 8
+ at __profd_main = private global { i64, i64, i64, i8*, i8*, i32, [4 x i16] } { i64 -2624081020897602054, i64 742261418966908927, i64 sub (i64 ptrtoint ([1 x i64]* @__profc_main to i64), i64 ptrtoint ({ i64, i64, i64, i8*, i8*, i32, [4 x i16] }* @__profd_main to i64)), i8* bitcast (i32 ()* @main to i8*), i8* null, i32 1, [4 x i16] zeroinitializer }, section "__llvm_prf_data", align 8
+
+; Test fallback of using sub expr for lowerRelativeReference
+define signext i32 @main() {
+; ASM-LABEL: main:
+; ASM:  L..__profd_main:
+; ASM:        .vbyte  8, L..__profc_main-L..__profd_main
+entry:
+  %pgocount = load i64, i64* getelementptr inbounds ([1 x i64], [1 x i64]* @__profc_main, i64 0, i64 0), align 8
+  %0 = add i64 %pgocount, 1
+  store i64 %0, i64* getelementptr inbounds ([1 x i64], [1 x i64]* @__profc_main, i64 0, i64 0), align 8
+  %retval = alloca i32, align 4
+  store i32 0, i32* %retval, align 4
+  ret i32 0
+}
+


        


More information about the llvm-commits mailing list