Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 ; Simple tests for icmp with i8, i16, i32 operands. | |
| 2 | |
| 3 ; RUN: %if --need=allow_dump --need=target_MIPS32 --command %p2i \ | |
| 4 ; RUN: --filetype=asm --target mips32 -i %s --args -O2 --skip-unimplemented \ | |
|
Jim Stichnoth
2016/05/31 19:00:20
Just a comment and an optional suggestion.
For an
sagar.thakur
2016/06/01 13:17:22
Done.
| |
| 5 ; RUN: -allow-externally-defined-symbols \ | |
| 6 ; RUN: | %if --need=allow_dump --need=target_MIPS32 --command FileCheck %s \ | |
| 7 ; RUN: --check-prefix=COMMON --check-prefix=MIPS32 | |
| 8 | |
| 9 define internal i32 @icmpEq32(i32 %a, i32 %b) { | |
| 10 entry: | |
| 11 %cmp = icmp eq i32 %a, %b | |
| 12 %cmp.ret_ext = zext i1 %cmp to i32 | |
| 13 ret i32 %cmp.ret_ext | |
| 14 } | |
| 15 ; MIPS32-LABEL: icmpEq32 | |
| 16 ; MIPS32: xor {{.*}}, $a0, $a1 | |
| 17 ; MIPS32: sltiu {{.*}}, {{.*}}, 1 | |
| 18 | |
| 19 define internal i32 @icmpNe32(i32 %a, i32 %b) { | |
| 20 entry: | |
| 21 %cmp = icmp ne i32 %a, %b | |
| 22 %cmp.ret_ext = zext i1 %cmp to i32 | |
| 23 ret i32 %cmp.ret_ext | |
| 24 } | |
| 25 ; MIPS32-LABEL: icmpNe32 | |
| 26 ; MIPS32: xor {{.*}}, $a0, $a1 | |
| 27 ; MIPS32: sltu {{.*}}, $zero, {{.*}} | |
| 28 | |
| 29 define internal i32 @icmpSgt32(i32 %a, i32 %b) { | |
| 30 entry: | |
| 31 %cmp = icmp sgt i32 %a, %b | |
| 32 %cmp.ret_ext = zext i1 %cmp to i32 | |
| 33 ret i32 %cmp.ret_ext | |
| 34 } | |
| 35 ; MIPS32-LABEL: icmpSgt32 | |
| 36 ; MIPS32: slt {{.*}}, $a1, $a0 | |
| 37 | |
| 38 define internal i32 @icmpUgt32(i32 %a, i32 %b) { | |
| 39 entry: | |
| 40 %cmp = icmp ugt i32 %a, %b | |
| 41 %cmp.ret_ext = zext i1 %cmp to i32 | |
| 42 ret i32 %cmp.ret_ext | |
| 43 } | |
| 44 ; MIPS32-LABEL: icmpUgt32 | |
| 45 ; MIPS32: sltu {{.*}}, $a1, $a0 | |
| 46 | |
| 47 define internal i32 @icmpSge32(i32 %a, i32 %b) { | |
| 48 entry: | |
| 49 %cmp = icmp sge i32 %a, %b | |
| 50 %cmp.ret_ext = zext i1 %cmp to i32 | |
| 51 ret i32 %cmp.ret_ext | |
| 52 } | |
| 53 ; MIPS32-LABEL: icmpSge32 | |
| 54 ; MIPS32: slt {{.*}}, $a0, $a1 | |
| 55 ; MIPS32: xori {{.*}}, {{.*}}, 1 | |
| 56 | |
| 57 define internal i32 @icmpUge32(i32 %a, i32 %b) { | |
| 58 entry: | |
| 59 %cmp = icmp uge i32 %a, %b | |
| 60 %cmp.ret_ext = zext i1 %cmp to i32 | |
| 61 ret i32 %cmp.ret_ext | |
| 62 } | |
| 63 ; MIPS32-LABEL: icmpUge32 | |
| 64 ; MIPS32: sltu {{.*}}, $a0, $a1 | |
| 65 ; MIPS32: xori {{.*}}, {{.*}}, 1 | |
| 66 | |
| 67 define internal i32 @icmpSlt32(i32 %a, i32 %b) { | |
| 68 entry: | |
| 69 %cmp = icmp slt i32 %a, %b | |
| 70 %cmp.ret_ext = zext i1 %cmp to i32 | |
| 71 ret i32 %cmp.ret_ext | |
| 72 } | |
| 73 ; MIPS32-LABEL: icmpSlt32 | |
| 74 ; MIPS32: slt {{.*}}, $a0, $a1 | |
| 75 | |
| 76 define internal i32 @icmpUlt32(i32 %a, i32 %b) { | |
| 77 entry: | |
| 78 %cmp = icmp ult i32 %a, %b | |
| 79 %cmp.ret_ext = zext i1 %cmp to i32 | |
| 80 ret i32 %cmp.ret_ext | |
| 81 } | |
| 82 ; MIPS32-LABEL: icmpUlt32 | |
| 83 ; MIPS32: sltu {{.*}}, $a0, $a1 | |
| 84 | |
| 85 define internal i32 @icmpSle32(i32 %a, i32 %b) { | |
| 86 entry: | |
| 87 %cmp = icmp sle i32 %a, %b | |
| 88 %cmp.ret_ext = zext i1 %cmp to i32 | |
| 89 ret i32 %cmp.ret_ext | |
| 90 } | |
| 91 ; MIPS32-LABEL: icmpSle32 | |
| 92 ; MIPS32: slt {{.*}}, $a1, $a0 | |
| 93 ; MIPS32: xori {{.*}}, {{.*}}, 1 | |
| 94 | |
| 95 define internal i32 @icmpUle32(i32 %a, i32 %b) { | |
| 96 entry: | |
| 97 %cmp = icmp ule i32 %a, %b | |
| 98 %cmp.ret_ext = zext i1 %cmp to i32 | |
| 99 ret i32 %cmp.ret_ext | |
| 100 } | |
| 101 ; MIPS32-LABEL: icmpUle32 | |
| 102 ; MIPS32: sltu {{.*}}, $a1, $a0 | |
| 103 ; MIPS32: xori {{.*}}, {{.*}}, 1 | |
| 104 | |
| 105 define internal i32 @icmpEq8(i32 %a, i32 %b) { | |
| 106 entry: | |
| 107 %a_8 = trunc i32 %a to i8 | |
| 108 %b_8 = trunc i32 %b to i8 | |
| 109 %icmp = icmp eq i8 %b_8, %a_8 | |
| 110 %ret = zext i1 %icmp to i32 | |
| 111 ret i32 %ret | |
| 112 } | |
| 113 ; MIPS32-LABEL: icmpEq8 | |
| 114 ; MIPS32: andi {{.*}}, $a1, 255 | |
| 115 ; MIPS32: andi {{.*}}, $a0, 255 | |
| 116 ; MIPS32: xor | |
| 117 ; MIPS32: sltiu {{.*}}, {{.*}}, 1 | |
| 118 | |
| 119 define internal i32 @icmpSgt8(i32 %a, i32 %b) { | |
| 120 entry: | |
| 121 %a_8 = trunc i32 %a to i8 | |
| 122 %b_8 = trunc i32 %b to i8 | |
| 123 %icmp = icmp sgt i8 %b_8, %a_8 | |
| 124 %ret = zext i1 %icmp to i32 | |
| 125 ret i32 %ret | |
| 126 } | |
| 127 ; MIPS32-LABEL: icmpSgt8 | |
| 128 ; MIPS32: sll {{.*}}, $a1, 24 | |
| 129 ; MIPS32: sra {{.*}}, {{.*}}, 24 | |
| 130 ; MIPS32: sll {{.*}}, $a0, 24 | |
| 131 ; MIPS32: sra {{.*}}, {{.*}}, 24 | |
| 132 ; MIPS32: slt | |
| 133 | |
| 134 define internal i32 @icmpUgt8(i32 %a, i32 %b) { | |
| 135 entry: | |
| 136 %a_8 = trunc i32 %a to i8 | |
| 137 %b_8 = trunc i32 %b to i8 | |
| 138 %icmp = icmp ugt i8 %b_8, %a_8 | |
| 139 %ret = zext i1 %icmp to i32 | |
| 140 ret i32 %ret | |
| 141 } | |
| 142 ; MIPS32-LABEL: icmpUgt8 | |
| 143 ; MIPS32: andi {{.*}}, $a1, 255 | |
| 144 ; MIPS32: andi {{.*}}, $a0, 255 | |
| 145 ; MIPS32: sltu | |
| 146 | |
| 147 define internal i32 @icmpSgt16(i32 %a, i32 %b) { | |
| 148 entry: | |
| 149 %a_16 = trunc i32 %a to i16 | |
| 150 %b_16 = trunc i32 %b to i16 | |
| 151 %icmp = icmp sgt i16 %b_16, %a_16 | |
| 152 %ret = zext i1 %icmp to i32 | |
| 153 ret i32 %ret | |
| 154 } | |
| 155 ; MIPS32-LABEL: icmpSgt16 | |
| 156 ; MIPS32: sll {{.*}}, $a1, 16 | |
| 157 ; MIPS32: sra {{.*}}, {{.*}}, 16 | |
| 158 ; MIPS32: sll {{.*}}, $a0, 16 | |
| 159 ; MIPS32: sra {{.*}}, {{.*}}, 16 | |
| 160 ; MIPS32: slt | |
| 161 | |
| 162 define internal i32 @icmpUgt16(i32 %a, i32 %b) { | |
| 163 entry: | |
| 164 %a_16 = trunc i32 %a to i16 | |
| 165 %b_16 = trunc i32 %b to i16 | |
| 166 %icmp = icmp ugt i16 %b_16, %a_16 | |
| 167 %ret = zext i1 %icmp to i32 | |
| 168 ret i32 %ret | |
| 169 } | |
| 170 ; MIPS32-LABEL: icmpUgt16 | |
| 171 ; MIPS32: andi {{.*}}, $a1, 65535 | |
| 172 ; MIPS32: andi {{.*}}, $a0, 65535 | |
| 173 ; MIPS32: sltu | |
| OLD | NEW |