Use Align for TFL::TransientStackAlignment
[llvm-core.git] / test / CodeGen / X86 / volatile-memstores-nooverlapping-load-stores.ll
blobaad332489fb07b829070d3536303ac1f5e2e5f4c
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
5 declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1 immarg) #1
6 define dso_local void @copy_7_bytes(i8* noalias nocapture, i8* noalias nocapture readonly) nounwind #0 {
7 ; CHECK-LABEL: copy_7_bytes:
8 ; CHECK:       # %bb.0:
9 ; CHECK-NEXT:    movl (%rsi), %eax
10 ; CHECK-NEXT:    movl 3(%rsi), %ecx
11 ; CHECK-NEXT:    movl %ecx, 3(%rdi)
12 ; CHECK-NEXT:    movl %eax, (%rdi)
13 ; CHECK-NEXT:    retq
14   tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %0, i8* align 1 %1, i64 7, i1 false)
15   ret void
17 define dso_local void @copy_7_bytes_volatile(i8* noalias nocapture, i8* noalias nocapture readonly) nounwind #0 {
18 ; CHECK-LABEL: copy_7_bytes_volatile:
19 ; CHECK:       # %bb.0:
20 ; CHECK-NEXT:    movb 6(%rsi), %al
21 ; CHECK-NEXT:    movb %al, 6(%rdi)
22 ; CHECK-NEXT:    movzwl 4(%rsi), %eax
23 ; CHECK-NEXT:    movw %ax, 4(%rdi)
24 ; CHECK-NEXT:    movl (%rsi), %eax
25 ; CHECK-NEXT:    movl %eax, (%rdi)
26 ; CHECK-NEXT:    retq
27   tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %0, i8* align 1 %1, i64 7, i1 true)
28   ret void
32 declare void @llvm.memmove.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i1 immarg) #1
33 define dso_local void @move_7_bytes(i8* nocapture, i8* nocapture readonly) nounwind #0 {
34 ; CHECK-LABEL: move_7_bytes:
35 ; CHECK:       # %bb.0:
36 ; CHECK-NEXT:    movl (%rsi), %eax
37 ; CHECK-NEXT:    movzwl 4(%rsi), %ecx
38 ; CHECK-NEXT:    movb 6(%rsi), %dl
39 ; CHECK-NEXT:    movb %dl, 6(%rdi)
40 ; CHECK-NEXT:    movw %cx, 4(%rdi)
41 ; CHECK-NEXT:    movl %eax, (%rdi)
42 ; CHECK-NEXT:    retq
43   tail call void @llvm.memmove.p0i8.p0i8.i64(i8* align 1 %0, i8* align 1 %1, i64 7, i1 false)
44   ret void
46 define dso_local void @move_7_bytes_volatile(i8* nocapture, i8* nocapture readonly) nounwind #0 {
47 ; CHECK-LABEL: move_7_bytes_volatile:
48 ; CHECK:       # %bb.0:
49 ; CHECK-NEXT:    movl (%rsi), %eax
50 ; CHECK-NEXT:    movzwl 4(%rsi), %ecx
51 ; CHECK-NEXT:    movb 6(%rsi), %dl
52 ; CHECK-NEXT:    movb %dl, 6(%rdi)
53 ; CHECK-NEXT:    movw %cx, 4(%rdi)
54 ; CHECK-NEXT:    movl %eax, (%rdi)
55 ; CHECK-NEXT:    retq
56   tail call void @llvm.memmove.p0i8.p0i8.i64(i8* align 1 %0, i8* align 1 %1, i64 7, i1 true)
57   ret void
61 declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8 , i64, i1 immarg) #1
62 define dso_local void @set_7_bytes(i8* noalias nocapture) nounwind #0 {
63 ; CHECK-LABEL: set_7_bytes:
64 ; CHECK:       # %bb.0:
65 ; CHECK-NEXT:    movl $16843009, 3(%rdi) # imm = 0x1010101
66 ; CHECK-NEXT:    movl $16843009, (%rdi) # imm = 0x1010101
67 ; CHECK-NEXT:    retq
68   tail call void @llvm.memset.p0i8.i64(i8* align 1 %0, i8 1, i64 7, i1 false)
69   ret void
71 define dso_local void @set_7_bytes_volatile(i8* noalias nocapture) nounwind #0 {
72 ; CHECK-LABEL: set_7_bytes_volatile:
73 ; CHECK:       # %bb.0:
74 ; CHECK-NEXT:    movb $1, 6(%rdi)
75 ; CHECK-NEXT:    movw $257, 4(%rdi) # imm = 0x101
76 ; CHECK-NEXT:    movl $16843009, (%rdi) # imm = 0x1010101
77 ; CHECK-NEXT:    retq
78   tail call void @llvm.memset.p0i8.i64(i8* align 1 %0, i8 1, i64 7, i1 true)
79   ret void
82 attributes #0 = { noreturn nounwind uwtable "target-cpu"="x86-64" }
83 attributes #1 = { argmemonly nounwind }