Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(169)

Side by Side Diff: tests_lit/llvm2ice_tests/address-mode-opt.ll

Issue 1161543005: Subzero: Changes needed for LLVM 3.7 integration. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 ; This file checks support for address mode optimization. 1 ; This file checks support for address mode optimization.
2 2
3 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 \ 3 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 \
4 ; RUN: | FileCheck %s 4 ; RUN: | FileCheck %s
5 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 -mattr=sse4.1 \ 5 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 -mattr=sse4.1 \
6 ; RUN: | FileCheck --check-prefix=SSE41 %s 6 ; RUN: | FileCheck --check-prefix=SSE41 %s
7 7
8 define float @load_arg_plus_200000(float* %arg) { 8 define float @load_arg_plus_200000(float* %arg) {
9 entry: 9 entry:
10 %arg.int = ptrtoint float* %arg to i32 10 %arg.int = ptrtoint float* %arg to i32
11 %addr.int = add i32 %arg.int, 200000 11 %addr.int = add i32 %arg.int, 200000
12 %addr.ptr = inttoptr i32 %addr.int to float* 12 %addr.ptr = inttoptr i32 %addr.int to float*
13 %addr.load = load float* %addr.ptr, align 4 13 %addr.load = load float, float* %addr.ptr, align 4
14 ret float %addr.load 14 ret float %addr.load
15 ; CHECK-LABEL: load_arg_plus_200000 15 ; CHECK-LABEL: load_arg_plus_200000
16 ; CHECK: movss xmm0,DWORD PTR [eax+0x30d40] 16 ; CHECK: movss xmm0,DWORD PTR [eax+0x30d40]
17 } 17 }
18 18
19 define float @load_200000_plus_arg(float* %arg) { 19 define float @load_200000_plus_arg(float* %arg) {
20 entry: 20 entry:
21 %arg.int = ptrtoint float* %arg to i32 21 %arg.int = ptrtoint float* %arg to i32
22 %addr.int = add i32 200000, %arg.int 22 %addr.int = add i32 200000, %arg.int
23 %addr.ptr = inttoptr i32 %addr.int to float* 23 %addr.ptr = inttoptr i32 %addr.int to float*
24 %addr.load = load float* %addr.ptr, align 4 24 %addr.load = load float, float* %addr.ptr, align 4
25 ret float %addr.load 25 ret float %addr.load
26 ; CHECK-LABEL: load_200000_plus_arg 26 ; CHECK-LABEL: load_200000_plus_arg
27 ; CHECK: movss xmm0,DWORD PTR [eax+0x30d40] 27 ; CHECK: movss xmm0,DWORD PTR [eax+0x30d40]
28 } 28 }
29 29
30 define float @load_arg_minus_200000(float* %arg) { 30 define float @load_arg_minus_200000(float* %arg) {
31 entry: 31 entry:
32 %arg.int = ptrtoint float* %arg to i32 32 %arg.int = ptrtoint float* %arg to i32
33 %addr.int = sub i32 %arg.int, 200000 33 %addr.int = sub i32 %arg.int, 200000
34 %addr.ptr = inttoptr i32 %addr.int to float* 34 %addr.ptr = inttoptr i32 %addr.int to float*
35 %addr.load = load float* %addr.ptr, align 4 35 %addr.load = load float, float* %addr.ptr, align 4
36 ret float %addr.load 36 ret float %addr.load
37 ; CHECK-LABEL: load_arg_minus_200000 37 ; CHECK-LABEL: load_arg_minus_200000
38 ; CHECK: movss xmm0,DWORD PTR [eax-0x30d40] 38 ; CHECK: movss xmm0,DWORD PTR [eax-0x30d40]
39 } 39 }
40 40
41 define float @load_200000_minus_arg(float* %arg) { 41 define float @load_200000_minus_arg(float* %arg) {
42 entry: 42 entry:
43 %arg.int = ptrtoint float* %arg to i32 43 %arg.int = ptrtoint float* %arg to i32
44 %addr.int = sub i32 200000, %arg.int 44 %addr.int = sub i32 200000, %arg.int
45 %addr.ptr = inttoptr i32 %addr.int to float* 45 %addr.ptr = inttoptr i32 %addr.int to float*
46 %addr.load = load float* %addr.ptr, align 4 46 %addr.load = load float, float* %addr.ptr, align 4
47 ret float %addr.load 47 ret float %addr.load
48 ; CHECK-LABEL: load_200000_minus_arg 48 ; CHECK-LABEL: load_200000_minus_arg
49 ; CHECK: movss xmm0,DWORD PTR [e{{..}}] 49 ; CHECK: movss xmm0,DWORD PTR [e{{..}}]
50 } 50 }
51 51
52 define <8 x i16> @load_mul_v8i16_mem(<8 x i16> %arg0, i32 %arg1_iptr) { 52 define <8 x i16> @load_mul_v8i16_mem(<8 x i16> %arg0, i32 %arg1_iptr) {
53 entry: 53 entry:
54 %addr_sub = sub i32 %arg1_iptr, 200000 54 %addr_sub = sub i32 %arg1_iptr, 200000
55 %addr_ptr = inttoptr i32 %addr_sub to <8 x i16>* 55 %addr_ptr = inttoptr i32 %addr_sub to <8 x i16>*
56 %arg1 = load <8 x i16>* %addr_ptr, align 2 56 %arg1 = load <8 x i16>, <8 x i16>* %addr_ptr, align 2
57 %res_vec = mul <8 x i16> %arg0, %arg1 57 %res_vec = mul <8 x i16> %arg0, %arg1
58 ret <8 x i16> %res_vec 58 ret <8 x i16> %res_vec
59 ; Address mode optimization is generally unsafe for SSE vector instructions. 59 ; Address mode optimization is generally unsafe for SSE vector instructions.
60 ; CHECK-LABEL: load_mul_v8i16_mem 60 ; CHECK-LABEL: load_mul_v8i16_mem
61 ; CHECK-NOT: pmullw xmm{{.*}},XMMWORD PTR [e{{..}}-0x30d40] 61 ; CHECK-NOT: pmullw xmm{{.*}},XMMWORD PTR [e{{..}}-0x30d40]
62 } 62 }
63 63
64 define <4 x i32> @load_mul_v4i32_mem(<4 x i32> %arg0, i32 %arg1_iptr) { 64 define <4 x i32> @load_mul_v4i32_mem(<4 x i32> %arg0, i32 %arg1_iptr) {
65 entry: 65 entry:
66 %addr_sub = sub i32 %arg1_iptr, 200000 66 %addr_sub = sub i32 %arg1_iptr, 200000
67 %addr_ptr = inttoptr i32 %addr_sub to <4 x i32>* 67 %addr_ptr = inttoptr i32 %addr_sub to <4 x i32>*
68 %arg1 = load <4 x i32>* %addr_ptr, align 4 68 %arg1 = load <4 x i32>, <4 x i32>* %addr_ptr, align 4
69 %res = mul <4 x i32> %arg0, %arg1 69 %res = mul <4 x i32> %arg0, %arg1
70 ret <4 x i32> %res 70 ret <4 x i32> %res
71 ; Address mode optimization is generally unsafe for SSE vector instructions. 71 ; Address mode optimization is generally unsafe for SSE vector instructions.
72 ; CHECK-LABEL: load_mul_v4i32_mem 72 ; CHECK-LABEL: load_mul_v4i32_mem
73 ; CHECK-NOT: pmuludq xmm{{.*}},XMMWORD PTR [e{{..}}-0x30d40] 73 ; CHECK-NOT: pmuludq xmm{{.*}},XMMWORD PTR [e{{..}}-0x30d40]
74 ; CHECK: pmuludq 74 ; CHECK: pmuludq
75 ; 75 ;
76 ; SSE41-LABEL: load_mul_v4i32_mem 76 ; SSE41-LABEL: load_mul_v4i32_mem
77 ; SSE41-NOT: pmulld xmm{{.*}},XMMWORD PTR [e{{..}}-0x30d40] 77 ; SSE41-NOT: pmulld xmm{{.*}},XMMWORD PTR [e{{..}}-0x30d40]
78 } 78 }
79 79
80 define float @address_mode_opt_chaining(float* %arg) { 80 define float @address_mode_opt_chaining(float* %arg) {
81 entry: 81 entry:
82 %arg.int = ptrtoint float* %arg to i32 82 %arg.int = ptrtoint float* %arg to i32
83 %addr1.int = add i32 12, %arg.int 83 %addr1.int = add i32 12, %arg.int
84 %addr2.int = sub i32 %addr1.int, 4 84 %addr2.int = sub i32 %addr1.int, 4
85 %addr2.ptr = inttoptr i32 %addr2.int to float* 85 %addr2.ptr = inttoptr i32 %addr2.int to float*
86 %addr2.load = load float* %addr2.ptr, align 4 86 %addr2.load = load float, float* %addr2.ptr, align 4
87 ret float %addr2.load 87 ret float %addr2.load
88 ; CHECK-LABEL: address_mode_opt_chaining 88 ; CHECK-LABEL: address_mode_opt_chaining
89 ; CHECK: movss xmm0,DWORD PTR [eax+0x8] 89 ; CHECK: movss xmm0,DWORD PTR [eax+0x8]
90 } 90 }
91 91
92 define float @address_mode_opt_chaining_overflow(float* %arg) { 92 define float @address_mode_opt_chaining_overflow(float* %arg) {
93 entry: 93 entry:
94 %arg.int = ptrtoint float* %arg to i32 94 %arg.int = ptrtoint float* %arg to i32
95 %addr1.int = add i32 2147483640, %arg.int 95 %addr1.int = add i32 2147483640, %arg.int
96 %addr2.int = add i32 %addr1.int, 2147483643 96 %addr2.int = add i32 %addr1.int, 2147483643
97 %addr2.ptr = inttoptr i32 %addr2.int to float* 97 %addr2.ptr = inttoptr i32 %addr2.int to float*
98 %addr2.load = load float* %addr2.ptr, align 4 98 %addr2.load = load float, float* %addr2.ptr, align 4
99 ret float %addr2.load 99 ret float %addr2.load
100 ; CHECK-LABEL: address_mode_opt_chaining_overflow 100 ; CHECK-LABEL: address_mode_opt_chaining_overflow
101 ; CHECK: 0x7ffffff8 101 ; CHECK: 0x7ffffff8
102 ; CHECK: movss xmm0,DWORD PTR [{{.*}}+0x7ffffffb] 102 ; CHECK: movss xmm0,DWORD PTR [{{.*}}+0x7ffffffb]
103 } 103 }
104 104
105 define float @address_mode_opt_chaining_overflow_sub(float* %arg) { 105 define float @address_mode_opt_chaining_overflow_sub(float* %arg) {
106 entry: 106 entry:
107 %arg.int = ptrtoint float* %arg to i32 107 %arg.int = ptrtoint float* %arg to i32
108 %addr1.int = sub i32 %arg.int, 2147483640 108 %addr1.int = sub i32 %arg.int, 2147483640
109 %addr2.int = sub i32 %addr1.int, 2147483643 109 %addr2.int = sub i32 %addr1.int, 2147483643
110 %addr2.ptr = inttoptr i32 %addr2.int to float* 110 %addr2.ptr = inttoptr i32 %addr2.int to float*
111 %addr2.load = load float* %addr2.ptr, align 4 111 %addr2.load = load float, float* %addr2.ptr, align 4
112 ret float %addr2.load 112 ret float %addr2.load
113 ; CHECK-LABEL: address_mode_opt_chaining_overflow_sub 113 ; CHECK-LABEL: address_mode_opt_chaining_overflow_sub
114 ; CHECK: 0x7ffffff8 114 ; CHECK: 0x7ffffff8
115 ; CHECK: movss xmm0,DWORD PTR [{{.*}}-0x7ffffffb] 115 ; CHECK: movss xmm0,DWORD PTR [{{.*}}-0x7ffffffb]
116 } 116 }
117 117
118 define float @address_mode_opt_chaining_no_overflow(float* %arg) { 118 define float @address_mode_opt_chaining_no_overflow(float* %arg) {
119 entry: 119 entry:
120 %arg.int = ptrtoint float* %arg to i32 120 %arg.int = ptrtoint float* %arg to i32
121 %addr1.int = sub i32 %arg.int, 2147483640 121 %addr1.int = sub i32 %arg.int, 2147483640
122 %addr2.int = add i32 %addr1.int, 2147483643 122 %addr2.int = add i32 %addr1.int, 2147483643
123 %addr2.ptr = inttoptr i32 %addr2.int to float* 123 %addr2.ptr = inttoptr i32 %addr2.int to float*
124 %addr2.load = load float* %addr2.ptr, align 4 124 %addr2.load = load float, float* %addr2.ptr, align 4
125 ret float %addr2.load 125 ret float %addr2.load
126 ; CHECK-LABEL: address_mode_opt_chaining_no_overflow 126 ; CHECK-LABEL: address_mode_opt_chaining_no_overflow
127 ; CHECK: movss xmm0,DWORD PTR [{{.*}}+0x3] 127 ; CHECK: movss xmm0,DWORD PTR [{{.*}}+0x3]
128 } 128 }
129 129
130 define float @address_mode_opt_add_pos_min_int(float* %arg) { 130 define float @address_mode_opt_add_pos_min_int(float* %arg) {
131 entry: 131 entry:
132 %arg.int = ptrtoint float* %arg to i32 132 %arg.int = ptrtoint float* %arg to i32
133 %addr1.int = add i32 %arg.int, 2147483648 133 %addr1.int = add i32 %arg.int, 2147483648
134 %addr1.ptr = inttoptr i32 %addr1.int to float* 134 %addr1.ptr = inttoptr i32 %addr1.int to float*
135 %addr1.load = load float* %addr1.ptr, align 4 135 %addr1.load = load float, float* %addr1.ptr, align 4
136 ret float %addr1.load 136 ret float %addr1.load
137 ; CHECK-LABEL: address_mode_opt_add_pos_min_int 137 ; CHECK-LABEL: address_mode_opt_add_pos_min_int
138 ; CHECK: movss xmm0,DWORD PTR [{{.*}}-0x80000000] 138 ; CHECK: movss xmm0,DWORD PTR [{{.*}}-0x80000000]
139 } 139 }
140 140
141 define float @address_mode_opt_sub_min_int(float* %arg) { 141 define float @address_mode_opt_sub_min_int(float* %arg) {
142 entry: 142 entry:
143 %arg.int = ptrtoint float* %arg to i32 143 %arg.int = ptrtoint float* %arg to i32
144 %addr1.int = sub i32 %arg.int, 2147483648 144 %addr1.int = sub i32 %arg.int, 2147483648
145 %addr1.ptr = inttoptr i32 %addr1.int to float* 145 %addr1.ptr = inttoptr i32 %addr1.int to float*
146 %addr1.load = load float* %addr1.ptr, align 4 146 %addr1.load = load float, float* %addr1.ptr, align 4
147 ret float %addr1.load 147 ret float %addr1.load
148 ; CHECK-LABEL: address_mode_opt_sub_min_int 148 ; CHECK-LABEL: address_mode_opt_sub_min_int
149 ; CHECK: movss xmm0,DWORD PTR [{{.*}}-0x80000000] 149 ; CHECK: movss xmm0,DWORD PTR [{{.*}}-0x80000000]
150 } 150 }
OLDNEW
« no previous file with comments | « tests_lit/llvm2ice_tests/addr-opt-multi-def-var.ll ('k') | tests_lit/llvm2ice_tests/callindirect.pnacl.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698