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

Unified Diff: tests_lit/llvm2ice_tests/64bit.pnacl.ll

Issue 1151663004: Subzero ARM: do lowerIcmp, lowerBr, and a bit of lowerCall. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: fix Created 5 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/IceTargetLoweringARM32.def ('k') | tests_lit/llvm2ice_tests/branch-opt.ll » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests_lit/llvm2ice_tests/64bit.pnacl.ll
diff --git a/tests_lit/llvm2ice_tests/64bit.pnacl.ll b/tests_lit/llvm2ice_tests/64bit.pnacl.ll
index c5cf07cf159262438d24f4fb4927ecf5901d1c58..6c50d18cecc0d3fe60b0dae0499809690b25cb20 100644
--- a/tests_lit/llvm2ice_tests/64bit.pnacl.ll
+++ b/tests_lit/llvm2ice_tests/64bit.pnacl.ll
@@ -2,10 +2,20 @@
; particular the patterns for lowering i64 operations into constituent
; i32 operations on x86-32.
-; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 \
-; RUN: | FileCheck %s
-; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 \
-; RUN: | FileCheck --check-prefix=OPTM1 %s
+; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \
+; RUN: --target x8632 -i %s --args -O2 \
+; RUN: | %if --need=target_X8632 --command FileCheck %s
+
+; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \
+; RUN: --target x8632 -i %s --args -Om1 \
+; RUN: | %if --need=target_X8632 --command FileCheck --check-prefix=OPTM1 %s
+
+; TODO(jvoung): Stop skipping unimplemented parts (via --skip-unimplemented)
+; once enough infrastructure is in. Also, switch to --filetype=obj
+; when possible.
+; RUN: %if --need=target_ARM32 --command %p2i --filetype=asm --assemble \
+; RUN: --disassemble --target arm32 -i %s --args -O2 --skip-unimplemented \
+; RUN: | %if --need=target_ARM32 --command FileCheck --check-prefix ARM32 %s
@__init_array_start = internal constant [0 x i8] zeroinitializer, align 4
@__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4
@@ -114,6 +124,10 @@ entry:
; OPTM1: mov {{.*}},DWORD PTR [esp+0x4]
; OPTM1: mov {{.*}},DWORD PTR [esp+0x8]
+; Nothing to do for ARM O2 -- arg and return value are in r0,r1.
+; ARM32-LABEL: return64BitArg
+; ARM32-NEXT: bx lr
+
define internal i64 @return64BitConst() {
entry:
ret i64 -2401053092306725256
@@ -126,6 +140,12 @@ entry:
; OPTM1: mov eax,0x12345678
; OPTM1: mov edx,0xdeadbeef
+; ARM32-LABEL: return64BitConst
+; ARM32: movw r0, #22136 ; 0x5678
+; ARM32: movt r0, #4660 ; 0x1234
+; ARM32: movw r1, #48879 ; 0xbeef
+; ARM32: movt r1, #57005 ; 0xdead
+
define internal i64 @add64BitSigned(i64 %a, i64 %b) {
entry:
%add = add i64 %b, %a
@@ -139,6 +159,10 @@ entry:
; OPTM1: add
; OPTM1: adc
+; ARM32-LABEL: add64BitSigned
+; ARM32: adds
+; ARM32: adc
+
define internal i64 @add64BitUnsigned(i64 %a, i64 %b) {
entry:
%add = add i64 %b, %a
@@ -152,6 +176,10 @@ entry:
; OPTM1: add
; OPTM1: adc
+; ARM32-LABEL: add64BitUnsigned
+; ARM32: adds
+; ARM32: adc
+
define internal i64 @sub64BitSigned(i64 %a, i64 %b) {
entry:
%sub = sub i64 %a, %b
@@ -165,6 +193,10 @@ entry:
; OPTM1: sub
; OPTM1: sbb
+; ARM32-LABEL: sub64BitSigned
+; ARM32: subs
+; ARM32: sbc
+
define internal i64 @sub64BitUnsigned(i64 %a, i64 %b) {
entry:
%sub = sub i64 %a, %b
@@ -178,6 +210,10 @@ entry:
; OPTM1: sub
; OPTM1: sbb
+; ARM32-LABEL: sub64BitUnsigned
+; ARM32: subs
+; ARM32: sbc
+
define internal i64 @mul64BitSigned(i64 %a, i64 %b) {
entry:
%mul = mul i64 %b, %a
@@ -197,6 +233,12 @@ entry:
; OPTM1: add
; OPTM1: add
+; ARM32-LABEL: mul64BitSigned
+; ARM32: mul
+; ARM32: mla
+; ARM32: umull
+; ARM32: add
+
define internal i64 @mul64BitUnsigned(i64 %a, i64 %b) {
entry:
%mul = mul i64 %b, %a
@@ -216,6 +258,12 @@ entry:
; OPTM1: add
; OPTM1: add
+; ARM32-LABEL: mul64BitUnsigned
+; ARM32: mul
+; ARM32: mla
+; ARM32: umull
+; ARM32: add
+
define internal i64 @div64BitSigned(i64 %a, i64 %b) {
entry:
%div = sdiv i64 %a, %b
@@ -413,6 +461,10 @@ entry:
; OPTM1: and
; OPTM1: and
+; ARM32-LABEL: and64BitSigned
+; ARM32: and
+; ARM32: and
+
define internal i64 @and64BitUnsigned(i64 %a, i64 %b) {
entry:
%and = and i64 %b, %a
@@ -426,6 +478,10 @@ entry:
; OPTM1: and
; OPTM1: and
+; ARM32-LABEL: and64BitUnsigned
+; ARM32: and
+; ARM32: and
+
define internal i64 @or64BitSigned(i64 %a, i64 %b) {
entry:
%or = or i64 %b, %a
@@ -439,6 +495,10 @@ entry:
; OPTM1: or
; OPTM1: or
+; ARM32-LABEL: or64BitSigned
+; ARM32: orr
+; ARM32: orr
+
define internal i64 @or64BitUnsigned(i64 %a, i64 %b) {
entry:
%or = or i64 %b, %a
@@ -452,6 +512,10 @@ entry:
; OPTM1: or
; OPTM1: or
+; ARM32-LABEL: or64BitUnsigned
+; ARM32: orr
+; ARM32: orr
+
define internal i64 @xor64BitSigned(i64 %a, i64 %b) {
entry:
%xor = xor i64 %b, %a
@@ -465,6 +529,10 @@ entry:
; OPTM1: xor
; OPTM1: xor
+; ARM32-LABEL: xor64BitSigned
+; ARM32: eor
+; ARM32: eor
+
define internal i64 @xor64BitUnsigned(i64 %a, i64 %b) {
entry:
%xor = xor i64 %b, %a
@@ -478,6 +546,10 @@ entry:
; OPTM1: xor
; OPTM1: xor
+; ARM32-LABEL: xor64BitUnsigned
+; ARM32: eor
+; ARM32: eor
+
define internal i32 @trunc64To32Signed(i64 %a) {
entry:
%conv = trunc i64 %a to i32
@@ -746,6 +818,20 @@ if.end3: ; preds = %if.then2, %if.end
; OPTM1: je
; OPTM1: call
+; ARM32-LABEL: icmpEq64
+; ARM32: cmp
+; ARM32: cmpeq
+; ARM32: moveq
+; ARM32: movne
+; ARM32: beq
+; ARM32: bl
+; ARM32: cmp
+; ARM32: cmpeq
+; ARM32: moveq
+; ARM32: movne
+; ARM32: beq
+; ARM32: bl
+
declare void @func()
define internal void @icmpNe64(i64 %a, i64 %b, i64 %c, i64 %d) {
@@ -784,6 +870,20 @@ if.end3: ; preds = %if.end, %if.then2
; OPTM1: jne
; OPTM1: call
+; ARM32-LABEL: icmpNe64
+; ARM32: cmp
+; ARM32: cmpeq
+; ARM32: movne
+; ARM32: moveq
+; ARM32: beq
+; ARM32: bl
+; ARM32: cmp
+; ARM32: cmpeq
+; ARM32: movne
+; ARM32: moveq
+; ARM32: beq
+; ARM32: bl
+
define internal void @icmpGt64(i64 %a, i64 %b, i64 %c, i64 %d) {
entry:
%cmp = icmp ugt i64 %a, %b
@@ -824,6 +924,20 @@ if.end3: ; preds = %if.then2, %if.end
; OPTM1: ja
; OPTM1: call
+; ARM32-LABEL: icmpGt64
+; ARM32: cmp
+; ARM32: cmpeq
+; ARM32: movhi
+; ARM32: movls
+; ARM32: beq
+; ARM32: bl
+; ARM32: cmp
+; ARM32: sbcs
+; ARM32: movlt
+; ARM32: movge
+; ARM32: beq
+; ARM32: bl
+
define internal void @icmpGe64(i64 %a, i64 %b, i64 %c, i64 %d) {
entry:
%cmp = icmp uge i64 %a, %b
@@ -864,6 +978,20 @@ if.end3: ; preds = %if.end, %if.then2
; OPTM1: jae
; OPTM1: call
+; ARM32-LABEL: icmpGe64
+; ARM32: cmp
+; ARM32: cmpeq
+; ARM32: movcs
+; ARM32: movcc
+; ARM32: beq
+; ARM32: bl
+; ARM32: cmp
+; ARM32: sbcs
+; ARM32: movge
+; ARM32: movlt
+; ARM32: beq
+; ARM32: bl
+
define internal void @icmpLt64(i64 %a, i64 %b, i64 %c, i64 %d) {
entry:
%cmp = icmp ult i64 %a, %b
@@ -904,6 +1032,20 @@ if.end3: ; preds = %if.then2, %if.end
; OPTM1: jb
; OPTM1: call
+; ARM32-LABEL: icmpLt64
+; ARM32: cmp
+; ARM32: cmpeq
+; ARM32: movcc
+; ARM32: movcs
+; ARM32: beq
+; ARM32: bl
+; ARM32: cmp
+; ARM32: sbcs
+; ARM32: movlt
+; ARM32: movge
+; ARM32: beq
+; ARM32: bl
+
define internal void @icmpLe64(i64 %a, i64 %b, i64 %c, i64 %d) {
entry:
%cmp = icmp ule i64 %a, %b
@@ -944,6 +1086,20 @@ if.end3: ; preds = %if.end, %if.then2
; OPTM1: jbe
; OPTM1: call
+; ARM32-LABEL: icmpLe64
+; ARM32: cmp
+; ARM32: cmpeq
+; ARM32: movls
+; ARM32: movhi
+; ARM32: beq
+; ARM32: bl
+; ARM32: cmp
+; ARM32: sbcs
+; ARM32: movge
+; ARM32: movlt
+; ARM32: beq
+; ARM32: bl
+
define internal i32 @icmpEq64Bool(i64 %a, i64 %b) {
entry:
%cmp = icmp eq i64 %a, %b
@@ -1275,6 +1431,8 @@ if.end3: ; preds = %if.then2, %if.end
; CHECK-NOT: cmp 0x{{[0-9a-f]+}},
; OPTM1-LABEL: icmpEq64Imm
; OPTM1-LABEL-NOT: cmp 0x{{[0-9a-f]+}},
+; ARM32-LABEL: icmpEq64Imm
+; ARM32-NOT: cmp #{{[0-9a-f]+}},
define internal void @icmpLt64Imm() {
entry:
@@ -1302,3 +1460,5 @@ if.end3: ; preds = %if.then2, %if.end
; CHECK-NOT: cmp 0x{{[0-9a-f]+}},
; OPTM1-LABEL: icmpLt64Imm
; OPTM1-NOT: cmp 0x{{[0-9a-f]+}},
+; ARM32-LABEL: icmpLt64Imm
+; ARM32-NOT: cmp #{{[0-9a-f]+}},
« no previous file with comments | « src/IceTargetLoweringARM32.def ('k') | tests_lit/llvm2ice_tests/branch-opt.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698