| OLD | NEW |
| 1 ; This tries to be a comprehensive test of i8 operations. | 1 ; This tries to be a comprehensive test of i8 operations. |
| 2 | 2 |
| 3 ; RUN: %p2i -i %s --args -O2 --verbose none \ | 3 ; RUN: %p2i --assemble --disassemble -i %s --args -O2 --verbose none \ |
| 4 ; RUN: | llvm-mc -triple=i686-none-nacl -filetype=obj \ | 4 ; RUN: | FileCheck %s |
| 5 ; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s | 5 ; RUN: %p2i --assemble --disassemble -i %s --args -Om1 --verbose none \ |
| 6 ; RUN: %p2i -i %s --args -Om1 --verbose none \ | 6 ; RUN: | FileCheck %s |
| 7 ; RUN: | llvm-mc -triple=i686-none-nacl -filetype=obj \ | |
| 8 ; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s | |
| 9 | 7 |
| 10 define internal i32 @add8Bit(i32 %a, i32 %b) { | 8 define internal i32 @add8Bit(i32 %a, i32 %b) { |
| 11 entry: | 9 entry: |
| 12 %a_8 = trunc i32 %a to i8 | 10 %a_8 = trunc i32 %a to i8 |
| 13 %b_8 = trunc i32 %b to i8 | 11 %b_8 = trunc i32 %b to i8 |
| 14 %add = add i8 %b_8, %a_8 | 12 %add = add i8 %b_8, %a_8 |
| 15 %ret = zext i8 %add to i32 | 13 %ret = zext i8 %add to i32 |
| 16 ret i32 %ret | 14 ret i32 %ret |
| 17 } | 15 } |
| 18 ; CHECK-LABEL: add8Bit | 16 ; CHECK-LABEL: add8Bit |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 | 49 |
| 52 define internal i32 @mul8Bit(i32 %a, i32 %b) { | 50 define internal i32 @mul8Bit(i32 %a, i32 %b) { |
| 53 entry: | 51 entry: |
| 54 %a_8 = trunc i32 %a to i8 | 52 %a_8 = trunc i32 %a to i8 |
| 55 %b_8 = trunc i32 %b to i8 | 53 %b_8 = trunc i32 %b to i8 |
| 56 %mul = mul i8 %b_8, %a_8 | 54 %mul = mul i8 %b_8, %a_8 |
| 57 %ret = zext i8 %mul to i32 | 55 %ret = zext i8 %mul to i32 |
| 58 ret i32 %ret | 56 ret i32 %ret |
| 59 } | 57 } |
| 60 ; CHECK-LABEL: mul8Bit | 58 ; CHECK-LABEL: mul8Bit |
| 61 ; CHECK: mul {{[abcd]l|byte ptr}} | 59 ; CHECK: mul {{[abcd]l|BYTE PTR}} |
| 62 | 60 |
| 63 define internal i32 @mul8BitConst(i32 %a) { | 61 define internal i32 @mul8BitConst(i32 %a) { |
| 64 entry: | 62 entry: |
| 65 %a_8 = trunc i32 %a to i8 | 63 %a_8 = trunc i32 %a to i8 |
| 66 %mul = mul i8 %a_8, 56 | 64 %mul = mul i8 %a_8, 56 |
| 67 %ret = zext i8 %mul to i32 | 65 %ret = zext i8 %mul to i32 |
| 68 ret i32 %ret | 66 ret i32 %ret |
| 69 } | 67 } |
| 70 ; CHECK-LABEL: mul8BitConst | 68 ; CHECK-LABEL: mul8BitConst |
| 71 ; 8-bit imul only accepts r/m, not imm | 69 ; 8-bit imul only accepts r/m, not imm |
| 72 ; CHECK: mov {{.*}}, 56 | 70 ; CHECK: mov {{.*}},0x38 |
| 73 ; CHECK: mul {{[abcd]l|byte ptr}} | 71 ; CHECK: mul {{[abcd]l|BYTE PTR}} |
| 74 | 72 |
| 75 define internal i32 @udiv8Bit(i32 %a, i32 %b) { | 73 define internal i32 @udiv8Bit(i32 %a, i32 %b) { |
| 76 entry: | 74 entry: |
| 77 %a_8 = trunc i32 %a to i8 | 75 %a_8 = trunc i32 %a to i8 |
| 78 %b_8 = trunc i32 %b to i8 | 76 %b_8 = trunc i32 %b to i8 |
| 79 %udiv = udiv i8 %b_8, %a_8 | 77 %udiv = udiv i8 %b_8, %a_8 |
| 80 %ret = zext i8 %udiv to i32 | 78 %ret = zext i8 %udiv to i32 |
| 81 ret i32 %ret | 79 ret i32 %ret |
| 82 } | 80 } |
| 83 ; CHECK-LABEL: udiv8Bit | 81 ; CHECK-LABEL: udiv8Bit |
| 84 ; CHECK: div {{[abcd]l|byte ptr}} | 82 ; CHECK: div {{[abcd]l|BYTE PTR}} |
| 85 | 83 |
| 86 define internal i32 @udiv8BitConst(i32 %a) { | 84 define internal i32 @udiv8BitConst(i32 %a) { |
| 87 entry: | 85 entry: |
| 88 %a_8 = trunc i32 %a to i8 | 86 %a_8 = trunc i32 %a to i8 |
| 89 %udiv = udiv i8 %a_8, 123 | 87 %udiv = udiv i8 %a_8, 123 |
| 90 %ret = zext i8 %udiv to i32 | 88 %ret = zext i8 %udiv to i32 |
| 91 ret i32 %ret | 89 ret i32 %ret |
| 92 } | 90 } |
| 93 ; CHECK-LABEL: udiv8BitConst | 91 ; CHECK-LABEL: udiv8BitConst |
| 94 ; CHECK: div {{[abcd]l|byte ptr}} | 92 ; CHECK: div {{[abcd]l|BYTE PTR}} |
| 95 | 93 |
| 96 define internal i32 @urem8Bit(i32 %a, i32 %b) { | 94 define internal i32 @urem8Bit(i32 %a, i32 %b) { |
| 97 entry: | 95 entry: |
| 98 %a_8 = trunc i32 %a to i8 | 96 %a_8 = trunc i32 %a to i8 |
| 99 %b_8 = trunc i32 %b to i8 | 97 %b_8 = trunc i32 %b to i8 |
| 100 %urem = urem i8 %b_8, %a_8 | 98 %urem = urem i8 %b_8, %a_8 |
| 101 %ret = zext i8 %urem to i32 | 99 %ret = zext i8 %urem to i32 |
| 102 ret i32 %ret | 100 ret i32 %ret |
| 103 } | 101 } |
| 104 ; CHECK-LABEL: urem8Bit | 102 ; CHECK-LABEL: urem8Bit |
| 105 ; CHECK: div {{[abcd]l|byte ptr}} | 103 ; CHECK: div {{[abcd]l|BYTE PTR}} |
| 106 | 104 |
| 107 define internal i32 @urem8BitConst(i32 %a) { | 105 define internal i32 @urem8BitConst(i32 %a) { |
| 108 entry: | 106 entry: |
| 109 %a_8 = trunc i32 %a to i8 | 107 %a_8 = trunc i32 %a to i8 |
| 110 %urem = urem i8 %a_8, 123 | 108 %urem = urem i8 %a_8, 123 |
| 111 %ret = zext i8 %urem to i32 | 109 %ret = zext i8 %urem to i32 |
| 112 ret i32 %ret | 110 ret i32 %ret |
| 113 } | 111 } |
| 114 ; CHECK-LABEL: urem8BitConst | 112 ; CHECK-LABEL: urem8BitConst |
| 115 ; CHECK: div {{[abcd]l|byte ptr}} | 113 ; CHECK: div {{[abcd]l|BYTE PTR}} |
| 116 | 114 |
| 117 | 115 |
| 118 define internal i32 @sdiv8Bit(i32 %a, i32 %b) { | 116 define internal i32 @sdiv8Bit(i32 %a, i32 %b) { |
| 119 entry: | 117 entry: |
| 120 %a_8 = trunc i32 %a to i8 | 118 %a_8 = trunc i32 %a to i8 |
| 121 %b_8 = trunc i32 %b to i8 | 119 %b_8 = trunc i32 %b to i8 |
| 122 %sdiv = sdiv i8 %b_8, %a_8 | 120 %sdiv = sdiv i8 %b_8, %a_8 |
| 123 %ret = zext i8 %sdiv to i32 | 121 %ret = zext i8 %sdiv to i32 |
| 124 ret i32 %ret | 122 ret i32 %ret |
| 125 } | 123 } |
| 126 ; CHECK-LABEL: sdiv8Bit | 124 ; CHECK-LABEL: sdiv8Bit |
| 127 ; CHECK: idiv {{[abcd]l|byte ptr}} | 125 ; CHECK: idiv {{[abcd]l|BYTE PTR}} |
| 128 | 126 |
| 129 define internal i32 @sdiv8BitConst(i32 %a) { | 127 define internal i32 @sdiv8BitConst(i32 %a) { |
| 130 entry: | 128 entry: |
| 131 %a_8 = trunc i32 %a to i8 | 129 %a_8 = trunc i32 %a to i8 |
| 132 %sdiv = sdiv i8 %a_8, 123 | 130 %sdiv = sdiv i8 %a_8, 123 |
| 133 %ret = zext i8 %sdiv to i32 | 131 %ret = zext i8 %sdiv to i32 |
| 134 ret i32 %ret | 132 ret i32 %ret |
| 135 } | 133 } |
| 136 ; CHECK-LABEL: sdiv8BitConst | 134 ; CHECK-LABEL: sdiv8BitConst |
| 137 ; CHECK: idiv {{[abcd]l|byte ptr}} | 135 ; CHECK: idiv {{[abcd]l|BYTE PTR}} |
| 138 | 136 |
| 139 define internal i32 @srem8Bit(i32 %a, i32 %b) { | 137 define internal i32 @srem8Bit(i32 %a, i32 %b) { |
| 140 entry: | 138 entry: |
| 141 %a_8 = trunc i32 %a to i8 | 139 %a_8 = trunc i32 %a to i8 |
| 142 %b_8 = trunc i32 %b to i8 | 140 %b_8 = trunc i32 %b to i8 |
| 143 %srem = srem i8 %b_8, %a_8 | 141 %srem = srem i8 %b_8, %a_8 |
| 144 %ret = zext i8 %srem to i32 | 142 %ret = zext i8 %srem to i32 |
| 145 ret i32 %ret | 143 ret i32 %ret |
| 146 } | 144 } |
| 147 ; CHECK-LABEL: srem8Bit | 145 ; CHECK-LABEL: srem8Bit |
| 148 ; CHECK: idiv {{[abcd]l|byte ptr}} | 146 ; CHECK: idiv {{[abcd]l|BYTE PTR}} |
| 149 | 147 |
| 150 define internal i32 @srem8BitConst(i32 %a) { | 148 define internal i32 @srem8BitConst(i32 %a) { |
| 151 entry: | 149 entry: |
| 152 %a_8 = trunc i32 %a to i8 | 150 %a_8 = trunc i32 %a to i8 |
| 153 %srem = srem i8 %a_8, 123 | 151 %srem = srem i8 %a_8, 123 |
| 154 %ret = zext i8 %srem to i32 | 152 %ret = zext i8 %srem to i32 |
| 155 ret i32 %ret | 153 ret i32 %ret |
| 156 } | 154 } |
| 157 ; CHECK-LABEL: srem8BitConst | 155 ; CHECK-LABEL: srem8BitConst |
| 158 ; CHECK: idiv {{[abcd]l|byte ptr}} | 156 ; CHECK: idiv {{[abcd]l|BYTE PTR}} |
| 159 | 157 |
| 160 define internal i32 @shl8Bit(i32 %a, i32 %b) { | 158 define internal i32 @shl8Bit(i32 %a, i32 %b) { |
| 161 entry: | 159 entry: |
| 162 %a_8 = trunc i32 %a to i8 | 160 %a_8 = trunc i32 %a to i8 |
| 163 %b_8 = trunc i32 %b to i8 | 161 %b_8 = trunc i32 %b to i8 |
| 164 %shl = shl i8 %b_8, %a_8 | 162 %shl = shl i8 %b_8, %a_8 |
| 165 %ret = zext i8 %shl to i32 | 163 %ret = zext i8 %shl to i32 |
| 166 ret i32 %ret | 164 ret i32 %ret |
| 167 } | 165 } |
| 168 ; CHECK-LABEL: shl8Bit | 166 ; CHECK-LABEL: shl8Bit |
| 169 ; CHECK: shl {{[abd]l|byte ptr}}, cl | 167 ; CHECK: shl {{[abd]l|BYTE PTR}},cl |
| 170 | 168 |
| 171 define internal i32 @shl8BitConst(i32 %a, i32 %b) { | 169 define internal i32 @shl8BitConst(i32 %a, i32 %b) { |
| 172 entry: | 170 entry: |
| 173 %a_8 = trunc i32 %a to i8 | 171 %a_8 = trunc i32 %a to i8 |
| 174 %shl = shl i8 %a_8, 6 | 172 %shl = shl i8 %a_8, 6 |
| 175 %ret = zext i8 %shl to i32 | 173 %ret = zext i8 %shl to i32 |
| 176 ret i32 %ret | 174 ret i32 %ret |
| 177 } | 175 } |
| 178 ; CHECK-LABEL: shl8BitConst | 176 ; CHECK-LABEL: shl8BitConst |
| 179 ; CHECK: shl {{[abcd]l|byte ptr}}, 6 | 177 ; CHECK: shl {{[abcd]l|BYTE PTR}},0x6 |
| 180 | 178 |
| 181 define internal i32 @lshr8Bit(i32 %a, i32 %b) { | 179 define internal i32 @lshr8Bit(i32 %a, i32 %b) { |
| 182 entry: | 180 entry: |
| 183 %a_8 = trunc i32 %a to i8 | 181 %a_8 = trunc i32 %a to i8 |
| 184 %b_8 = trunc i32 %b to i8 | 182 %b_8 = trunc i32 %b to i8 |
| 185 %lshr = lshr i8 %b_8, %a_8 | 183 %lshr = lshr i8 %b_8, %a_8 |
| 186 %ret = zext i8 %lshr to i32 | 184 %ret = zext i8 %lshr to i32 |
| 187 ret i32 %ret | 185 ret i32 %ret |
| 188 } | 186 } |
| 189 ; CHECK-LABEL: lshr8Bit | 187 ; CHECK-LABEL: lshr8Bit |
| 190 ; CHECK: shr {{[abd]l|byte ptr}}, cl | 188 ; CHECK: shr {{[abd]l|BYTE PTR}},cl |
| 191 | 189 |
| 192 define internal i32 @lshr8BitConst(i32 %a, i32 %b) { | 190 define internal i32 @lshr8BitConst(i32 %a, i32 %b) { |
| 193 entry: | 191 entry: |
| 194 %a_8 = trunc i32 %a to i8 | 192 %a_8 = trunc i32 %a to i8 |
| 195 %lshr = lshr i8 %a_8, 6 | 193 %lshr = lshr i8 %a_8, 6 |
| 196 %ret = zext i8 %lshr to i32 | 194 %ret = zext i8 %lshr to i32 |
| 197 ret i32 %ret | 195 ret i32 %ret |
| 198 } | 196 } |
| 199 ; CHECK-LABEL: lshr8BitConst | 197 ; CHECK-LABEL: lshr8BitConst |
| 200 ; CHECK: shr {{[abcd]l|byte ptr}}, 6 | 198 ; CHECK: shr {{[abcd]l|BYTE PTR}},0x6 |
| 201 | 199 |
| 202 define internal i32 @ashr8Bit(i32 %a, i32 %b) { | 200 define internal i32 @ashr8Bit(i32 %a, i32 %b) { |
| 203 entry: | 201 entry: |
| 204 %a_8 = trunc i32 %a to i8 | 202 %a_8 = trunc i32 %a to i8 |
| 205 %b_8 = trunc i32 %b to i8 | 203 %b_8 = trunc i32 %b to i8 |
| 206 %ashr = ashr i8 %b_8, %a_8 | 204 %ashr = ashr i8 %b_8, %a_8 |
| 207 %ret = zext i8 %ashr to i32 | 205 %ret = zext i8 %ashr to i32 |
| 208 ret i32 %ret | 206 ret i32 %ret |
| 209 } | 207 } |
| 210 ; CHECK-LABEL: ashr8Bit | 208 ; CHECK-LABEL: ashr8Bit |
| 211 ; CHECK: sar {{[abd]l|byte ptr}}, cl | 209 ; CHECK: sar {{[abd]l|BYTE PTR}},cl |
| 212 | 210 |
| 213 define internal i32 @ashr8BitConst(i32 %a, i32 %b) { | 211 define internal i32 @ashr8BitConst(i32 %a, i32 %b) { |
| 214 entry: | 212 entry: |
| 215 %a_8 = trunc i32 %a to i8 | 213 %a_8 = trunc i32 %a to i8 |
| 216 %ashr = ashr i8 %a_8, 6 | 214 %ashr = ashr i8 %a_8, 6 |
| 217 %ret = zext i8 %ashr to i32 | 215 %ret = zext i8 %ashr to i32 |
| 218 ret i32 %ret | 216 ret i32 %ret |
| 219 } | 217 } |
| 220 ; CHECK-LABEL: ashr8BitConst | 218 ; CHECK-LABEL: ashr8BitConst |
| 221 ; CHECK: sar {{[abcd]l|byte ptr}}, 6 | 219 ; CHECK: sar {{[abcd]l|BYTE PTR}},0x6 |
| 222 | 220 |
| 223 define internal i32 @icmp8Bit(i32 %a, i32 %b) { | 221 define internal i32 @icmp8Bit(i32 %a, i32 %b) { |
| 224 entry: | 222 entry: |
| 225 %a_8 = trunc i32 %a to i8 | 223 %a_8 = trunc i32 %a to i8 |
| 226 %b_8 = trunc i32 %b to i8 | 224 %b_8 = trunc i32 %b to i8 |
| 227 %icmp = icmp ne i8 %b_8, %a_8 | 225 %icmp = icmp ne i8 %b_8, %a_8 |
| 228 %ret = zext i1 %icmp to i32 | 226 %ret = zext i1 %icmp to i32 |
| 229 ret i32 %ret | 227 ret i32 %ret |
| 230 } | 228 } |
| 231 ; CHECK-LABEL: icmp8Bit | 229 ; CHECK-LABEL: icmp8Bit |
| 232 ; CHECK: cmp {{[abcd]l|byte ptr}} | 230 ; CHECK: cmp {{[abcd]l|BYTE PTR}} |
| 233 | 231 |
| 234 define internal i32 @icmp8BitConst(i32 %a) { | 232 define internal i32 @icmp8BitConst(i32 %a) { |
| 235 entry: | 233 entry: |
| 236 %a_8 = trunc i32 %a to i8 | 234 %a_8 = trunc i32 %a to i8 |
| 237 %icmp = icmp ne i8 %a_8, 123 | 235 %icmp = icmp ne i8 %a_8, 123 |
| 238 %ret = zext i1 %icmp to i32 | 236 %ret = zext i1 %icmp to i32 |
| 239 ret i32 %ret | 237 ret i32 %ret |
| 240 } | 238 } |
| 241 ; CHECK-LABEL: icmp8BitConst | 239 ; CHECK-LABEL: icmp8BitConst |
| 242 ; CHECK: cmp {{[abcd]l|byte ptr}} | 240 ; CHECK: cmp {{[abcd]l|BYTE PTR}} |
| 243 | 241 |
| 244 define internal i32 @icmp8BitConstSwapped(i32 %a) { | 242 define internal i32 @icmp8BitConstSwapped(i32 %a) { |
| 245 entry: | 243 entry: |
| 246 %a_8 = trunc i32 %a to i8 | 244 %a_8 = trunc i32 %a to i8 |
| 247 %icmp = icmp ne i8 123, %a_8 | 245 %icmp = icmp ne i8 123, %a_8 |
| 248 %ret = zext i1 %icmp to i32 | 246 %ret = zext i1 %icmp to i32 |
| 249 ret i32 %ret | 247 ret i32 %ret |
| 250 } | 248 } |
| 251 ; CHECK-LABEL: icmp8BitConstSwapped | 249 ; CHECK-LABEL: icmp8BitConstSwapped |
| 252 ; CHECK: cmp {{[abcd]l|byte ptr}} | 250 ; CHECK: cmp {{[abcd]l|BYTE PTR}} |
| 253 | 251 |
| 254 define internal i32 @icmp8BitMem(i32 %a, i32 %b_iptr) { | 252 define internal i32 @icmp8BitMem(i32 %a, i32 %b_iptr) { |
| 255 entry: | 253 entry: |
| 256 %a_8 = trunc i32 %a to i8 | 254 %a_8 = trunc i32 %a to i8 |
| 257 %bptr = inttoptr i32 %b_iptr to i8* | 255 %bptr = inttoptr i32 %b_iptr to i8* |
| 258 %b_8 = load i8* %bptr, align 1 | 256 %b_8 = load i8* %bptr, align 1 |
| 259 %icmp = icmp ne i8 %b_8, %a_8 | 257 %icmp = icmp ne i8 %b_8, %a_8 |
| 260 %ret = zext i1 %icmp to i32 | 258 %ret = zext i1 %icmp to i32 |
| 261 ret i32 %ret | 259 ret i32 %ret |
| 262 } | 260 } |
| 263 ; CHECK-LABEL: icmp8BitMem | 261 ; CHECK-LABEL: icmp8BitMem |
| 264 ; CHECK: cmp {{[abcd]l|byte ptr}} | 262 ; CHECK: cmp {{[abcd]l|BYTE PTR}} |
| 265 | 263 |
| 266 define internal i32 @icmp8BitMemSwapped(i32 %a, i32 %b_iptr) { | 264 define internal i32 @icmp8BitMemSwapped(i32 %a, i32 %b_iptr) { |
| 267 entry: | 265 entry: |
| 268 %a_8 = trunc i32 %a to i8 | 266 %a_8 = trunc i32 %a to i8 |
| 269 %bptr = inttoptr i32 %b_iptr to i8* | 267 %bptr = inttoptr i32 %b_iptr to i8* |
| 270 %b_8 = load i8* %bptr, align 1 | 268 %b_8 = load i8* %bptr, align 1 |
| 271 %icmp = icmp ne i8 %a_8, %b_8 | 269 %icmp = icmp ne i8 %a_8, %b_8 |
| 272 %ret = zext i1 %icmp to i32 | 270 %ret = zext i1 %icmp to i32 |
| 273 ret i32 %ret | 271 ret i32 %ret |
| 274 } | 272 } |
| 275 ; CHECK-LABEL: icmp8BitMemSwapped | 273 ; CHECK-LABEL: icmp8BitMemSwapped |
| 276 ; CHECK: cmp {{[abcd]l|byte ptr}} | 274 ; CHECK: cmp {{[abcd]l|BYTE PTR}} |
| 277 | 275 |
| 278 define internal i32 @selectI8Var(i32 %a, i32 %b) { | 276 define internal i32 @selectI8Var(i32 %a, i32 %b) { |
| 279 entry: | 277 entry: |
| 280 %a_8 = trunc i32 %a to i8 | 278 %a_8 = trunc i32 %a to i8 |
| 281 %b_8 = trunc i32 %b to i8 | 279 %b_8 = trunc i32 %b to i8 |
| 282 %cmp = icmp slt i8 %a_8, %b_8 | 280 %cmp = icmp slt i8 %a_8, %b_8 |
| 283 %ret = select i1 %cmp, i8 %a_8, i8 %b_8 | 281 %ret = select i1 %cmp, i8 %a_8, i8 %b_8 |
| 284 %ret_ext = zext i8 %ret to i32 | 282 %ret_ext = zext i8 %ret to i32 |
| 285 ret i32 %ret_ext | 283 ret i32 %ret_ext |
| 286 } | 284 } |
| (...skipping 30 matching lines...) Expand all Loading... |
| 317 %merge4 = phi i8 [ %trunc3, %entry ], [ %trunc8_8, %next ] | 315 %merge4 = phi i8 [ %trunc3, %entry ], [ %trunc8_8, %next ] |
| 318 %res1 = select i1 %merge1, i8 %merge2, i8 %merge3 | 316 %res1 = select i1 %merge1, i8 %merge2, i8 %merge3 |
| 319 %res2 = select i1 %merge1, i8 %merge4, i8 %merge5 | 317 %res2 = select i1 %merge1, i8 %merge4, i8 %merge5 |
| 320 %res1_2 = select i1 %merge1, i8 %res1, i8 %res2 | 318 %res1_2 = select i1 %merge1, i8 %res1, i8 %res2 |
| 321 %res123 = select i1 %merge1, i8 %merge6, i8 %res1_2 | 319 %res123 = select i1 %merge1, i8 %merge6, i8 %res1_2 |
| 322 %result = zext i8 %res123 to i32 | 320 %result = zext i8 %res123 to i32 |
| 323 ret i32 %result | 321 ret i32 %result |
| 324 } | 322 } |
| 325 ; CHECK-LABEL: testPhi8 | 323 ; CHECK-LABEL: testPhi8 |
| 326 ; This assumes there will be some copy from an 8-bit register / stack slot. | 324 ; This assumes there will be some copy from an 8-bit register / stack slot. |
| 327 ; CHECK-DAG: mov {{.*}}, {{[a-d]}}l | 325 ; CHECK-DAG: mov {{.*}},{{[a-d]}}l |
| 328 ; CHECK-DAG: mov {{.*}}, byte ptr | 326 ; CHECK-DAG: mov {{.*}},BYTE PTR |
| 329 ; CHECK-DAG: mov byte ptr {{.*}} | 327 ; CHECK-DAG: mov BYTE PTR {{.*}} |
| 330 | 328 |
| 331 @global8 = internal global [1 x i8] c"\01", align 4 | 329 @global8 = internal global [1 x i8] c"\01", align 4 |
| 332 | 330 |
| 333 define i32 @load_i8(i32 %addr_arg) { | 331 define i32 @load_i8(i32 %addr_arg) { |
| 334 entry: | 332 entry: |
| 335 %addr = inttoptr i32 %addr_arg to i8* | 333 %addr = inttoptr i32 %addr_arg to i8* |
| 336 %ret = load i8* %addr, align 1 | 334 %ret = load i8* %addr, align 1 |
| 337 %ret_ext = zext i8 %ret to i32 | 335 %ret_ext = zext i8 %ret to i32 |
| 338 ret i32 %ret_ext | 336 ret i32 %ret_ext |
| 339 } | 337 } |
| 340 ; CHECK-LABEL: load_i8 | 338 ; CHECK-LABEL: load_i8 |
| 341 ; CHECK: mov {{[a-d]l}}, byte ptr | 339 ; CHECK: mov {{[a-d]l}},BYTE PTR |
| 342 | 340 |
| 343 define i32 @load_i8_global(i32 %addr_arg) { | 341 define i32 @load_i8_global(i32 %addr_arg) { |
| 344 entry: | 342 entry: |
| 345 %addr = bitcast [1 x i8]* @global8 to i8* | 343 %addr = bitcast [1 x i8]* @global8 to i8* |
| 346 %ret = load i8* %addr, align 1 | 344 %ret = load i8* %addr, align 1 |
| 347 %ret_ext = zext i8 %ret to i32 | 345 %ret_ext = zext i8 %ret to i32 |
| 348 ret i32 %ret_ext | 346 ret i32 %ret_ext |
| 349 } | 347 } |
| 350 ; CHECK-LABEL: load_i8_global | 348 ; CHECK-LABEL: load_i8_global |
| 351 ; CHECK: mov {{[a-d]l}}, byte ptr | 349 ; CHECK: mov {{[a-d]l}},BYTE PTR |
| 352 | 350 |
| 353 define void @store_i8(i32 %addr_arg, i32 %val) { | 351 define void @store_i8(i32 %addr_arg, i32 %val) { |
| 354 entry: | 352 entry: |
| 355 %val_trunc = trunc i32 %val to i8 | 353 %val_trunc = trunc i32 %val to i8 |
| 356 %addr = inttoptr i32 %addr_arg to i8* | 354 %addr = inttoptr i32 %addr_arg to i8* |
| 357 store i8 %val_trunc, i8* %addr, align 1 | 355 store i8 %val_trunc, i8* %addr, align 1 |
| 358 ret void | 356 ret void |
| 359 } | 357 } |
| 360 ; CHECK-LABEL: store_i8 | 358 ; CHECK-LABEL: store_i8 |
| 361 ; CHECK: mov byte ptr {{.*}}, {{[a-d]l}} | 359 ; CHECK: mov BYTE PTR {{.*}},{{[a-d]l}} |
| 362 | 360 |
| 363 define void @store_i8_const(i32 %addr_arg) { | 361 define void @store_i8_const(i32 %addr_arg) { |
| 364 entry: | 362 entry: |
| 365 %addr = inttoptr i32 %addr_arg to i8* | 363 %addr = inttoptr i32 %addr_arg to i8* |
| 366 store i8 123, i8* %addr, align 1 | 364 store i8 123, i8* %addr, align 1 |
| 367 ret void | 365 ret void |
| 368 } | 366 } |
| 369 ; CHECK-LABEL: store_i8_const | 367 ; CHECK-LABEL: store_i8_const |
| 370 ; CHECK: mov byte ptr {{.*}}, 123 | 368 ; CHECK: mov BYTE PTR {{.*}},0x7b |
| OLD | NEW |