Create MCTargetOptions.
[oota-llvm.git] / test / Instrumentation / AddressSanitizer / X86 / asm_mov.ll
1 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=corei7 -mattr=+sse2 -asm-instrumentation=address | FileCheck %s
2
3 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
4 target triple = "x86_64-unknown-linux-gnu"
5
6 ; CHECK-LABEL: mov1b
7 ; CHECK: subq $128, %rsp
8 ; CHECK-NEXT: pushq %rdi
9 ; CHECK-NEXT: leaq {{.*}}, %rdi
10 ; CHECK-NEXT: callq __sanitizer_sanitize_load1@PLT
11 ; CHECK-NEXT: popq %rdi
12 ; CHECK-NEXT: addq $128, %rsp
13
14 ; CHECK: subq $128, %rsp
15 ; CHECK-NEXT: pushq %rdi
16 ; CHECK-NEXT: leaq {{.*}}, %rdi
17 ; CHECK-NEXT: callq __sanitizer_sanitize_store1@PLT
18 ; CHECK-NEXT: popq %rdi
19 ; CHECK-NEXT: addq $128, %rsp
20
21 ; CHECK: movb {{.*}}, {{.*}}
22 define void @mov1b(i8* %dst, i8* %src) #0 {
23 entry:
24   tail call void asm sideeffect "movb ($1), %al  \0A\09movb %al, ($0)  \0A\09", "r,r,~{memory},~{rax},~{dirflag},~{fpsr},~{flags}"(i8* %dst, i8* %src) #1, !srcloc !0
25   ret void
26 }
27
28 ; CHECK-LABEL: mov2b
29 ; CHECK: subq $128, %rsp
30 ; CHECK-NEXT: pushq %rdi
31 ; CHECK-NEXT: leaq {{.*}}, %rdi
32 ; CHECK-NEXT: callq __sanitizer_sanitize_load2@PLT
33 ; CHECK-NEXT: popq %rdi
34 ; CHECK-NEXT: addq $128, %rsp
35
36 ; CHECK: subq $128, %rsp
37 ; CHECK-NEXT: pushq %rdi
38 ; CHECK-NEXT: leaq {{.*}}, %rdi
39 ; CHECK-NEXT: callq __sanitizer_sanitize_store2@PLT
40 ; CHECK-NEXT: popq %rdi
41 ; CHECK-NEXT: addq $128, %rsp
42
43 ; CHECK: movw {{.*}}, {{.*}}
44 define void @mov2b(i16* %dst, i16* %src) #0 {
45 entry:
46   tail call void asm sideeffect "movw ($1), %ax  \0A\09movw %ax, ($0)  \0A\09", "r,r,~{memory},~{rax},~{dirflag},~{fpsr},~{flags}"(i16* %dst, i16* %src) #1, !srcloc !1
47   ret void
48 }
49
50 ; CHECK-LABEL: mov4b
51 ; CHECK: subq $128, %rsp
52 ; CHECK-NEXT: pushq %rdi
53 ; CHECK-NEXT: leaq {{.*}}, %rdi
54 ; CHECK-NEXT: callq __sanitizer_sanitize_load4@PLT
55 ; CHECK-NEXT: popq %rdi
56 ; CHECK-NEXT: addq $128, %rsp
57
58 ; CHECK: subq $128, %rsp
59 ; CHECK-NEXT: pushq %rdi
60 ; CHECK-NEXT: leaq {{.*}}, %rdi
61 ; CHECK-NEXT: callq __sanitizer_sanitize_store4@PLT
62 ; CHECK-NEXT: popq %rdi
63 ; CHECK-NEXT: addq $128, %rsp
64
65 ; CHECK: movl {{.*}}, {{.*}}
66 define void @mov4b(i32* %dst, i32* %src) #0 {
67 entry:
68   tail call void asm sideeffect "movl ($1), %eax  \0A\09movl %eax, ($0)  \0A\09", "r,r,~{memory},~{rax},~{dirflag},~{fpsr},~{flags}"(i32* %dst, i32* %src) #1, !srcloc !2
69   ret void
70 }
71
72 ; CHECK-LABEL: mov8b
73 ; CHECK: subq $128, %rsp
74 ; CHECK-NEXT: pushq %rdi
75 ; CHECK-NEXT: leaq {{.*}}, %rdi
76 ; CHECK-NEXT: callq __sanitizer_sanitize_load8@PLT
77 ; CHECK-NEXT: popq %rdi
78 ; CHECK-NEXT: addq $128, %rsp
79
80 ; CHECK: subq $128, %rsp
81 ; CHECK-NEXT: pushq %rdi
82 ; CHECK-NEXT: leaq {{.*}}, %rdi
83 ; CHECK-NEXT: callq __sanitizer_sanitize_store8@PLT
84 ; CHECK-NEXT: popq %rdi
85 ; CHECK-NEXT: addq $128, %rsp
86
87 ; CHECK: movq {{.*}}, {{.*}}
88 define void @mov8b(i64* %dst, i64* %src) #0 {
89 entry:
90   tail call void asm sideeffect "movq ($1), %rax  \0A\09movq %rax, ($0)  \0A\09", "r,r,~{memory},~{rax},~{dirflag},~{fpsr},~{flags}"(i64* %dst, i64* %src) #1, !srcloc !3
91   ret void
92 }
93
94 ; CHECK-LABEL: mov16b
95 ; CHECK: subq $128, %rsp
96 ; CHECK-NEXT: pushq %rdi
97 ; CHECK-NEXT: leaq {{.*}}, %rdi
98 ; CHECK-NEXT: callq __sanitizer_sanitize_load16@PLT
99 ; CHECK-NEXT: popq %rdi
100 ; CHECK-NEXT: addq $128, %rsp
101
102 ; CHECK: subq $128, %rsp
103 ; CHECK-NEXT: pushq %rdi
104 ; CHECK-NEXT: leaq {{.*}}, %rdi
105 ; CHECK-NEXT: callq __sanitizer_sanitize_store16@PLT
106 ; CHECK-NEXT: popq %rdi
107 ; CHECK-NEXT: addq $128, %rsp
108
109 ; CHECK: movaps {{.*}}, {{.*}}
110 define void @mov16b(<2 x i64>* %dst, <2 x i64>* %src) #0 {
111 entry:
112   tail call void asm sideeffect "movaps ($1), %xmm0  \0A\09movaps %xmm0, ($0)  \0A\09", "r,r,~{memory},~{xmm0},~{dirflag},~{fpsr},~{flags}"(<2 x i64>* %dst, <2 x i64>* %src) #1, !srcloc !4
113   ret void
114 }
115
116 attributes #0 = { nounwind uwtable sanitize_address "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-frame-pointer-elim-non-leaf"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" }
117 attributes #1 = { nounwind }
118
119 !0 = metadata !{i32 98, i32 122, i32 160}
120 !1 = metadata !{i32 305, i32 329, i32 367}
121 !2 = metadata !{i32 512, i32 537, i32 576}
122 !3 = metadata !{i32 721, i32 746, i32 785}
123 !4 = metadata !{i32 929, i32 957, i32 999}