1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-apple-darwin | FileCheck %s --check-prefix=DARWIN 3; RUN: llc < %s -mtriple=x86_64-pc-linux -relocation-model=static | FileCheck %s --check-prefix=LINUX 4 5@ptr = external global ptr ; <ptr> [#uses=1] 6@src = external global [0 x i32] ; <ptr> [#uses=1] 7@dst = external global [0 x i32] ; <ptr> [#uses=1] 8@lptr = internal global ptr null ; <ptr> [#uses=1] 9@ldst = internal global [500 x i32] zeroinitializer, align 32 ; <ptr> [#uses=1] 10@lsrc = internal global [500 x i32] zeroinitializer, align 32 ; <ptr> [#uses=0] 11@bsrc = internal global [500000 x i32] zeroinitializer, align 32 ; <ptr> [#uses=0] 12@bdst = internal global [500000 x i32] zeroinitializer, align 32 ; <ptr> [#uses=0] 13 14define void @test1() nounwind { 15; DARWIN-LABEL: test1: 16; DARWIN: ## %bb.0: 17; DARWIN-NEXT: movq _src@GOTPCREL(%rip), %rax 18; DARWIN-NEXT: movl (%rax), %eax 19; DARWIN-NEXT: movq _dst@GOTPCREL(%rip), %rcx 20; DARWIN-NEXT: movl %eax, (%rcx) 21; DARWIN-NEXT: retq 22; 23; LINUX-LABEL: test1: 24; LINUX: # %bb.0: 25; LINUX-NEXT: movq src@GOTPCREL(%rip), %rax 26; LINUX-NEXT: movl (%rax), %eax 27; LINUX-NEXT: movq dst@GOTPCREL(%rip), %rcx 28; LINUX-NEXT: movl %eax, (%rcx) 29; LINUX-NEXT: retq 30 %tmp = load i32, ptr @src ; <i32> [#uses=1] 31 store i32 %tmp, ptr @dst 32 ret void 33} 34 35define void @test2() nounwind { 36; DARWIN-LABEL: test2: 37; DARWIN: ## %bb.0: 38; DARWIN-NEXT: movq _dst@GOTPCREL(%rip), %rax 39; DARWIN-NEXT: movq _ptr@GOTPCREL(%rip), %rcx 40; DARWIN-NEXT: movq %rax, (%rcx) 41; DARWIN-NEXT: retq 42; 43; LINUX-LABEL: test2: 44; LINUX: # %bb.0: 45; LINUX-NEXT: movq dst@GOTPCREL(%rip), %rax 46; LINUX-NEXT: movq ptr@GOTPCREL(%rip), %rcx 47; LINUX-NEXT: movq %rax, (%rcx) 48; LINUX-NEXT: retq 49 store ptr @dst, ptr @ptr 50 ret void 51} 52 53define void @test3() nounwind { 54; DARWIN-LABEL: test3: 55; DARWIN: ## %bb.0: 56; DARWIN-NEXT: leaq _ldst(%rip), %rax 57; DARWIN-NEXT: movq %rax, _lptr(%rip) 58; DARWIN-NEXT: retq 59; 60; LINUX-LABEL: test3: 61; LINUX: # %bb.0: 62; LINUX-NEXT: movq $ldst, lptr(%rip) 63; LINUX-NEXT: retq 64 store ptr @ldst, ptr @lptr 65 br label %return 66 67return: ; preds = %0 68 ret void 69} 70