summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorReid Kleckner <rnk@google.com>2018-07-23 21:14:35 +0000
committerReid Kleckner <rnk@google.com>2018-07-23 21:14:35 +0000
commit980c4df037649b375f952f4ee786582c6c8eb750 (patch)
treee039b03214ae6ba76bec312f254ffe70d85663cd /llvm/test
parent07dee81a68fcf7e27e2e03e9c1dc2a0bdfd3a6d0 (diff)
downloadbcm5719-llvm-980c4df037649b375f952f4ee786582c6c8eb750.tar.gz
bcm5719-llvm-980c4df037649b375f952f4ee786582c6c8eb750.zip
Re-land r335297 "[X86] Implement more of x86-64 large and medium PIC code models"
Don't try to generate large PIC code for non-ELF targets. Neither COFF nor MachO have relocations for large position independent code, and users have been using "large PIC" code models to JIT 64-bit code for a while now. With this change, if they are generating ELF code, their JITed code will truly be PIC, but if they target MachO or COFF, it will contain 64-bit immediates that directly reference external symbols. For a JIT, that's perfectly fine. llvm-svn: 337740
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/CodeGen/X86/cleanuppad-large-codemodel.ll2
-rw-r--r--llvm/test/CodeGen/X86/code-model-elf.ll384
-rw-r--r--llvm/test/CodeGen/X86/fast-isel-call-cleanup.ll4
-rw-r--r--llvm/test/CodeGen/X86/hipe-cc64.ll2
-rw-r--r--llvm/test/CodeGen/X86/variadic-node-pic.ll6
-rw-r--r--llvm/test/ExecutionEngine/MCJIT/eh-lg-pic.ll6
-rw-r--r--llvm/test/ExecutionEngine/OrcMCJIT/eh-lg-pic.ll6
7 files changed, 405 insertions, 5 deletions
diff --git a/llvm/test/CodeGen/X86/cleanuppad-large-codemodel.ll b/llvm/test/CodeGen/X86/cleanuppad-large-codemodel.ll
index 8ffb97d8dd6..55911e3cffb 100644
--- a/llvm/test/CodeGen/X86/cleanuppad-large-codemodel.ll
+++ b/llvm/test/CodeGen/X86/cleanuppad-large-codemodel.ll
@@ -1,4 +1,4 @@
-; RUN: llc -mtriple=x86_64-pc-windows-msvc -code-model=large -o - < %s | FileCheck %s
+; RUN: llc -mtriple=x86_64-pc-windows-msvc -code-model=large -relocation-model=static -o - < %s | FileCheck %s
declare i32 @__CxxFrameHandler3(...)
diff --git a/llvm/test/CodeGen/X86/code-model-elf.ll b/llvm/test/CodeGen/X86/code-model-elf.ll
new file mode 100644
index 00000000000..6d62f256179
--- /dev/null
+++ b/llvm/test/CodeGen/X86/code-model-elf.ll
@@ -0,0 +1,384 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; Run with --no_x86_scrub_rip because we care a lot about how globals are
+; accessed in the code model.
+
+; RUN: llc < %s -relocation-model=static -code-model=small | FileCheck %s --check-prefix=CHECK --check-prefix=SMALL-STATIC
+; RUN: llc < %s -relocation-model=static -code-model=medium | FileCheck %s --check-prefix=CHECK --check-prefix=MEDIUM-STATIC
+; RUN: llc < %s -relocation-model=static -code-model=large | FileCheck %s --check-prefix=CHECK --check-prefix=LARGE-STATIC
+; RUN: llc < %s -relocation-model=pic -code-model=small | FileCheck %s --check-prefix=CHECK --check-prefix=SMALL-PIC
+; RUN: llc < %s -relocation-model=pic -code-model=medium | FileCheck %s --check-prefix=CHECK --check-prefix=MEDIUM-PIC
+; RUN: llc < %s -relocation-model=pic -code-model=large | FileCheck %s --check-prefix=CHECK --check-prefix=LARGE-PIC
+
+; Generated from this C source:
+;
+; static int static_data[10];
+; int global_data[10] = {1, 2};
+; extern int extern_data[10];
+;
+; int *lea_static_data() { return &static_data[0]; }
+; int *lea_global_data() { return &global_data[0]; }
+; int *lea_extern_data() { return &extern_data[0]; }
+;
+; static void static_fn(void) {}
+; void global_fn(void) {}
+; void extern_fn(void);
+;
+; typedef void (*void_fn)(void);
+; void_fn lea_static_fn() { return &static_fn; }
+; void_fn lea_global_fn() { return &global_fn; }
+; void_fn lea_extern_fn() { return &extern_fn; }
+
+
+; ModuleID = 'model.c'
+source_filename = "model.c"
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64--linux"
+
+@global_data = dso_local global [10 x i32] [i32 1, i32 2, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0], align 16
+@static_data = internal global [10 x i32] zeroinitializer, align 16
+@extern_data = external global [10 x i32], align 16
+
+define dso_local i32* @lea_static_data() #0 {
+; SMALL-STATIC-LABEL: lea_static_data:
+; SMALL-STATIC: # %bb.0:
+; SMALL-STATIC-NEXT: movl $static_data, %eax
+; SMALL-STATIC-NEXT: retq
+;
+; MEDIUM-STATIC-LABEL: lea_static_data:
+; MEDIUM-STATIC: # %bb.0:
+; MEDIUM-STATIC-NEXT: movabsq $static_data, %rax
+; MEDIUM-STATIC-NEXT: retq
+;
+; LARGE-STATIC-LABEL: lea_static_data:
+; LARGE-STATIC: # %bb.0:
+; LARGE-STATIC-NEXT: movabsq $static_data, %rax
+; LARGE-STATIC-NEXT: retq
+;
+; SMALL-PIC-LABEL: lea_static_data:
+; SMALL-PIC: # %bb.0:
+; SMALL-PIC-NEXT: leaq static_data(%rip), %rax
+; SMALL-PIC-NEXT: retq
+;
+; MEDIUM-PIC-LABEL: lea_static_data:
+; MEDIUM-PIC: # %bb.0:
+; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx
+; MEDIUM-PIC-NEXT: movabsq $static_data@GOTOFF, %rax
+; MEDIUM-PIC-NEXT: addq %rcx, %rax
+; MEDIUM-PIC-NEXT: retq
+;
+; LARGE-PIC-LABEL: lea_static_data:
+; LARGE-PIC: # %bb.0:
+; LARGE-PIC-NEXT: .Ltmp0:
+; LARGE-PIC-NEXT: leaq .Ltmp0(%rip), %rcx
+; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.Ltmp0, %rax
+; LARGE-PIC-NEXT: addq %rax, %rcx
+; LARGE-PIC-NEXT: movabsq $static_data@GOTOFF, %rax
+; LARGE-PIC-NEXT: addq %rcx, %rax
+; LARGE-PIC-NEXT: retq
+ ret i32* getelementptr inbounds ([10 x i32], [10 x i32]* @static_data, i64 0, i64 0)
+}
+
+define dso_local i32* @lea_global_data() #0 {
+; SMALL-STATIC-LABEL: lea_global_data:
+; SMALL-STATIC: # %bb.0:
+; SMALL-STATIC-NEXT: movl $global_data, %eax
+; SMALL-STATIC-NEXT: retq
+;
+; MEDIUM-STATIC-LABEL: lea_global_data:
+; MEDIUM-STATIC: # %bb.0:
+; MEDIUM-STATIC-NEXT: movabsq $global_data, %rax
+; MEDIUM-STATIC-NEXT: retq
+;
+; LARGE-STATIC-LABEL: lea_global_data:
+; LARGE-STATIC: # %bb.0:
+; LARGE-STATIC-NEXT: movabsq $global_data, %rax
+; LARGE-STATIC-NEXT: retq
+;
+; SMALL-PIC-LABEL: lea_global_data:
+; SMALL-PIC: # %bb.0:
+; SMALL-PIC-NEXT: leaq global_data(%rip), %rax
+; SMALL-PIC-NEXT: retq
+;
+; MEDIUM-PIC-LABEL: lea_global_data:
+; MEDIUM-PIC: # %bb.0:
+; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx
+; MEDIUM-PIC-NEXT: movabsq $global_data@GOTOFF, %rax
+; MEDIUM-PIC-NEXT: addq %rcx, %rax
+; MEDIUM-PIC-NEXT: retq
+;
+; LARGE-PIC-LABEL: lea_global_data:
+; LARGE-PIC: # %bb.0:
+; LARGE-PIC-NEXT: .Ltmp1:
+; LARGE-PIC-NEXT: leaq .Ltmp1(%rip), %rcx
+; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.Ltmp1, %rax
+; LARGE-PIC-NEXT: addq %rax, %rcx
+; LARGE-PIC-NEXT: movabsq $global_data@GOTOFF, %rax
+; LARGE-PIC-NEXT: addq %rcx, %rax
+; LARGE-PIC-NEXT: retq
+ ret i32* getelementptr inbounds ([10 x i32], [10 x i32]* @global_data, i64 0, i64 0)
+}
+
+define dso_local i32* @lea_extern_data() #0 {
+; SMALL-STATIC-LABEL: lea_extern_data:
+; SMALL-STATIC: # %bb.0:
+; SMALL-STATIC-NEXT: movl $extern_data, %eax
+; SMALL-STATIC-NEXT: retq
+;
+; MEDIUM-STATIC-LABEL: lea_extern_data:
+; MEDIUM-STATIC: # %bb.0:
+; MEDIUM-STATIC-NEXT: movabsq $extern_data, %rax
+; MEDIUM-STATIC-NEXT: retq
+;
+; LARGE-STATIC-LABEL: lea_extern_data:
+; LARGE-STATIC: # %bb.0:
+; LARGE-STATIC-NEXT: movabsq $extern_data, %rax
+; LARGE-STATIC-NEXT: retq
+;
+; SMALL-PIC-LABEL: lea_extern_data:
+; SMALL-PIC: # %bb.0:
+; SMALL-PIC-NEXT: movq extern_data@GOTPCREL(%rip), %rax
+; SMALL-PIC-NEXT: retq
+;
+; MEDIUM-PIC-LABEL: lea_extern_data:
+; MEDIUM-PIC: # %bb.0:
+; MEDIUM-PIC-NEXT: movq extern_data@GOTPCREL(%rip), %rax
+; MEDIUM-PIC-NEXT: retq
+;
+; LARGE-PIC-LABEL: lea_extern_data:
+; LARGE-PIC: # %bb.0:
+; LARGE-PIC-NEXT: .Ltmp2:
+; LARGE-PIC-NEXT: leaq .Ltmp2(%rip), %rax
+; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.Ltmp2, %rcx
+; LARGE-PIC-NEXT: addq %rcx, %rax
+; LARGE-PIC-NEXT: movabsq $extern_data@GOT, %rcx
+; LARGE-PIC-NEXT: movq (%rax,%rcx), %rax
+; LARGE-PIC-NEXT: retq
+ ret i32* getelementptr inbounds ([10 x i32], [10 x i32]* @extern_data, i64 0, i64 0)
+}
+
+define dso_local i32 @load_global_data() #0 {
+; SMALL-STATIC-LABEL: load_global_data:
+; SMALL-STATIC: # %bb.0:
+; SMALL-STATIC-NEXT: movl global_data+8(%rip), %eax
+; SMALL-STATIC-NEXT: retq
+;
+; MEDIUM-STATIC-LABEL: load_global_data:
+; MEDIUM-STATIC: # %bb.0:
+; MEDIUM-STATIC-NEXT: movabsq $global_data, %rax
+; MEDIUM-STATIC-NEXT: movl 8(%rax), %eax
+; MEDIUM-STATIC-NEXT: retq
+;
+; LARGE-STATIC-LABEL: load_global_data:
+; LARGE-STATIC: # %bb.0:
+; LARGE-STATIC-NEXT: movabsq $global_data, %rax
+; LARGE-STATIC-NEXT: movl 8(%rax), %eax
+; LARGE-STATIC-NEXT: retq
+;
+; SMALL-PIC-LABEL: load_global_data:
+; SMALL-PIC: # %bb.0:
+; SMALL-PIC-NEXT: movl global_data+8(%rip), %eax
+; SMALL-PIC-NEXT: retq
+;
+; MEDIUM-PIC-LABEL: load_global_data:
+; MEDIUM-PIC: # %bb.0:
+; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rax
+; MEDIUM-PIC-NEXT: movabsq $global_data@GOTOFF, %rcx
+; MEDIUM-PIC-NEXT: movl 8(%rax,%rcx), %eax
+; MEDIUM-PIC-NEXT: retq
+;
+; LARGE-PIC-LABEL: load_global_data:
+; LARGE-PIC: # %bb.0:
+; LARGE-PIC-NEXT: .Ltmp3:
+; LARGE-PIC-NEXT: leaq .Ltmp3(%rip), %rax
+; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.Ltmp3, %rcx
+; LARGE-PIC-NEXT: addq %rcx, %rax
+; LARGE-PIC-NEXT: movabsq $global_data@GOTOFF, %rcx
+; LARGE-PIC-NEXT: movl 8(%rax,%rcx), %eax
+; LARGE-PIC-NEXT: retq
+ %rv = load i32, i32* getelementptr inbounds ([10 x i32], [10 x i32]* @global_data, i64 0, i64 2)
+ ret i32 %rv
+}
+
+define dso_local i32 @load_extern_data() #0 {
+; SMALL-STATIC-LABEL: load_extern_data:
+; SMALL-STATIC: # %bb.0:
+; SMALL-STATIC-NEXT: movl extern_data+8(%rip), %eax
+; SMALL-STATIC-NEXT: retq
+;
+; MEDIUM-STATIC-LABEL: load_extern_data:
+; MEDIUM-STATIC: # %bb.0:
+; MEDIUM-STATIC-NEXT: movabsq $extern_data, %rax
+; MEDIUM-STATIC-NEXT: movl 8(%rax), %eax
+; MEDIUM-STATIC-NEXT: retq
+;
+; LARGE-STATIC-LABEL: load_extern_data:
+; LARGE-STATIC: # %bb.0:
+; LARGE-STATIC-NEXT: movabsq $extern_data, %rax
+; LARGE-STATIC-NEXT: movl 8(%rax), %eax
+; LARGE-STATIC-NEXT: retq
+;
+; SMALL-PIC-LABEL: load_extern_data:
+; SMALL-PIC: # %bb.0:
+; SMALL-PIC-NEXT: movq extern_data@GOTPCREL(%rip), %rax
+; SMALL-PIC-NEXT: movl 8(%rax), %eax
+; SMALL-PIC-NEXT: retq
+;
+; MEDIUM-PIC-LABEL: load_extern_data:
+; MEDIUM-PIC: # %bb.0:
+; MEDIUM-PIC-NEXT: movq extern_data@GOTPCREL(%rip), %rax
+; MEDIUM-PIC-NEXT: movl 8(%rax), %eax
+; MEDIUM-PIC-NEXT: retq
+;
+; LARGE-PIC-LABEL: load_extern_data:
+; LARGE-PIC: # %bb.0:
+; LARGE-PIC-NEXT: .Ltmp4:
+; LARGE-PIC-NEXT: leaq .Ltmp4(%rip), %rax
+; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.Ltmp4, %rcx
+; LARGE-PIC-NEXT: addq %rcx, %rax
+; LARGE-PIC-NEXT: movabsq $extern_data@GOT, %rcx
+; LARGE-PIC-NEXT: movq (%rax,%rcx), %rax
+; LARGE-PIC-NEXT: movl 8(%rax), %eax
+; LARGE-PIC-NEXT: retq
+ %rv = load i32, i32* getelementptr inbounds ([10 x i32], [10 x i32]* @extern_data, i64 0, i64 2)
+ ret i32 %rv
+}
+
+define dso_local void @global_fn() #0 {
+; CHECK-LABEL: global_fn:
+; CHECK: # %bb.0:
+; CHECK-NEXT: retq
+ ret void
+}
+
+define internal void @static_fn() #0 {
+; CHECK-LABEL: static_fn:
+; CHECK: # %bb.0:
+; CHECK-NEXT: retq
+ ret void
+}
+
+declare void @extern_fn()
+
+define dso_local void ()* @lea_static_fn() #0 {
+; SMALL-STATIC-LABEL: lea_static_fn:
+; SMALL-STATIC: # %bb.0:
+; SMALL-STATIC-NEXT: movl $static_fn, %eax
+; SMALL-STATIC-NEXT: retq
+;
+; MEDIUM-STATIC-LABEL: lea_static_fn:
+; MEDIUM-STATIC: # %bb.0:
+; MEDIUM-STATIC-NEXT: movabsq $static_fn, %rax
+; MEDIUM-STATIC-NEXT: retq
+;
+; LARGE-STATIC-LABEL: lea_static_fn:
+; LARGE-STATIC: # %bb.0:
+; LARGE-STATIC-NEXT: movabsq $static_fn, %rax
+; LARGE-STATIC-NEXT: retq
+;
+; SMALL-PIC-LABEL: lea_static_fn:
+; SMALL-PIC: # %bb.0:
+; SMALL-PIC-NEXT: leaq static_fn(%rip), %rax
+; SMALL-PIC-NEXT: retq
+;
+; MEDIUM-PIC-LABEL: lea_static_fn:
+; MEDIUM-PIC: # %bb.0:
+; MEDIUM-PIC-NEXT: movabsq $static_fn, %rax
+; MEDIUM-PIC-NEXT: retq
+;
+; LARGE-PIC-LABEL: lea_static_fn:
+; LARGE-PIC: # %bb.0:
+; LARGE-PIC-NEXT: .Ltmp5:
+; LARGE-PIC-NEXT: leaq .Ltmp5(%rip), %rcx
+; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.Ltmp5, %rax
+; LARGE-PIC-NEXT: addq %rax, %rcx
+; LARGE-PIC-NEXT: movabsq $static_fn@GOTOFF, %rax
+; LARGE-PIC-NEXT: addq %rcx, %rax
+; LARGE-PIC-NEXT: retq
+ ret void ()* @static_fn
+}
+
+define dso_local void ()* @lea_global_fn() #0 {
+; SMALL-STATIC-LABEL: lea_global_fn:
+; SMALL-STATIC: # %bb.0:
+; SMALL-STATIC-NEXT: movl $global_fn, %eax
+; SMALL-STATIC-NEXT: retq
+;
+; MEDIUM-STATIC-LABEL: lea_global_fn:
+; MEDIUM-STATIC: # %bb.0:
+; MEDIUM-STATIC-NEXT: movabsq $global_fn, %rax
+; MEDIUM-STATIC-NEXT: retq
+;
+; LARGE-STATIC-LABEL: lea_global_fn:
+; LARGE-STATIC: # %bb.0:
+; LARGE-STATIC-NEXT: movabsq $global_fn, %rax
+; LARGE-STATIC-NEXT: retq
+;
+; SMALL-PIC-LABEL: lea_global_fn:
+; SMALL-PIC: # %bb.0:
+; SMALL-PIC-NEXT: leaq global_fn(%rip), %rax
+; SMALL-PIC-NEXT: retq
+;
+; MEDIUM-PIC-LABEL: lea_global_fn:
+; MEDIUM-PIC: # %bb.0:
+; MEDIUM-PIC-NEXT: movabsq $global_fn, %rax
+; MEDIUM-PIC-NEXT: retq
+;
+; LARGE-PIC-LABEL: lea_global_fn:
+; LARGE-PIC: # %bb.0:
+; LARGE-PIC-NEXT: .Ltmp6:
+; LARGE-PIC-NEXT: leaq .Ltmp6(%rip), %rcx
+; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.Ltmp6, %rax
+; LARGE-PIC-NEXT: addq %rax, %rcx
+; LARGE-PIC-NEXT: movabsq $global_fn@GOTOFF, %rax
+; LARGE-PIC-NEXT: addq %rcx, %rax
+; LARGE-PIC-NEXT: retq
+ ret void ()* @global_fn
+}
+
+define dso_local void ()* @lea_extern_fn() #0 {
+; SMALL-STATIC-LABEL: lea_extern_fn:
+; SMALL-STATIC: # %bb.0:
+; SMALL-STATIC-NEXT: movl $extern_fn, %eax
+; SMALL-STATIC-NEXT: retq
+;
+; MEDIUM-STATIC-LABEL: lea_extern_fn:
+; MEDIUM-STATIC: # %bb.0:
+; MEDIUM-STATIC-NEXT: movabsq $extern_fn, %rax
+; MEDIUM-STATIC-NEXT: retq
+;
+; LARGE-STATIC-LABEL: lea_extern_fn:
+; LARGE-STATIC: # %bb.0:
+; LARGE-STATIC-NEXT: movabsq $extern_fn, %rax
+; LARGE-STATIC-NEXT: retq
+;
+; SMALL-PIC-LABEL: lea_extern_fn:
+; SMALL-PIC: # %bb.0:
+; SMALL-PIC-NEXT: movq extern_fn@GOTPCREL(%rip), %rax
+; SMALL-PIC-NEXT: retq
+;
+; MEDIUM-PIC-LABEL: lea_extern_fn:
+; MEDIUM-PIC: # %bb.0:
+; MEDIUM-PIC-NEXT: movq extern_fn@GOTPCREL(%rip), %rax
+; MEDIUM-PIC-NEXT: retq
+;
+; LARGE-PIC-LABEL: lea_extern_fn:
+; LARGE-PIC: # %bb.0:
+; LARGE-PIC-NEXT: .Ltmp7:
+; LARGE-PIC-NEXT: leaq .Ltmp7(%rip), %rax
+; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.Ltmp7, %rcx
+; LARGE-PIC-NEXT: addq %rcx, %rax
+; LARGE-PIC-NEXT: movabsq $extern_fn@GOT, %rcx
+; LARGE-PIC-NEXT: movq (%rax,%rcx), %rax
+; LARGE-PIC-NEXT: retq
+ ret void ()* @extern_fn
+}
+
+attributes #0 = { noinline nounwind uwtable }
+
+!llvm.module.flags = !{!0, !1, !2}
+!llvm.ident = !{!3}
+
+!0 = !{i32 1, !"wchar_size", i32 4}
+!1 = !{i32 7, !"PIC Level", i32 2}
+!2 = !{i32 7, !"PIE Level", i32 2}
+!3 = !{!"clang version 7.0.0 "}
diff --git a/llvm/test/CodeGen/X86/fast-isel-call-cleanup.ll b/llvm/test/CodeGen/X86/fast-isel-call-cleanup.ll
index 27e42416ef8..1f7a59efa69 100644
--- a/llvm/test/CodeGen/X86/fast-isel-call-cleanup.ll
+++ b/llvm/test/CodeGen/X86/fast-isel-call-cleanup.ll
@@ -1,4 +1,4 @@
-; RUN: llc -fast-isel-sink-local-values -fast-isel -O0 -code-model=large -mcpu=generic -mtriple=x86_64-apple-darwin10 -relocation-model=pic < %s | FileCheck %s
+; RUN: llc -fast-isel-sink-local-values -fast-isel -O0 -code-model=large -mcpu=generic -mtriple=x86_64-linux -relocation-model=static < %s | FileCheck %s
; Check that fast-isel cleans up when it fails to lower a call instruction.
define void @fastiselcall() {
@@ -9,7 +9,7 @@ entry:
; FastISel's local value code was dead, so it's gone.
; CHECK-NOT: movl $42,
; SDag-ISel's arg mov:
-; CHECK: movabsq $_targetfn, %[[REG:[^ ]*]]
+; CHECK: movabsq $targetfn, %[[REG:[^ ]*]]
; CHECK: movl $42, %edi
; CHECK: callq *%[[REG]]
diff --git a/llvm/test/CodeGen/X86/hipe-cc64.ll b/llvm/test/CodeGen/X86/hipe-cc64.ll
index ce2d0e9c671..cf5788fc6b8 100644
--- a/llvm/test/CodeGen/X86/hipe-cc64.ll
+++ b/llvm/test/CodeGen/X86/hipe-cc64.ll
@@ -1,4 +1,4 @@
-; RUN: llc < %s -stack-symbol-ordering=0 -tailcallopt -code-model=medium -stack-alignment=8 -mtriple=x86_64-linux-gnu -mcpu=opteron | FileCheck %s
+; RUN: llc < %s -stack-symbol-ordering=0 -tailcallopt -relocation-model=static -code-model=medium -stack-alignment=8 -mtriple=x86_64-linux-gnu -mcpu=opteron | FileCheck %s
; Check the HiPE calling convention works (x86-64)
diff --git a/llvm/test/CodeGen/X86/variadic-node-pic.ll b/llvm/test/CodeGen/X86/variadic-node-pic.ll
index 704459e67a6..0d4287de403 100644
--- a/llvm/test/CodeGen/X86/variadic-node-pic.ll
+++ b/llvm/test/CodeGen/X86/variadic-node-pic.ll
@@ -1,4 +1,8 @@
-; RUN: llc < %s -relocation-model=pic -code-model=large
+; RUN: llc < %s -relocation-model=pic -code-model=large | FileCheck %s
+
+; CHECK-LABEL: foo:
+; CHECK: movabsq $_xscanf, %[[REG:[^ ]*]]
+; CHECK: callq *%[[REG]]
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
target triple = "x86_64-apple-darwin8"
diff --git a/llvm/test/ExecutionEngine/MCJIT/eh-lg-pic.ll b/llvm/test/ExecutionEngine/MCJIT/eh-lg-pic.ll
index b5b9d5409c5..8d41fe6b305 100644
--- a/llvm/test/ExecutionEngine/MCJIT/eh-lg-pic.ll
+++ b/llvm/test/ExecutionEngine/MCJIT/eh-lg-pic.ll
@@ -15,8 +15,14 @@ define void @throwException() {
unreachable
}
+; Make an internal function so we exercise R_X86_64_GOTOFF64 relocations.
+define internal dso_local void @use_gotoff() {
+ ret void
+}
+
define i32 @main() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
+ call void @use_gotoff()
invoke void @throwException()
to label %try.cont unwind label %lpad
diff --git a/llvm/test/ExecutionEngine/OrcMCJIT/eh-lg-pic.ll b/llvm/test/ExecutionEngine/OrcMCJIT/eh-lg-pic.ll
index 809f68ff3f9..ce927c06ca5 100644
--- a/llvm/test/ExecutionEngine/OrcMCJIT/eh-lg-pic.ll
+++ b/llvm/test/ExecutionEngine/OrcMCJIT/eh-lg-pic.ll
@@ -15,8 +15,14 @@ define void @throwException() {
unreachable
}
+; Make an internal function so we exercise R_X86_64_GOTOFF64 relocations.
+define internal dso_local void @use_gotoff() {
+ ret void
+}
+
define i32 @main() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
+ call void @use_gotoff()
invoke void @throwException()
to label %try.cont unwind label %lpad
OpenPOWER on IntegriCloud