[docs] Add LICENSE.txt to the root of the mono-repo
[llvm-project.git] / llvm / test / CodeGen / X86 / dagcombine-dead-store.ll
blobf509e19bedacfc93f5ed16acf406ae73c36a88bc
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=i686-pc-linux | FileCheck %s
4 ; Checks that the stores aren't eliminated by the DAG combiner, because the address
5 ; spaces are different. In X86, we're checking this for the non-zero address space :fs.
6 ; The test's 'same' and 'diff' notation depicts whether the pointer value is the same
7 ; or different.
9 define i32 @copy_fs_same() {
10 ; CHECK-LABEL: copy_fs_same:
11 ; CHECK:       # %bb.0: # %entry
12 ; CHECK-NEXT:    movl 1, %eax
13 ; CHECK-NEXT:    movl %eax, %fs:1
14 ; CHECK-NEXT:    retl
15 entry:
16    %0 = load i32, ptr inttoptr (i64 1 to ptr), align 4
17   store i32 %0, ptr addrspace(257) inttoptr (i64 1 to ptr addrspace(257)), align 4
18   ret i32 %0
21 define i32 @copy_fs_diff() {
22 ; CHECK-LABEL: copy_fs_diff:
23 ; CHECK:       # %bb.0: # %entry
24 ; CHECK-NEXT:    movl 1, %eax
25 ; CHECK-NEXT:    movl %eax, %fs:2
26 ; CHECK-NEXT:    retl
27 entry:
28    %0 = load i32, ptr inttoptr (i64 1 to ptr), align 4
29   store i32 %0, ptr addrspace(257) inttoptr (i64 2 to ptr addrspace(257)), align 4
30   ret i32 %0
33 define void @output_fs_same(i32 %v) {
34 ; CHECK-LABEL: output_fs_same:
35 ; CHECK:       # %bb.0: # %entry
36 ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax
37 ; CHECK-NEXT:    movl %eax, 1
38 ; CHECK-NEXT:    movl %eax, %fs:1
39 ; CHECK-NEXT:    retl
40 entry:
41   store i32 %v, ptr inttoptr (i64 1 to ptr), align 4
42   store i32 %v, ptr addrspace(257) inttoptr (i64 1 to ptr addrspace(257)), align 4
43   ret void
46 define void @output_fs_diff(i32 %v) {
47 ; CHECK-LABEL: output_fs_diff:
48 ; CHECK:       # %bb.0: # %entry
49 ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax
50 ; CHECK-NEXT:    movl %eax, 1
51 ; CHECK-NEXT:    movl %eax, %fs:2
52 ; CHECK-NEXT:    retl
53 entry:
54   store i32 %v, ptr inttoptr (i64 1 to ptr), align 4
55   store i32 %v, ptr addrspace(257) inttoptr (i64 2 to ptr addrspace(257)), align 4
56   ret void
59 define void @output_indexed_fs_same(i32 %v, ptr %b) {
60 ; CHECK-LABEL: output_indexed_fs_same:
61 ; CHECK:       # %bb.0:
62 ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax
63 ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %ecx
64 ; CHECK-NEXT:    movl %eax, 168(%ecx)
65 ; CHECK-NEXT:    movl %eax, %fs:168(%ecx)
66 ; CHECK-NEXT:    retl
67   %p = getelementptr i32, ptr %b, i64 42
68   %pa = addrspacecast ptr %p to ptr addrspace(257)
69   store i32 %v, ptr %p, align 4
70   store i32 %v, ptr addrspace(257) %pa, align 4
71   ret void
74 define void @output_indexed_fs_diff(i32 %v, ptr %b) {
75 ; CHECK-LABEL: output_indexed_fs_diff:
76 ; CHECK:       # %bb.0:
77 ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax
78 ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %ecx
79 ; CHECK-NEXT:    movl %eax, 168(%ecx)
80 ; CHECK-NEXT:    movl %eax, %fs:184(%ecx)
81 ; CHECK-NEXT:    retl
82   %p = getelementptr i32, ptr %b, i64 42
83   %pa = addrspacecast ptr %p to ptr addrspace(257)
84   %pad = getelementptr i32, ptr addrspace(257) %pa, i64 4
85   store i32 %v, ptr %p, align 4
86   store i32 %v, ptr addrspace(257) %pad, align 4
87   ret void