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 69076fd17f465e1988007e70aafa3e703925f342..aac2c0774592659045769eba49aaa098dde60066 100644 |
--- a/tests_lit/llvm2ice_tests/64bit.pnacl.ll |
+++ b/tests_lit/llvm2ice_tests/64bit.pnacl.ll |
@@ -1300,6 +1300,30 @@ if.end3: ; preds = %if.then2, %if.end |
; ARM32: bl {{.*}} <func> |
; ARM32: bx |
+; MIPS32-LABEL: icmpEq64 |
+; MIPS32: xor [[T1:.*]],{{.*}},{{.*}} |
+; MIPS32: xor [[T2:.*]],{{.*}},{{.*}} |
+; MIPS32: or [[T3:.*]],[[T1]],[[T2]] |
+; MIPS32-O2: bnez [[T3]],{{.*}} |
+; MIPS32-OM1: sltiu [[T4:.*]],[[T3]],1 |
+; MIPS32-OM1: sw [[T4]],[[MEM:.*]] |
Jim Stichnoth
2016/09/29 13:52:20
I am very impressed by the level of detail in thes
|
+; MIPS32-OM1: lb [[T5:.*]],[[MEM]] |
+; MIPS32-OM1: beqz [[T5]],{{.*}} |
+; MIPS32-OM1: b {{.*}} |
+; MIPS32: jal {{.*}} |
+; MIPS32-OM1: b {{.*}} |
+; MIPS32: xor [[T1:.*]],{{.*}},{{.*}} |
+; MIPS32: xor [[T2:.*]],{{.*}},{{.*}} |
+; MIPS32: or [[T3:.*]],[[T1]],[[T2]] |
+; MIPS32-O2: bnez [[T3]],{{.*}} |
+; MIPS32-OM1: sltiu [[T4:.*]],[[T3]],1 |
+; MIPS32-OM1: sw [[T4]],[[MEM:.*]] |
+; MIPS32-OM1: lb [[T5:.*]],[[MEM]] |
+; MIPS32-OM1: beqz [[T5]],{{.*}} |
+; MIPS32-OM1: b {{.*}} |
+; MIPS32: jal {{.*}} |
+; MIPS32-OM1: b {{.*}} |
+ |
declare void @func() |
define internal void @icmpNe64(i64 %a, i64 %b, i64 %c, i64 %d) { |
@@ -1370,6 +1394,30 @@ if.end3: ; preds = %if.end, %if.then2 |
; ARM32-O2: beq |
; ARM32: bl |
+; MIPS32-LABEL: icmpNe64 |
+; MIPS32: xor [[T1:.*]],{{.*}},{{.*}} |
+; MIPS32: xor [[T2:.*]],{{.*}},{{.*}} |
+; MIPS32: or [[T3:.*]],[[T1]],[[T2]] |
+; MIPS32-O2: beqz [[T3]],{{.*}} |
+; MIPS32-OM1: sltu [[T4:.*]],zero,[[T3]] |
+; MIPS32-OM1: sw [[T4]],[[MEM:.*]] |
+; MIPS32-OM1: lb [[T5:.*]],[[MEM]] |
+; MIPS32-OM1: beqz [[T5]],{{.*}} |
+; MIPS32-OM1: b {{.*}} |
+; MIPS32: jal {{.*}} |
+; MIPS32-OM1: b {{.*}} |
+; MIPS32: xor [[T1:.*]],{{.*}},{{.*}} |
+; MIPS32: xor [[T2:.*]],{{.*}},{{.*}} |
+; MIPS32: or [[T3:.*]],[[T1]],[[T2]] |
+; MIPS32-O2: beqz [[T3]],{{.*}} |
+; MIPS32-OM1: sltu [[T4:.*]],zero,[[T3]] |
+; MIPS32-OM1: sw [[T4]],[[MEM:.*]] |
+; MIPS32-OM1: lb [[T5:.*]],[[MEM]] |
+; MIPS32-OM1: beqz [[T5]],{{.*}} |
+; MIPS32-OM1: b {{.*}} |
+; MIPS32: jal {{.*}} |
+; MIPS32-OM1: b {{.*}} |
+ |
define internal void @icmpGt64(i64 %a, i64 %b, i64 %c, i64 %d) { |
entry: |
%cmp = icmp ugt i64 %a, %b |
@@ -1424,6 +1472,38 @@ if.end3: ; preds = %if.then2, %if.end |
; ARM32-O2: bge |
; ARM32: bl |
+; MIPS32-LABEL: icmpGt64 |
+; MIPS32: xor [[T1:.*]],[[A_HI:.*]],[[B_HI:.*]] |
+; MIPS32-O2: sltu [[T2:.*]],[[B_HI]],[[A_HI]] |
+; MIPS32-O2: xori [[T3:.*]],[[T2]],0x1 |
+; MIPS32-O2: sltu [[T4:.*]],{{.*}},{{.*}} |
+; MIPS32-O2: xori [[T5:.*]],[[T4]],0x1 |
+; MIPS32-OM1: sltu [[T3:.*]],[[B_HI]],[[A_HI]] |
+; MIPS32-OM1: sltu [[T5:.*]],{{.*}},{{.*}} |
+; MIPS32: movz [[T3]],[[T5]],[[T1]] |
+; MIPS32-O2: bnez [[T3]],{{.*}} |
+; MIPS32-OM1: sw [[T3]],[[MEM:.*]] |
+; MIPS32-OM1: lb [[T6:.*]],[[MEM]] |
+; MIPS32-OM1: beqz [[T6]],{{.*}} |
+; MIPS32-OM1: b {{.*}} |
+; MIPS32: jal {{.*}} |
+; MIPS32-OM1: b {{.*}} |
+; MIPS32: xor [[T1:.*]],[[A_HI:.*]],[[B_HI:.*]] |
+; MIPS32-O2: slt [[T2:.*]],[[B_HI]],[[A_HI]] |
+; MIPS32-O2: xori [[T3:.*]],[[T2]],0x1 |
+; MIPS32-O2: sltu [[T4:.*]],{{.*}},{{.*}} |
+; MIPS32-O2: xori [[T5:.*]],[[T4]],0x1 |
+; MIPS32-OM1: slt [[T3:.*]],[[B_HI]],[[A_HI]] |
+; MIPS32-OM1: sltu [[T5:.*]],{{.*}},{{.*}} |
+; MIPS32: movz [[T3]],[[T5]],[[T1]] |
+; MIPS32-O2: bnez [[T3]],{{.*}} |
+; MIPS32-OM1: sw [[T3]],[[MEM:.*]] |
+; MIPS32-OM1: lb [[T6:.*]],[[MEM]] |
+; MIPS32-OM1: beqz [[T6]],{{.*}} |
+; MIPS32-OM1: b {{.*}} |
+; MIPS32: jal {{.*}} |
+; MIPS32-OM1: b {{.*}} |
+ |
define internal void @icmpGe64(i64 %a, i64 %b, i64 %c, i64 %d) { |
entry: |
%cmp = icmp uge i64 %a, %b |
@@ -1478,6 +1558,38 @@ if.end3: ; preds = %if.end, %if.then2 |
; ARM32-O2: blt |
; ARM32: bl |
+; MIPS32-LABEL: icmpGe64 |
+; MIPS32: xor [[T1:.*]],[[A_HI:.*]],[[B_HI:.*]] |
+; MIPS32-OM1: sltu [[T2:.*]],[[A_HI]],[[B_HI]] |
+; MIPS32-OM1: xori [[T3:.*]],[[T2]],0x1 |
+; MIPS32-OM1: sltu [[T4:.*]],{{.*}},{{.*}} |
+; MIPS32-OM1: xori [[T5:.*]],[[T4]],0x1 |
+; MIPS32-O2: sltu [[T3:.*]],[[A_HI]],[[B_HI]] |
+; MIPS32-O2: sltu [[T5:.*]],{{.*}},{{.*}} |
+; MIPS32: movz [[T3]],[[T5]],[[T1]] |
+; MIPS32-O2: bnez [[T3]],{{.*}} |
+; MIPS32-OM1: sw [[T3]],[[MEM:.*]] |
+; MIPS32-OM1: lb [[T6:.*]],[[MEM]] |
+; MIPS32-OM1: beqz [[T6]],{{.*}} |
+; MIPS32-OM1: b {{.*}} |
+; MIPS32: jal {{.*}} |
+; MIPS32-OM1: b {{.*}} |
+; MIPS32: xor [[T1:.*]],[[A_HI:.*]],[[B_HI:.*]] |
+; MIPS32-OM1: slt [[T2:.*]],[[A_HI]],[[B_HI]] |
+; MIPS32-OM1: xori [[T3:.*]],[[T2]],0x1 |
+; MIPS32-OM1: sltu [[T4:.*]],{{.*}},{{.*}} |
+; MIPS32-OM1: xori [[T5:.*]],[[T4]],0x1 |
+; MIPS32-O2: slt [[T3:.*]],[[A_HI]],[[B_HI]] |
+; MIPS32-O2: sltu [[T5:.*]],{{.*}},{{.*}} |
+; MIPS32: movz [[T3]],[[T5]],[[T1]] |
+; MIPS32-O2: bnez [[T3]],{{.*}} |
+; MIPS32-OM1: sw [[T3]],[[MEM:.*]] |
+; MIPS32-OM1: lb [[T6:.*]],[[MEM]] |
+; MIPS32-OM1: beqz [[T6]],{{.*}} |
+; MIPS32-OM1: b {{.*}} |
+; MIPS32: jal {{.*}} |
+; MIPS32-OM1: b {{.*}} |
+ |
define internal void @icmpLt64(i64 %a, i64 %b, i64 %c, i64 %d) { |
entry: |
%cmp = icmp ult i64 %a, %b |
@@ -1532,6 +1644,38 @@ if.end3: ; preds = %if.then2, %if.end |
; ARM32-O2: bge |
; ARM32: bl |
+; MIPS32-LABEL: icmpLt64 |
+; MIPS32: xor [[T1:.*]],[[A_HI:.*]],[[B_HI:.*]] |
+; MIPS32-O2: sltu [[T2:.*]],[[A_HI]],[[B_HI]] |
+; MIPS32-O2: xori [[T3:.*]],[[T2]],0x1 |
+; MIPS32-O2: sltu [[T4:.*]],{{.*}},{{.*}} |
+; MIPS32-O2: xori [[T5:.*]],[[T4]],0x1 |
+; MIPS32-OM1: sltu [[T3:.*]],[[A_HI]],[[B_HI]] |
+; MIPS32-OM1: sltu [[T5:.*]],{{.*}},{{.*}} |
+; MIPS32: movz [[T3]],[[T5]],[[T1]] |
+; MIPS32-O2: bnez [[T3]],{{.*}} |
+; MIPS32-OM1: sw [[T3]],[[MEM:.*]] |
+; MIPS32-OM1: lb [[T6:.*]],[[MEM]] |
+; MIPS32-OM1: beqz [[T6]],{{.*}} |
+; MIPS32-OM1: b {{.*}} |
+; MIPS32: jal {{.*}} |
+; MIPS32-OM1: b {{.*}} |
+; MIPS32: xor [[T1:.*]],[[A_HI:.*]],[[B_HI:.*]] |
+; MIPS32-O2: slt [[T2:.*]],[[A_HI]],[[B_HI]] |
+; MIPS32-O2: xori [[T3:.*]],[[T2]],0x1 |
+; MIPS32-O2: sltu [[T4:.*]],{{.*}},{{.*}} |
+; MIPS32-O2: xori [[T5:.*]],[[T4]],0x1 |
+; MIPS32-OM1: slt [[T3:.*]],[[A_HI]],[[B_HI]] |
+; MIPS32-OM1: sltu [[T5:.*]],{{.*}},{{.*}} |
+; MIPS32: movz [[T3]],[[T5]],[[T1]] |
+; MIPS32-O2: bnez [[T3]],{{.*}} |
+; MIPS32-OM1: sw [[T3]],[[MEM:.*]] |
+; MIPS32-OM1: lb [[T6:.*]],[[MEM]] |
+; MIPS32-OM1: beqz [[T6]],{{.*}} |
+; MIPS32-OM1: b {{.*}} |
+; MIPS32: jal {{.*}} |
+; MIPS32-OM1: b {{.*}} |
+ |
define internal void @icmpLe64(i64 %a, i64 %b, i64 %c, i64 %d) { |
entry: |
%cmp = icmp ule i64 %a, %b |
@@ -1586,6 +1730,38 @@ if.end3: ; preds = %if.end, %if.then2 |
; ARM32-O2: blt |
; ARM32: bl |
+; MIPS32-LABEL: icmpLe64 |
+; MIPS32: xor [[T1:.*]],[[A_HI:.*]],[[B_HI:.*]] |
+; MIPS32-OM1: sltu [[T2:.*]],[[B_HI]],[[A_HI]] |
+; MIPS32-OM1: xori [[T3:.*]],[[T2]],0x1 |
+; MIPS32-OM1: sltu [[T4:.*]],{{.*}},{{.*}} |
+; MIPS32-OM1: xori [[T5:.*]],[[T4]],0x1 |
+; MIPS32-O2: sltu [[T3:.*]],[[B_HI]],[[A_HI]] |
+; MIPS32-O2: sltu [[T5:.*]],{{.*}},{{.*}} |
+; MIPS32: movz [[T3]],[[T5]],[[T1]] |
+; MIPS32-O2: bnez [[T3]],{{.*}} |
+; MIPS32-OM1: sw [[T3]],[[MEM:.*]] |
+; MIPS32-OM1: lb [[T6:.*]],[[MEM]] |
+; MIPS32-OM1: beqz [[T6]],{{.*}} |
+; MIPS32-OM1: b {{.*}} |
+; MIPS32: jal {{.*}} |
+; MIPS32-OM1: b {{.*}} |
+; MIPS32: xor [[T1:.*]],[[A_HI:.*]],[[B_HI:.*]] |
+; MIPS32-OM1: slt [[T2:.*]],[[B_HI]],[[A_HI]] |
+; MIPS32-OM1: xori [[T3:.*]],[[T2]],0x1 |
+; MIPS32-OM1: sltu [[T4:.*]],{{.*}},{{.*}} |
+; MIPS32-OM1: xori [[T5:.*]],[[T4]],0x1 |
+; MIPS32-O2: slt [[T3:.*]],[[B_HI]],[[A_HI]] |
+; MIPS32-O2: sltu [[T5:.*]],{{.*}},{{.*}} |
+; MIPS32: movz [[T3]],[[T5]],[[T1]] |
+; MIPS32-O2: bnez [[T3]],{{.*}} |
+; MIPS32-OM1: sw [[T3]],[[MEM:.*]] |
+; MIPS32-OM1: lb [[T6:.*]],[[MEM]] |
+; MIPS32-OM1: beqz [[T6]],{{.*}} |
+; MIPS32-OM1: b {{.*}} |
+; MIPS32: jal {{.*}} |
+; MIPS32-OM1: b {{.*}} |
+ |
define internal i32 @icmpEq64Bool(i64 %a, i64 %b) { |
entry: |
%cmp = icmp eq i64 %a, %b |