From 63651705593278925c11634856c6a89702e4b791 Mon Sep 17 00:00:00 2001
From: Iain Sandoe <iain@sandoe.co.uk>
Date: Sat, 11 Apr 2015 16:41:31 +0100
Subject: [PATCH] [llvm, Darwin, ppc] Darwin's default relocation model
 is PIC.

I.E. not mdynamic-no-pic.

Unfortunately, there is significant test-suite fallout from this.
Some fixable by forcing the relocation model back to dynamic-no-pic.
Some is not easily fixed this way and the intent of the test-cases
is not 100% clear, so these have been XFAILed for now.

These are old-style llc | grep and the target lines are not
specific, so it's hard to know what to do.

* mem_update.ll
* tailcall1-64.ll
* tailcall1.ll

TODO: Verify tailcalls for Darwin (PIC and non-PIC)
---
 llvm/lib/Target/PowerPC/PPCTargetMachine.cpp           | 3 +--
 llvm/test/CodeGen/PowerPC/2007-02-23-lr-saved-twice.ll | 4 ++--
 llvm/test/CodeGen/PowerPC/anon_aggr.ll                 | 7 ++-----
 llvm/test/CodeGen/PowerPC/hidden-vis-2.ll              | 2 +-
 llvm/test/CodeGen/PowerPC/private.ll                   | 2 +-
 llvm/test/CodeGen/PowerPC/stubs.ll                     | 3 ++-
 llvm/test/CodeGen/PowerPC/tailcall1-64.ll              | 1 +
 llvm/test/CodeGen/PowerPC/tailcall1.ll                 | 1 +
 llvm/test/CodeGen/PowerPC/vec_buildvector_loadstore.ll | 3 ++-
 9 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
