; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; NOTE: Use the --no_x86_scrub_rip additional argument to keep the rip address math.

; RUN: llc < %s -mcpu=generic -mtriple=x86_64-unknown-linux-gnu -relocation-model=static -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=LINUX-64-STATIC
; RUN: llc < %s -mcpu=generic -mtriple=i686-unknown-linux-gnu -relocation-model=static -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=LINUX-32-STATIC
; RUN: llc < %s -mcpu=generic -mtriple=i686-unknown-linux-gnu -relocation-model=pic -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=LINUX-32-PIC
; RUN: llc < %s -mcpu=generic -mtriple=x86_64-unknown-linux-gnu -relocation-model=pic -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=LINUX-64-PIC

; RUN: llc < %s -mcpu=generic -mtriple=i686-apple-darwin -relocation-model=static -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=DARWIN-32-STATIC
; RUN: llc < %s -mcpu=generic -mtriple=i686-apple-darwin9 -relocation-model=dynamic-no-pic -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=DARWIN-32-DYNAMIC
; RUN: llc < %s -mcpu=generic -mtriple=i686-apple-darwin9 -relocation-model=pic -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=DARWIN-32-PIC

; RUN: llc < %s -mcpu=generic -mtriple=x86_64-apple-darwin -relocation-model=static -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=DARWIN-64-STATIC
; RUN: llc < %s -mcpu=generic -mtriple=x86_64-apple-darwin -relocation-model=dynamic-no-pic -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=DARWIN-64-DYNAMIC
; RUN: llc < %s -mcpu=generic -mtriple=x86_64-apple-darwin -relocation-model=pic -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=DARWIN-64-PIC

@src = external global [131072 x i32]
@dst = external global [131072 x i32]
@xsrc = external global [32 x i32]
@xdst = external global [32 x i32]
@ptr = external global i32*
@dsrc = global [131072 x i32] zeroinitializer, align 32
@ddst = global [131072 x i32] zeroinitializer, align 32
@dptr = global i32* null
@lsrc = internal global [131072 x i32] zeroinitializer
@ldst = internal global [131072 x i32] zeroinitializer
@lptr = internal global i32* null
@ifunc = external global void ()*
@difunc = global void ()* null
@lifunc = internal global void ()* null
@lxsrc = internal global [32 x i32] zeroinitializer, align 32
@lxdst = internal global [32 x i32] zeroinitializer, align 32
@dxsrc = global [32 x i32] zeroinitializer, align 32
@dxdst = global [32 x i32] zeroinitializer, align 32

define void @foo00() nounwind {
; LINUX-64-STATIC-LABEL: foo00:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl src(%rip), %eax
; LINUX-64-STATIC-NEXT:    movl %eax, dst(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: foo00:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl src, %eax
; LINUX-32-STATIC-NEXT:    movl %eax, dst
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: foo00:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L0$pb
; LINUX-32-PIC-NEXT:  .L0$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp0:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp0-.L0$pb), %eax
; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl (%ecx), %ecx
; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: foo00:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl (%rax), %eax
; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, (%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: foo00:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _src, %eax
; DARWIN-32-STATIC-NEXT:    movl %eax, _dst
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: foo00:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: foo00:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L0$pb
; DARWIN-32-PIC-NEXT:  L0$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L0$pb(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl (%ecx), %ecx
; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L0$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: foo00:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl (%rax), %eax
; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: foo00:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl (%rax), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: foo00:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl (%rax), %eax
; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 0), align 4
	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 0), align 4
	ret void

}

define void @fxo00() nounwind {
; LINUX-64-STATIC-LABEL: fxo00:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl xsrc(%rip), %eax
; LINUX-64-STATIC-NEXT:    movl %eax, xdst(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: fxo00:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl xsrc, %eax
; LINUX-32-STATIC-NEXT:    movl %eax, xdst
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: fxo00:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L1$pb
; LINUX-32-PIC-NEXT:  .L1$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp1:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp1-.L1$pb), %eax
; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl (%ecx), %ecx
; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: fxo00:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl (%rax), %eax
; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, (%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: fxo00:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _xsrc, %eax
; DARWIN-32-STATIC-NEXT:    movl %eax, _xdst
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: fxo00:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: fxo00:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L1$pb
; DARWIN-32-PIC-NEXT:  L1$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L1$pb(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl (%ecx), %ecx
; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L1$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: fxo00:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl (%rax), %eax
; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: fxo00:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl (%rax), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: fxo00:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl (%rax), %eax
; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32, i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 0), align 4
	store i32 %0, i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 0), align 4
	ret void

}

define void @foo01() nounwind {
; LINUX-64-STATIC-LABEL: foo01:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movq $dst, ptr(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: foo01:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $dst, ptr
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: foo01:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L2$pb
; LINUX-32-PIC-NEXT:  .L2$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp2:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp2-.L2$pb), %eax
; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: foo01:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: foo01:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_dst, _ptr
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: foo01:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: foo01:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L2$pb
; DARWIN-32-PIC-NEXT:  L2$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L2$pb(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L2$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: foo01:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movq %rax, (%rcx)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: foo01:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movq %rax, (%rcx)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: foo01:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movq %rax, (%rcx)
; DARWIN-64-PIC-NEXT:    retq

entry:
	store i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i32 0), i32** @ptr, align 8
	ret void
}

define void @fxo01() nounwind {
; LINUX-64-STATIC-LABEL: fxo01:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movq $xdst, ptr(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: fxo01:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $xdst, ptr
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: fxo01:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L3$pb
; LINUX-32-PIC-NEXT:  .L3$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp3:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp3-.L3$pb), %eax
; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: fxo01:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: fxo01:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_xdst, _ptr
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: fxo01:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: fxo01:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L3$pb
; DARWIN-32-PIC-NEXT:  L3$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L3$pb(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L3$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: fxo01:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movq %rax, (%rcx)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: fxo01:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movq %rax, (%rcx)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: fxo01:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movq %rax, (%rcx)
; DARWIN-64-PIC-NEXT:    retq

entry:
	store i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i32 0), i32** @ptr, align 8
	ret void
}

