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

Side by Side Diff: tests_lit/llvm2ice_tests/64bit.pnacl.ll

Issue 1210073017: Subzero: Avoid unused insts for ARM Om1 lowering for arithmetic (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: change break to return where useful to make it obvious Created 5 years, 5 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 tries to be a comprehensive test of i64 operations, in 1 ; This tries to be a comprehensive test of i64 operations, in
2 ; particular the patterns for lowering i64 operations into constituent 2 ; particular the patterns for lowering i64 operations into constituent
3 ; i32 operations on x86-32. 3 ; i32 operations on x86-32.
4 4
5 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ 5 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \
6 ; RUN: --target x8632 -i %s --args -O2 \ 6 ; RUN: --target x8632 -i %s --args -O2 \
7 ; RUN: | %if --need=target_X8632 --command FileCheck %s 7 ; RUN: | %if --need=target_X8632 --command FileCheck %s
8 8
9 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ 9 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \
10 ; RUN: --target x8632 -i %s --args -Om1 \ 10 ; RUN: --target x8632 -i %s --args -Om1 \
11 ; RUN: | %if --need=target_X8632 --command FileCheck --check-prefix=OPTM1 %s 11 ; RUN: | %if --need=target_X8632 --command FileCheck --check-prefix=OPTM1 %s
12 12
13 ; TODO(jvoung): Stop skipping unimplemented parts (via --skip-unimplemented) 13 ; TODO(jvoung): Stop skipping unimplemented parts (via --skip-unimplemented)
14 ; once enough infrastructure is in. Also, switch to --filetype=obj 14 ; once enough infrastructure is in. Also, switch to --filetype=obj
15 ; when possible. 15 ; when possible.
16 ; RUN: %if --need=target_ARM32 --need=allow_dump \ 16 ; RUN: %if --need=target_ARM32 --need=allow_dump \
17 ; RUN: --command %p2i --filetype=asm --assemble \ 17 ; RUN: --command %p2i --filetype=asm --assemble \
18 ; RUN: --disassemble --target arm32 -i %s --args -O2 --skip-unimplemented \ 18 ; RUN: --disassemble --target arm32 -i %s --args -O2 --skip-unimplemented \
19 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ 19 ; RUN: | %if --need=target_ARM32 --need=allow_dump \
20 ; RUN: --command FileCheck --check-prefix ARM32 %s 20 ; RUN: --command FileCheck --check-prefix ARM32 %s
21 ; RUN: %if --need=target_ARM32 --need=allow_dump \
22 ; RUN: --command %p2i --filetype=asm --assemble --disassemble --target arm32 \
23 ; RUN: -i %s --args -Om1 --skip-unimplemented \
24 ; RUN: | %if --need=target_ARM32 --need=allow_dump \
25 ; RUN: --command FileCheck --check-prefix ARM32 %s
21 26
22 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4 27 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4
23 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4 28 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4
24 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8 29 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8
25 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4 30 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4
26 31
27 define internal i32 @ignore64BitArg(i64 %a, i32 %b, i64 %c) { 32 define internal i32 @ignore64BitArg(i64 %a, i32 %b, i64 %c) {
28 entry: 33 entry:
29 ret i32 %b 34 ret i32 %b
30 } 35 }
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 ; ARM32-LABEL: pass64BitArg 92 ; ARM32-LABEL: pass64BitArg
88 ; ARM32: sub sp, {{.*}} #16 93 ; ARM32: sub sp, {{.*}} #16
89 ; ARM32: str {{.*}}, [sp, #4] 94 ; ARM32: str {{.*}}, [sp, #4]
90 ; ARM32: str {{.*}}, [sp] 95 ; ARM32: str {{.*}}, [sp]
91 ; ARM32: movw r2, #123 96 ; ARM32: movw r2, #123
92 ; ARM32: bl {{.*}} ignore64BitArgNoInline 97 ; ARM32: bl {{.*}} ignore64BitArgNoInline
93 ; ARM32: add sp, {{.*}} #16 98 ; ARM32: add sp, {{.*}} #16
94 ; ARM32: sub sp, {{.*}} #16 99 ; ARM32: sub sp, {{.*}} #16
95 ; ARM32: str {{.*}}, [sp, #4] 100 ; ARM32: str {{.*}}, [sp, #4]
96 ; ARM32: str {{.*}}, [sp] 101 ; ARM32: str {{.*}}, [sp]
97 ; ARM32: mov r0 102 ; ARM32: {{mov|ldr}} r0
98 ; ARM32: mov r1 103 ; ARM32: {{mov|ldr}} r1
99 ; ARM32: movw r2, #123 104 ; ARM32: movw r2, #123
100 ; ARM32: bl {{.*}} ignore64BitArgNoInline 105 ; ARM32: bl {{.*}} ignore64BitArgNoInline
101 ; ARM32: add sp, {{.*}} #16 106 ; ARM32: add sp, {{.*}} #16
102 ; ARM32: sub sp, {{.*}} #16 107 ; ARM32: sub sp, {{.*}} #16
103 ; ARM32: str {{.*}}, [sp, #4] 108 ; ARM32: str {{.*}}, [sp, #4]
104 ; ARM32: str {{.*}}, [sp] 109 ; ARM32: str {{.*}}, [sp]
105 ; ARM32: mov r0 110 ; ARM32: {{mov|ldr}} r0
106 ; ARM32: mov r1 111 ; ARM32: {{mov|ldr}} r1
107 ; ARM32: movw r2, #123 112 ; ARM32: movw r2, #123
108 ; ARM32: bl {{.*}} ignore64BitArgNoInline 113 ; ARM32: bl {{.*}} ignore64BitArgNoInline
109 ; ARM32: add sp, {{.*}} #16 114 ; ARM32: add sp, {{.*}} #16
110 115
111 116
112 declare i32 @ignore64BitArgNoInline(i64, i32, i64) 117 declare i32 @ignore64BitArgNoInline(i64, i32, i64)
113 118
114 define internal i32 @pass64BitConstArg(i64 %a, i64 %b) { 119 define internal i32 @pass64BitConstArg(i64 %a, i64 %b) {
115 entry: 120 entry:
116 %call = call i32 @ignore64BitArgNoInline(i64 %b, i32 123, i64 -240105309230672 5256) 121 %call = call i32 @ignore64BitArgNoInline(i64 %b, i32 123, i64 -240105309230672 5256)
(...skipping 23 matching lines...) Expand all
140 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline 145 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline
141 146
142 ; ARM32-LABEL: pass64BitConstArg 147 ; ARM32-LABEL: pass64BitConstArg
143 ; ARM32: sub sp, {{.*}} #16 148 ; ARM32: sub sp, {{.*}} #16
144 ; ARM32: movw [[REG1:r.*]], {{.*}} ; 0xbeef 149 ; ARM32: movw [[REG1:r.*]], {{.*}} ; 0xbeef
145 ; ARM32: movt [[REG1:r.*]], {{.*}} ; 0xdead 150 ; ARM32: movt [[REG1:r.*]], {{.*}} ; 0xdead
146 ; ARM32: movw [[REG2:r.*]], {{.*}} ; 0x5678 151 ; ARM32: movw [[REG2:r.*]], {{.*}} ; 0x5678
147 ; ARM32: movt [[REG2:r.*]], {{.*}} ; 0x1234 152 ; ARM32: movt [[REG2:r.*]], {{.*}} ; 0x1234
148 ; ARM32: str [[REG1]], [sp, #4] 153 ; ARM32: str [[REG1]], [sp, #4]
149 ; ARM32: str [[REG2]], [sp] 154 ; ARM32: str [[REG2]], [sp]
150 ; ARM32: mov r0, r2 155 ; ARM32: {{mov|ldr}} r0
151 ; ARM32: mov r1, r3 156 ; ARM32: {{mov|ldr}} r1
152 ; ARM32: movw r2, #123 157 ; ARM32: movw r2, #123
153 ; ARM32: bl {{.*}} ignore64BitArgNoInline 158 ; ARM32: bl {{.*}} ignore64BitArgNoInline
154 ; ARM32: add sp, {{.*}} #16 159 ; ARM32: add sp, {{.*}} #16
155 160
156 define internal i64 @return64BitArg(i64 %a) { 161 define internal i64 @return64BitArg(i64 %padding, i64 %a) {
157 entry: 162 entry:
158 ret i64 %a 163 ret i64 %a
159 } 164 }
160 ; CHECK-LABEL: return64BitArg 165 ; CHECK-LABEL: return64BitArg
161 ; CHECK: mov {{.*}},DWORD PTR [esp+0x4] 166 ; CHECK: mov {{.*}},DWORD PTR [esp+0xc]
162 ; CHECK: mov {{.*}},DWORD PTR [esp+0x8] 167 ; CHECK: mov {{.*}},DWORD PTR [esp+0x10]
163 ; 168 ;
164 ; OPTM1-LABEL: return64BitArg 169 ; OPTM1-LABEL: return64BitArg
165 ; OPTM1: mov {{.*}},DWORD PTR [esp+0x4] 170 ; OPTM1: mov {{.*}},DWORD PTR [esp+0xc]
166 ; OPTM1: mov {{.*}},DWORD PTR [esp+0x8] 171 ; OPTM1: mov {{.*}},DWORD PTR [esp+0x10]
167 172
168 ; Nothing to do for ARM O2 -- arg and return value are in r0,r1.
169 ; ARM32-LABEL: return64BitArg 173 ; ARM32-LABEL: return64BitArg
170 ; ARM32-NEXT: bx lr 174 ; ARM32: mov {{.*}}, r2
175 ; ARM32: mov {{.*}}, r3
176 ; ARM32: bx lr
171 177
172 define internal i64 @return64BitConst() { 178 define internal i64 @return64BitConst() {
173 entry: 179 entry:
174 ret i64 -2401053092306725256 180 ret i64 -2401053092306725256
175 } 181 }
176 ; CHECK-LABEL: return64BitConst 182 ; CHECK-LABEL: return64BitConst
177 ; CHECK: mov eax,0x12345678 183 ; CHECK: mov eax,0x12345678
178 ; CHECK: mov edx,0xdeadbeef 184 ; CHECK: mov edx,0xdeadbeef
179 ; 185 ;
180 ; OPTM1-LABEL: return64BitConst 186 ; OPTM1-LABEL: return64BitConst
(...skipping 814 matching lines...) Expand 10 before | Expand all | Expand 10 after
995 ; OPTM1: call 1001 ; OPTM1: call
996 ; OPTM1: jne 1002 ; OPTM1: jne
997 ; OPTM1: je 1003 ; OPTM1: je
998 ; OPTM1: call 1004 ; OPTM1: call
999 1005
1000 ; ARM32-LABEL: icmpEq64 1006 ; ARM32-LABEL: icmpEq64
1001 ; ARM32: cmp 1007 ; ARM32: cmp
1002 ; ARM32: cmpeq 1008 ; ARM32: cmpeq
1003 ; ARM32: moveq 1009 ; ARM32: moveq
1004 ; ARM32: movne 1010 ; ARM32: movne
1005 ; ARM32: beq
1006 ; ARM32: bl 1011 ; ARM32: bl
1007 ; ARM32: cmp 1012 ; ARM32: cmp
1008 ; ARM32: cmpeq 1013 ; ARM32: cmpeq
1009 ; ARM32: moveq 1014 ; ARM32: moveq
1010 ; ARM32: movne 1015 ; ARM32: movne
1011 ; ARM32: beq
1012 ; ARM32: bl 1016 ; ARM32: bl
1013 1017
1014 declare void @func() 1018 declare void @func()
1015 1019
1016 define internal void @icmpNe64(i64 %a, i64 %b, i64 %c, i64 %d) { 1020 define internal void @icmpNe64(i64 %a, i64 %b, i64 %c, i64 %d) {
1017 entry: 1021 entry:
1018 %cmp = icmp ne i64 %a, %b 1022 %cmp = icmp ne i64 %a, %b
1019 br i1 %cmp, label %if.then, label %if.end 1023 br i1 %cmp, label %if.then, label %if.end
1020 1024
1021 if.then: ; preds = %entry 1025 if.then: ; preds = %entry
(...skipping 25 matching lines...) Expand all
1047 ; OPTM1: call 1051 ; OPTM1: call
1048 ; OPTM1: jne 1052 ; OPTM1: jne
1049 ; OPTM1: jne 1053 ; OPTM1: jne
1050 ; OPTM1: call 1054 ; OPTM1: call
1051 1055
1052 ; ARM32-LABEL: icmpNe64 1056 ; ARM32-LABEL: icmpNe64
1053 ; ARM32: cmp 1057 ; ARM32: cmp
1054 ; ARM32: cmpeq 1058 ; ARM32: cmpeq
1055 ; ARM32: movne 1059 ; ARM32: movne
1056 ; ARM32: moveq 1060 ; ARM32: moveq
1057 ; ARM32: beq
1058 ; ARM32: bl 1061 ; ARM32: bl
1059 ; ARM32: cmp 1062 ; ARM32: cmp
1060 ; ARM32: cmpeq 1063 ; ARM32: cmpeq
1061 ; ARM32: movne 1064 ; ARM32: movne
1062 ; ARM32: moveq 1065 ; ARM32: moveq
1063 ; ARM32: beq
1064 ; ARM32: bl 1066 ; ARM32: bl
1065 1067
1066 define internal void @icmpGt64(i64 %a, i64 %b, i64 %c, i64 %d) { 1068 define internal void @icmpGt64(i64 %a, i64 %b, i64 %c, i64 %d) {
1067 entry: 1069 entry:
1068 %cmp = icmp ugt i64 %a, %b 1070 %cmp = icmp ugt i64 %a, %b
1069 br i1 %cmp, label %if.then, label %if.end 1071 br i1 %cmp, label %if.then, label %if.end
1070 1072
1071 if.then: ; preds = %entry 1073 if.then: ; preds = %entry
1072 call void @func() 1074 call void @func()
1073 br label %if.end 1075 br label %if.end
(...skipping 27 matching lines...) Expand all
1101 ; OPTM1: jg 1103 ; OPTM1: jg
1102 ; OPTM1: jl 1104 ; OPTM1: jl
1103 ; OPTM1: ja 1105 ; OPTM1: ja
1104 ; OPTM1: call 1106 ; OPTM1: call
1105 1107
1106 ; ARM32-LABEL: icmpGt64 1108 ; ARM32-LABEL: icmpGt64
1107 ; ARM32: cmp 1109 ; ARM32: cmp
1108 ; ARM32: cmpeq 1110 ; ARM32: cmpeq
1109 ; ARM32: movhi 1111 ; ARM32: movhi
1110 ; ARM32: movls 1112 ; ARM32: movls
1111 ; ARM32: beq
1112 ; ARM32: bl 1113 ; ARM32: bl
1113 ; ARM32: cmp 1114 ; ARM32: cmp
1114 ; ARM32: sbcs 1115 ; ARM32: sbcs
1115 ; ARM32: movlt 1116 ; ARM32: movlt
1116 ; ARM32: movge 1117 ; ARM32: movge
1117 ; ARM32: beq
1118 ; ARM32: bl 1118 ; ARM32: bl
1119 1119
1120 define internal void @icmpGe64(i64 %a, i64 %b, i64 %c, i64 %d) { 1120 define internal void @icmpGe64(i64 %a, i64 %b, i64 %c, i64 %d) {
1121 entry: 1121 entry:
1122 %cmp = icmp uge i64 %a, %b 1122 %cmp = icmp uge i64 %a, %b
1123 br i1 %cmp, label %if.then, label %if.end 1123 br i1 %cmp, label %if.then, label %if.end
1124 1124
1125 if.then: ; preds = %entry 1125 if.then: ; preds = %entry
1126 call void @func() 1126 call void @func()
1127 br label %if.end 1127 br label %if.end
(...skipping 27 matching lines...) Expand all
1155 ; OPTM1: jg 1155 ; OPTM1: jg
1156 ; OPTM1: jl 1156 ; OPTM1: jl
1157 ; OPTM1: jae 1157 ; OPTM1: jae
1158 ; OPTM1: call 1158 ; OPTM1: call
1159 1159
1160 ; ARM32-LABEL: icmpGe64 1160 ; ARM32-LABEL: icmpGe64
1161 ; ARM32: cmp 1161 ; ARM32: cmp
1162 ; ARM32: cmpeq 1162 ; ARM32: cmpeq
1163 ; ARM32: movcs 1163 ; ARM32: movcs
1164 ; ARM32: movcc 1164 ; ARM32: movcc
1165 ; ARM32: beq
1166 ; ARM32: bl 1165 ; ARM32: bl
1167 ; ARM32: cmp 1166 ; ARM32: cmp
1168 ; ARM32: sbcs 1167 ; ARM32: sbcs
1169 ; ARM32: movge 1168 ; ARM32: movge
1170 ; ARM32: movlt 1169 ; ARM32: movlt
1171 ; ARM32: beq
1172 ; ARM32: bl 1170 ; ARM32: bl
1173 1171
1174 define internal void @icmpLt64(i64 %a, i64 %b, i64 %c, i64 %d) { 1172 define internal void @icmpLt64(i64 %a, i64 %b, i64 %c, i64 %d) {
1175 entry: 1173 entry:
1176 %cmp = icmp ult i64 %a, %b 1174 %cmp = icmp ult i64 %a, %b
1177 br i1 %cmp, label %if.then, label %if.end 1175 br i1 %cmp, label %if.then, label %if.end
1178 1176
1179 if.then: ; preds = %entry 1177 if.then: ; preds = %entry
1180 call void @func() 1178 call void @func()
1181 br label %if.end 1179 br label %if.end
(...skipping 27 matching lines...) Expand all
1209 ; OPTM1: jl 1207 ; OPTM1: jl
1210 ; OPTM1: jg 1208 ; OPTM1: jg
1211 ; OPTM1: jb 1209 ; OPTM1: jb
1212 ; OPTM1: call 1210 ; OPTM1: call
1213 1211
1214 ; ARM32-LABEL: icmpLt64 1212 ; ARM32-LABEL: icmpLt64
1215 ; ARM32: cmp 1213 ; ARM32: cmp
1216 ; ARM32: cmpeq 1214 ; ARM32: cmpeq
1217 ; ARM32: movcc 1215 ; ARM32: movcc
1218 ; ARM32: movcs 1216 ; ARM32: movcs
1219 ; ARM32: beq
1220 ; ARM32: bl 1217 ; ARM32: bl
1221 ; ARM32: cmp 1218 ; ARM32: cmp
1222 ; ARM32: sbcs 1219 ; ARM32: sbcs
1223 ; ARM32: movlt 1220 ; ARM32: movlt
1224 ; ARM32: movge 1221 ; ARM32: movge
1225 ; ARM32: beq
1226 ; ARM32: bl 1222 ; ARM32: bl
1227 1223
1228 define internal void @icmpLe64(i64 %a, i64 %b, i64 %c, i64 %d) { 1224 define internal void @icmpLe64(i64 %a, i64 %b, i64 %c, i64 %d) {
1229 entry: 1225 entry:
1230 %cmp = icmp ule i64 %a, %b 1226 %cmp = icmp ule i64 %a, %b
1231 br i1 %cmp, label %if.then, label %if.end 1227 br i1 %cmp, label %if.then, label %if.end
1232 1228
1233 if.then: ; preds = %entry 1229 if.then: ; preds = %entry
1234 call void @func() 1230 call void @func()
1235 br label %if.end 1231 br label %if.end
(...skipping 27 matching lines...) Expand all
1263 ; OPTM1: jl 1259 ; OPTM1: jl
1264 ; OPTM1: jg 1260 ; OPTM1: jg
1265 ; OPTM1: jbe 1261 ; OPTM1: jbe
1266 ; OPTM1: call 1262 ; OPTM1: call
1267 1263
1268 ; ARM32-LABEL: icmpLe64 1264 ; ARM32-LABEL: icmpLe64
1269 ; ARM32: cmp 1265 ; ARM32: cmp
1270 ; ARM32: cmpeq 1266 ; ARM32: cmpeq
1271 ; ARM32: movls 1267 ; ARM32: movls
1272 ; ARM32: movhi 1268 ; ARM32: movhi
1273 ; ARM32: beq
1274 ; ARM32: bl 1269 ; ARM32: bl
1275 ; ARM32: cmp 1270 ; ARM32: cmp
1276 ; ARM32: sbcs 1271 ; ARM32: sbcs
1277 ; ARM32: movge 1272 ; ARM32: movge
1278 ; ARM32: movlt 1273 ; ARM32: movlt
1279 ; ARM32: beq
1280 ; ARM32: bl 1274 ; ARM32: bl
1281 1275
1282 define internal i32 @icmpEq64Bool(i64 %a, i64 %b) { 1276 define internal i32 @icmpEq64Bool(i64 %a, i64 %b) {
1283 entry: 1277 entry:
1284 %cmp = icmp eq i64 %a, %b 1278 %cmp = icmp eq i64 %a, %b
1285 %cmp.ret_ext = zext i1 %cmp to i32 1279 %cmp.ret_ext = zext i1 %cmp to i32
1286 ret i32 %cmp.ret_ext 1280 ret i32 %cmp.ret_ext
1287 } 1281 }
1288 ; CHECK-LABEL: icmpEq64Bool 1282 ; CHECK-LABEL: icmpEq64Bool
1289 ; CHECK: jne 1283 ; CHECK: jne
(...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after
1743 ret void 1737 ret void
1744 } 1738 }
1745 ; The following checks are not strictly necessary since one of the RUN 1739 ; The following checks are not strictly necessary since one of the RUN
1746 ; lines actually runs the output through the assembler. 1740 ; lines actually runs the output through the assembler.
1747 ; CHECK-LABEL: icmpLt64Imm 1741 ; CHECK-LABEL: icmpLt64Imm
1748 ; CHECK-NOT: cmp 0x{{[0-9a-f]+}}, 1742 ; CHECK-NOT: cmp 0x{{[0-9a-f]+}},
1749 ; OPTM1-LABEL: icmpLt64Imm 1743 ; OPTM1-LABEL: icmpLt64Imm
1750 ; OPTM1-NOT: cmp 0x{{[0-9a-f]+}}, 1744 ; OPTM1-NOT: cmp 0x{{[0-9a-f]+}},
1751 ; ARM32-LABEL: icmpLt64Imm 1745 ; ARM32-LABEL: icmpLt64Imm
1752 ; ARM32-NOT: cmp #{{[0-9a-f]+}}, 1746 ; ARM32-NOT: cmp #{{[0-9a-f]+}},
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698