diff --git a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp --- a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp +++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp @@ -230,8 +230,8 @@ if (TT.isOSDarwin()) return Reloc::DynamicNoPIC; - // Big Endian PPC is PIC by default. - if (TT.getArch() == Triple::ppc64) + // Big Endian PPC and AIX default to PIC. + if (TT.getArch() == Triple::ppc64 || TT.isOSAIX()) return Reloc::PIC_; // Rest are static by default. diff --git a/llvm/test/CodeGen/PowerPC/aix-pic-default.ll b/llvm/test/CodeGen/PowerPC/aix-pic-default.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/PowerPC/aix-pic-default.ll @@ -0,0 +1,19 @@ +; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mtriple powerpc-ibm-aix-xcoff < %s | FileCheck %s +; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mtriple powerpc64-ibm-aix-xcoff < %s | FileCheck --check-prefix=CHECK64 %s + +@a = common global i32 0 +@b = constant i32* @a + +;CHECK: .comm a[RW],4,2 +;CHECK-NEXT: .csect .data[RW] +;CHECK-NEXT: .globl b +;CHECK-NEXT: .align 2 +;CHECK-NEXT: b: +;CHECK-NEXT: .long a + +;CHECK64: .comm a[RW],4,2 +;CHECK64-NEXT: .csect .data[RW] +;CHECK64-NEXT: .globl b +;CHECK64-NEXT: .align 3 +;CHECK64-NEXT: b: +;CHECK64-NEXT: .llong a