[AArch64,ELF] Restrict MOVZ/MOVK to non-PIC large code model (#70178)
[llvm-project.git] / llvm / test / CodeGen / X86 / x86-64-mem.ll
blob58efa8b3db25898521d86eba03b6ca17a40e9b71
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
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]
14 define 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
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
35 define 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
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
53 define 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
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
67 return:         ; preds = %0
68         ret void