index 0c4733db451..facac947708 100644
--- a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
+++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
@@ -210,9 +210,8 @@ static Reloc::Model getEffectiveRelocModel(const Triple &TT,
   if (RM.hasValue())
     return *RM;
 
-  // Darwin defaults to dynamic-no-pic.
   if (TT.isOSDarwin())
-    return Reloc::DynamicNoPIC;
+    return Reloc::PIC_; // Darwin defaults to PIC.
 
   // Non-darwin 64-bit platforms are PIC by default.
   if (TT.getArch() == Triple::ppc64 || TT.getArch() == Triple::ppc64le)
diff --git a/llvm/test/CodeGen/PowerPC/2007-02-23-lr-saved-twice.ll b/llvm/test/CodeGen/PowerPC/2007-02-23-lr-saved-twice.ll
index 6593c0ee723..0215ebb60bc 100644
--- a/llvm/test/CodeGen/PowerPC/2007-02-23-lr-saved-twice.ll
+++ b/llvm/test/CodeGen/PowerPC/2007-02-23-lr-saved-twice.ll
@@ -1,9 +1,9 @@
-; RUN: llc -verify-machineinstrs < %s | grep mflr | count 1
+; RUN: llc -verify-machineinstrs -mtriple=powerpc-apple-darwin8 -relocation-model=dynamic-no-pic < %s | grep mflr | count 1
 
 target datalayout = "e-p:32:32"
 target triple = "powerpc-apple-darwin8"
-@str = internal constant [18 x i8] c"hello world!, %d\0A\00"            ; <[18 x i8]*> [#uses=1]
 
+@str = internal constant [18 x i8] c"hello world!, %d\0A\00"            ; <[18 x i8]*> [#uses=1]
 
 define i32 @main() {
 entry:
diff --git a/llvm/test/CodeGen/PowerPC/anon_aggr.ll b/llvm/test/CodeGen/PowerPC/anon_aggr.ll
index 2c173584447..622edf6d8e5 100644
--- a/llvm/test/CodeGen/PowerPC/anon_aggr.ll
+++ b/llvm/test/CodeGen/PowerPC/anon_aggr.ll
@@ -1,6 +1,6 @@
 ; RUN: llc -verify-machineinstrs -O0 -mcpu=ppc64 -mtriple=powerpc64-unknown-linux-gnu -fast-isel=false < %s | FileCheck %s
-; RUN: llc -verify-machineinstrs -O0 -mcpu=g4 -mtriple=powerpc-apple-darwin8 < %s | FileCheck -check-prefix=DARWIN32 %s
-; RUN: llc -verify-machineinstrs -O0 -mcpu=970 -mtriple=powerpc64-apple-darwin8 < %s | FileCheck -check-prefix=DARWIN64 %s
+; RUN: llc -verify-machineinstrs -O0 -mcpu=g4 -mtriple=powerpc-apple-darwin8 -relocation-model=dynamic-no-pic < %s | FileCheck -check-prefix=DARWIN32 %s
+; RUN: llc -verify-machineinstrs -O0 -mcpu=970 -mtriple=powerpc64-apple-darwin8 -relocation-model=dynamic-no-pic < %s | FileCheck -check-prefix=DARWIN64 %s
 
 ; Test case for PR 14779: anonymous aggregates are not handled correctly.
 ; Darwin bug report PR 15821 is similar.
@@ -47,7 +47,6 @@ unequal:
 ; DARWIN64: ld r3, -[[OFFSET1]]
 ; DARWIN64: ld r3, -[[OFFSET2]]
 
-
 define i8* @func2({ i64, i8* } %array1, %tarray* byval %array2) {
 entry:
   %array1_ptr = extractvalue {i64, i8* } %array1, 1
@@ -91,7 +90,6 @@ unequal:
 ; DARWIN64: ld r3, -[[OFFSET1]]
 ; DARWIN64: ld r3, -[[OFFSET2]]
 
-
 define i8* @func3({ i64, i8* }* byval %array1, %tarray* byval %array2) {
 entry:
   %tmp1 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %array1, i32 0, i32 1
@@ -135,7 +133,6 @@ unequal:
 ; DARWIN64: ld r3, -[[OFFSET1]]
 ; DARWIN64: ld r3, -[[OFFSET2]]
 
-
 define i8* @func4(i64 %p1, i64 %p2, i64 %p3, i64 %p4,
                   i64 %p5, i64 %p6, i64 %p7, i64 %p8,
                   { i64, i8* } %array1, %tarray* byval %array2) {
diff --git a/llvm/test/CodeGen/PowerPC/hidden-vis-2.ll b/llvm/test/CodeGen/PowerPC/hidden-vis-2.ll
index 1a2ad0d3de6..71a67f013ac 100644
--- a/llvm/test/CodeGen/PowerPC/hidden-vis-2.ll
+++ b/llvm/test/CodeGen/PowerPC/hidden-vis-2.ll
@@ -1,4 +1,4 @@
-; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc-apple-darwin9 | FileCheck %s
+; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc-apple-darwin9 -relocation-model=dynamic-no-pic | FileCheck %s
 
 ; CHECK: lis r2, ha16(L_x$non_lazy_ptr)
 ; CHECK: lis r3, ha16(L_y$non_lazy_ptr)
diff --git a/llvm/test/CodeGen/PowerPC/private.ll b/llvm/test/CodeGen/PowerPC/private.ll
index b2412080fed..c1ea228a672 100644
--- a/llvm/test/CodeGen/PowerPC/private.ll
+++ b/llvm/test/CodeGen/PowerPC/private.ll
@@ -3,7 +3,7 @@
 ; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc-unknown-linux-gnu | \
 ; RUN: FileCheck --check-prefix=LINUX %s
 ;
-; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc-apple-darwin | \
+; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc-apple-darwin -relocation-model=dynamic-no-pic | \
 ; RUN: FileCheck --check-prefix=OSX %s
 
 ; LINUX: .Lfoo:
diff --git a/llvm/test/CodeGen/PowerPC/stubs.ll b/llvm/test/CodeGen/PowerPC/stubs.ll
index 885df688851..225a9c558ed 100644
--- a/llvm/test/CodeGen/PowerPC/stubs.ll
+++ b/llvm/test/CodeGen/PowerPC/stubs.ll
@@ -1,4 +1,5 @@
-; RUN: llc -verify-machineinstrs %s -o - -mtriple=powerpc-apple-darwin9 | FileCheck %s
+; RUN: llc -verify-machineinstrs %s -o - -mtriple=powerpc-apple-darwin9 -relocation-model=dynamic-no-pic | FileCheck %s
+
 define ppc_fp128 @test1(i64 %X) nounwind readnone {
 entry:
   %0 = sitofp i64 %X to ppc_fp128
diff --git a/llvm/test/CodeGen/PowerPC/tailcall1-64.ll b/llvm/test/CodeGen/PowerPC/tailcall1-64.ll
index 58ab0bce309..f7dd83ebe52 100644
--- a/llvm/test/CodeGen/PowerPC/tailcall1-64.ll
+++ b/llvm/test/CodeGen/PowerPC/tailcall1-64.ll
@@ -1,5 +1,6 @@
 ; RUN: llc -relocation-model=static -verify-machineinstrs < %s -mtriple=ppc64-- -tailcallopt | grep TC_RETURNd8
 ; RUN: llc -relocation-model=static -verify-machineinstrs -mtriple=ppc64-- < %s | FileCheck %s
+
 define fastcc i32 @tailcallee(i32 %a1, i32 %a2, i32 %a3, i32 %a4) {
 entry:
 	ret i32 %a3
diff --git a/llvm/test/CodeGen/PowerPC/tailcall1.ll b/llvm/test/CodeGen/PowerPC/tailcall1.ll
index 1c71b359cde..65d4e782a40 100644
--- a/llvm/test/CodeGen/PowerPC/tailcall1.ll
+++ b/llvm/test/CodeGen/PowerPC/tailcall1.ll
@@ -1,4 +1,5 @@
 ; RUN: llc -verify-machineinstrs < %s -mtriple=ppc32-- -tailcallopt | grep TC_RETURN
+
 define fastcc i32 @tailcallee(i32 %a1, i32 %a2, i32 %a3, i32 %a4) {
 entry:
 	ret i32 %a3
diff --git a/llvm/test/CodeGen/PowerPC/vec_buildvector_loadstore.ll b/llvm/test/CodeGen/PowerPC/vec_buildvector_loadstore.ll
index b48836db32e..5786df1ae4f 100644
--- a/llvm/test/CodeGen/PowerPC/vec_buildvector_loadstore.ll
+++ b/llvm/test/CodeGen/PowerPC/vec_buildvector_loadstore.ll
@@ -1,4 +1,5 @@
-; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc-apple-darwin -mattr=+altivec -disable-ppc-ilp-pref  | FileCheck %s
+; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc-apple-darwin -mattr=+altivec -disable-ppc-ilp-pref -relocation-model=dynamic-no-pic | FileCheck %s
+
 ; Formerly this did byte loads and word stores.
 @a = external global <16 x i8>
 @b = external global <16 x i8>