define void @foo02() nounwind {
; LINUX-64-STATIC-LABEL: foo02:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl src(%rip), %eax
; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rcx
; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: foo02:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl src, %eax
; LINUX-32-STATIC-NEXT:    movl ptr, %ecx
; LINUX-32-STATIC-NEXT:    movl %eax, (%ecx)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: foo02:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L4$pb
; LINUX-32-PIC-NEXT:  .L4$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp4:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp4-.L4$pb), %eax
; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl (%ecx), %ecx
; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl (%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: foo02:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl (%rax), %eax
; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, (%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: foo02:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _src, %eax
; DARWIN-32-STATIC-NEXT:    movl _ptr, %ecx
; DARWIN-32-STATIC-NEXT:    movl %eax, (%ecx)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: foo02:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: foo02:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L4$pb
; DARWIN-32-PIC-NEXT:  L4$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L4$pb(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl (%ecx), %ecx
; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L4$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: foo02:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl (%rax), %eax
; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: foo02:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl (%rax), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: foo02:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl (%rax), %eax
; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @ptr, align 8
	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 0), align 4
	store i32 %1, i32* %0, align 4
	ret void
}

define void @fxo02() nounwind {
; LINUX-64-STATIC-LABEL: fxo02:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl xsrc(%rip), %eax
; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rcx
; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: fxo02:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl xsrc, %eax
; LINUX-32-STATIC-NEXT:    movl ptr, %ecx
; LINUX-32-STATIC-NEXT:    movl %eax, (%ecx)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: fxo02:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L5$pb
; LINUX-32-PIC-NEXT:  .L5$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp5:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp5-.L5$pb), %eax
; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl (%ecx), %ecx
; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl (%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: fxo02:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl (%rax), %eax
; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, (%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: fxo02:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _xsrc, %eax
; DARWIN-32-STATIC-NEXT:    movl _ptr, %ecx
; DARWIN-32-STATIC-NEXT:    movl %eax, (%ecx)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: fxo02:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: fxo02:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L5$pb
; DARWIN-32-PIC-NEXT:  L5$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L5$pb(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl (%ecx), %ecx
; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L5$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: fxo02:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl (%rax), %eax
; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: fxo02:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl (%rax), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: fxo02:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl (%rax), %eax
; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @ptr, align 8
	%1 = load i32, i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 0), align 4
	store i32 %1, i32* %0, align 4
	ret void
}

define void @foo03() nounwind {
; LINUX-64-STATIC-LABEL: foo03:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl dsrc(%rip), %eax
; LINUX-64-STATIC-NEXT:    movl %eax, ddst(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: foo03:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl dsrc, %eax
; LINUX-32-STATIC-NEXT:    movl %eax, ddst
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: foo03:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L6$pb
; LINUX-32-PIC-NEXT:  .L6$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp6:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp6-.L6$pb), %eax
; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl (%ecx), %ecx
; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: foo03:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl (%rax), %eax
; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, (%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: foo03:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _dsrc, %eax
; DARWIN-32-STATIC-NEXT:    movl %eax, _ddst
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: foo03:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _ddst
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: foo03:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L6$pb
; DARWIN-32-PIC-NEXT:  L6$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl _dsrc-L6$pb(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl %ecx, _ddst-L6$pb(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: foo03:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movl _dsrc(%rip), %eax
; DARWIN-64-STATIC-NEXT:    movl %eax, _ddst(%rip)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: foo03:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movl _dsrc(%rip), %eax
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, _ddst(%rip)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: foo03:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movl _dsrc(%rip), %eax
; DARWIN-64-PIC-NEXT:    movl %eax, _ddst(%rip)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 0), align 32
	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 0), align 32
	ret void
}

define void @foo04() nounwind {
; LINUX-64-STATIC-LABEL: foo04:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movq $ddst, dptr(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: foo04:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $ddst, dptr
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: foo04:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L7$pb
; LINUX-32-PIC-NEXT:  .L7$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp7:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp7-.L7$pb), %eax
; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: foo04:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: foo04:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_ddst, _dptr
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: foo04:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $_ddst, _dptr
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: foo04:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L7$pb
; DARWIN-32-PIC-NEXT:  L7$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    leal _ddst-L7$pb(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl %ecx, _dptr-L7$pb(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: foo04:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movq %rax, _dptr(%rip)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: foo04:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _dptr(%rip)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: foo04:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
; DARWIN-64-PIC-NEXT:    movq %rax, _dptr(%rip)
; DARWIN-64-PIC-NEXT:    retq

entry:
	store i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i32 0), i32** @dptr, align 8
	ret void
}

define void @foo05() nounwind {
; LINUX-64-STATIC-LABEL: foo05:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl dsrc(%rip), %eax
; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rcx
; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: foo05:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl dsrc, %eax
; LINUX-32-STATIC-NEXT:    movl dptr, %ecx
; LINUX-32-STATIC-NEXT:    movl %eax, (%ecx)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: foo05:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L8$pb
; LINUX-32-PIC-NEXT:  .L8$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp8:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp8-.L8$pb), %eax
; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl (%ecx), %ecx
; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl (%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: foo05:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl (%rax), %eax
; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, (%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: foo05:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _dsrc, %eax
; DARWIN-32-STATIC-NEXT:    movl _dptr, %ecx
; DARWIN-32-STATIC-NEXT:    movl %eax, (%ecx)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: foo05:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: foo05:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L8$pb
; DARWIN-32-PIC-NEXT:  L8$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl _dsrc-L8$pb(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl _dptr-L8$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: foo05:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movl _dsrc(%rip), %eax
; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: foo05:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movl _dsrc(%rip), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: foo05:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movl _dsrc(%rip), %eax
; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @dptr, align 8
	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 0), align 32
	store i32 %1, i32* %0, align 4
	ret void
}

define void @foo06() nounwind {
; LINUX-64-STATIC-LABEL: foo06:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl lsrc(%rip), %eax
; LINUX-64-STATIC-NEXT:    movl %eax, ldst(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: foo06:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl lsrc, %eax
; LINUX-32-STATIC-NEXT:    movl %eax, ldst
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: foo06:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L9$pb
; LINUX-32-PIC-NEXT:  .L9$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp9:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp9-.L9$pb), %eax
; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl %ecx, ldst@GOTOFF(%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: foo06:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movl lsrc(%rip), %eax
; LINUX-64-PIC-NEXT:    movl %eax, ldst(%rip)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: foo06:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _lsrc, %eax
; DARWIN-32-STATIC-NEXT:    movl %eax, _ldst
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: foo06:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _ldst
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: foo06:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L9$pb
; DARWIN-32-PIC-NEXT:  L9$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl _lsrc-L9$pb(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl %ecx, _ldst-L9$pb(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: foo06:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movl _lsrc(%rip), %eax
; DARWIN-64-STATIC-NEXT:    movl %eax, _ldst(%rip)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: foo06:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movl _lsrc(%rip), %eax
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, _ldst(%rip)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: foo06:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movl _lsrc(%rip), %eax
; DARWIN-64-PIC-NEXT:    movl %eax, _ldst(%rip)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 0), align 4
	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 0), align 4
	ret void
}

define void @foo07() nounwind {
; LINUX-64-STATIC-LABEL: foo07:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movq $ldst, lptr(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: foo07:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $ldst, lptr
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: foo07:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L10$pb
; LINUX-32-PIC-NEXT:  .L10$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp10:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp10-.L10$pb), %eax
; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl %ecx, lptr@GOTOFF(%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: foo07:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
; LINUX-64-PIC-NEXT:    movq %rax, lptr(%rip)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: foo07:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_ldst, _lptr
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: foo07:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $_ldst, _lptr
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: foo07:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L10$pb
; DARWIN-32-PIC-NEXT:  L10$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    leal _ldst-L10$pb(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl %ecx, _lptr-L10$pb(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: foo07:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movq %rax, _lptr(%rip)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: foo07:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _lptr(%rip)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: foo07:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
; DARWIN-64-PIC-NEXT:    movq %rax, _lptr(%rip)
; DARWIN-64-PIC-NEXT:    retq

entry:
	store i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i32 0), i32** @lptr, align 8
	ret void
}

define void @foo08() nounwind {
; LINUX-64-STATIC-LABEL: foo08:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl lsrc(%rip), %eax
; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rcx
; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: foo08:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl lsrc, %eax
; LINUX-32-STATIC-NEXT:    movl lptr, %ecx
; LINUX-32-STATIC-NEXT:    movl %eax, (%ecx)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: foo08:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L11$pb
; LINUX-32-PIC-NEXT:  .L11$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp11:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp11-.L11$pb), %eax
; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: foo08:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movl lsrc(%rip), %eax
; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, (%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: foo08:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _lsrc, %eax
; DARWIN-32-STATIC-NEXT:    movl _lptr, %ecx
; DARWIN-32-STATIC-NEXT:    movl %eax, (%ecx)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: foo08:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: foo08:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L11$pb
; DARWIN-32-PIC-NEXT:  L11$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl _lsrc-L11$pb(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl _lptr-L11$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: foo08:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movl _lsrc(%rip), %eax
; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: foo08:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movl _lsrc(%rip), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: foo08:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movl _lsrc(%rip), %eax
; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @lptr, align 8
	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 0), align 4
	store i32 %1, i32* %0, align 4
	ret void
}

define void @qux00() nounwind {
; LINUX-64-STATIC-LABEL: qux00:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl src+64(%rip), %eax
; LINUX-64-STATIC-NEXT:    movl %eax, dst+64(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: qux00:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl src+64, %eax
; LINUX-32-STATIC-NEXT:    movl %eax, dst+64
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: qux00:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L12$pb
; LINUX-32-PIC-NEXT:  .L12$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp12:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp12-.L12$pb), %eax
; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl 64(%ecx), %ecx
; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: qux00:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl 64(%rax), %eax
; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: qux00:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _src+64, %eax
; DARWIN-32-STATIC-NEXT:    movl %eax, _dst+64
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: qux00:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl 64(%eax), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 64(%ecx)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: qux00:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L12$pb
; DARWIN-32-PIC-NEXT:  L12$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L12$pb(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl 64(%ecx), %ecx
; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L12$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %ecx, 64(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: qux00:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl 64(%rax), %eax
; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: qux00:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: qux00:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl 64(%rax), %eax
; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 16), align 4
	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 16), align 4
	ret void
}

define void @qxx00() nounwind {
; LINUX-64-STATIC-LABEL: qxx00:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl xsrc+64(%rip), %eax
; LINUX-64-STATIC-NEXT:    movl %eax, xdst+64(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: qxx00:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl xsrc+64, %eax
; LINUX-32-STATIC-NEXT:    movl %eax, xdst+64
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: qxx00:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L13$pb
; LINUX-32-PIC-NEXT:  .L13$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp13:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp13-.L13$pb), %eax
; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl 64(%ecx), %ecx
; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: qxx00:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl 64(%rax), %eax
; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: qxx00:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _xsrc+64, %eax
; DARWIN-32-STATIC-NEXT:    movl %eax, _xdst+64
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: qxx00:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl 64(%eax), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 64(%ecx)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: qxx00:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L13$pb
; DARWIN-32-PIC-NEXT:  L13$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L13$pb(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl 64(%ecx), %ecx
; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L13$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %ecx, 64(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: qxx00:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl 64(%rax), %eax
; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: qxx00:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: qxx00:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl 64(%rax), %eax
; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32, i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 16), align 4
	store i32 %0, i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 16), align 4
	ret void
}

define void @qux01() nounwind {
; LINUX-64-STATIC-LABEL: qux01:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movq $dst+64, ptr(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: qux01:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $dst+64, ptr
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: qux01:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L14$pb
; LINUX-32-PIC-NEXT:  .L14$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp14:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp14-.L14$pb), %eax
; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    addl $64, %ecx
; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: qux01:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    addq $64, %rax
; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: qux01:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_dst+64, _ptr
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: qux01:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: qux01:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L14$pb
; DARWIN-32-PIC-NEXT:  L14$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L14$pb(%eax), %ecx
; DARWIN-32-PIC-NEXT:    addl $64, %ecx
; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L14$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: qux01:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    addq $64, %rax
; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movq %rax, (%rcx)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: qux01:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movq %rax, (%rcx)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: qux01:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    addq $64, %rax
; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movq %rax, (%rcx)
; DARWIN-64-PIC-NEXT:    retq

entry:
	store i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 16), i32** @ptr, align 8
	ret void
}

define void @qxx01() nounwind {
; LINUX-64-STATIC-LABEL: qxx01:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movq $xdst+64, ptr(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: qxx01:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $xdst+64, ptr
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: qxx01:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L15$pb
; LINUX-32-PIC-NEXT:  .L15$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp15:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp15-.L15$pb), %eax
; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    addl $64, %ecx
; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: qxx01:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    addq $64, %rax
; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: qxx01:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_xdst+64, _ptr
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: qxx01:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: qxx01:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L15$pb
; DARWIN-32-PIC-NEXT:  L15$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L15$pb(%eax), %ecx
; DARWIN-32-PIC-NEXT:    addl $64, %ecx
; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L15$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: qxx01:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    addq $64, %rax
; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movq %rax, (%rcx)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: qxx01:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movq %rax, (%rcx)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: qxx01:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    addq $64, %rax
; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movq %rax, (%rcx)
; DARWIN-64-PIC-NEXT:    retq

entry:
	store i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 16), i32** @ptr, align 8
	ret void
}

define void @qux02() nounwind {
; LINUX-64-STATIC-LABEL: qux02:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl src+64(%rip), %eax
; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rcx
; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: qux02:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl src+64, %eax
; LINUX-32-STATIC-NEXT:    movl ptr, %ecx
; LINUX-32-STATIC-NEXT:    movl %eax, 64(%ecx)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: qux02:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L16$pb
; LINUX-32-PIC-NEXT:  .L16$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp16:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp16-.L16$pb), %eax
; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl 64(%ecx), %ecx
; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl (%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: qux02:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl 64(%rax), %eax
; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: qux02:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _src+64, %eax
; DARWIN-32-STATIC-NEXT:    movl _ptr, %ecx
; DARWIN-32-STATIC-NEXT:    movl %eax, 64(%ecx)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: qux02:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl 64(%eax), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 64(%ecx)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: qux02:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L16$pb
; DARWIN-32-PIC-NEXT:  L16$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L16$pb(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl 64(%ecx), %ecx
; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L16$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %ecx, 64(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: qux02:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl 64(%rax), %eax
; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: qux02:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: qux02:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl 64(%rax), %eax
; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @ptr, align 8
	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 16), align 4
	%2 = getelementptr i32, i32* %0, i64 16
	store i32 %1, i32* %2, align 4
	ret void
}

define void @qxx02() nounwind {
; LINUX-64-STATIC-LABEL: qxx02:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl xsrc+64(%rip), %eax
; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rcx
; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: qxx02:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl xsrc+64, %eax
; LINUX-32-STATIC-NEXT:    movl ptr, %ecx
; LINUX-32-STATIC-NEXT:    movl %eax, 64(%ecx)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: qxx02:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L17$pb
; LINUX-32-PIC-NEXT:  .L17$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp17:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp17-.L17$pb), %eax
; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl 64(%ecx), %ecx
; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl (%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: qxx02:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl 64(%rax), %eax
; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: qxx02:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _xsrc+64, %eax
; DARWIN-32-STATIC-NEXT:    movl _ptr, %ecx
; DARWIN-32-STATIC-NEXT:    movl %eax, 64(%ecx)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: qxx02:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl 64(%eax), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 64(%ecx)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: qxx02:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L17$pb
; DARWIN-32-PIC-NEXT:  L17$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L17$pb(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl 64(%ecx), %ecx
; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L17$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %ecx, 64(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: qxx02:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl 64(%rax), %eax
; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: qxx02:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: qxx02:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl 64(%rax), %eax
; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @ptr, align 8
	%1 = load i32, i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 16), align 4
	%2 = getelementptr i32, i32* %0, i64 16
	store i32 %1, i32* %2, align 4
	ret void
}

define void @qux03() nounwind {
; LINUX-64-STATIC-LABEL: qux03:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl dsrc+64(%rip), %eax
; LINUX-64-STATIC-NEXT:    movl %eax, ddst+64(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: qux03:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl dsrc+64, %eax
; LINUX-32-STATIC-NEXT:    movl %eax, ddst+64
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: qux03:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L18$pb
; LINUX-32-PIC-NEXT:  .L18$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp18:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp18-.L18$pb), %eax
; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl 64(%ecx), %ecx
; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: qux03:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl 64(%rax), %eax
; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: qux03:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _dsrc+64, %eax
; DARWIN-32-STATIC-NEXT:    movl %eax, _ddst+64
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: qux03:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc+64, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _ddst+64
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: qux03:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L18$pb
; DARWIN-32-PIC-NEXT:  L18$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl (_dsrc-L18$pb)+64(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl %ecx, (_ddst-L18$pb)+64(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: qux03:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movl _dsrc+64(%rip), %eax
; DARWIN-64-STATIC-NEXT:    movl %eax, _ddst+64(%rip)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: qux03:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movl _dsrc+64(%rip), %eax
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, _ddst+64(%rip)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: qux03:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movl _dsrc+64(%rip), %eax
; DARWIN-64-PIC-NEXT:    movl %eax, _ddst+64(%rip)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 16), align 32
	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 16), align 32
	ret void
}

define void @qux04() nounwind {
; LINUX-64-STATIC-LABEL: qux04:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movq $ddst+64, dptr(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: qux04:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $ddst+64, dptr
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: qux04:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L19$pb
; LINUX-32-PIC-NEXT:  .L19$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp19:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp19-.L19$pb), %eax
; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    addl $64, %ecx
; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: qux04:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    addq $64, %rax
; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: qux04:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_ddst+64, _dptr
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: qux04:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $_ddst+64, _dptr
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: qux04:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L19$pb
; DARWIN-32-PIC-NEXT:  L19$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    leal (_ddst-L19$pb)+64(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl %ecx, _dptr-L19$pb(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: qux04:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _ddst+64(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movq %rax, _dptr(%rip)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: qux04:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst+64(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _dptr(%rip)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: qux04:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _ddst+64(%rip), %rax
; DARWIN-64-PIC-NEXT:    movq %rax, _dptr(%rip)
; DARWIN-64-PIC-NEXT:    retq

entry:
	store i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 16), i32** @dptr, align 8
	ret void
}

define void @qux05() nounwind {
; LINUX-64-STATIC-LABEL: qux05:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl dsrc+64(%rip), %eax
; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rcx
; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: qux05:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl dsrc+64, %eax
; LINUX-32-STATIC-NEXT:    movl dptr, %ecx
; LINUX-32-STATIC-NEXT:    movl %eax, 64(%ecx)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: qux05:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L20$pb
; LINUX-32-PIC-NEXT:  .L20$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp20:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp20-.L20$pb), %eax
; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl 64(%ecx), %ecx
; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl (%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: qux05:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl 64(%rax), %eax
; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: qux05:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _dsrc+64, %eax
; DARWIN-32-STATIC-NEXT:    movl _dptr, %ecx
; DARWIN-32-STATIC-NEXT:    movl %eax, 64(%ecx)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: qux05:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc+64, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 64(%ecx)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: qux05:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L20$pb
; DARWIN-32-PIC-NEXT:  L20$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl (_dsrc-L20$pb)+64(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl _dptr-L20$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %ecx, 64(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: qux05:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movl _dsrc+64(%rip), %eax
; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: qux05:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movl _dsrc+64(%rip), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: qux05:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movl _dsrc+64(%rip), %eax
; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @dptr, align 8
	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 16), align 32
	%2 = getelementptr i32, i32* %0, i64 16
	store i32 %1, i32* %2, align 4
	ret void
}

define void @qux06() nounwind {
; LINUX-64-STATIC-LABEL: qux06:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl lsrc+64(%rip), %eax
; LINUX-64-STATIC-NEXT:    movl %eax, ldst+64(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: qux06:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl lsrc+64, %eax
; LINUX-32-STATIC-NEXT:    movl %eax, ldst+64
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: qux06:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L21$pb
; LINUX-32-PIC-NEXT:  .L21$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp21:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp21-.L21$pb), %eax
; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF+64(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl %ecx, ldst@GOTOFF+64(%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: qux06:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movl lsrc+64(%rip), %eax
; LINUX-64-PIC-NEXT:    movl %eax, ldst+64(%rip)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: qux06:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _lsrc+64, %eax
; DARWIN-32-STATIC-NEXT:    movl %eax, _ldst+64
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: qux06:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc+64, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _ldst+64
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: qux06:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L21$pb
; DARWIN-32-PIC-NEXT:  L21$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl (_lsrc-L21$pb)+64(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl %ecx, (_ldst-L21$pb)+64(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: qux06:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movl _lsrc+64(%rip), %eax
; DARWIN-64-STATIC-NEXT:    movl %eax, _ldst+64(%rip)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: qux06:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movl _lsrc+64(%rip), %eax
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, _ldst+64(%rip)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: qux06:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movl _lsrc+64(%rip), %eax
; DARWIN-64-PIC-NEXT:    movl %eax, _ldst+64(%rip)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 16), align 4
	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 16), align 4
	ret void
}

define void @qux07() nounwind {
; LINUX-64-STATIC-LABEL: qux07:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movq $ldst+64, lptr(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: qux07:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $ldst+64, lptr
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: qux07:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L22$pb
; LINUX-32-PIC-NEXT:  .L22$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp22:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp22-.L22$pb), %eax
; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+64(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl %ecx, lptr@GOTOFF(%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: qux07:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    leaq ldst+64(%rip), %rax
; LINUX-64-PIC-NEXT:    movq %rax, lptr(%rip)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: qux07:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_ldst+64, _lptr
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: qux07:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $_ldst+64, _lptr
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: qux07:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L22$pb
; DARWIN-32-PIC-NEXT:  L22$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    leal (_ldst-L22$pb)+64(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl %ecx, _lptr-L22$pb(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: qux07:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _ldst+64(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movq %rax, _lptr(%rip)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: qux07:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst+64(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _lptr(%rip)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: qux07:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _ldst+64(%rip), %rax
; DARWIN-64-PIC-NEXT:    movq %rax, _lptr(%rip)
; DARWIN-64-PIC-NEXT:    retq

entry:
	store i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 16), i32** @lptr, align 8
	ret void
}

define void @qux08() nounwind {
; LINUX-64-STATIC-LABEL: qux08:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl lsrc+64(%rip), %eax
; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rcx
; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: qux08:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl lsrc+64, %eax
; LINUX-32-STATIC-NEXT:    movl lptr, %ecx
; LINUX-32-STATIC-NEXT:    movl %eax, 64(%ecx)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: qux08:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L23$pb
; LINUX-32-PIC-NEXT:  .L23$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp23:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp23-.L23$pb), %eax
; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF+64(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: qux08:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movl lsrc+64(%rip), %eax
; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: qux08:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _lsrc+64, %eax
; DARWIN-32-STATIC-NEXT:    movl _lptr, %ecx
; DARWIN-32-STATIC-NEXT:    movl %eax, 64(%ecx)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: qux08:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc+64, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 64(%ecx)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: qux08:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L23$pb
; DARWIN-32-PIC-NEXT:  L23$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl (_lsrc-L23$pb)+64(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl _lptr-L23$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %ecx, 64(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: qux08:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movl _lsrc+64(%rip), %eax
; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: qux08:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movl _lsrc+64(%rip), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: qux08:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movl _lsrc+64(%rip), %eax
; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @lptr, align 8
	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 16), align 4
	%2 = getelementptr i32, i32* %0, i64 16
	store i32 %1, i32* %2, align 4
	ret void
}

define void @ind00(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: ind00:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl src(,%rdi,4), %eax
; LINUX-64-STATIC-NEXT:    movl %eax, dst(,%rdi,4)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: ind00:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl src(,%eax,4), %ecx
; LINUX-32-STATIC-NEXT:    movl %ecx, dst(,%eax,4)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: ind00:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L24$pb
; LINUX-32-PIC-NEXT:  .L24$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp24:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp24-.L24$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %edx
; LINUX-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: ind00:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: ind00:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _src(,%eax,4), %ecx
; DARWIN-32-STATIC-NEXT:    movl %ecx, _dst(,%eax,4)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: ind00:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx,%eax,4), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %edx
; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, (%edx,%eax,4)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: ind00:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L24$pb
; DARWIN-32-PIC-NEXT:  L24$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L24$pb(%eax), %edx
; DARWIN-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L24$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: ind00:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: ind00:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl (%rax,%rdi,4), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: ind00:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %i
	%1 = load i32, i32* %0, align 4
	%2 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %i
	store i32 %1, i32* %2, align 4
	ret void
}

define void @ixd00(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: ixd00:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl xsrc(,%rdi,4), %eax
; LINUX-64-STATIC-NEXT:    movl %eax, xdst(,%rdi,4)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: ixd00:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl xsrc(,%eax,4), %ecx
; LINUX-32-STATIC-NEXT:    movl %ecx, xdst(,%eax,4)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: ixd00:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L25$pb
; LINUX-32-PIC-NEXT:  .L25$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp25:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp25-.L25$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %edx
; LINUX-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: ixd00:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: ixd00:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _xsrc(,%eax,4), %ecx
; DARWIN-32-STATIC-NEXT:    movl %ecx, _xdst(,%eax,4)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: ixd00:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx,%eax,4), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %edx
; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, (%edx,%eax,4)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: ixd00:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L25$pb
; DARWIN-32-PIC-NEXT:  L25$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L25$pb(%eax), %edx
; DARWIN-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L25$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: ixd00:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: ixd00:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl (%rax,%rdi,4), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: ixd00:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %i
	%1 = load i32, i32* %0, align 4
	%2 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %i
	store i32 %1, i32* %2, align 4
	ret void
}

define void @ind01(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: ind01:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq dst(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    movq %rax, ptr(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: ind01:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal dst(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    movl %eax, ptr
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: ind01:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L26$pb
; LINUX-32-PIC-NEXT:  .L26$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp26:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp26-.L26$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    shll $2, %ecx
; LINUX-32-PIC-NEXT:    addl dst@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: ind01:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    shlq $2, %rdi
; LINUX-64-PIC-NEXT:    addq dst@GOTPCREL(%rip), %rdi
; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movq %rdi, (%rax)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: ind01:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _dst(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    movl %eax, _ptr
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: ind01:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    shll $2, %eax
; DARWIN-32-DYNAMIC-NEXT:    addl L_dst$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: ind01:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L26$pb
; DARWIN-32-PIC-NEXT:  L26$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    shll $2, %ecx
; DARWIN-32-PIC-NEXT:    addl L_dst$non_lazy_ptr-L26$pb(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L26$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: ind01:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    shlq $2, %rdi
; DARWIN-64-STATIC-NEXT:    addq _dst@GOTPCREL(%rip), %rdi
; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movq %rdi, (%rax)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: ind01:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    shlq $2, %rdi
; DARWIN-64-DYNAMIC-NEXT:    addq _dst@GOTPCREL(%rip), %rdi
; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movq %rdi, (%rax)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: ind01:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    shlq $2, %rdi
; DARWIN-64-PIC-NEXT:    addq _dst@GOTPCREL(%rip), %rdi
; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movq %rdi, (%rax)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %i
	store i32* %0, i32** @ptr, align 8
	ret void
}

define void @ixd01(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: ixd01:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq xdst(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    movq %rax, ptr(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: ixd01:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal xdst(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    movl %eax, ptr
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: ixd01:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L27$pb
; LINUX-32-PIC-NEXT:  .L27$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp27:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp27-.L27$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    shll $2, %ecx
; LINUX-32-PIC-NEXT:    addl xdst@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: ixd01:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    shlq $2, %rdi
; LINUX-64-PIC-NEXT:    addq xdst@GOTPCREL(%rip), %rdi
; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movq %rdi, (%rax)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: ixd01:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _xdst(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    movl %eax, _ptr
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: ixd01:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    shll $2, %eax
; DARWIN-32-DYNAMIC-NEXT:    addl L_xdst$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: ixd01:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L27$pb
; DARWIN-32-PIC-NEXT:  L27$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    shll $2, %ecx
; DARWIN-32-PIC-NEXT:    addl L_xdst$non_lazy_ptr-L27$pb(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L27$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: ixd01:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    shlq $2, %rdi
; DARWIN-64-STATIC-NEXT:    addq _xdst@GOTPCREL(%rip), %rdi
; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movq %rdi, (%rax)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: ixd01:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    shlq $2, %rdi
; DARWIN-64-DYNAMIC-NEXT:    addq _xdst@GOTPCREL(%rip), %rdi
; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movq %rdi, (%rax)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: ixd01:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    shlq $2, %rdi
; DARWIN-64-PIC-NEXT:    addq _xdst@GOTPCREL(%rip), %rdi
; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movq %rdi, (%rax)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %i
	store i32* %0, i32** @ptr, align 8
	ret void
}

define void @ind02(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: ind02:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl src(,%rdi,4), %eax
; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rcx
; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: ind02:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl src(,%eax,4), %ecx
; LINUX-32-STATIC-NEXT:    movl ptr, %edx
; LINUX-32-STATIC-NEXT:    movl %ecx, (%edx,%eax,4)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: ind02:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L28$pb
; LINUX-32-PIC-NEXT:  .L28$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp28:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp28-.L28$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %edx
; LINUX-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl (%eax), %eax
; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: ind02:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: ind02:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _src(,%eax,4), %ecx
; DARWIN-32-STATIC-NEXT:    movl _ptr, %edx
; DARWIN-32-STATIC-NEXT:    movl %ecx, (%edx,%eax,4)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: ind02:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx,%eax,4), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %edx
; DARWIN-32-DYNAMIC-NEXT:    movl (%edx), %edx
; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, (%edx,%eax,4)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: ind02:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L28$pb
; DARWIN-32-PIC-NEXT:  L28$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L28$pb(%eax), %edx
; DARWIN-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L28$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: ind02:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: ind02:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl (%rax,%rdi,4), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: ind02:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @ptr, align 8
	%1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %i
	%2 = load i32, i32* %1, align 4
	%3 = getelementptr i32, i32* %0, i64 %i
	store i32 %2, i32* %3, align 4
	ret void
}

define void @ixd02(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: ixd02:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl xsrc(,%rdi,4), %eax
; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rcx
; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: ixd02:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl xsrc(,%eax,4), %ecx
; LINUX-32-STATIC-NEXT:    movl ptr, %edx
; LINUX-32-STATIC-NEXT:    movl %ecx, (%edx,%eax,4)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: ixd02:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L29$pb
; LINUX-32-PIC-NEXT:  .L29$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp29:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp29-.L29$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %edx
; LINUX-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl (%eax), %eax
; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: ixd02:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: ixd02:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _xsrc(,%eax,4), %ecx
; DARWIN-32-STATIC-NEXT:    movl _ptr, %edx
; DARWIN-32-STATIC-NEXT:    movl %ecx, (%edx,%eax,4)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: ixd02:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx,%eax,4), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %edx
; DARWIN-32-DYNAMIC-NEXT:    movl (%edx), %edx
; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, (%edx,%eax,4)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: ixd02:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L29$pb
; DARWIN-32-PIC-NEXT:  L29$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L29$pb(%eax), %edx
; DARWIN-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L29$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: ixd02:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: ixd02:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl (%rax,%rdi,4), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: ixd02:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @ptr, align 8
	%1 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %i
	%2 = load i32, i32* %1, align 4
	%3 = getelementptr i32, i32* %0, i64 %i
	store i32 %2, i32* %3, align 4
	ret void
}

define void @ind03(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: ind03:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl dsrc(,%rdi,4), %eax
; LINUX-64-STATIC-NEXT:    movl %eax, ddst(,%rdi,4)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: ind03:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl dsrc(,%eax,4), %ecx
; LINUX-32-STATIC-NEXT:    movl %ecx, ddst(,%eax,4)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: ind03:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L30$pb
; LINUX-32-PIC-NEXT:  .L30$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp30:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp30-.L30$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %edx
; LINUX-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: ind03:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: ind03:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _dsrc(,%eax,4), %ecx
; DARWIN-32-STATIC-NEXT:    movl %ecx, _ddst(,%eax,4)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: ind03:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc(,%eax,4), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, _ddst(,%eax,4)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: ind03:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L30$pb
; DARWIN-32-PIC-NEXT:  L30$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl _dsrc-L30$pb(%eax,%ecx,4), %edx
; DARWIN-32-PIC-NEXT:    movl %edx, _ddst-L30$pb(%eax,%ecx,4)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: ind03:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: ind03:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl (%rax,%rdi,4), %eax
; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: ind03:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %i
	%1 = load i32, i32* %0, align 4
	%2 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %i
	store i32 %1, i32* %2, align 4
	ret void
}

define void @ind04(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: ind04:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq ddst(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    movq %rax, dptr(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: ind04:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal ddst(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    movl %eax, dptr
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: ind04:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L31$pb
; LINUX-32-PIC-NEXT:  .L31$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp31:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp31-.L31$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    shll $2, %ecx
; LINUX-32-PIC-NEXT:    addl ddst@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: ind04:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    shlq $2, %rdi
; LINUX-64-PIC-NEXT:    addq ddst@GOTPCREL(%rip), %rdi
; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movq %rdi, (%rax)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: ind04:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _ddst(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    movl %eax, _dptr
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: ind04:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    leal _ddst(,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _dptr
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: ind04:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L31$pb
; DARWIN-32-PIC-NEXT:  L31$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    leal _ddst-L31$pb(%eax,%ecx,4), %ecx
; DARWIN-32-PIC-NEXT:    movl %ecx, _dptr-L31$pb(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: ind04:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq (%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    movq %rax, _dptr(%rip)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: ind04:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq (%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _dptr(%rip)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: ind04:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq (%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    movq %rax, _dptr(%rip)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %i
	store i32* %0, i32** @dptr, align 8
	ret void
}

define void @ind05(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: ind05:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl dsrc(,%rdi,4), %eax
; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rcx
; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: ind05:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl dsrc(,%eax,4), %ecx
; LINUX-32-STATIC-NEXT:    movl dptr, %edx
; LINUX-32-STATIC-NEXT:    movl %ecx, (%edx,%eax,4)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: ind05:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L32$pb
; LINUX-32-PIC-NEXT:  .L32$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp32:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp32-.L32$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %edx
; LINUX-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl (%eax), %eax
; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: ind05:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: ind05:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _dsrc(,%eax,4), %ecx
; DARWIN-32-STATIC-NEXT:    movl _dptr, %edx
; DARWIN-32-STATIC-NEXT:    movl %ecx, (%edx,%eax,4)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: ind05:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc(,%eax,4), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %edx
; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, (%edx,%eax,4)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: ind05:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L32$pb
; DARWIN-32-PIC-NEXT:  L32$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl _dsrc-L32$pb(%eax,%ecx,4), %edx
; DARWIN-32-PIC-NEXT:    movl _dptr-L32$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: ind05:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: ind05:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl (%rax,%rdi,4), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: ind05:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @dptr, align 8
	%1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %i
	%2 = load i32, i32* %1, align 4
	%3 = getelementptr i32, i32* %0, i64 %i
	store i32 %2, i32* %3, align 4
	ret void
}

define void @ind06(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: ind06:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl lsrc(,%rdi,4), %eax
; LINUX-64-STATIC-NEXT:    movl %eax, ldst(,%rdi,4)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: ind06:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl lsrc(,%eax,4), %ecx
; LINUX-32-STATIC-NEXT:    movl %ecx, ldst(,%eax,4)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: ind06:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L33$pb
; LINUX-32-PIC-NEXT:  .L33$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp33:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp33-.L33$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF(%eax,%ecx,4), %edx
; LINUX-32-PIC-NEXT:    movl %edx, ldst@GOTOFF(%eax,%ecx,4)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: ind06:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
; LINUX-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: ind06:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _lsrc(,%eax,4), %ecx
; DARWIN-32-STATIC-NEXT:    movl %ecx, _ldst(,%eax,4)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: ind06:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc(,%eax,4), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, _ldst(,%eax,4)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: ind06:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L33$pb
; DARWIN-32-PIC-NEXT:  L33$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl _lsrc-L33$pb(%eax,%ecx,4), %edx
; DARWIN-32-PIC-NEXT:    movl %edx, _ldst-L33$pb(%eax,%ecx,4)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: ind06:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: ind06:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl (%rax,%rdi,4), %eax
; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: ind06:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %i
	%1 = load i32, i32* %0, align 4
	%2 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %i
	store i32 %1, i32* %2, align 4
	ret void
}

define void @ind07(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: ind07:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq ldst(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    movq %rax, lptr(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: ind07:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal ldst(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    movl %eax, lptr
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: ind07:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L34$pb
; LINUX-32-PIC-NEXT:  .L34$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp34:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp34-.L34$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF(%eax,%ecx,4), %ecx
; LINUX-32-PIC-NEXT:    movl %ecx, lptr@GOTOFF(%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: ind07:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
; LINUX-64-PIC-NEXT:    leaq (%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    movq %rax, lptr(%rip)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: ind07:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _ldst(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    movl %eax, _lptr
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: ind07:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    leal _ldst(,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _lptr
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: ind07:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L34$pb
; DARWIN-32-PIC-NEXT:  L34$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    leal _ldst-L34$pb(%eax,%ecx,4), %ecx
; DARWIN-32-PIC-NEXT:    movl %ecx, _lptr-L34$pb(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: ind07:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq (%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    movq %rax, _lptr(%rip)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: ind07:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq (%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _lptr(%rip)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: ind07:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq (%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    movq %rax, _lptr(%rip)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %i
	store i32* %0, i32** @lptr, align 8
	ret void
}

define void @ind08(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: ind08:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl lsrc(,%rdi,4), %eax
; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rcx
; LINUX-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: ind08:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl lsrc(,%eax,4), %ecx
; LINUX-32-STATIC-NEXT:    movl lptr, %edx
; LINUX-32-STATIC-NEXT:    movl %ecx, (%edx,%eax,4)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: ind08:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L35$pb
; LINUX-32-PIC-NEXT:  .L35$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp35:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp35-.L35$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF(%eax,%ecx,4), %edx
; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: ind08:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
; LINUX-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: ind08:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _lsrc(,%eax,4), %ecx
; DARWIN-32-STATIC-NEXT:    movl _lptr, %edx
; DARWIN-32-STATIC-NEXT:    movl %ecx, (%edx,%eax,4)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: ind08:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc(,%eax,4), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %edx
; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, (%edx,%eax,4)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: ind08:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L35$pb
; DARWIN-32-PIC-NEXT:  L35$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl _lsrc-L35$pb(%eax,%ecx,4), %edx
; DARWIN-32-PIC-NEXT:    movl _lptr-L35$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: ind08:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl (%rax,%rdi,4), %eax
; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: ind08:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl (%rax,%rdi,4), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: ind08:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl (%rax,%rdi,4), %eax
; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, (%rcx,%rdi,4)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @lptr, align 8
	%1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %i
	%2 = load i32, i32* %1, align 4
	%3 = getelementptr i32, i32* %0, i64 %i
	store i32 %2, i32* %3, align 4
	ret void
}

define void @off00(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: off00:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl src+64(,%rdi,4), %eax
; LINUX-64-STATIC-NEXT:    movl %eax, dst+64(,%rdi,4)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: off00:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl src+64(,%eax,4), %ecx
; LINUX-32-STATIC-NEXT:    movl %ecx, dst+64(,%eax,4)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: off00:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L36$pb
; LINUX-32-PIC-NEXT:  .L36$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp36:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp36-.L36$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %edx
; LINUX-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: off00:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: off00:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _src+64(,%eax,4), %ecx
; DARWIN-32-STATIC-NEXT:    movl %ecx, _dst+64(,%eax,4)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: off00:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl 64(%ecx,%eax,4), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %edx
; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: off00:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L36$pb
; DARWIN-32-PIC-NEXT:  L36$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L36$pb(%eax), %edx
; DARWIN-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L36$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: off00:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: off00:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: off00:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = add i64 %i, 16
	%1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %0
	%2 = load i32, i32* %1, align 4
	%3 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %0
	store i32 %2, i32* %3, align 4
	ret void
}

define void @oxf00(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: oxf00:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl xsrc+64(,%rdi,4), %eax
; LINUX-64-STATIC-NEXT:    movl %eax, xdst+64(,%rdi,4)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: oxf00:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl xsrc+64(,%eax,4), %ecx
; LINUX-32-STATIC-NEXT:    movl %ecx, xdst+64(,%eax,4)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: oxf00:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L37$pb
; LINUX-32-PIC-NEXT:  .L37$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp37:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp37-.L37$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %edx
; LINUX-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: oxf00:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: oxf00:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _xsrc+64(,%eax,4), %ecx
; DARWIN-32-STATIC-NEXT:    movl %ecx, _xdst+64(,%eax,4)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: oxf00:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl 64(%ecx,%eax,4), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %edx
; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: oxf00:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L37$pb
; DARWIN-32-PIC-NEXT:  L37$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L37$pb(%eax), %edx
; DARWIN-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L37$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: oxf00:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: oxf00:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: oxf00:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = add i64 %i, 16
	%1 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %0
	%2 = load i32, i32* %1, align 4
	%3 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %0
	store i32 %2, i32* %3, align 4
	ret void
}

define void @off01(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: off01:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq dst+64(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    movq %rax, ptr(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: off01:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal dst+64(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    movl %eax, ptr
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: off01:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L38$pb
; LINUX-32-PIC-NEXT:  .L38$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp38:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp38-.L38$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %edx
; LINUX-32-PIC-NEXT:    leal 64(%edx,%ecx,4), %ecx
; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: off01:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: off01:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _dst+64(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    movl %eax, _ptr
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: off01:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: off01:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L38$pb
; DARWIN-32-PIC-NEXT:  L38$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L38$pb(%eax), %edx
; DARWIN-32-PIC-NEXT:    leal 64(%edx,%ecx,4), %ecx
; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L38$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: off01:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movq %rax, (%rcx)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: off01:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movq %rax, (%rcx)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: off01:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movq %rax, (%rcx)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%.sum = add i64 %i, 16
	%0 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %.sum
	store i32* %0, i32** @ptr, align 8
	ret void
}

define void @oxf01(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: oxf01:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq xdst+64(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    movq %rax, ptr(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: oxf01:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal xdst+64(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    movl %eax, ptr
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: oxf01:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L39$pb
; LINUX-32-PIC-NEXT:  .L39$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp39:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp39-.L39$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %edx
; LINUX-32-PIC-NEXT:    leal 64(%edx,%ecx,4), %ecx
; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: oxf01:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: oxf01:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _xdst+64(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    movl %eax, _ptr
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: oxf01:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: oxf01:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L39$pb
; DARWIN-32-PIC-NEXT:  L39$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L39$pb(%eax), %edx
; DARWIN-32-PIC-NEXT:    leal 64(%edx,%ecx,4), %ecx
; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L39$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: oxf01:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movq %rax, (%rcx)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: oxf01:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movq %rax, (%rcx)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: oxf01:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movq %rax, (%rcx)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%.sum = add i64 %i, 16
	%0 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %.sum
	store i32* %0, i32** @ptr, align 8
	ret void
}

define void @off02(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: off02:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl src+64(,%rdi,4), %eax
; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rcx
; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: off02:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl src+64(,%eax,4), %ecx
; LINUX-32-STATIC-NEXT:    movl ptr, %edx
; LINUX-32-STATIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: off02:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L40$pb
; LINUX-32-PIC-NEXT:  .L40$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp40:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp40-.L40$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %edx
; LINUX-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl (%eax), %eax
; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: off02:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: off02:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _src+64(,%eax,4), %ecx
; DARWIN-32-STATIC-NEXT:    movl _ptr, %edx
; DARWIN-32-STATIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: off02:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl 64(%ecx,%eax,4), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %edx
; DARWIN-32-DYNAMIC-NEXT:    movl (%edx), %edx
; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: off02:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L40$pb
; DARWIN-32-PIC-NEXT:  L40$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L40$pb(%eax), %edx
; DARWIN-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L40$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: off02:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: off02:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: off02:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @ptr, align 8
	%1 = add i64 %i, 16
	%2 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %1
	%3 = load i32, i32* %2, align 4
	%4 = getelementptr i32, i32* %0, i64 %1
	store i32 %3, i32* %4, align 4
	ret void
}

define void @oxf02(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: oxf02:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl xsrc+64(,%rdi,4), %eax
; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rcx
; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: oxf02:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl xsrc+64(,%eax,4), %ecx
; LINUX-32-STATIC-NEXT:    movl ptr, %edx
; LINUX-32-STATIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: oxf02:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L41$pb
; LINUX-32-PIC-NEXT:  .L41$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp41:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp41-.L41$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %edx
; LINUX-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl (%eax), %eax
; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: oxf02:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: oxf02:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _xsrc+64(,%eax,4), %ecx
; DARWIN-32-STATIC-NEXT:    movl _ptr, %edx
; DARWIN-32-STATIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: oxf02:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl 64(%ecx,%eax,4), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %edx
; DARWIN-32-DYNAMIC-NEXT:    movl (%edx), %edx
; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: oxf02:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L41$pb
; DARWIN-32-PIC-NEXT:  L41$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L41$pb(%eax), %edx
; DARWIN-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L41$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: oxf02:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: oxf02:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: oxf02:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @ptr, align 8
	%1 = add i64 %i, 16
	%2 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %1
	%3 = load i32, i32* %2, align 4
	%4 = getelementptr i32, i32* %0, i64 %1
	store i32 %3, i32* %4, align 4
	ret void
}

define void @off03(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: off03:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl dsrc+64(,%rdi,4), %eax
; LINUX-64-STATIC-NEXT:    movl %eax, ddst+64(,%rdi,4)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: off03:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl dsrc+64(,%eax,4), %ecx
; LINUX-32-STATIC-NEXT:    movl %ecx, ddst+64(,%eax,4)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: off03:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L42$pb
; LINUX-32-PIC-NEXT:  .L42$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp42:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp42-.L42$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %edx
; LINUX-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: off03:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: off03:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _dsrc+64(,%eax,4), %ecx
; DARWIN-32-STATIC-NEXT:    movl %ecx, _ddst+64(,%eax,4)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: off03:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc+64(,%eax,4), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, _ddst+64(,%eax,4)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: off03:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L42$pb
; DARWIN-32-PIC-NEXT:  L42$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl (_dsrc-L42$pb)+64(%eax,%ecx,4), %edx
; DARWIN-32-PIC-NEXT:    movl %edx, (_ddst-L42$pb)+64(%eax,%ecx,4)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: off03:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: off03:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: off03:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = add i64 %i, 16
	%1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %0
	%2 = load i32, i32* %1, align 4
	%3 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %0
	store i32 %2, i32* %3, align 4
	ret void
}

define void @off04(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: off04:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq ddst+64(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    movq %rax, dptr(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: off04:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal ddst+64(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    movl %eax, dptr
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: off04:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L43$pb
; LINUX-32-PIC-NEXT:  .L43$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp43:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp43-.L43$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %edx
; LINUX-32-PIC-NEXT:    leal 64(%edx,%ecx,4), %ecx
; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: off04:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: off04:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _ddst+64(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    movl %eax, _dptr
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: off04:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    leal _ddst+64(,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _dptr
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: off04:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L43$pb
; DARWIN-32-PIC-NEXT:  L43$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    leal (_ddst-L43$pb)+64(%eax,%ecx,4), %ecx
; DARWIN-32-PIC-NEXT:    movl %ecx, _dptr-L43$pb(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: off04:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    movq %rax, _dptr(%rip)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: off04:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _dptr(%rip)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: off04:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    movq %rax, _dptr(%rip)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%.sum = add i64 %i, 16
	%0 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %.sum
	store i32* %0, i32** @dptr, align 8
	ret void
}

define void @off05(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: off05:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl dsrc+64(,%rdi,4), %eax
; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rcx
; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: off05:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl dsrc+64(,%eax,4), %ecx
; LINUX-32-STATIC-NEXT:    movl dptr, %edx
; LINUX-32-STATIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: off05:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L44$pb
; LINUX-32-PIC-NEXT:  .L44$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp44:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp44-.L44$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %edx
; LINUX-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl (%eax), %eax
; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: off05:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: off05:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _dsrc+64(,%eax,4), %ecx
; DARWIN-32-STATIC-NEXT:    movl _dptr, %edx
; DARWIN-32-STATIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: off05:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc+64(,%eax,4), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %edx
; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: off05:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L44$pb
; DARWIN-32-PIC-NEXT:  L44$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl (_dsrc-L44$pb)+64(%eax,%ecx,4), %edx
; DARWIN-32-PIC-NEXT:    movl _dptr-L44$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: off05:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: off05:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: off05:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @dptr, align 8
	%1 = add i64 %i, 16
	%2 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %1
	%3 = load i32, i32* %2, align 4
	%4 = getelementptr i32, i32* %0, i64 %1
	store i32 %3, i32* %4, align 4
	ret void
}

define void @off06(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: off06:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl lsrc+64(,%rdi,4), %eax
; LINUX-64-STATIC-NEXT:    movl %eax, ldst+64(,%rdi,4)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: off06:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl lsrc+64(,%eax,4), %ecx
; LINUX-32-STATIC-NEXT:    movl %ecx, ldst+64(,%eax,4)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: off06:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L45$pb
; LINUX-32-PIC-NEXT:  .L45$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp45:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp45-.L45$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF+64(%eax,%ecx,4), %edx
; LINUX-32-PIC-NEXT:    movl %edx, ldst@GOTOFF+64(%eax,%ecx,4)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: off06:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
; LINUX-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: off06:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _lsrc+64(,%eax,4), %ecx
; DARWIN-32-STATIC-NEXT:    movl %ecx, _ldst+64(,%eax,4)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: off06:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc+64(,%eax,4), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, _ldst+64(,%eax,4)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: off06:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L45$pb
; DARWIN-32-PIC-NEXT:  L45$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl (_lsrc-L45$pb)+64(%eax,%ecx,4), %edx
; DARWIN-32-PIC-NEXT:    movl %edx, (_ldst-L45$pb)+64(%eax,%ecx,4)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: off06:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: off06:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: off06:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = add i64 %i, 16
	%1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %0
	%2 = load i32, i32* %1, align 4
	%3 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %0
	store i32 %2, i32* %3, align 4
	ret void
}

define void @off07(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: off07:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq ldst+64(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    movq %rax, lptr(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: off07:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal ldst+64(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    movl %eax, lptr
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: off07:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L46$pb
; LINUX-32-PIC-NEXT:  .L46$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp46:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp46-.L46$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+64(%eax,%ecx,4), %ecx
; LINUX-32-PIC-NEXT:    movl %ecx, lptr@GOTOFF(%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: off07:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    movq %rax, lptr(%rip)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: off07:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _ldst+64(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    movl %eax, _lptr
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: off07:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    leal _ldst+64(,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _lptr
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: off07:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L46$pb
; DARWIN-32-PIC-NEXT:  L46$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    leal (_ldst-L46$pb)+64(%eax,%ecx,4), %ecx
; DARWIN-32-PIC-NEXT:    movl %ecx, _lptr-L46$pb(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: off07:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    movq %rax, _lptr(%rip)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: off07:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _lptr(%rip)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: off07:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    movq %rax, _lptr(%rip)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%.sum = add i64 %i, 16
	%0 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %.sum
	store i32* %0, i32** @lptr, align 8
	ret void
}

define void @off08(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: off08:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl lsrc+64(,%rdi,4), %eax
; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rcx
; LINUX-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: off08:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl lsrc+64(,%eax,4), %ecx
; LINUX-32-STATIC-NEXT:    movl lptr, %edx
; LINUX-32-STATIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: off08:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L47$pb
; LINUX-32-PIC-NEXT:  .L47$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp47:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp47-.L47$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF+64(%eax,%ecx,4), %edx
; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: off08:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
; LINUX-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: off08:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _lsrc+64(,%eax,4), %ecx
; DARWIN-32-STATIC-NEXT:    movl _lptr, %edx
; DARWIN-32-STATIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: off08:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc+64(,%eax,4), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %edx
; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: off08:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L47$pb
; DARWIN-32-PIC-NEXT:  L47$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl (_lsrc-L47$pb)+64(%eax,%ecx,4), %edx
; DARWIN-32-PIC-NEXT:    movl _lptr-L47$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: off08:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: off08:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: off08:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl 64(%rax,%rdi,4), %eax
; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, 64(%rcx,%rdi,4)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @lptr, align 8
	%1 = add i64 %i, 16
	%2 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %1
	%3 = load i32, i32* %2, align 4
	%4 = getelementptr i32, i32* %0, i64 %1
	store i32 %3, i32* %4, align 4
	ret void
}

define void @moo00(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: moo00:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl src+262144(%rip), %eax
; LINUX-64-STATIC-NEXT:    movl %eax, dst+262144(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: moo00:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl src+262144, %eax
; LINUX-32-STATIC-NEXT:    movl %eax, dst+262144
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: moo00:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L48$pb
; LINUX-32-PIC-NEXT:  .L48$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp48:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp48-.L48$pb), %eax
; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl 262144(%ecx), %ecx
; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, 262144(%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: moo00:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl 262144(%rax), %eax
; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: moo00:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _src+262144, %eax
; DARWIN-32-STATIC-NEXT:    movl %eax, _dst+262144
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: moo00:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl 262144(%eax), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 262144(%ecx)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: moo00:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L48$pb
; DARWIN-32-PIC-NEXT:  L48$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L48$pb(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl 262144(%ecx), %ecx
; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L48$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %ecx, 262144(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: moo00:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl 262144(%rax), %eax
; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: moo00:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl 262144(%rax), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: moo00:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl 262144(%rax), %eax
; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 65536), align 4
	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 65536), align 4
	ret void
}

define void @moo01(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: moo01:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movq $dst+262144, ptr(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: moo01:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $dst+262144, ptr
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: moo01:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L49$pb
; LINUX-32-PIC-NEXT:  .L49$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp49:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp49-.L49$pb), %eax
; LINUX-32-PIC-NEXT:    movl $262144, %ecx # imm = 0x40000
; LINUX-32-PIC-NEXT:    addl dst@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: moo01:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
; LINUX-64-PIC-NEXT:    addq dst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: moo01:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_dst+262144, _ptr
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: moo01:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-32-DYNAMIC-NEXT:    addl L_dst$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: moo01:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L49$pb
; DARWIN-32-PIC-NEXT:  L49$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl $262144, %ecx ## imm = 0x40000
; DARWIN-32-PIC-NEXT:    addl L_dst$non_lazy_ptr-L49$pb(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L49$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: moo01:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-64-STATIC-NEXT:    addq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movq %rax, (%rcx)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: moo01:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-64-DYNAMIC-NEXT:    addq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movq %rax, (%rcx)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: moo01:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-64-PIC-NEXT:    addq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movq %rax, (%rcx)
; DARWIN-64-PIC-NEXT:    retq

entry:
	store i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 65536), i32** @ptr, align 8
	ret void
}

define void @moo02(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: moo02:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl src+262144(%rip), %eax
; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rcx
; LINUX-64-STATIC-NEXT:    movl %eax, 262144(%rcx)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: moo02:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl src+262144, %eax
; LINUX-32-STATIC-NEXT:    movl ptr, %ecx
; LINUX-32-STATIC-NEXT:    movl %eax, 262144(%ecx)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: moo02:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L50$pb
; LINUX-32-PIC-NEXT:  .L50$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp50:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp50-.L50$pb), %eax
; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl 262144(%ecx), %ecx
; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl (%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, 262144(%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: moo02:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl 262144(%rax), %eax
; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: moo02:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _src+262144, %eax
; DARWIN-32-STATIC-NEXT:    movl _ptr, %ecx
; DARWIN-32-STATIC-NEXT:    movl %eax, 262144(%ecx)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: moo02:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl 262144(%eax), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl (%ecx), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 262144(%ecx)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: moo02:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L50$pb
; DARWIN-32-PIC-NEXT:  L50$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L50$pb(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl 262144(%ecx), %ecx
; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L50$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %ecx, 262144(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: moo02:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl 262144(%rax), %eax
; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: moo02:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl 262144(%rax), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: moo02:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl 262144(%rax), %eax
; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @ptr, align 8
	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 65536), align 4
	%2 = getelementptr i32, i32* %0, i64 65536
	store i32 %1, i32* %2, align 4
	ret void
}

define void @moo03(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: moo03:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl dsrc+262144(%rip), %eax
; LINUX-64-STATIC-NEXT:    movl %eax, ddst+262144(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: moo03:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl dsrc+262144, %eax
; LINUX-32-STATIC-NEXT:    movl %eax, ddst+262144
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: moo03:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L51$pb
; LINUX-32-PIC-NEXT:  .L51$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp51:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp51-.L51$pb), %eax
; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl 262144(%ecx), %ecx
; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, 262144(%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: moo03:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl 262144(%rax), %eax
; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: moo03:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _dsrc+262144, %eax
; DARWIN-32-STATIC-NEXT:    movl %eax, _ddst+262144
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: moo03:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc+262144, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _ddst+262144
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: moo03:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L51$pb
; DARWIN-32-PIC-NEXT:  L51$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl (_dsrc-L51$pb)+262144(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl %ecx, (_ddst-L51$pb)+262144(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: moo03:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movl _dsrc+262144(%rip), %eax
; DARWIN-64-STATIC-NEXT:    movl %eax, _ddst+262144(%rip)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: moo03:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movl _dsrc+262144(%rip), %eax
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, _ddst+262144(%rip)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: moo03:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movl _dsrc+262144(%rip), %eax
; DARWIN-64-PIC-NEXT:    movl %eax, _ddst+262144(%rip)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 65536), align 32
	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 65536), align 32
	ret void
}

define void @moo04(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: moo04:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movq $ddst+262144, dptr(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: moo04:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $ddst+262144, dptr
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: moo04:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L52$pb
; LINUX-32-PIC-NEXT:  .L52$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp52:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp52-.L52$pb), %eax
; LINUX-32-PIC-NEXT:    movl $262144, %ecx # imm = 0x40000
; LINUX-32-PIC-NEXT:    addl ddst@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: moo04:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
; LINUX-64-PIC-NEXT:    addq ddst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: moo04:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_ddst+262144, _dptr
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: moo04:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $_ddst+262144, _dptr
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: moo04:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L52$pb
; DARWIN-32-PIC-NEXT:  L52$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    leal (_ddst-L52$pb)+262144(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl %ecx, _dptr-L52$pb(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: moo04:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _ddst+262144(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movq %rax, _dptr(%rip)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: moo04:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst+262144(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _dptr(%rip)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: moo04:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _ddst+262144(%rip), %rax
; DARWIN-64-PIC-NEXT:    movq %rax, _dptr(%rip)
; DARWIN-64-PIC-NEXT:    retq

entry:
	store i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 65536), i32** @dptr, align 8
	ret void
}

define void @moo05(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: moo05:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl dsrc+262144(%rip), %eax
; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rcx
; LINUX-64-STATIC-NEXT:    movl %eax, 262144(%rcx)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: moo05:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl dsrc+262144, %eax
; LINUX-32-STATIC-NEXT:    movl dptr, %ecx
; LINUX-32-STATIC-NEXT:    movl %eax, 262144(%ecx)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: moo05:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L53$pb
; LINUX-32-PIC-NEXT:  .L53$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp53:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp53-.L53$pb), %eax
; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl 262144(%ecx), %ecx
; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl (%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, 262144(%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: moo05:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl 262144(%rax), %eax
; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: moo05:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _dsrc+262144, %eax
; DARWIN-32-STATIC-NEXT:    movl _dptr, %ecx
; DARWIN-32-STATIC-NEXT:    movl %eax, 262144(%ecx)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: moo05:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc+262144, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 262144(%ecx)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: moo05:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L53$pb
; DARWIN-32-PIC-NEXT:  L53$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl (_dsrc-L53$pb)+262144(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl _dptr-L53$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %ecx, 262144(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: moo05:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movl _dsrc+262144(%rip), %eax
; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: moo05:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movl _dsrc+262144(%rip), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: moo05:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movl _dsrc+262144(%rip), %eax
; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @dptr, align 8
	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 65536), align 32
	%2 = getelementptr i32, i32* %0, i64 65536
	store i32 %1, i32* %2, align 4
	ret void
}

define void @moo06(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: moo06:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl lsrc+262144(%rip), %eax
; LINUX-64-STATIC-NEXT:    movl %eax, ldst+262144(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: moo06:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl lsrc+262144, %eax
; LINUX-32-STATIC-NEXT:    movl %eax, ldst+262144
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: moo06:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L54$pb
; LINUX-32-PIC-NEXT:  .L54$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp54:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp54-.L54$pb), %eax
; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF+262144(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl %ecx, ldst@GOTOFF+262144(%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: moo06:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movl lsrc+262144(%rip), %eax
; LINUX-64-PIC-NEXT:    movl %eax, ldst+262144(%rip)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: moo06:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _lsrc+262144, %eax
; DARWIN-32-STATIC-NEXT:    movl %eax, _ldst+262144
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: moo06:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc+262144, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _ldst+262144
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: moo06:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L54$pb
; DARWIN-32-PIC-NEXT:  L54$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl (_lsrc-L54$pb)+262144(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl %ecx, (_ldst-L54$pb)+262144(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: moo06:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movl _lsrc+262144(%rip), %eax
; DARWIN-64-STATIC-NEXT:    movl %eax, _ldst+262144(%rip)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: moo06:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movl _lsrc+262144(%rip), %eax
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, _ldst+262144(%rip)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: moo06:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movl _lsrc+262144(%rip), %eax
; DARWIN-64-PIC-NEXT:    movl %eax, _ldst+262144(%rip)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 65536), align 4
	store i32 %0, i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 65536), align 4
	ret void
}

define void @moo07(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: moo07:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movq $ldst+262144, lptr(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: moo07:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $ldst+262144, lptr
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: moo07:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L55$pb
; LINUX-32-PIC-NEXT:  .L55$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp55:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp55-.L55$pb), %eax
; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+262144(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl %ecx, lptr@GOTOFF(%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: moo07:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    leaq ldst+262144(%rip), %rax
; LINUX-64-PIC-NEXT:    movq %rax, lptr(%rip)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: moo07:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_ldst+262144, _lptr
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: moo07:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $_ldst+262144, _lptr
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: moo07:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L55$pb
; DARWIN-32-PIC-NEXT:  L55$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    leal (_ldst-L55$pb)+262144(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl %ecx, _lptr-L55$pb(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: moo07:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _ldst+262144(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movq %rax, _lptr(%rip)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: moo07:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst+262144(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _lptr(%rip)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: moo07:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _ldst+262144(%rip), %rax
; DARWIN-64-PIC-NEXT:    movq %rax, _lptr(%rip)
; DARWIN-64-PIC-NEXT:    retq

entry:
	store i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 65536), i32** @lptr, align 8
	ret void
}

define void @moo08(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: moo08:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl lsrc+262144(%rip), %eax
; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rcx
; LINUX-64-STATIC-NEXT:    movl %eax, 262144(%rcx)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: moo08:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl lsrc+262144, %eax
; LINUX-32-STATIC-NEXT:    movl lptr, %ecx
; LINUX-32-STATIC-NEXT:    movl %eax, 262144(%ecx)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: moo08:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L56$pb
; LINUX-32-PIC-NEXT:  .L56$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp56:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp56-.L56$pb), %eax
; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF+262144(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, 262144(%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: moo08:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movl lsrc+262144(%rip), %eax
; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: moo08:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _lsrc+262144, %eax
; DARWIN-32-STATIC-NEXT:    movl _lptr, %ecx
; DARWIN-32-STATIC-NEXT:    movl %eax, 262144(%ecx)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: moo08:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc+262144, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, 262144(%ecx)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: moo08:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L56$pb
; DARWIN-32-PIC-NEXT:  L56$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl (_lsrc-L56$pb)+262144(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl _lptr-L56$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %ecx, 262144(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: moo08:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movl _lsrc+262144(%rip), %eax
; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: moo08:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movl _lsrc+262144(%rip), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: moo08:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movl _lsrc+262144(%rip), %eax
; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @lptr, align 8
	%1 = load i32, i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 65536), align 4
	%2 = getelementptr i32, i32* %0, i64 65536
	store i32 %1, i32* %2, align 4
	ret void
}

define void @big00(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: big00:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl src+262144(,%rdi,4), %eax
; LINUX-64-STATIC-NEXT:    movl %eax, dst+262144(,%rdi,4)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: big00:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl src+262144(,%eax,4), %ecx
; LINUX-32-STATIC-NEXT:    movl %ecx, dst+262144(,%eax,4)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: big00:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L57$pb
; LINUX-32-PIC-NEXT:  .L57$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp57:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp57-.L57$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %edx
; LINUX-32-PIC-NEXT:    movl 262144(%edx,%ecx,4), %edx
; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: big00:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: big00:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _src+262144(,%eax,4), %ecx
; DARWIN-32-STATIC-NEXT:    movl %ecx, _dst+262144(,%eax,4)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: big00:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl 262144(%ecx,%eax,4), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %edx
; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: big00:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L57$pb
; DARWIN-32-PIC-NEXT:  L57$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L57$pb(%eax), %edx
; DARWIN-32-PIC-NEXT:    movl 262144(%edx,%ecx,4), %edx
; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L57$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: big00:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: big00:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: big00:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = add i64 %i, 65536
	%1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %0
	%2 = load i32, i32* %1, align 4
	%3 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %0
	store i32 %2, i32* %3, align 4
	ret void
}

define void @big01(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: big01:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq dst+262144(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    movq %rax, ptr(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: big01:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal dst+262144(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    movl %eax, ptr
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: big01:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L58$pb
; LINUX-32-PIC-NEXT:  .L58$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp58:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp58-.L58$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %edx
; LINUX-32-PIC-NEXT:    leal 262144(%edx,%ecx,4), %ecx
; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: big01:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: big01:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _dst+262144(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    movl %eax, _ptr
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: big01:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, (%ecx)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: big01:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L58$pb
; DARWIN-32-PIC-NEXT:  L58$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L58$pb(%eax), %edx
; DARWIN-32-PIC-NEXT:    leal 262144(%edx,%ecx,4), %ecx
; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L58$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %ecx, (%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: big01:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movq %rax, (%rcx)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: big01:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movq %rax, (%rcx)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: big01:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movq %rax, (%rcx)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%.sum = add i64 %i, 65536
	%0 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %.sum
	store i32* %0, i32** @ptr, align 8
	ret void
}

define void @big02(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: big02:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl src+262144(,%rdi,4), %eax
; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rcx
; LINUX-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: big02:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl src+262144(,%eax,4), %ecx
; LINUX-32-STATIC-NEXT:    movl ptr, %edx
; LINUX-32-STATIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: big02:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L59$pb
; LINUX-32-PIC-NEXT:  .L59$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp59:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp59-.L59$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %edx
; LINUX-32-PIC-NEXT:    movl 262144(%edx,%ecx,4), %edx
; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl (%eax), %eax
; LINUX-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: big02:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: big02:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _src+262144(,%eax,4), %ecx
; DARWIN-32-STATIC-NEXT:    movl _ptr, %edx
; DARWIN-32-STATIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: big02:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl 262144(%ecx,%eax,4), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %edx
; DARWIN-32-DYNAMIC-NEXT:    movl (%edx), %edx
; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: big02:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L59$pb
; DARWIN-32-PIC-NEXT:  L59$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L59$pb(%eax), %edx
; DARWIN-32-PIC-NEXT:    movl 262144(%edx,%ecx,4), %edx
; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L59$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: big02:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: big02:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: big02:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movq (%rcx), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @ptr, align 8
	%1 = add i64 %i, 65536
	%2 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %1
	%3 = load i32, i32* %2, align 4
	%4 = getelementptr i32, i32* %0, i64 %1
	store i32 %3, i32* %4, align 4
	ret void
}

define void @big03(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: big03:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl dsrc+262144(,%rdi,4), %eax
; LINUX-64-STATIC-NEXT:    movl %eax, ddst+262144(,%rdi,4)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: big03:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl dsrc+262144(,%eax,4), %ecx
; LINUX-32-STATIC-NEXT:    movl %ecx, ddst+262144(,%eax,4)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: big03:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L60$pb
; LINUX-32-PIC-NEXT:  .L60$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp60:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp60-.L60$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %edx
; LINUX-32-PIC-NEXT:    movl 262144(%edx,%ecx,4), %edx
; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: big03:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: big03:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _dsrc+262144(,%eax,4), %ecx
; DARWIN-32-STATIC-NEXT:    movl %ecx, _ddst+262144(,%eax,4)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: big03:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc+262144(,%eax,4), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, _ddst+262144(,%eax,4)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: big03:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L60$pb
; DARWIN-32-PIC-NEXT:  L60$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl (_dsrc-L60$pb)+262144(%eax,%ecx,4), %edx
; DARWIN-32-PIC-NEXT:    movl %edx, (_ddst-L60$pb)+262144(%eax,%ecx,4)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: big03:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: big03:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: big03:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = add i64 %i, 65536
	%1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %0
	%2 = load i32, i32* %1, align 4
	%3 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %0
	store i32 %2, i32* %3, align 4
	ret void
}

define void @big04(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: big04:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq ddst+262144(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    movq %rax, dptr(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: big04:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal ddst+262144(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    movl %eax, dptr
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: big04:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L61$pb
; LINUX-32-PIC-NEXT:  .L61$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp61:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp61-.L61$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %edx
; LINUX-32-PIC-NEXT:    leal 262144(%edx,%ecx,4), %ecx
; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: big04:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq %rax, (%rcx)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: big04:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _ddst+262144(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    movl %eax, _dptr
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: big04:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    leal _ddst+262144(,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _dptr
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: big04:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L61$pb
; DARWIN-32-PIC-NEXT:  L61$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    leal (_ddst-L61$pb)+262144(%eax,%ecx,4), %ecx
; DARWIN-32-PIC-NEXT:    movl %ecx, _dptr-L61$pb(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: big04:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    movq %rax, _dptr(%rip)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: big04:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _dptr(%rip)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: big04:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    movq %rax, _dptr(%rip)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%.sum = add i64 %i, 65536
	%0 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %.sum
	store i32* %0, i32** @dptr, align 8
	ret void
}

define void @big05(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: big05:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl dsrc+262144(,%rdi,4), %eax
; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rcx
; LINUX-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: big05:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl dsrc+262144(,%eax,4), %ecx
; LINUX-32-STATIC-NEXT:    movl dptr, %edx
; LINUX-32-STATIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: big05:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L62$pb
; LINUX-32-PIC-NEXT:  .L62$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp62:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp62-.L62$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %edx
; LINUX-32-PIC-NEXT:    movl 262144(%edx,%ecx,4), %edx
; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl (%eax), %eax
; LINUX-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: big05:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movq (%rcx), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: big05:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _dsrc+262144(,%eax,4), %ecx
; DARWIN-32-STATIC-NEXT:    movl _dptr, %edx
; DARWIN-32-STATIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: big05:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl _dsrc+262144(,%eax,4), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %edx
; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: big05:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L62$pb
; DARWIN-32-PIC-NEXT:  L62$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl (_dsrc-L62$pb)+262144(%eax,%ecx,4), %edx
; DARWIN-32-PIC-NEXT:    movl _dptr-L62$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: big05:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: big05:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: big05:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @dptr, align 8
	%1 = add i64 %i, 65536
	%2 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %1
	%3 = load i32, i32* %2, align 4
	%4 = getelementptr i32, i32* %0, i64 %1
	store i32 %3, i32* %4, align 4
	ret void
}

define void @big06(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: big06:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl lsrc+262144(,%rdi,4), %eax
; LINUX-64-STATIC-NEXT:    movl %eax, ldst+262144(,%rdi,4)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: big06:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl lsrc+262144(,%eax,4), %ecx
; LINUX-32-STATIC-NEXT:    movl %ecx, ldst+262144(,%eax,4)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: big06:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L63$pb
; LINUX-32-PIC-NEXT:  .L63$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp63:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp63-.L63$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF+262144(%eax,%ecx,4), %edx
; LINUX-32-PIC-NEXT:    movl %edx, ldst@GOTOFF+262144(%eax,%ecx,4)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: big06:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
; LINUX-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: big06:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _lsrc+262144(,%eax,4), %ecx
; DARWIN-32-STATIC-NEXT:    movl %ecx, _ldst+262144(,%eax,4)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: big06:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc+262144(,%eax,4), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, _ldst+262144(,%eax,4)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: big06:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L63$pb
; DARWIN-32-PIC-NEXT:  L63$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl (_lsrc-L63$pb)+262144(%eax,%ecx,4), %edx
; DARWIN-32-PIC-NEXT:    movl %edx, (_ldst-L63$pb)+262144(%eax,%ecx,4)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: big06:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: big06:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: big06:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = add i64 %i, 65536
	%1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %0
	%2 = load i32, i32* %1, align 4
	%3 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %0
	store i32 %2, i32* %3, align 4
	ret void
}

define void @big07(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: big07:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq ldst+262144(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    movq %rax, lptr(%rip)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: big07:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal ldst+262144(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    movl %eax, lptr
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: big07:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L64$pb
; LINUX-32-PIC-NEXT:  .L64$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp64:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp64-.L64$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+262144(%eax,%ecx,4), %ecx
; LINUX-32-PIC-NEXT:    movl %ecx, lptr@GOTOFF(%eax)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: big07:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    movq %rax, lptr(%rip)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: big07:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _ldst+262144(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    movl %eax, _lptr
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: big07:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    leal _ldst+262144(,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl %eax, _lptr
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: big07:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L64$pb
; DARWIN-32-PIC-NEXT:  L64$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    leal (_ldst-L64$pb)+262144(%eax,%ecx,4), %ecx
; DARWIN-32-PIC-NEXT:    movl %ecx, _lptr-L64$pb(%eax)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: big07:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    movq %rax, _lptr(%rip)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: big07:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    movq %rax, _lptr(%rip)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: big07:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    movq %rax, _lptr(%rip)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%.sum = add i64 %i, 65536
	%0 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %.sum
	store i32* %0, i32** @lptr, align 8
	ret void
}

define void @big08(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: big08:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl lsrc+262144(,%rdi,4), %eax
; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rcx
; LINUX-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: big08:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl lsrc+262144(,%eax,4), %ecx
; LINUX-32-STATIC-NEXT:    movl lptr, %edx
; LINUX-32-STATIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: big08:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L65$pb
; LINUX-32-PIC-NEXT:  .L65$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp65:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp65-.L65$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl lsrc@GOTOFF+262144(%eax,%ecx,4), %edx
; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
; LINUX-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: big08:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
; LINUX-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: big08:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _lsrc+262144(,%eax,4), %ecx
; DARWIN-32-STATIC-NEXT:    movl _lptr, %edx
; DARWIN-32-STATIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: big08:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl _lsrc+262144(,%eax,4), %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %edx
; DARWIN-32-DYNAMIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: big08:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L65$pb
; DARWIN-32-PIC-NEXT:  L65$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl (_lsrc-L65$pb)+262144(%eax,%ecx,4), %edx
; DARWIN-32-PIC-NEXT:    movl _lptr-L65$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: big08:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: big08:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: big08:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-PIC-NEXT:    movl 262144(%rax,%rdi,4), %eax
; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl %eax, 262144(%rcx,%rdi,4)
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @lptr, align 8
	%1 = add i64 %i, 65536
	%2 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %1
	%3 = load i32, i32* %2, align 4
	%4 = getelementptr i32, i32* %0, i64 %1
	store i32 %3, i32* %4, align 4
	ret void
}

define i8* @bar00() nounwind {
; LINUX-64-STATIC-LABEL: bar00:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $src, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bar00:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $src, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bar00:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L66$pb
; LINUX-32-PIC-NEXT:  .L66$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp66:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp66-.L66$pb), %eax
; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bar00:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bar00:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_src, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bar00:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bar00:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L66$pb
; DARWIN-32-PIC-NEXT:  L66$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L66$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bar00:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bar00:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bar00:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast ([131072 x i32]* @src to i8*)
}

define i8* @bxr00() nounwind {
; LINUX-64-STATIC-LABEL: bxr00:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $xsrc, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bxr00:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $xsrc, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bxr00:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L67$pb
; LINUX-32-PIC-NEXT:  .L67$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp67:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp67-.L67$pb), %eax
; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bxr00:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bxr00:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_xsrc, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bxr00:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bxr00:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L67$pb
; DARWIN-32-PIC-NEXT:  L67$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L67$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bxr00:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bxr00:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bxr00:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast ([32 x i32]* @xsrc to i8*)
}

define i8* @bar01() nounwind {
; LINUX-64-STATIC-LABEL: bar01:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $dst, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bar01:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $dst, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bar01:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L68$pb
; LINUX-32-PIC-NEXT:  .L68$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp68:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp68-.L68$pb), %eax
; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bar01:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bar01:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_dst, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bar01:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bar01:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L68$pb
; DARWIN-32-PIC-NEXT:  L68$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L68$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bar01:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bar01:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bar01:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast ([131072 x i32]* @dst to i8*)
}

define i8* @bxr01() nounwind {
; LINUX-64-STATIC-LABEL: bxr01:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $xdst, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bxr01:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $xdst, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bxr01:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L69$pb
; LINUX-32-PIC-NEXT:  .L69$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp69:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp69-.L69$pb), %eax
; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bxr01:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bxr01:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_xdst, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bxr01:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bxr01:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L69$pb
; DARWIN-32-PIC-NEXT:  L69$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L69$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bxr01:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bxr01:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bxr01:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast ([32 x i32]* @xdst to i8*)
}

define i8* @bar02() nounwind {
; LINUX-64-STATIC-LABEL: bar02:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $ptr, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bar02:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $ptr, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bar02:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L70$pb
; LINUX-32-PIC-NEXT:  .L70$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp70:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp70-.L70$pb), %eax
; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bar02:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bar02:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_ptr, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bar02:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bar02:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L70$pb
; DARWIN-32-PIC-NEXT:  L70$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L70$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bar02:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bar02:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bar02:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast (i32** @ptr to i8*)
}

define i8* @bar03() nounwind {
; LINUX-64-STATIC-LABEL: bar03:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $dsrc, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bar03:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $dsrc, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bar03:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L71$pb
; LINUX-32-PIC-NEXT:  .L71$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp71:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp71-.L71$pb), %eax
; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bar03:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bar03:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_dsrc, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bar03:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $_dsrc, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bar03:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L71$pb
; DARWIN-32-PIC-NEXT:  L71$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    leal _dsrc-L71$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bar03:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bar03:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bar03:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast ([131072 x i32]* @dsrc to i8*)
}

define i8* @bar04() nounwind {
; LINUX-64-STATIC-LABEL: bar04:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $ddst, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bar04:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $ddst, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bar04:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L72$pb
; LINUX-32-PIC-NEXT:  .L72$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp72:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp72-.L72$pb), %eax
; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bar04:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bar04:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_ddst, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bar04:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $_ddst, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bar04:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L72$pb
; DARWIN-32-PIC-NEXT:  L72$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    leal _ddst-L72$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bar04:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bar04:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bar04:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast ([131072 x i32]* @ddst to i8*)
}

define i8* @bar05() nounwind {
; LINUX-64-STATIC-LABEL: bar05:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $dptr, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bar05:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $dptr, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bar05:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L73$pb
; LINUX-32-PIC-NEXT:  .L73$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp73:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp73-.L73$pb), %eax
; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bar05:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bar05:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_dptr, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bar05:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $_dptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bar05:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L73$pb
; DARWIN-32-PIC-NEXT:  L73$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    leal _dptr-L73$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bar05:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _dptr(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bar05:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _dptr(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bar05:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _dptr(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast (i32** @dptr to i8*)
}

define i8* @bar06() nounwind {
; LINUX-64-STATIC-LABEL: bar06:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $lsrc, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bar06:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $lsrc, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bar06:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L74$pb
; LINUX-32-PIC-NEXT:  .L74$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp74:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp74-.L74$pb), %eax
; LINUX-32-PIC-NEXT:    leal lsrc@GOTOFF(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bar06:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bar06:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_lsrc, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bar06:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $_lsrc, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bar06:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L74$pb
; DARWIN-32-PIC-NEXT:  L74$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    leal _lsrc-L74$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bar06:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bar06:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bar06:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast ([131072 x i32]* @lsrc to i8*)
}

define i8* @bar07() nounwind {
; LINUX-64-STATIC-LABEL: bar07:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $ldst, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bar07:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $ldst, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bar07:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L75$pb
; LINUX-32-PIC-NEXT:  .L75$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp75:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp75-.L75$pb), %eax
; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bar07:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bar07:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_ldst, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bar07:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $_ldst, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bar07:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L75$pb
; DARWIN-32-PIC-NEXT:  L75$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    leal _ldst-L75$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bar07:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bar07:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bar07:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast ([131072 x i32]* @ldst to i8*)
}

define i8* @bar08() nounwind {
; LINUX-64-STATIC-LABEL: bar08:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $lptr, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bar08:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $lptr, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bar08:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L76$pb
; LINUX-32-PIC-NEXT:  .L76$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp76:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp76-.L76$pb), %eax
; LINUX-32-PIC-NEXT:    leal lptr@GOTOFF(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bar08:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    leaq lptr(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bar08:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_lptr, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bar08:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $_lptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bar08:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L76$pb
; DARWIN-32-PIC-NEXT:  L76$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    leal _lptr-L76$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bar08:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _lptr(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bar08:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _lptr(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bar08:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _lptr(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast (i32** @lptr to i8*)
}

define i8* @har00() nounwind {
; LINUX-64-STATIC-LABEL: har00:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $src, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: har00:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $src, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: har00:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L77$pb
; LINUX-32-PIC-NEXT:  .L77$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp77:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp77-.L77$pb), %eax
; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: har00:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: har00:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_src, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: har00:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: har00:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L77$pb
; DARWIN-32-PIC-NEXT:  L77$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L77$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: har00:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: har00:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: har00:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast ([131072 x i32]* @src to i8*)
}

define i8* @hxr00() nounwind {
; LINUX-64-STATIC-LABEL: hxr00:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $xsrc, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: hxr00:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $xsrc, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: hxr00:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L78$pb
; LINUX-32-PIC-NEXT:  .L78$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp78:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp78-.L78$pb), %eax
; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: hxr00:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: hxr00:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_xsrc, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: hxr00:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: hxr00:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L78$pb
; DARWIN-32-PIC-NEXT:  L78$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L78$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: hxr00:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: hxr00:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: hxr00:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast ([32 x i32]* @xsrc to i8*)
}

define i8* @har01() nounwind {
; LINUX-64-STATIC-LABEL: har01:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $dst, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: har01:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $dst, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: har01:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L79$pb
; LINUX-32-PIC-NEXT:  .L79$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp79:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp79-.L79$pb), %eax
; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: har01:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: har01:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_dst, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: har01:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: har01:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L79$pb
; DARWIN-32-PIC-NEXT:  L79$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L79$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: har01:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: har01:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: har01:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast ([131072 x i32]* @dst to i8*)
}

define i8* @hxr01() nounwind {
; LINUX-64-STATIC-LABEL: hxr01:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $xdst, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: hxr01:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $xdst, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: hxr01:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L80$pb
; LINUX-32-PIC-NEXT:  .L80$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp80:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp80-.L80$pb), %eax
; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: hxr01:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: hxr01:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_xdst, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: hxr01:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: hxr01:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L80$pb
; DARWIN-32-PIC-NEXT:  L80$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L80$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: hxr01:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: hxr01:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: hxr01:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast ([32 x i32]* @xdst to i8*)
}

define i8* @har02() nounwind {
; LINUX-64-STATIC-LABEL: har02:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: har02:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl ptr, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: har02:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L81$pb
; LINUX-32-PIC-NEXT:  .L81$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp81:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp81-.L81$pb), %eax
; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl (%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: har02:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movq (%rax), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: har02:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _ptr, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: har02:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: har02:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L81$pb
; DARWIN-32-PIC-NEXT:  L81$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L81$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: har02:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movq (%rax), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: har02:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movq (%rax), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: har02:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movq (%rax), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @ptr, align 8
	%1 = bitcast i32* %0 to i8*
	ret i8* %1
}

define i8* @har03() nounwind {
; LINUX-64-STATIC-LABEL: har03:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $dsrc, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: har03:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $dsrc, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: har03:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L82$pb
; LINUX-32-PIC-NEXT:  .L82$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp82:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp82-.L82$pb), %eax
; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: har03:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: har03:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_dsrc, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: har03:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $_dsrc, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: har03:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L82$pb
; DARWIN-32-PIC-NEXT:  L82$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    leal _dsrc-L82$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: har03:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: har03:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: har03:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast ([131072 x i32]* @dsrc to i8*)
}

define i8* @har04() nounwind {
; LINUX-64-STATIC-LABEL: har04:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $ddst, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: har04:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $ddst, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: har04:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L83$pb
; LINUX-32-PIC-NEXT:  .L83$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp83:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp83-.L83$pb), %eax
; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: har04:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: har04:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_ddst, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: har04:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $_ddst, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: har04:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L83$pb
; DARWIN-32-PIC-NEXT:  L83$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    leal _ddst-L83$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: har04:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: har04:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: har04:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast ([131072 x i32]* @ddst to i8*)
}

define i8* @har05() nounwind {
; LINUX-64-STATIC-LABEL: har05:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: har05:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl dptr, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: har05:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L84$pb
; LINUX-32-PIC-NEXT:  .L84$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp84:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp84-.L84$pb), %eax
; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl (%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: har05:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movq (%rax), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: har05:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _dptr, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: har05:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: har05:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L84$pb
; DARWIN-32-PIC-NEXT:  L84$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl _dptr-L84$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: har05:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: har05:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: har05:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @dptr, align 8
	%1 = bitcast i32* %0 to i8*
	ret i8* %1
}

define i8* @har06() nounwind {
; LINUX-64-STATIC-LABEL: har06:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $lsrc, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: har06:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $lsrc, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: har06:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L85$pb
; LINUX-32-PIC-NEXT:  .L85$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp85:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp85-.L85$pb), %eax
; LINUX-32-PIC-NEXT:    leal lsrc@GOTOFF(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: har06:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: har06:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_lsrc, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: har06:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $_lsrc, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: har06:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L85$pb
; DARWIN-32-PIC-NEXT:  L85$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    leal _lsrc-L85$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: har06:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: har06:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: har06:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast ([131072 x i32]* @lsrc to i8*)
}

define i8* @har07() nounwind {
; LINUX-64-STATIC-LABEL: har07:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $ldst, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: har07:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $ldst, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: har07:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L86$pb
; LINUX-32-PIC-NEXT:  .L86$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp86:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp86-.L86$pb), %eax
; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: har07:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: har07:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_ldst, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: har07:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $_ldst, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: har07:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L86$pb
; DARWIN-32-PIC-NEXT:  L86$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    leal _ldst-L86$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: har07:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: har07:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: har07:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast ([131072 x i32]* @ldst to i8*)
}

define i8* @har08() nounwind {
; LINUX-64-STATIC-LABEL: har08:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: har08:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl lptr, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: har08:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L87$pb
; LINUX-32-PIC-NEXT:  .L87$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp87:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp87-.L87$pb), %eax
; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: har08:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: har08:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _lptr, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: har08:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: har08:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L87$pb
; DARWIN-32-PIC-NEXT:  L87$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl _lptr-L87$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: har08:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: har08:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: har08:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @lptr, align 8
	%1 = bitcast i32* %0 to i8*
	ret i8* %1
}

define i8* @bat00() nounwind {
; LINUX-64-STATIC-LABEL: bat00:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $src+64, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bat00:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $src+64, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bat00:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L88$pb
; LINUX-32-PIC-NEXT:  .L88$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp88:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp88-.L88$pb), %eax
; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    addl $64, %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bat00:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    addq $64, %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bat00:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_src+64, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bat00:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bat00:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L88$pb
; DARWIN-32-PIC-NEXT:  L88$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L88$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    addl $64, %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bat00:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    addq $64, %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bat00:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bat00:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    addq $64, %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 16) to i8*)
}

define i8* @bxt00() nounwind {
; LINUX-64-STATIC-LABEL: bxt00:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $xsrc+64, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bxt00:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $xsrc+64, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bxt00:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L89$pb
; LINUX-32-PIC-NEXT:  .L89$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp89:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp89-.L89$pb), %eax
; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    addl $64, %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bxt00:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    addq $64, %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bxt00:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_xsrc+64, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bxt00:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bxt00:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L89$pb
; DARWIN-32-PIC-NEXT:  L89$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L89$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    addl $64, %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bxt00:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    addq $64, %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bxt00:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bxt00:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    addq $64, %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast (i32* getelementptr ([32 x i32], [32 x i32]* @xsrc, i32 0, i64 16) to i8*)
}

define i8* @bat01() nounwind {
; LINUX-64-STATIC-LABEL: bat01:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $dst+64, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bat01:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $dst+64, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bat01:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L90$pb
; LINUX-32-PIC-NEXT:  .L90$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp90:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp90-.L90$pb), %eax
; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    addl $64, %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bat01:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    addq $64, %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bat01:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_dst+64, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bat01:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bat01:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L90$pb
; DARWIN-32-PIC-NEXT:  L90$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L90$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    addl $64, %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bat01:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    addq $64, %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bat01:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bat01:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    addq $64, %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 16) to i8*)
}

define i8* @bxt01() nounwind {
; LINUX-64-STATIC-LABEL: bxt01:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $xdst+64, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bxt01:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $xdst+64, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bxt01:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L91$pb
; LINUX-32-PIC-NEXT:  .L91$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp91:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp91-.L91$pb), %eax
; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    addl $64, %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bxt01:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    addq $64, %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bxt01:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_xdst+64, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bxt01:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bxt01:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L91$pb
; DARWIN-32-PIC-NEXT:  L91$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L91$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    addl $64, %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bxt01:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    addq $64, %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bxt01:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bxt01:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    addq $64, %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast (i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 16) to i8*)
}

define i8* @bat02() nounwind {
; LINUX-64-STATIC-LABEL: bat02:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rax
; LINUX-64-STATIC-NEXT:    addq $64, %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bat02:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl ptr, %eax
; LINUX-32-STATIC-NEXT:    addl $64, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bat02:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L92$pb
; LINUX-32-PIC-NEXT:  .L92$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp92:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp92-.L92$pb), %eax
; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl (%eax), %eax
; LINUX-32-PIC-NEXT:    addl $64, %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bat02:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movq (%rax), %rax
; LINUX-64-PIC-NEXT:    addq $64, %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bat02:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _ptr, %eax
; DARWIN-32-STATIC-NEXT:    addl $64, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bat02:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bat02:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L92$pb
; DARWIN-32-PIC-NEXT:  L92$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L92$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
; DARWIN-32-PIC-NEXT:    addl $64, %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bat02:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movq (%rax), %rax
; DARWIN-64-STATIC-NEXT:    addq $64, %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bat02:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movq (%rax), %rax
; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bat02:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movq (%rax), %rax
; DARWIN-64-PIC-NEXT:    addq $64, %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @ptr, align 8
	%1 = getelementptr i32, i32* %0, i64 16
	%2 = bitcast i32* %1 to i8*
	ret i8* %2
}

define i8* @bat03() nounwind {
; LINUX-64-STATIC-LABEL: bat03:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $dsrc+64, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bat03:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $dsrc+64, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bat03:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L93$pb
; LINUX-32-PIC-NEXT:  .L93$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp93:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp93-.L93$pb), %eax
; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    addl $64, %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bat03:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    addq $64, %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bat03:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_dsrc+64, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bat03:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $_dsrc+64, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bat03:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L93$pb
; DARWIN-32-PIC-NEXT:  L93$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    leal (_dsrc-L93$pb)+64(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bat03:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _dsrc+64(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bat03:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc+64(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bat03:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _dsrc+64(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 16) to i8*)
}

define i8* @bat04() nounwind {
; LINUX-64-STATIC-LABEL: bat04:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $ddst+64, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bat04:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $ddst+64, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bat04:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L94$pb
; LINUX-32-PIC-NEXT:  .L94$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp94:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp94-.L94$pb), %eax
; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    addl $64, %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bat04:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    addq $64, %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bat04:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_ddst+64, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bat04:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $_ddst+64, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bat04:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L94$pb
; DARWIN-32-PIC-NEXT:  L94$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    leal (_ddst-L94$pb)+64(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bat04:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _ddst+64(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bat04:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst+64(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bat04:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _ddst+64(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 16) to i8*)
}

define i8* @bat05() nounwind {
; LINUX-64-STATIC-LABEL: bat05:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rax
; LINUX-64-STATIC-NEXT:    addq $64, %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bat05:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl dptr, %eax
; LINUX-32-STATIC-NEXT:    addl $64, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bat05:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L95$pb
; LINUX-32-PIC-NEXT:  .L95$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp95:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp95-.L95$pb), %eax
; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl (%eax), %eax
; LINUX-32-PIC-NEXT:    addl $64, %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bat05:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movq (%rax), %rax
; LINUX-64-PIC-NEXT:    addq $64, %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bat05:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _dptr, %eax
; DARWIN-32-STATIC-NEXT:    addl $64, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bat05:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bat05:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L95$pb
; DARWIN-32-PIC-NEXT:  L95$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl _dptr-L95$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    addl $64, %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bat05:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rax
; DARWIN-64-STATIC-NEXT:    addq $64, %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bat05:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bat05:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rax
; DARWIN-64-PIC-NEXT:    addq $64, %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @dptr, align 8
	%1 = getelementptr i32, i32* %0, i64 16
	%2 = bitcast i32* %1 to i8*
	ret i8* %2
}

define i8* @bat06() nounwind {
; LINUX-64-STATIC-LABEL: bat06:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $lsrc+64, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bat06:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $lsrc+64, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bat06:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L96$pb
; LINUX-32-PIC-NEXT:  .L96$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp96:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp96-.L96$pb), %eax
; LINUX-32-PIC-NEXT:    leal lsrc@GOTOFF+64(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bat06:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    leaq lsrc+64(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bat06:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_lsrc+64, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bat06:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $_lsrc+64, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bat06:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L96$pb
; DARWIN-32-PIC-NEXT:  L96$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    leal (_lsrc-L96$pb)+64(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bat06:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _lsrc+64(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bat06:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc+64(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bat06:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _lsrc+64(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 16) to i8*)
}

define i8* @bat07() nounwind {
; LINUX-64-STATIC-LABEL: bat07:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $ldst+64, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bat07:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $ldst+64, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bat07:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L97$pb
; LINUX-32-PIC-NEXT:  .L97$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp97:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp97-.L97$pb), %eax
; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+64(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bat07:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    leaq ldst+64(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bat07:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_ldst+64, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bat07:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $_ldst+64, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bat07:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L97$pb
; DARWIN-32-PIC-NEXT:  L97$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    leal (_ldst-L97$pb)+64(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bat07:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _ldst+64(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bat07:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst+64(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bat07:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _ldst+64(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 16) to i8*)
}

define i8* @bat08() nounwind {
; LINUX-64-STATIC-LABEL: bat08:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rax
; LINUX-64-STATIC-NEXT:    addq $64, %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bat08:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl lptr, %eax
; LINUX-32-STATIC-NEXT:    addl $64, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bat08:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L98$pb
; LINUX-32-PIC-NEXT:  .L98$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp98:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp98-.L98$pb), %eax
; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
; LINUX-32-PIC-NEXT:    addl $64, %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bat08:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rax
; LINUX-64-PIC-NEXT:    addq $64, %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bat08:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl _lptr, %eax
; DARWIN-32-STATIC-NEXT:    addl $64, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bat08:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    addl $64, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bat08:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L98$pb
; DARWIN-32-PIC-NEXT:  L98$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl _lptr-L98$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    addl $64, %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bat08:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rax
; DARWIN-64-STATIC-NEXT:    addq $64, %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bat08:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    addq $64, %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bat08:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rax
; DARWIN-64-PIC-NEXT:    addq $64, %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @lptr, align 8
	%1 = getelementptr i32, i32* %0, i64 16
	%2 = bitcast i32* %1 to i8*
	ret i8* %2
}

define i8* @bam00() nounwind {
; LINUX-64-STATIC-LABEL: bam00:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $src+262144, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bam00:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $src+262144, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bam00:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L99$pb
; LINUX-32-PIC-NEXT:  .L99$pb:
; LINUX-32-PIC-NEXT:    popl %ecx
; LINUX-32-PIC-NEXT:  .Ltmp99:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp99-.L99$pb), %ecx
; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
; LINUX-32-PIC-NEXT:    addl src@GOT(%ecx), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bam00:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
; LINUX-64-PIC-NEXT:    addq src@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bam00:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_src+262144, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bam00:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-32-DYNAMIC-NEXT:    addl L_src$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bam00:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L99$pb
; DARWIN-32-PIC-NEXT:  L99$pb:
; DARWIN-32-PIC-NEXT:    popl %ecx
; DARWIN-32-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-32-PIC-NEXT:    addl L_src$non_lazy_ptr-L99$pb(%ecx), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bam00:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-64-STATIC-NEXT:    addq _src@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bam00:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-64-DYNAMIC-NEXT:    addq _src@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bam00:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-64-PIC-NEXT:    addq _src@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @src, i32 0, i64 65536) to i8*)
}

define i8* @bam01() nounwind {
; LINUX-64-STATIC-LABEL: bam01:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $dst+262144, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bam01:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $dst+262144, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bam01:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L100$pb
; LINUX-32-PIC-NEXT:  .L100$pb:
; LINUX-32-PIC-NEXT:    popl %ecx
; LINUX-32-PIC-NEXT:  .Ltmp100:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp100-.L100$pb), %ecx
; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
; LINUX-32-PIC-NEXT:    addl dst@GOT(%ecx), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bam01:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
; LINUX-64-PIC-NEXT:    addq dst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bam01:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_dst+262144, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bam01:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-32-DYNAMIC-NEXT:    addl L_dst$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bam01:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L100$pb
; DARWIN-32-PIC-NEXT:  L100$pb:
; DARWIN-32-PIC-NEXT:    popl %ecx
; DARWIN-32-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-32-PIC-NEXT:    addl L_dst$non_lazy_ptr-L100$pb(%ecx), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bam01:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-64-STATIC-NEXT:    addq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bam01:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-64-DYNAMIC-NEXT:    addq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bam01:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-64-PIC-NEXT:    addq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @dst, i32 0, i64 65536) to i8*)
}

define i8* @bxm01() nounwind {
; LINUX-64-STATIC-LABEL: bxm01:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $xdst+262144, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bxm01:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $xdst+262144, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bxm01:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L101$pb
; LINUX-32-PIC-NEXT:  .L101$pb:
; LINUX-32-PIC-NEXT:    popl %ecx
; LINUX-32-PIC-NEXT:  .Ltmp101:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp101-.L101$pb), %ecx
; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
; LINUX-32-PIC-NEXT:    addl xdst@GOT(%ecx), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bxm01:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
; LINUX-64-PIC-NEXT:    addq xdst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bxm01:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_xdst+262144, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bxm01:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-32-DYNAMIC-NEXT:    addl L_xdst$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bxm01:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L101$pb
; DARWIN-32-PIC-NEXT:  L101$pb:
; DARWIN-32-PIC-NEXT:    popl %ecx
; DARWIN-32-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-32-PIC-NEXT:    addl L_xdst$non_lazy_ptr-L101$pb(%ecx), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bxm01:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-64-STATIC-NEXT:    addq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bxm01:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-64-DYNAMIC-NEXT:    addq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bxm01:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-64-PIC-NEXT:    addq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast (i32* getelementptr ([32 x i32], [32 x i32]* @xdst, i32 0, i64 65536) to i8*)
}

define i8* @bam02() nounwind {
; LINUX-64-STATIC-LABEL: bam02:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
; LINUX-64-STATIC-NEXT:    addq ptr(%rip), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bam02:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
; LINUX-32-STATIC-NEXT:    addl ptr, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bam02:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L102$pb
; LINUX-32-PIC-NEXT:  .L102$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp102:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp102-.L102$pb), %eax
; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
; LINUX-32-PIC-NEXT:    addl (%ecx), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bam02:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
; LINUX-64-PIC-NEXT:    addq (%rcx), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bam02:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-32-STATIC-NEXT:    addl _ptr, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bam02:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-32-DYNAMIC-NEXT:    addl (%ecx), %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bam02:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L102$pb
; DARWIN-32-PIC-NEXT:  L102$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L102$pb(%eax), %ecx
; DARWIN-32-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-32-PIC-NEXT:    addl (%ecx), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bam02:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-64-STATIC-NEXT:    addq (%rcx), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bam02:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-64-DYNAMIC-NEXT:    addq (%rcx), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bam02:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rcx
; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-64-PIC-NEXT:    addq (%rcx), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @ptr, align 8
	%1 = getelementptr i32, i32* %0, i64 65536
	%2 = bitcast i32* %1 to i8*
	ret i8* %2
}

define i8* @bam03() nounwind {
; LINUX-64-STATIC-LABEL: bam03:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $dsrc+262144, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bam03:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $dsrc+262144, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bam03:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L103$pb
; LINUX-32-PIC-NEXT:  .L103$pb:
; LINUX-32-PIC-NEXT:    popl %ecx
; LINUX-32-PIC-NEXT:  .Ltmp103:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp103-.L103$pb), %ecx
; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
; LINUX-32-PIC-NEXT:    addl dsrc@GOT(%ecx), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bam03:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
; LINUX-64-PIC-NEXT:    addq dsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bam03:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_dsrc+262144, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bam03:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $_dsrc+262144, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bam03:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L103$pb
; DARWIN-32-PIC-NEXT:  L103$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    leal (_dsrc-L103$pb)+262144(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bam03:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _dsrc+262144(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bam03:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc+262144(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bam03:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _dsrc+262144(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @dsrc, i32 0, i64 65536) to i8*)
}

define i8* @bam04() nounwind {
; LINUX-64-STATIC-LABEL: bam04:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $ddst+262144, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bam04:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $ddst+262144, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bam04:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L104$pb
; LINUX-32-PIC-NEXT:  .L104$pb:
; LINUX-32-PIC-NEXT:    popl %ecx
; LINUX-32-PIC-NEXT:  .Ltmp104:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp104-.L104$pb), %ecx
; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
; LINUX-32-PIC-NEXT:    addl ddst@GOT(%ecx), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bam04:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
; LINUX-64-PIC-NEXT:    addq ddst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bam04:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_ddst+262144, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bam04:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $_ddst+262144, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bam04:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L104$pb
; DARWIN-32-PIC-NEXT:  L104$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    leal (_ddst-L104$pb)+262144(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bam04:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _ddst+262144(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bam04:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst+262144(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bam04:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _ddst+262144(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @ddst, i32 0, i64 65536) to i8*)
}

define i8* @bam05() nounwind {
; LINUX-64-STATIC-LABEL: bam05:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
; LINUX-64-STATIC-NEXT:    addq dptr(%rip), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bam05:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
; LINUX-32-STATIC-NEXT:    addl dptr, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bam05:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L105$pb
; LINUX-32-PIC-NEXT:  .L105$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp105:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp105-.L105$pb), %eax
; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %ecx
; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
; LINUX-32-PIC-NEXT:    addl (%ecx), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bam05:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rcx
; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
; LINUX-64-PIC-NEXT:    addq (%rcx), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bam05:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-32-STATIC-NEXT:    addl _dptr, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bam05:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-32-DYNAMIC-NEXT:    addl _dptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bam05:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L105$pb
; DARWIN-32-PIC-NEXT:  L105$pb:
; DARWIN-32-PIC-NEXT:    popl %ecx
; DARWIN-32-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-32-PIC-NEXT:    addl _dptr-L105$pb(%ecx), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bam05:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-64-STATIC-NEXT:    addq _dptr(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bam05:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-64-DYNAMIC-NEXT:    addq _dptr(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bam05:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-64-PIC-NEXT:    addq _dptr(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @dptr, align 8
	%1 = getelementptr i32, i32* %0, i64 65536
	%2 = bitcast i32* %1 to i8*
	ret i8* %2
}

define i8* @bam06() nounwind {
; LINUX-64-STATIC-LABEL: bam06:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $lsrc+262144, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bam06:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $lsrc+262144, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bam06:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L106$pb
; LINUX-32-PIC-NEXT:  .L106$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp106:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp106-.L106$pb), %eax
; LINUX-32-PIC-NEXT:    leal lsrc@GOTOFF+262144(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bam06:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    leaq lsrc+262144(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bam06:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_lsrc+262144, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bam06:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $_lsrc+262144, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bam06:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L106$pb
; DARWIN-32-PIC-NEXT:  L106$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    leal (_lsrc-L106$pb)+262144(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bam06:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _lsrc+262144(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bam06:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc+262144(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bam06:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _lsrc+262144(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @lsrc, i32 0, i64 65536) to i8*)
}

define i8* @bam07() nounwind {
; LINUX-64-STATIC-LABEL: bam07:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $ldst+262144, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bam07:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $ldst+262144, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bam07:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L107$pb
; LINUX-32-PIC-NEXT:  .L107$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp107:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp107-.L107$pb), %eax
; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+262144(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bam07:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    leaq ldst+262144(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bam07:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_ldst+262144, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bam07:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $_ldst+262144, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bam07:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L107$pb
; DARWIN-32-PIC-NEXT:  L107$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    leal (_ldst-L107$pb)+262144(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bam07:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _ldst+262144(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bam07:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst+262144(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bam07:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _ldst+262144(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret i8* bitcast (i32* getelementptr ([131072 x i32], [131072 x i32]* @ldst, i32 0, i64 65536) to i8*)
}

define i8* @bam08() nounwind {
; LINUX-64-STATIC-LABEL: bam08:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
; LINUX-64-STATIC-NEXT:    addq lptr(%rip), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: bam08:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $262144, %eax # imm = 0x40000
; LINUX-32-STATIC-NEXT:    addl lptr, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: bam08:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L108$pb
; LINUX-32-PIC-NEXT:  .L108$pb:
; LINUX-32-PIC-NEXT:    popl %ecx
; LINUX-32-PIC-NEXT:  .Ltmp108:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp108-.L108$pb), %ecx
; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
; LINUX-32-PIC-NEXT:    addl lptr@GOTOFF(%ecx), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: bam08:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
; LINUX-64-PIC-NEXT:    addq lptr(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: bam08:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-32-STATIC-NEXT:    addl _lptr, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: bam08:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-32-DYNAMIC-NEXT:    addl _lptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: bam08:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L108$pb
; DARWIN-32-PIC-NEXT:  L108$pb:
; DARWIN-32-PIC-NEXT:    popl %ecx
; DARWIN-32-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-32-PIC-NEXT:    addl _lptr-L108$pb(%ecx), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: bam08:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-64-STATIC-NEXT:    addq _lptr(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: bam08:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-64-DYNAMIC-NEXT:    addq _lptr(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: bam08:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movl $262144, %eax ## imm = 0x40000
; DARWIN-64-PIC-NEXT:    addq _lptr(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @lptr, align 8
	%1 = getelementptr i32, i32* %0, i64 65536
	%2 = bitcast i32* %1 to i8*
	ret i8* %2
}

define i8* @cat00(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: cat00:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq src+64(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: cat00:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal src+64(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: cat00:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L109$pb
; LINUX-32-PIC-NEXT:  .L109$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp109:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp109-.L109$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: cat00:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: cat00:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _src+64(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: cat00:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: cat00:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L109$pb
; DARWIN-32-PIC-NEXT:  L109$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L109$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: cat00:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: cat00:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: cat00:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = add i64 %i, 16
	%1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %0
	%2 = bitcast i32* %1 to i8*
	ret i8* %2
}

define i8* @cxt00(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: cxt00:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq xsrc+64(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: cxt00:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal xsrc+64(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: cxt00:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L110$pb
; LINUX-32-PIC-NEXT:  .L110$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp110:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp110-.L110$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: cxt00:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: cxt00:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _xsrc+64(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: cxt00:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: cxt00:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L110$pb
; DARWIN-32-PIC-NEXT:  L110$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L110$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: cxt00:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: cxt00:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: cxt00:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = add i64 %i, 16
	%1 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %0
	%2 = bitcast i32* %1 to i8*
	ret i8* %2
}

define i8* @cat01(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: cat01:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq dst+64(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: cat01:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal dst+64(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: cat01:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L111$pb
; LINUX-32-PIC-NEXT:  .L111$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp111:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp111-.L111$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: cat01:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: cat01:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _dst+64(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: cat01:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: cat01:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L111$pb
; DARWIN-32-PIC-NEXT:  L111$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L111$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: cat01:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: cat01:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: cat01:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = add i64 %i, 16
	%1 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %0
	%2 = bitcast i32* %1 to i8*
	ret i8* %2
}

define i8* @cxt01(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: cxt01:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq xdst+64(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: cxt01:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal xdst+64(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: cxt01:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L112$pb
; LINUX-32-PIC-NEXT:  .L112$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp112:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp112-.L112$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: cxt01:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: cxt01:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _xdst+64(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: cxt01:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: cxt01:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L112$pb
; DARWIN-32-PIC-NEXT:  L112$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L112$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: cxt01:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: cxt01:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: cxt01:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = add i64 %i, 16
	%1 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %0
	%2 = bitcast i32* %1 to i8*
	ret i8* %2
}

define i8* @cat02(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: cat02:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rax
; LINUX-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: cat02:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl ptr, %ecx
; LINUX-32-STATIC-NEXT:    leal 64(%ecx,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: cat02:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L113$pb
; LINUX-32-PIC-NEXT:  .L113$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp113:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp113-.L113$pb), %eax
; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl (%eax), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: cat02:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movq (%rax), %rax
; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: cat02:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _ptr, %ecx
; DARWIN-32-STATIC-NEXT:    leal 64(%ecx,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: cat02:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-DYNAMIC-NEXT:    leal 64(%eax,%ecx,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: cat02:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L113$pb
; DARWIN-32-PIC-NEXT:  L113$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L113$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: cat02:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movq (%rax), %rax
; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: cat02:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movq (%rax), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: cat02:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movq (%rax), %rax
; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @ptr, align 8
	%1 = add i64 %i, 16
	%2 = getelementptr i32, i32* %0, i64 %1
	%3 = bitcast i32* %2 to i8*
	ret i8* %3
}

define i8* @cat03(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: cat03:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq dsrc+64(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: cat03:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal dsrc+64(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: cat03:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L114$pb
; LINUX-32-PIC-NEXT:  .L114$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp114:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp114-.L114$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: cat03:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: cat03:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _dsrc+64(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: cat03:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    leal _dsrc+64(,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: cat03:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L114$pb
; DARWIN-32-PIC-NEXT:  L114$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    leal (_dsrc-L114$pb)+64(%eax,%ecx,4), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: cat03:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: cat03:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: cat03:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = add i64 %i, 16
	%1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %0
	%2 = bitcast i32* %1 to i8*
	ret i8* %2
}

define i8* @cat04(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: cat04:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq ddst+64(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: cat04:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal ddst+64(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: cat04:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L115$pb
; LINUX-32-PIC-NEXT:  .L115$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp115:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp115-.L115$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: cat04:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: cat04:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _ddst+64(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: cat04:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    leal _ddst+64(,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: cat04:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L115$pb
; DARWIN-32-PIC-NEXT:  L115$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    leal (_ddst-L115$pb)+64(%eax,%ecx,4), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: cat04:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: cat04:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: cat04:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = add i64 %i, 16
	%1 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %0
	%2 = bitcast i32* %1 to i8*
	ret i8* %2
}

define i8* @cat05(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: cat05:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rax
; LINUX-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: cat05:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl dptr, %ecx
; LINUX-32-STATIC-NEXT:    leal 64(%ecx,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: cat05:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L116$pb
; LINUX-32-PIC-NEXT:  .L116$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp116:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp116-.L116$pb), %eax
; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl (%eax), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: cat05:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movq (%rax), %rax
; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: cat05:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _dptr, %ecx
; DARWIN-32-STATIC-NEXT:    leal 64(%ecx,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: cat05:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: cat05:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L116$pb
; DARWIN-32-PIC-NEXT:  L116$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl _dptr-L116$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: cat05:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: cat05:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: cat05:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @dptr, align 8
	%1 = add i64 %i, 16
	%2 = getelementptr i32, i32* %0, i64 %1
	%3 = bitcast i32* %2 to i8*
	ret i8* %3
}

define i8* @cat06(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: cat06:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq lsrc+64(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: cat06:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal lsrc+64(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: cat06:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L117$pb
; LINUX-32-PIC-NEXT:  .L117$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp117:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp117-.L117$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    leal lsrc@GOTOFF+64(%eax,%ecx,4), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: cat06:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: cat06:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _lsrc+64(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: cat06:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    leal _lsrc+64(,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: cat06:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L117$pb
; DARWIN-32-PIC-NEXT:  L117$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    leal (_lsrc-L117$pb)+64(%eax,%ecx,4), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: cat06:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: cat06:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: cat06:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = add i64 %i, 16
	%1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %0
	%2 = bitcast i32* %1 to i8*
	ret i8* %2
}

define i8* @cat07(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: cat07:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq ldst+64(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: cat07:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal ldst+64(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: cat07:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L118$pb
; LINUX-32-PIC-NEXT:  .L118$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp118:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp118-.L118$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+64(%eax,%ecx,4), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: cat07:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: cat07:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _ldst+64(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: cat07:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    leal _ldst+64(,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: cat07:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L118$pb
; DARWIN-32-PIC-NEXT:  L118$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    leal (_ldst-L118$pb)+64(%eax,%ecx,4), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: cat07:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: cat07:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: cat07:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = add i64 %i, 16
	%1 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %0
	%2 = bitcast i32* %1 to i8*
	ret i8* %2
}

define i8* @cat08(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: cat08:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rax
; LINUX-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: cat08:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl lptr, %ecx
; LINUX-32-STATIC-NEXT:    leal 64(%ecx,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: cat08:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L119$pb
; LINUX-32-PIC-NEXT:  .L119$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp119:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp119-.L119$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: cat08:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rax
; LINUX-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: cat08:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _lptr, %ecx
; DARWIN-32-STATIC-NEXT:    leal 64(%ecx,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: cat08:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    leal 64(%ecx,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: cat08:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L119$pb
; DARWIN-32-PIC-NEXT:  L119$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl _lptr-L119$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: cat08:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: cat08:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: cat08:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 64(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @lptr, align 8
	%1 = add i64 %i, 16
	%2 = getelementptr i32, i32* %0, i64 %1
	%3 = bitcast i32* %2 to i8*
	ret i8* %3
}

define i8* @cam00(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: cam00:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq src+262144(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: cam00:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal src+262144(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: cam00:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L120$pb
; LINUX-32-PIC-NEXT:  .L120$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp120:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp120-.L120$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl src@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: cam00:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq src@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: cam00:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _src+262144(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: cam00:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_src$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: cam00:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L120$pb
; DARWIN-32-PIC-NEXT:  L120$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl L_src$non_lazy_ptr-L120$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: cam00:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: cam00:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: cam00:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _src@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = add i64 %i, 65536
	%1 = getelementptr [131072 x i32], [131072 x i32]* @src, i64 0, i64 %0
	%2 = bitcast i32* %1 to i8*
	ret i8* %2
}

define i8* @cxm00(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: cxm00:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq xsrc+262144(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: cxm00:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal xsrc+262144(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: cxm00:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L121$pb
; LINUX-32-PIC-NEXT:  .L121$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp121:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp121-.L121$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl xsrc@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: cxm00:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq xsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: cxm00:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _xsrc+262144(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: cxm00:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_xsrc$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: cxm00:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L121$pb
; DARWIN-32-PIC-NEXT:  L121$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl L_xsrc$non_lazy_ptr-L121$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: cxm00:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: cxm00:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: cxm00:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _xsrc@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = add i64 %i, 65536
	%1 = getelementptr [32 x i32], [32 x i32]* @xsrc, i64 0, i64 %0
	%2 = bitcast i32* %1 to i8*
	ret i8* %2
}

define i8* @cam01(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: cam01:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq dst+262144(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: cam01:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal dst+262144(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: cam01:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L122$pb
; LINUX-32-PIC-NEXT:  .L122$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp122:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp122-.L122$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl dst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: cam01:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: cam01:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _dst+262144(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: cam01:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_dst$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: cam01:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L122$pb
; DARWIN-32-PIC-NEXT:  L122$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl L_dst$non_lazy_ptr-L122$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: cam01:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: cam01:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: cam01:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _dst@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = add i64 %i, 65536
	%1 = getelementptr [131072 x i32], [131072 x i32]* @dst, i64 0, i64 %0
	%2 = bitcast i32* %1 to i8*
	ret i8* %2
}

define i8* @cxm01(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: cxm01:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq xdst+262144(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: cxm01:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal xdst+262144(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: cxm01:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L123$pb
; LINUX-32-PIC-NEXT:  .L123$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp123:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp123-.L123$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl xdst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: cxm01:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq xdst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: cxm01:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _xdst+262144(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: cxm01:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl L_xdst$non_lazy_ptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: cxm01:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L123$pb
; DARWIN-32-PIC-NEXT:  L123$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl L_xdst$non_lazy_ptr-L123$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: cxm01:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: cxm01:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: cxm01:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _xdst@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = add i64 %i, 65536
	%1 = getelementptr [32 x i32], [32 x i32]* @xdst, i64 0, i64 %0
	%2 = bitcast i32* %1 to i8*
	ret i8* %2
}

define i8* @cam02(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: cam02:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movq ptr(%rip), %rax
; LINUX-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: cam02:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl ptr, %ecx
; LINUX-32-STATIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: cam02:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L124$pb
; LINUX-32-PIC-NEXT:  .L124$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp124:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp124-.L124$pb), %eax
; LINUX-32-PIC-NEXT:    movl ptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl (%eax), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: cam02:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq ptr@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movq (%rax), %rax
; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: cam02:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _ptr, %ecx
; DARWIN-32-STATIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: cam02:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_ptr$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    movl (%eax), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: cam02:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L124$pb
; DARWIN-32-PIC-NEXT:  L124$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_ptr$non_lazy_ptr-L124$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    movl (%eax), %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: cam02:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    movq (%rax), %rax
; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: cam02:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    movq (%rax), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: cam02:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _ptr@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    movq (%rax), %rax
; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @ptr, align 8
	%1 = add i64 %i, 65536
	%2 = getelementptr i32, i32* %0, i64 %1
	%3 = bitcast i32* %2 to i8*
	ret i8* %3
}

define i8* @cam03(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: cam03:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq dsrc+262144(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: cam03:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal dsrc+262144(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: cam03:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L125$pb
; LINUX-32-PIC-NEXT:  .L125$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp125:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp125-.L125$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl dsrc@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: cam03:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dsrc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: cam03:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _dsrc+262144(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: cam03:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    leal _dsrc+262144(,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: cam03:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L125$pb
; DARWIN-32-PIC-NEXT:  L125$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    leal (_dsrc-L125$pb)+262144(%eax,%ecx,4), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: cam03:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: cam03:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: cam03:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _dsrc(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = add i64 %i, 65536
	%1 = getelementptr [131072 x i32], [131072 x i32]* @dsrc, i64 0, i64 %0
	%2 = bitcast i32* %1 to i8*
	ret i8* %2
}

define i8* @cam04(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: cam04:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq ddst+262144(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: cam04:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal ddst+262144(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: cam04:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L126$pb
; LINUX-32-PIC-NEXT:  .L126$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp126:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp126-.L126$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl ddst@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: cam04:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq ddst@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: cam04:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _ddst+262144(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: cam04:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    leal _ddst+262144(,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: cam04:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L126$pb
; DARWIN-32-PIC-NEXT:  L126$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    leal (_ddst-L126$pb)+262144(%eax,%ecx,4), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: cam04:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _ddst(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: cam04:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _ddst(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: cam04:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _ddst(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = add i64 %i, 65536
	%1 = getelementptr [131072 x i32], [131072 x i32]* @ddst, i64 0, i64 %0
	%2 = bitcast i32* %1 to i8*
	ret i8* %2
}

define i8* @cam05(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: cam05:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movq dptr(%rip), %rax
; LINUX-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: cam05:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl dptr, %ecx
; LINUX-32-STATIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: cam05:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L127$pb
; LINUX-32-PIC-NEXT:  .L127$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp127:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp127-.L127$pb), %eax
; LINUX-32-PIC-NEXT:    movl dptr@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    movl (%eax), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: cam05:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq dptr@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    movq (%rax), %rax
; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: cam05:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _dptr, %ecx
; DARWIN-32-STATIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: cam05:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl _dptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: cam05:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L127$pb
; DARWIN-32-PIC-NEXT:  L127$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl _dptr-L127$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: cam05:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _dptr(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: cam05:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _dptr(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: cam05:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _dptr(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @dptr, align 8
	%1 = add i64 %i, 65536
	%2 = getelementptr i32, i32* %0, i64 %1
	%3 = bitcast i32* %2 to i8*
	ret i8* %3
}

define i8* @cam06(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: cam06:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq lsrc+262144(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: cam06:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal lsrc+262144(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: cam06:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L128$pb
; LINUX-32-PIC-NEXT:  .L128$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp128:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp128-.L128$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    leal lsrc@GOTOFF+262144(%eax,%ecx,4), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: cam06:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    leaq lsrc(%rip), %rax
; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: cam06:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _lsrc+262144(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: cam06:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    leal _lsrc+262144(,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: cam06:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L128$pb
; DARWIN-32-PIC-NEXT:  L128$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    leal (_lsrc-L128$pb)+262144(%eax,%ecx,4), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: cam06:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: cam06:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: cam06:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _lsrc(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = add i64 %i, 65536
	%1 = getelementptr [131072 x i32], [131072 x i32]* @lsrc, i64 0, i64 %0
	%2 = bitcast i32* %1 to i8*
	ret i8* %2
}

define i8* @cam07(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: cam07:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    leaq ldst+262144(,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: cam07:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    leal ldst+262144(,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: cam07:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L129$pb
; LINUX-32-PIC-NEXT:  .L129$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp129:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp129-.L129$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    leal ldst@GOTOFF+262144(%eax,%ecx,4), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: cam07:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    leaq ldst(%rip), %rax
; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: cam07:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    leal _ldst+262144(,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: cam07:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    leal _ldst+262144(,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: cam07:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L129$pb
; DARWIN-32-PIC-NEXT:  L129$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    leal (_ldst-L129$pb)+262144(%eax,%ecx,4), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: cam07:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _ldst(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: cam07:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _ldst(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: cam07:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _ldst(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = add i64 %i, 65536
	%1 = getelementptr [131072 x i32], [131072 x i32]* @ldst, i64 0, i64 %0
	%2 = bitcast i32* %1 to i8*
	ret i8* %2
}

define i8* @cam08(i64 %i) nounwind {
; LINUX-64-STATIC-LABEL: cam08:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movq lptr(%rip), %rax
; LINUX-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: cam08:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; LINUX-32-STATIC-NEXT:    movl lptr, %ecx
; LINUX-32-STATIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: cam08:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L130$pb
; LINUX-32-PIC-NEXT:  .L130$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp130:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp130-.L130$pb), %eax
; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; LINUX-32-PIC-NEXT:    movl lptr@GOTOFF(%eax), %eax
; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: cam08:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq lptr(%rip), %rax
; LINUX-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: cam08:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-STATIC-NEXT:    movl _lptr, %ecx
; DARWIN-32-STATIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: cam08:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
; DARWIN-32-DYNAMIC-NEXT:    movl _lptr, %ecx
; DARWIN-32-DYNAMIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: cam08:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L130$pb
; DARWIN-32-PIC-NEXT:  L130$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
; DARWIN-32-PIC-NEXT:    movl _lptr-L130$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: cam08:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _lptr(%rip), %rax
; DARWIN-64-STATIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: cam08:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _lptr(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: cam08:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _lptr(%rip), %rax
; DARWIN-64-PIC-NEXT:    leaq 262144(%rax,%rdi,4), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load i32*, i32** @lptr, align 8
	%1 = add i64 %i, 65536
	%2 = getelementptr i32, i32* %0, i64 %1
	%3 = bitcast i32* %2 to i8*
	ret i8* %3
}

define void @lcallee() nounwind {
; LINUX-64-STATIC-LABEL: lcallee:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    pushq %rax
; LINUX-64-STATIC-NEXT:    callq x
; LINUX-64-STATIC-NEXT:    callq x
; LINUX-64-STATIC-NEXT:    callq x
; LINUX-64-STATIC-NEXT:    callq x
; LINUX-64-STATIC-NEXT:    callq x
; LINUX-64-STATIC-NEXT:    callq x
; LINUX-64-STATIC-NEXT:    callq x
; LINUX-64-STATIC-NEXT:    popq %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: lcallee:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    subl $12, %esp
; LINUX-32-STATIC-NEXT:    calll x
; LINUX-32-STATIC-NEXT:    calll x
; LINUX-32-STATIC-NEXT:    calll x
; LINUX-32-STATIC-NEXT:    calll x
; LINUX-32-STATIC-NEXT:    calll x
; LINUX-32-STATIC-NEXT:    calll x
; LINUX-32-STATIC-NEXT:    calll x
; LINUX-32-STATIC-NEXT:    addl $12, %esp
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: lcallee:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    pushl %ebx
; LINUX-32-PIC-NEXT:    subl $8, %esp
; LINUX-32-PIC-NEXT:    calll .L131$pb
; LINUX-32-PIC-NEXT:  .L131$pb:
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:  .Ltmp131:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp131-.L131$pb), %ebx
; LINUX-32-PIC-NEXT:    calll x@PLT
; LINUX-32-PIC-NEXT:    calll x@PLT
; LINUX-32-PIC-NEXT:    calll x@PLT
; LINUX-32-PIC-NEXT:    calll x@PLT
; LINUX-32-PIC-NEXT:    calll x@PLT
; LINUX-32-PIC-NEXT:    calll x@PLT
; LINUX-32-PIC-NEXT:    calll x@PLT
; LINUX-32-PIC-NEXT:    addl $8, %esp
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: lcallee:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    pushq %rax
; LINUX-64-PIC-NEXT:    callq x@PLT
; LINUX-64-PIC-NEXT:    callq x@PLT
; LINUX-64-PIC-NEXT:    callq x@PLT
; LINUX-64-PIC-NEXT:    callq x@PLT
; LINUX-64-PIC-NEXT:    callq x@PLT
; LINUX-64-PIC-NEXT:    callq x@PLT
; LINUX-64-PIC-NEXT:    callq x@PLT
; LINUX-64-PIC-NEXT:    popq %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: lcallee:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    subl $12, %esp
; DARWIN-32-STATIC-NEXT:    calll _x
; DARWIN-32-STATIC-NEXT:    calll _x
; DARWIN-32-STATIC-NEXT:    calll _x
; DARWIN-32-STATIC-NEXT:    calll _x
; DARWIN-32-STATIC-NEXT:    calll _x
; DARWIN-32-STATIC-NEXT:    calll _x
; DARWIN-32-STATIC-NEXT:    calll _x
; DARWIN-32-STATIC-NEXT:    addl $12, %esp
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: lcallee:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
; DARWIN-32-DYNAMIC-NEXT:    calll _x
; DARWIN-32-DYNAMIC-NEXT:    calll _x
; DARWIN-32-DYNAMIC-NEXT:    calll _x
; DARWIN-32-DYNAMIC-NEXT:    calll _x
; DARWIN-32-DYNAMIC-NEXT:    calll _x
; DARWIN-32-DYNAMIC-NEXT:    calll _x
; DARWIN-32-DYNAMIC-NEXT:    calll _x
; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: lcallee:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    subl $12, %esp
; DARWIN-32-PIC-NEXT:    calll _x
; DARWIN-32-PIC-NEXT:    calll _x
; DARWIN-32-PIC-NEXT:    calll _x
; DARWIN-32-PIC-NEXT:    calll _x
; DARWIN-32-PIC-NEXT:    calll _x
; DARWIN-32-PIC-NEXT:    calll _x
; DARWIN-32-PIC-NEXT:    calll _x
; DARWIN-32-PIC-NEXT:    addl $12, %esp
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: lcallee:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    pushq %rax
; DARWIN-64-STATIC-NEXT:    callq _x
; DARWIN-64-STATIC-NEXT:    callq _x
; DARWIN-64-STATIC-NEXT:    callq _x
; DARWIN-64-STATIC-NEXT:    callq _x
; DARWIN-64-STATIC-NEXT:    callq _x
; DARWIN-64-STATIC-NEXT:    callq _x
; DARWIN-64-STATIC-NEXT:    callq _x
; DARWIN-64-STATIC-NEXT:    popq %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: lcallee:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
; DARWIN-64-DYNAMIC-NEXT:    callq _x
; DARWIN-64-DYNAMIC-NEXT:    callq _x
; DARWIN-64-DYNAMIC-NEXT:    callq _x
; DARWIN-64-DYNAMIC-NEXT:    callq _x
; DARWIN-64-DYNAMIC-NEXT:    callq _x
; DARWIN-64-DYNAMIC-NEXT:    callq _x
; DARWIN-64-DYNAMIC-NEXT:    callq _x
; DARWIN-64-DYNAMIC-NEXT:    popq %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: lcallee:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    pushq %rax
; DARWIN-64-PIC-NEXT:    callq _x
; DARWIN-64-PIC-NEXT:    callq _x
; DARWIN-64-PIC-NEXT:    callq _x
; DARWIN-64-PIC-NEXT:    callq _x
; DARWIN-64-PIC-NEXT:    callq _x
; DARWIN-64-PIC-NEXT:    callq _x
; DARWIN-64-PIC-NEXT:    callq _x
; DARWIN-64-PIC-NEXT:    popq %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	call void @x() nounwind
	call void @x() nounwind
	call void @x() nounwind
	call void @x() nounwind
	call void @x() nounwind
	call void @x() nounwind
	call void @x() nounwind
	ret void
}

declare void @x()

define internal void @dcallee() nounwind {
; LINUX-64-STATIC-LABEL: dcallee:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    pushq %rax
; LINUX-64-STATIC-NEXT:    callq y
; LINUX-64-STATIC-NEXT:    callq y
; LINUX-64-STATIC-NEXT:    callq y
; LINUX-64-STATIC-NEXT:    callq y
; LINUX-64-STATIC-NEXT:    callq y
; LINUX-64-STATIC-NEXT:    callq y
; LINUX-64-STATIC-NEXT:    callq y
; LINUX-64-STATIC-NEXT:    popq %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: dcallee:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    subl $12, %esp
; LINUX-32-STATIC-NEXT:    calll y
; LINUX-32-STATIC-NEXT:    calll y
; LINUX-32-STATIC-NEXT:    calll y
; LINUX-32-STATIC-NEXT:    calll y
; LINUX-32-STATIC-NEXT:    calll y
; LINUX-32-STATIC-NEXT:    calll y
; LINUX-32-STATIC-NEXT:    calll y
; LINUX-32-STATIC-NEXT:    addl $12, %esp
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: dcallee:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    pushl %ebx
; LINUX-32-PIC-NEXT:    subl $8, %esp
; LINUX-32-PIC-NEXT:    calll .L132$pb
; LINUX-32-PIC-NEXT:  .L132$pb:
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:  .Ltmp132:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp132-.L132$pb), %ebx
; LINUX-32-PIC-NEXT:    calll y@PLT
; LINUX-32-PIC-NEXT:    calll y@PLT
; LINUX-32-PIC-NEXT:    calll y@PLT
; LINUX-32-PIC-NEXT:    calll y@PLT
; LINUX-32-PIC-NEXT:    calll y@PLT
; LINUX-32-PIC-NEXT:    calll y@PLT
; LINUX-32-PIC-NEXT:    calll y@PLT
; LINUX-32-PIC-NEXT:    addl $8, %esp
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: dcallee:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    pushq %rax
; LINUX-64-PIC-NEXT:    callq y@PLT
; LINUX-64-PIC-NEXT:    callq y@PLT
; LINUX-64-PIC-NEXT:    callq y@PLT
; LINUX-64-PIC-NEXT:    callq y@PLT
; LINUX-64-PIC-NEXT:    callq y@PLT
; LINUX-64-PIC-NEXT:    callq y@PLT
; LINUX-64-PIC-NEXT:    callq y@PLT
; LINUX-64-PIC-NEXT:    popq %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: dcallee:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    subl $12, %esp
; DARWIN-32-STATIC-NEXT:    calll _y
; DARWIN-32-STATIC-NEXT:    calll _y
; DARWIN-32-STATIC-NEXT:    calll _y
; DARWIN-32-STATIC-NEXT:    calll _y
; DARWIN-32-STATIC-NEXT:    calll _y
; DARWIN-32-STATIC-NEXT:    calll _y
; DARWIN-32-STATIC-NEXT:    calll _y
; DARWIN-32-STATIC-NEXT:    addl $12, %esp
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: dcallee:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
; DARWIN-32-DYNAMIC-NEXT:    calll _y
; DARWIN-32-DYNAMIC-NEXT:    calll _y
; DARWIN-32-DYNAMIC-NEXT:    calll _y
; DARWIN-32-DYNAMIC-NEXT:    calll _y
; DARWIN-32-DYNAMIC-NEXT:    calll _y
; DARWIN-32-DYNAMIC-NEXT:    calll _y
; DARWIN-32-DYNAMIC-NEXT:    calll _y
; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: dcallee:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    subl $12, %esp
; DARWIN-32-PIC-NEXT:    calll _y
; DARWIN-32-PIC-NEXT:    calll _y
; DARWIN-32-PIC-NEXT:    calll _y
; DARWIN-32-PIC-NEXT:    calll _y
; DARWIN-32-PIC-NEXT:    calll _y
; DARWIN-32-PIC-NEXT:    calll _y
; DARWIN-32-PIC-NEXT:    calll _y
; DARWIN-32-PIC-NEXT:    addl $12, %esp
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: dcallee:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    pushq %rax
; DARWIN-64-STATIC-NEXT:    callq _y
; DARWIN-64-STATIC-NEXT:    callq _y
; DARWIN-64-STATIC-NEXT:    callq _y
; DARWIN-64-STATIC-NEXT:    callq _y
; DARWIN-64-STATIC-NEXT:    callq _y
; DARWIN-64-STATIC-NEXT:    callq _y
; DARWIN-64-STATIC-NEXT:    callq _y
; DARWIN-64-STATIC-NEXT:    popq %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: dcallee:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
; DARWIN-64-DYNAMIC-NEXT:    callq _y
; DARWIN-64-DYNAMIC-NEXT:    callq _y
; DARWIN-64-DYNAMIC-NEXT:    callq _y
; DARWIN-64-DYNAMIC-NEXT:    callq _y
; DARWIN-64-DYNAMIC-NEXT:    callq _y
; DARWIN-64-DYNAMIC-NEXT:    callq _y
; DARWIN-64-DYNAMIC-NEXT:    callq _y
; DARWIN-64-DYNAMIC-NEXT:    popq %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: dcallee:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    pushq %rax
; DARWIN-64-PIC-NEXT:    callq _y
; DARWIN-64-PIC-NEXT:    callq _y
; DARWIN-64-PIC-NEXT:    callq _y
; DARWIN-64-PIC-NEXT:    callq _y
; DARWIN-64-PIC-NEXT:    callq _y
; DARWIN-64-PIC-NEXT:    callq _y
; DARWIN-64-PIC-NEXT:    callq _y
; DARWIN-64-PIC-NEXT:    popq %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	call void @y() nounwind
	call void @y() nounwind
	call void @y() nounwind
	call void @y() nounwind
	call void @y() nounwind
	call void @y() nounwind
	call void @y() nounwind
	ret void
}

declare void @y()

define void ()* @address() nounwind {
; LINUX-64-STATIC-LABEL: address:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $callee, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: address:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $callee, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: address:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L133$pb
; LINUX-32-PIC-NEXT:  .L133$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp133:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp133-.L133$pb), %eax
; LINUX-32-PIC-NEXT:    movl callee@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: address:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq callee@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: address:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_callee, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: address:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl L_callee$non_lazy_ptr, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: address:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L133$pb
; DARWIN-32-PIC-NEXT:  L133$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_callee$non_lazy_ptr-L133$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: address:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    movq _callee@GOTPCREL(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: address:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    movq _callee@GOTPCREL(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: address:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    movq _callee@GOTPCREL(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret void ()* @callee
}

declare void @callee()

define void ()* @laddress() nounwind {
; LINUX-64-STATIC-LABEL: laddress:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $lcallee, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: laddress:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $lcallee, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: laddress:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L134$pb
; LINUX-32-PIC-NEXT:  .L134$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp134:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp134-.L134$pb), %eax
; LINUX-32-PIC-NEXT:    movl lcallee@GOT(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: laddress:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    movq lcallee@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: laddress:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_lcallee, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: laddress:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $_lcallee, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: laddress:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L134$pb
; DARWIN-32-PIC-NEXT:  L134$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    leal _lcallee-L134$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: laddress:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _lcallee(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: laddress:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _lcallee(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: laddress:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _lcallee(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret void ()* @lcallee
}

define void ()* @daddress() nounwind {
; LINUX-64-STATIC-LABEL: daddress:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    movl $dcallee, %eax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: daddress:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    movl $dcallee, %eax
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: daddress:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    calll .L135$pb
; LINUX-32-PIC-NEXT:  .L135$pb:
; LINUX-32-PIC-NEXT:    popl %eax
; LINUX-32-PIC-NEXT:  .Ltmp135:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp135-.L135$pb), %eax
; LINUX-32-PIC-NEXT:    leal dcallee@GOTOFF(%eax), %eax
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: daddress:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    leaq dcallee(%rip), %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: daddress:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    movl $_dcallee, %eax
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: daddress:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    movl $_dcallee, %eax
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: daddress:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    calll L135$pb
; DARWIN-32-PIC-NEXT:  L135$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    leal _dcallee-L135$pb(%eax), %eax
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: daddress:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    leaq _dcallee(%rip), %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: daddress:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    leaq _dcallee(%rip), %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: daddress:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    leaq _dcallee(%rip), %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	ret void ()* @dcallee
}

define void @caller() nounwind {
; LINUX-64-STATIC-LABEL: caller:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    pushq %rax
; LINUX-64-STATIC-NEXT:    callq callee
; LINUX-64-STATIC-NEXT:    callq callee
; LINUX-64-STATIC-NEXT:    popq %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: caller:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    subl $12, %esp
; LINUX-32-STATIC-NEXT:    calll callee
; LINUX-32-STATIC-NEXT:    calll callee
; LINUX-32-STATIC-NEXT:    addl $12, %esp
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: caller:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    pushl %ebx
; LINUX-32-PIC-NEXT:    subl $8, %esp
; LINUX-32-PIC-NEXT:    calll .L136$pb
; LINUX-32-PIC-NEXT:  .L136$pb:
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:  .Ltmp136:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp136-.L136$pb), %ebx
; LINUX-32-PIC-NEXT:    calll callee@PLT
; LINUX-32-PIC-NEXT:    calll callee@PLT
; LINUX-32-PIC-NEXT:    addl $8, %esp
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: caller:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    pushq %rax
; LINUX-64-PIC-NEXT:    callq callee@PLT
; LINUX-64-PIC-NEXT:    callq callee@PLT
; LINUX-64-PIC-NEXT:    popq %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: caller:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    subl $12, %esp
; DARWIN-32-STATIC-NEXT:    calll _callee
; DARWIN-32-STATIC-NEXT:    calll _callee
; DARWIN-32-STATIC-NEXT:    addl $12, %esp
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: caller:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
; DARWIN-32-DYNAMIC-NEXT:    calll _callee
; DARWIN-32-DYNAMIC-NEXT:    calll _callee
; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: caller:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    subl $12, %esp
; DARWIN-32-PIC-NEXT:    calll _callee
; DARWIN-32-PIC-NEXT:    calll _callee
; DARWIN-32-PIC-NEXT:    addl $12, %esp
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: caller:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    pushq %rax
; DARWIN-64-STATIC-NEXT:    callq _callee
; DARWIN-64-STATIC-NEXT:    callq _callee
; DARWIN-64-STATIC-NEXT:    popq %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: caller:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
; DARWIN-64-DYNAMIC-NEXT:    callq _callee
; DARWIN-64-DYNAMIC-NEXT:    callq _callee
; DARWIN-64-DYNAMIC-NEXT:    popq %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: caller:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    pushq %rax
; DARWIN-64-PIC-NEXT:    callq _callee
; DARWIN-64-PIC-NEXT:    callq _callee
; DARWIN-64-PIC-NEXT:    popq %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	call void @callee() nounwind
	call void @callee() nounwind
	ret void
}

define void @dcaller() nounwind {
; LINUX-64-STATIC-LABEL: dcaller:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    pushq %rax
; LINUX-64-STATIC-NEXT:    callq dcallee
; LINUX-64-STATIC-NEXT:    callq dcallee
; LINUX-64-STATIC-NEXT:    popq %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: dcaller:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    subl $12, %esp
; LINUX-32-STATIC-NEXT:    calll dcallee
; LINUX-32-STATIC-NEXT:    calll dcallee
; LINUX-32-STATIC-NEXT:    addl $12, %esp
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: dcaller:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    pushl %ebx
; LINUX-32-PIC-NEXT:    subl $8, %esp
; LINUX-32-PIC-NEXT:    calll .L137$pb
; LINUX-32-PIC-NEXT:  .L137$pb:
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:  .Ltmp137:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp137-.L137$pb), %ebx
; LINUX-32-PIC-NEXT:    calll dcallee
; LINUX-32-PIC-NEXT:    calll dcallee
; LINUX-32-PIC-NEXT:    addl $8, %esp
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: dcaller:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    pushq %rax
; LINUX-64-PIC-NEXT:    callq dcallee
; LINUX-64-PIC-NEXT:    callq dcallee
; LINUX-64-PIC-NEXT:    popq %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: dcaller:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    subl $12, %esp
; DARWIN-32-STATIC-NEXT:    calll _dcallee
; DARWIN-32-STATIC-NEXT:    calll _dcallee
; DARWIN-32-STATIC-NEXT:    addl $12, %esp
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: dcaller:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
; DARWIN-32-DYNAMIC-NEXT:    calll _dcallee
; DARWIN-32-DYNAMIC-NEXT:    calll _dcallee
; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: dcaller:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    subl $12, %esp
; DARWIN-32-PIC-NEXT:    calll _dcallee
; DARWIN-32-PIC-NEXT:    calll _dcallee
; DARWIN-32-PIC-NEXT:    addl $12, %esp
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: dcaller:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    pushq %rax
; DARWIN-64-STATIC-NEXT:    callq _dcallee
; DARWIN-64-STATIC-NEXT:    callq _dcallee
; DARWIN-64-STATIC-NEXT:    popq %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: dcaller:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
; DARWIN-64-DYNAMIC-NEXT:    callq _dcallee
; DARWIN-64-DYNAMIC-NEXT:    callq _dcallee
; DARWIN-64-DYNAMIC-NEXT:    popq %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: dcaller:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    pushq %rax
; DARWIN-64-PIC-NEXT:    callq _dcallee
; DARWIN-64-PIC-NEXT:    callq _dcallee
; DARWIN-64-PIC-NEXT:    popq %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	call void @dcallee() nounwind
	call void @dcallee() nounwind
	ret void
}

define void @lcaller() nounwind {
; LINUX-64-STATIC-LABEL: lcaller:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    pushq %rax
; LINUX-64-STATIC-NEXT:    callq lcallee
; LINUX-64-STATIC-NEXT:    callq lcallee
; LINUX-64-STATIC-NEXT:    popq %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: lcaller:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    subl $12, %esp
; LINUX-32-STATIC-NEXT:    calll lcallee
; LINUX-32-STATIC-NEXT:    calll lcallee
; LINUX-32-STATIC-NEXT:    addl $12, %esp
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: lcaller:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    pushl %ebx
; LINUX-32-PIC-NEXT:    subl $8, %esp
; LINUX-32-PIC-NEXT:    calll .L138$pb
; LINUX-32-PIC-NEXT:  .L138$pb:
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:  .Ltmp138:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp138-.L138$pb), %ebx
; LINUX-32-PIC-NEXT:    calll lcallee@PLT
; LINUX-32-PIC-NEXT:    calll lcallee@PLT
; LINUX-32-PIC-NEXT:    addl $8, %esp
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: lcaller:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    pushq %rax
; LINUX-64-PIC-NEXT:    callq lcallee@PLT
; LINUX-64-PIC-NEXT:    callq lcallee@PLT
; LINUX-64-PIC-NEXT:    popq %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: lcaller:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    subl $12, %esp
; DARWIN-32-STATIC-NEXT:    calll _lcallee
; DARWIN-32-STATIC-NEXT:    calll _lcallee
; DARWIN-32-STATIC-NEXT:    addl $12, %esp
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: lcaller:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
; DARWIN-32-DYNAMIC-NEXT:    calll _lcallee
; DARWIN-32-DYNAMIC-NEXT:    calll _lcallee
; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: lcaller:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    subl $12, %esp
; DARWIN-32-PIC-NEXT:    calll _lcallee
; DARWIN-32-PIC-NEXT:    calll _lcallee
; DARWIN-32-PIC-NEXT:    addl $12, %esp
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: lcaller:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    pushq %rax
; DARWIN-64-STATIC-NEXT:    callq _lcallee
; DARWIN-64-STATIC-NEXT:    callq _lcallee
; DARWIN-64-STATIC-NEXT:    popq %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: lcaller:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
; DARWIN-64-DYNAMIC-NEXT:    callq _lcallee
; DARWIN-64-DYNAMIC-NEXT:    callq _lcallee
; DARWIN-64-DYNAMIC-NEXT:    popq %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: lcaller:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    pushq %rax
; DARWIN-64-PIC-NEXT:    callq _lcallee
; DARWIN-64-PIC-NEXT:    callq _lcallee
; DARWIN-64-PIC-NEXT:    popq %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	call void @lcallee() nounwind
	call void @lcallee() nounwind
	ret void
}

define void @tailcaller() nounwind {
; LINUX-64-STATIC-LABEL: tailcaller:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    pushq %rax
; LINUX-64-STATIC-NEXT:    callq callee
; LINUX-64-STATIC-NEXT:    popq %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: tailcaller:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    subl $12, %esp
; LINUX-32-STATIC-NEXT:    calll callee
; LINUX-32-STATIC-NEXT:    addl $12, %esp
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: tailcaller:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    pushl %ebx
; LINUX-32-PIC-NEXT:    subl $8, %esp
; LINUX-32-PIC-NEXT:    calll .L139$pb
; LINUX-32-PIC-NEXT:  .L139$pb:
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:  .Ltmp139:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp139-.L139$pb), %ebx
; LINUX-32-PIC-NEXT:    calll callee@PLT
; LINUX-32-PIC-NEXT:    addl $8, %esp
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: tailcaller:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    pushq %rax
; LINUX-64-PIC-NEXT:    callq callee@PLT
; LINUX-64-PIC-NEXT:    popq %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: tailcaller:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    subl $12, %esp
; DARWIN-32-STATIC-NEXT:    calll _callee
; DARWIN-32-STATIC-NEXT:    addl $12, %esp
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: tailcaller:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
; DARWIN-32-DYNAMIC-NEXT:    calll _callee
; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: tailcaller:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    subl $12, %esp
; DARWIN-32-PIC-NEXT:    calll _callee
; DARWIN-32-PIC-NEXT:    addl $12, %esp
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: tailcaller:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    pushq %rax
; DARWIN-64-STATIC-NEXT:    callq _callee
; DARWIN-64-STATIC-NEXT:    popq %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: tailcaller:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
; DARWIN-64-DYNAMIC-NEXT:    callq _callee
; DARWIN-64-DYNAMIC-NEXT:    popq %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: tailcaller:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    pushq %rax
; DARWIN-64-PIC-NEXT:    callq _callee
; DARWIN-64-PIC-NEXT:    popq %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	call void @callee() nounwind
	ret void
}

define void @dtailcaller() nounwind {
; LINUX-64-STATIC-LABEL: dtailcaller:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    pushq %rax
; LINUX-64-STATIC-NEXT:    callq dcallee
; LINUX-64-STATIC-NEXT:    popq %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: dtailcaller:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    subl $12, %esp
; LINUX-32-STATIC-NEXT:    calll dcallee
; LINUX-32-STATIC-NEXT:    addl $12, %esp
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: dtailcaller:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    pushl %ebx
; LINUX-32-PIC-NEXT:    subl $8, %esp
; LINUX-32-PIC-NEXT:    calll .L140$pb
; LINUX-32-PIC-NEXT:  .L140$pb:
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:  .Ltmp140:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp140-.L140$pb), %ebx
; LINUX-32-PIC-NEXT:    calll dcallee
; LINUX-32-PIC-NEXT:    addl $8, %esp
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: dtailcaller:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    pushq %rax
; LINUX-64-PIC-NEXT:    callq dcallee
; LINUX-64-PIC-NEXT:    popq %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: dtailcaller:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    subl $12, %esp
; DARWIN-32-STATIC-NEXT:    calll _dcallee
; DARWIN-32-STATIC-NEXT:    addl $12, %esp
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: dtailcaller:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
; DARWIN-32-DYNAMIC-NEXT:    calll _dcallee
; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: dtailcaller:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    subl $12, %esp
; DARWIN-32-PIC-NEXT:    calll _dcallee
; DARWIN-32-PIC-NEXT:    addl $12, %esp
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: dtailcaller:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    pushq %rax
; DARWIN-64-STATIC-NEXT:    callq _dcallee
; DARWIN-64-STATIC-NEXT:    popq %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: dtailcaller:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
; DARWIN-64-DYNAMIC-NEXT:    callq _dcallee
; DARWIN-64-DYNAMIC-NEXT:    popq %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: dtailcaller:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    pushq %rax
; DARWIN-64-PIC-NEXT:    callq _dcallee
; DARWIN-64-PIC-NEXT:    popq %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	call void @dcallee() nounwind
	ret void
}

define void @ltailcaller() nounwind {
; LINUX-64-STATIC-LABEL: ltailcaller:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    pushq %rax
; LINUX-64-STATIC-NEXT:    callq lcallee
; LINUX-64-STATIC-NEXT:    popq %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: ltailcaller:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    subl $12, %esp
; LINUX-32-STATIC-NEXT:    calll lcallee
; LINUX-32-STATIC-NEXT:    addl $12, %esp
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: ltailcaller:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    pushl %ebx
; LINUX-32-PIC-NEXT:    subl $8, %esp
; LINUX-32-PIC-NEXT:    calll .L141$pb
; LINUX-32-PIC-NEXT:  .L141$pb:
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:  .Ltmp141:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp141-.L141$pb), %ebx
; LINUX-32-PIC-NEXT:    calll lcallee@PLT
; LINUX-32-PIC-NEXT:    addl $8, %esp
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: ltailcaller:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    pushq %rax
; LINUX-64-PIC-NEXT:    callq lcallee@PLT
; LINUX-64-PIC-NEXT:    popq %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: ltailcaller:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    subl $12, %esp
; DARWIN-32-STATIC-NEXT:    calll _lcallee
; DARWIN-32-STATIC-NEXT:    addl $12, %esp
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: ltailcaller:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
; DARWIN-32-DYNAMIC-NEXT:    calll _lcallee
; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: ltailcaller:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    subl $12, %esp
; DARWIN-32-PIC-NEXT:    calll _lcallee
; DARWIN-32-PIC-NEXT:    addl $12, %esp
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: ltailcaller:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    pushq %rax
; DARWIN-64-STATIC-NEXT:    callq _lcallee
; DARWIN-64-STATIC-NEXT:    popq %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: ltailcaller:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
; DARWIN-64-DYNAMIC-NEXT:    callq _lcallee
; DARWIN-64-DYNAMIC-NEXT:    popq %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: ltailcaller:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    pushq %rax
; DARWIN-64-PIC-NEXT:    callq _lcallee
; DARWIN-64-PIC-NEXT:    popq %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	call void @lcallee() nounwind
	ret void
}

define void @icaller() nounwind {
; LINUX-64-STATIC-LABEL: icaller:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    pushq %rax
; LINUX-64-STATIC-NEXT:    callq *ifunc(%rip)
; LINUX-64-STATIC-NEXT:    callq *ifunc(%rip)
; LINUX-64-STATIC-NEXT:    popq %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: icaller:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    subl $12, %esp
; LINUX-32-STATIC-NEXT:    calll *ifunc
; LINUX-32-STATIC-NEXT:    calll *ifunc
; LINUX-32-STATIC-NEXT:    addl $12, %esp
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: icaller:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    pushl %ebx
; LINUX-32-PIC-NEXT:    pushl %esi
; LINUX-32-PIC-NEXT:    pushl %eax
; LINUX-32-PIC-NEXT:    calll .L142$pb
; LINUX-32-PIC-NEXT:  .L142$pb:
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:  .Ltmp142:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp142-.L142$pb), %ebx
; LINUX-32-PIC-NEXT:    movl ifunc@GOT(%ebx), %esi
; LINUX-32-PIC-NEXT:    calll *(%esi)
; LINUX-32-PIC-NEXT:    calll *(%esi)
; LINUX-32-PIC-NEXT:    addl $4, %esp
; LINUX-32-PIC-NEXT:    popl %esi
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: icaller:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    pushq %rbx
; LINUX-64-PIC-NEXT:    movq ifunc@GOTPCREL(%rip), %rbx
; LINUX-64-PIC-NEXT:    callq *(%rbx)
; LINUX-64-PIC-NEXT:    callq *(%rbx)
; LINUX-64-PIC-NEXT:    popq %rbx
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: icaller:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    subl $12, %esp
; DARWIN-32-STATIC-NEXT:    calll *_ifunc
; DARWIN-32-STATIC-NEXT:    calll *_ifunc
; DARWIN-32-STATIC-NEXT:    addl $12, %esp
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: icaller:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    pushl %esi
; DARWIN-32-DYNAMIC-NEXT:    subl $8, %esp
; DARWIN-32-DYNAMIC-NEXT:    movl L_ifunc$non_lazy_ptr, %esi
; DARWIN-32-DYNAMIC-NEXT:    calll *(%esi)
; DARWIN-32-DYNAMIC-NEXT:    calll *(%esi)
; DARWIN-32-DYNAMIC-NEXT:    addl $8, %esp
; DARWIN-32-DYNAMIC-NEXT:    popl %esi
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: icaller:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    pushl %esi
; DARWIN-32-PIC-NEXT:    subl $8, %esp
; DARWIN-32-PIC-NEXT:    calll L142$pb
; DARWIN-32-PIC-NEXT:  L142$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_ifunc$non_lazy_ptr-L142$pb(%eax), %esi
; DARWIN-32-PIC-NEXT:    calll *(%esi)
; DARWIN-32-PIC-NEXT:    calll *(%esi)
; DARWIN-32-PIC-NEXT:    addl $8, %esp
; DARWIN-32-PIC-NEXT:    popl %esi
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: icaller:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    pushq %rbx
; DARWIN-64-STATIC-NEXT:    movq _ifunc@GOTPCREL(%rip), %rbx
; DARWIN-64-STATIC-NEXT:    callq *(%rbx)
; DARWIN-64-STATIC-NEXT:    callq *(%rbx)
; DARWIN-64-STATIC-NEXT:    popq %rbx
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: icaller:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    pushq %rbx
; DARWIN-64-DYNAMIC-NEXT:    movq _ifunc@GOTPCREL(%rip), %rbx
; DARWIN-64-DYNAMIC-NEXT:    callq *(%rbx)
; DARWIN-64-DYNAMIC-NEXT:    callq *(%rbx)
; DARWIN-64-DYNAMIC-NEXT:    popq %rbx
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: icaller:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    pushq %rbx
; DARWIN-64-PIC-NEXT:    movq _ifunc@GOTPCREL(%rip), %rbx
; DARWIN-64-PIC-NEXT:    callq *(%rbx)
; DARWIN-64-PIC-NEXT:    callq *(%rbx)
; DARWIN-64-PIC-NEXT:    popq %rbx
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load void ()*, void ()** @ifunc, align 8
	call void %0() nounwind
	%1 = load void ()*, void ()** @ifunc, align 8
	call void %1() nounwind
	ret void
}

define void @dicaller() nounwind {
; LINUX-64-STATIC-LABEL: dicaller:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    pushq %rax
; LINUX-64-STATIC-NEXT:    callq *difunc(%rip)
; LINUX-64-STATIC-NEXT:    callq *difunc(%rip)
; LINUX-64-STATIC-NEXT:    popq %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: dicaller:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    subl $12, %esp
; LINUX-32-STATIC-NEXT:    calll *difunc
; LINUX-32-STATIC-NEXT:    calll *difunc
; LINUX-32-STATIC-NEXT:    addl $12, %esp
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: dicaller:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    pushl %ebx
; LINUX-32-PIC-NEXT:    pushl %esi
; LINUX-32-PIC-NEXT:    pushl %eax
; LINUX-32-PIC-NEXT:    calll .L143$pb
; LINUX-32-PIC-NEXT:  .L143$pb:
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:  .Ltmp143:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp143-.L143$pb), %ebx
; LINUX-32-PIC-NEXT:    movl difunc@GOT(%ebx), %esi
; LINUX-32-PIC-NEXT:    calll *(%esi)
; LINUX-32-PIC-NEXT:    calll *(%esi)
; LINUX-32-PIC-NEXT:    addl $4, %esp
; LINUX-32-PIC-NEXT:    popl %esi
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: dicaller:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    pushq %rbx
; LINUX-64-PIC-NEXT:    movq difunc@GOTPCREL(%rip), %rbx
; LINUX-64-PIC-NEXT:    callq *(%rbx)
; LINUX-64-PIC-NEXT:    callq *(%rbx)
; LINUX-64-PIC-NEXT:    popq %rbx
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: dicaller:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    subl $12, %esp
; DARWIN-32-STATIC-NEXT:    calll *_difunc
; DARWIN-32-STATIC-NEXT:    calll *_difunc
; DARWIN-32-STATIC-NEXT:    addl $12, %esp
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: dicaller:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
; DARWIN-32-DYNAMIC-NEXT:    calll *_difunc
; DARWIN-32-DYNAMIC-NEXT:    calll *_difunc
; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: dicaller:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    pushl %esi
; DARWIN-32-PIC-NEXT:    subl $8, %esp
; DARWIN-32-PIC-NEXT:    calll L143$pb
; DARWIN-32-PIC-NEXT:  L143$pb:
; DARWIN-32-PIC-NEXT:    popl %esi
; DARWIN-32-PIC-NEXT:    calll *_difunc-L143$pb(%esi)
; DARWIN-32-PIC-NEXT:    calll *_difunc-L143$pb(%esi)
; DARWIN-32-PIC-NEXT:    addl $8, %esp
; DARWIN-32-PIC-NEXT:    popl %esi
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: dicaller:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    pushq %rax
; DARWIN-64-STATIC-NEXT:    callq *_difunc(%rip)
; DARWIN-64-STATIC-NEXT:    callq *_difunc(%rip)
; DARWIN-64-STATIC-NEXT:    popq %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: dicaller:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
; DARWIN-64-DYNAMIC-NEXT:    callq *_difunc(%rip)
; DARWIN-64-DYNAMIC-NEXT:    callq *_difunc(%rip)
; DARWIN-64-DYNAMIC-NEXT:    popq %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: dicaller:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    pushq %rax
; DARWIN-64-PIC-NEXT:    callq *_difunc(%rip)
; DARWIN-64-PIC-NEXT:    callq *_difunc(%rip)
; DARWIN-64-PIC-NEXT:    popq %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load void ()*, void ()** @difunc, align 8
	call void %0() nounwind
	%1 = load void ()*, void ()** @difunc, align 8
	call void %1() nounwind
	ret void
}

define void @licaller() nounwind {
; LINUX-64-STATIC-LABEL: licaller:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    pushq %rax
; LINUX-64-STATIC-NEXT:    callq *lifunc(%rip)
; LINUX-64-STATIC-NEXT:    callq *lifunc(%rip)
; LINUX-64-STATIC-NEXT:    popq %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: licaller:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    subl $12, %esp
; LINUX-32-STATIC-NEXT:    calll *lifunc
; LINUX-32-STATIC-NEXT:    calll *lifunc
; LINUX-32-STATIC-NEXT:    addl $12, %esp
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: licaller:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    pushl %ebx
; LINUX-32-PIC-NEXT:    subl $8, %esp
; LINUX-32-PIC-NEXT:    calll .L144$pb
; LINUX-32-PIC-NEXT:  .L144$pb:
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:  .Ltmp144:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp144-.L144$pb), %ebx
; LINUX-32-PIC-NEXT:    calll *lifunc@GOTOFF(%ebx)
; LINUX-32-PIC-NEXT:    calll *lifunc@GOTOFF(%ebx)
; LINUX-32-PIC-NEXT:    addl $8, %esp
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: licaller:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    pushq %rax
; LINUX-64-PIC-NEXT:    callq *lifunc(%rip)
; LINUX-64-PIC-NEXT:    callq *lifunc(%rip)
; LINUX-64-PIC-NEXT:    popq %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: licaller:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    subl $12, %esp
; DARWIN-32-STATIC-NEXT:    calll *_lifunc
; DARWIN-32-STATIC-NEXT:    calll *_lifunc
; DARWIN-32-STATIC-NEXT:    addl $12, %esp
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: licaller:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
; DARWIN-32-DYNAMIC-NEXT:    calll *_lifunc
; DARWIN-32-DYNAMIC-NEXT:    calll *_lifunc
; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: licaller:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    pushl %esi
; DARWIN-32-PIC-NEXT:    subl $8, %esp
; DARWIN-32-PIC-NEXT:    calll L144$pb
; DARWIN-32-PIC-NEXT:  L144$pb:
; DARWIN-32-PIC-NEXT:    popl %esi
; DARWIN-32-PIC-NEXT:    calll *_lifunc-L144$pb(%esi)
; DARWIN-32-PIC-NEXT:    calll *_lifunc-L144$pb(%esi)
; DARWIN-32-PIC-NEXT:    addl $8, %esp
; DARWIN-32-PIC-NEXT:    popl %esi
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: licaller:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    pushq %rax
; DARWIN-64-STATIC-NEXT:    callq *_lifunc(%rip)
; DARWIN-64-STATIC-NEXT:    callq *_lifunc(%rip)
; DARWIN-64-STATIC-NEXT:    popq %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: licaller:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
; DARWIN-64-DYNAMIC-NEXT:    callq *_lifunc(%rip)
; DARWIN-64-DYNAMIC-NEXT:    callq *_lifunc(%rip)
; DARWIN-64-DYNAMIC-NEXT:    popq %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: licaller:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    pushq %rax
; DARWIN-64-PIC-NEXT:    callq *_lifunc(%rip)
; DARWIN-64-PIC-NEXT:    callq *_lifunc(%rip)
; DARWIN-64-PIC-NEXT:    popq %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load void ()*, void ()** @lifunc, align 8
	call void %0() nounwind
	%1 = load void ()*, void ()** @lifunc, align 8
	call void %1() nounwind
	ret void
}

define void @itailcaller() nounwind {
; LINUX-64-STATIC-LABEL: itailcaller:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    pushq %rax
; LINUX-64-STATIC-NEXT:    callq *ifunc(%rip)
; LINUX-64-STATIC-NEXT:    callq *ifunc(%rip)
; LINUX-64-STATIC-NEXT:    popq %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: itailcaller:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    subl $12, %esp
; LINUX-32-STATIC-NEXT:    calll *ifunc
; LINUX-32-STATIC-NEXT:    calll *ifunc
; LINUX-32-STATIC-NEXT:    addl $12, %esp
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: itailcaller:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    pushl %ebx
; LINUX-32-PIC-NEXT:    pushl %esi
; LINUX-32-PIC-NEXT:    pushl %eax
; LINUX-32-PIC-NEXT:    calll .L145$pb
; LINUX-32-PIC-NEXT:  .L145$pb:
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:  .Ltmp145:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp145-.L145$pb), %ebx
; LINUX-32-PIC-NEXT:    movl ifunc@GOT(%ebx), %esi
; LINUX-32-PIC-NEXT:    calll *(%esi)
; LINUX-32-PIC-NEXT:    calll *(%esi)
; LINUX-32-PIC-NEXT:    addl $4, %esp
; LINUX-32-PIC-NEXT:    popl %esi
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: itailcaller:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    pushq %rbx
; LINUX-64-PIC-NEXT:    movq ifunc@GOTPCREL(%rip), %rbx
; LINUX-64-PIC-NEXT:    callq *(%rbx)
; LINUX-64-PIC-NEXT:    callq *(%rbx)
; LINUX-64-PIC-NEXT:    popq %rbx
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: itailcaller:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    subl $12, %esp
; DARWIN-32-STATIC-NEXT:    calll *_ifunc
; DARWIN-32-STATIC-NEXT:    calll *_ifunc
; DARWIN-32-STATIC-NEXT:    addl $12, %esp
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: itailcaller:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    pushl %esi
; DARWIN-32-DYNAMIC-NEXT:    subl $8, %esp
; DARWIN-32-DYNAMIC-NEXT:    movl L_ifunc$non_lazy_ptr, %esi
; DARWIN-32-DYNAMIC-NEXT:    calll *(%esi)
; DARWIN-32-DYNAMIC-NEXT:    calll *(%esi)
; DARWIN-32-DYNAMIC-NEXT:    addl $8, %esp
; DARWIN-32-DYNAMIC-NEXT:    popl %esi
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: itailcaller:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    pushl %esi
; DARWIN-32-PIC-NEXT:    subl $8, %esp
; DARWIN-32-PIC-NEXT:    calll L145$pb
; DARWIN-32-PIC-NEXT:  L145$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    movl L_ifunc$non_lazy_ptr-L145$pb(%eax), %esi
; DARWIN-32-PIC-NEXT:    calll *(%esi)
; DARWIN-32-PIC-NEXT:    calll *(%esi)
; DARWIN-32-PIC-NEXT:    addl $8, %esp
; DARWIN-32-PIC-NEXT:    popl %esi
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: itailcaller:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    pushq %rbx
; DARWIN-64-STATIC-NEXT:    movq _ifunc@GOTPCREL(%rip), %rbx
; DARWIN-64-STATIC-NEXT:    callq *(%rbx)
; DARWIN-64-STATIC-NEXT:    callq *(%rbx)
; DARWIN-64-STATIC-NEXT:    popq %rbx
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: itailcaller:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    pushq %rbx
; DARWIN-64-DYNAMIC-NEXT:    movq _ifunc@GOTPCREL(%rip), %rbx
; DARWIN-64-DYNAMIC-NEXT:    callq *(%rbx)
; DARWIN-64-DYNAMIC-NEXT:    callq *(%rbx)
; DARWIN-64-DYNAMIC-NEXT:    popq %rbx
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: itailcaller:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    pushq %rbx
; DARWIN-64-PIC-NEXT:    movq _ifunc@GOTPCREL(%rip), %rbx
; DARWIN-64-PIC-NEXT:    callq *(%rbx)
; DARWIN-64-PIC-NEXT:    callq *(%rbx)
; DARWIN-64-PIC-NEXT:    popq %rbx
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load void ()*, void ()** @ifunc, align 8
	call void %0() nounwind
	%1 = load void ()*, void ()** @ifunc, align 8
	call void %1() nounwind
	ret void
}

define void @ditailcaller() nounwind {
; LINUX-64-STATIC-LABEL: ditailcaller:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    pushq %rax
; LINUX-64-STATIC-NEXT:    callq *difunc(%rip)
; LINUX-64-STATIC-NEXT:    popq %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: ditailcaller:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    subl $12, %esp
; LINUX-32-STATIC-NEXT:    calll *difunc
; LINUX-32-STATIC-NEXT:    addl $12, %esp
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: ditailcaller:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    pushl %ebx
; LINUX-32-PIC-NEXT:    subl $8, %esp
; LINUX-32-PIC-NEXT:    calll .L146$pb
; LINUX-32-PIC-NEXT:  .L146$pb:
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:  .Ltmp146:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp146-.L146$pb), %ebx
; LINUX-32-PIC-NEXT:    movl difunc@GOT(%ebx), %eax
; LINUX-32-PIC-NEXT:    calll *(%eax)
; LINUX-32-PIC-NEXT:    addl $8, %esp
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: ditailcaller:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    pushq %rax
; LINUX-64-PIC-NEXT:    movq difunc@GOTPCREL(%rip), %rax
; LINUX-64-PIC-NEXT:    callq *(%rax)
; LINUX-64-PIC-NEXT:    popq %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: ditailcaller:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    subl $12, %esp
; DARWIN-32-STATIC-NEXT:    calll *_difunc
; DARWIN-32-STATIC-NEXT:    addl $12, %esp
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: ditailcaller:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
; DARWIN-32-DYNAMIC-NEXT:    calll *_difunc
; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: ditailcaller:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    subl $12, %esp
; DARWIN-32-PIC-NEXT:    calll L146$pb
; DARWIN-32-PIC-NEXT:  L146$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    calll *_difunc-L146$pb(%eax)
; DARWIN-32-PIC-NEXT:    addl $12, %esp
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: ditailcaller:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    pushq %rax
; DARWIN-64-STATIC-NEXT:    callq *_difunc(%rip)
; DARWIN-64-STATIC-NEXT:    popq %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: ditailcaller:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
; DARWIN-64-DYNAMIC-NEXT:    callq *_difunc(%rip)
; DARWIN-64-DYNAMIC-NEXT:    popq %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: ditailcaller:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    pushq %rax
; DARWIN-64-PIC-NEXT:    callq *_difunc(%rip)
; DARWIN-64-PIC-NEXT:    popq %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load void ()*, void ()** @difunc, align 8
	call void %0() nounwind
	ret void
}

define void @litailcaller() nounwind {
; LINUX-64-STATIC-LABEL: litailcaller:
; LINUX-64-STATIC:       # %bb.0: # %entry
; LINUX-64-STATIC-NEXT:    pushq %rax
; LINUX-64-STATIC-NEXT:    callq *lifunc(%rip)
; LINUX-64-STATIC-NEXT:    popq %rax
; LINUX-64-STATIC-NEXT:    retq
;
; LINUX-32-STATIC-LABEL: litailcaller:
; LINUX-32-STATIC:       # %bb.0: # %entry
; LINUX-32-STATIC-NEXT:    subl $12, %esp
; LINUX-32-STATIC-NEXT:    calll *lifunc
; LINUX-32-STATIC-NEXT:    addl $12, %esp
; LINUX-32-STATIC-NEXT:    retl
;
; LINUX-32-PIC-LABEL: litailcaller:
; LINUX-32-PIC:       # %bb.0: # %entry
; LINUX-32-PIC-NEXT:    pushl %ebx
; LINUX-32-PIC-NEXT:    subl $8, %esp
; LINUX-32-PIC-NEXT:    calll .L147$pb
; LINUX-32-PIC-NEXT:  .L147$pb:
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:  .Ltmp147:
; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp147-.L147$pb), %ebx
; LINUX-32-PIC-NEXT:    calll *lifunc@GOTOFF(%ebx)
; LINUX-32-PIC-NEXT:    addl $8, %esp
; LINUX-32-PIC-NEXT:    popl %ebx
; LINUX-32-PIC-NEXT:    retl
;
; LINUX-64-PIC-LABEL: litailcaller:
; LINUX-64-PIC:       # %bb.0: # %entry
; LINUX-64-PIC-NEXT:    pushq %rax
; LINUX-64-PIC-NEXT:    callq *lifunc(%rip)
; LINUX-64-PIC-NEXT:    popq %rax
; LINUX-64-PIC-NEXT:    retq
;
; DARWIN-32-STATIC-LABEL: litailcaller:
; DARWIN-32-STATIC:       ## %bb.0: ## %entry
; DARWIN-32-STATIC-NEXT:    subl $12, %esp
; DARWIN-32-STATIC-NEXT:    calll *_lifunc
; DARWIN-32-STATIC-NEXT:    addl $12, %esp
; DARWIN-32-STATIC-NEXT:    retl
;
; DARWIN-32-DYNAMIC-LABEL: litailcaller:
; DARWIN-32-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-32-DYNAMIC-NEXT:    subl $12, %esp
; DARWIN-32-DYNAMIC-NEXT:    calll *_lifunc
; DARWIN-32-DYNAMIC-NEXT:    addl $12, %esp
; DARWIN-32-DYNAMIC-NEXT:    retl
;
; DARWIN-32-PIC-LABEL: litailcaller:
; DARWIN-32-PIC:       ## %bb.0: ## %entry
; DARWIN-32-PIC-NEXT:    subl $12, %esp
; DARWIN-32-PIC-NEXT:    calll L147$pb
; DARWIN-32-PIC-NEXT:  L147$pb:
; DARWIN-32-PIC-NEXT:    popl %eax
; DARWIN-32-PIC-NEXT:    calll *_lifunc-L147$pb(%eax)
; DARWIN-32-PIC-NEXT:    addl $12, %esp
; DARWIN-32-PIC-NEXT:    retl
;
; DARWIN-64-STATIC-LABEL: litailcaller:
; DARWIN-64-STATIC:       ## %bb.0: ## %entry
; DARWIN-64-STATIC-NEXT:    pushq %rax
; DARWIN-64-STATIC-NEXT:    callq *_lifunc(%rip)
; DARWIN-64-STATIC-NEXT:    popq %rax
; DARWIN-64-STATIC-NEXT:    retq
;
; DARWIN-64-DYNAMIC-LABEL: litailcaller:
; DARWIN-64-DYNAMIC:       ## %bb.0: ## %entry
; DARWIN-64-DYNAMIC-NEXT:    pushq %rax
; DARWIN-64-DYNAMIC-NEXT:    callq *_lifunc(%rip)
; DARWIN-64-DYNAMIC-NEXT:    popq %rax
; DARWIN-64-DYNAMIC-NEXT:    retq
;
; DARWIN-64-PIC-LABEL: litailcaller:
; DARWIN-64-PIC:       ## %bb.0: ## %entry
; DARWIN-64-PIC-NEXT:    pushq %rax
; DARWIN-64-PIC-NEXT:    callq *_lifunc(%rip)
; DARWIN-64-PIC-NEXT:    popq %rax
; DARWIN-64-PIC-NEXT:    retq

entry:
	%0 = load void ()*, void ()** @lifunc, align 8
	call void %0() nounwind
	ret void
}
