| Index: tests_lit/llvm2ice_tests/8bit.pnacl.ll
|
| diff --git a/tests_lit/llvm2ice_tests/8bit.pnacl.ll b/tests_lit/llvm2ice_tests/8bit.pnacl.ll
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..2307712468072466976e73f51d0a760f03e3f6d7
|
| --- /dev/null
|
| +++ b/tests_lit/llvm2ice_tests/8bit.pnacl.ll
|
| @@ -0,0 +1,164 @@
|
| +; This tries to be a comprehensive test of i8 operations.
|
| +
|
| +; RUN: %p2i -i %s --args -O2 --verbose none \
|
| +; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj \
|
| +; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s
|
| +; RUN: %p2i -i %s --args -Om1 --verbose none \
|
| +; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj \
|
| +; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s
|
| +; RUN: %p2i -i %s --args --verbose none | FileCheck --check-prefix=ERRORS %s
|
| +; RUN: %p2i -i %s --insts | %szdiff %s | FileCheck --check-prefix=DUMP %s
|
| +
|
| +define internal i32 @add8Bit(i32 %a, i32 %b) {
|
| +entry:
|
| + %a_8 = trunc i32 %a to i8
|
| + %b_8 = trunc i32 %b to i8
|
| + %add = add i8 %b_8, %a_8
|
| + %ret = zext i8 %add to i32
|
| + ret i32 %ret
|
| +}
|
| +; CHECK-LABEL: add8Bit
|
| +; CHECK: add {{[abcd]l}}
|
| +
|
| +define internal i32 @add8BitConst(i32 %a, i32 %b) {
|
| +entry:
|
| + %a_8 = trunc i32 %a to i8
|
| + %add = add i8 %a_8, 123
|
| + %ret = zext i8 %add to i32
|
| + ret i32 %ret
|
| +}
|
| +; CHECK-LABEL: add8BitConst
|
| +; CHECK: add {{[abcd]l}}
|
| +
|
| +define internal i32 @sub8Bit(i32 %a, i32 %b) {
|
| +entry:
|
| + %a_8 = trunc i32 %a to i8
|
| + %b_8 = trunc i32 %b to i8
|
| + %sub = sub i8 %b_8, %a_8
|
| + %ret = zext i8 %sub to i32
|
| + ret i32 %ret
|
| +}
|
| +; CHECK-LABEL: sub8Bit
|
| +; XCHECK: sub {{[abcd]l}}
|
| +
|
| +define internal i32 @sub8BitConst(i32 %a, i32 %b) {
|
| +entry:
|
| + %a_8 = trunc i32 %a to i8
|
| + %sub = sub i8 %a_8, 123
|
| + %ret = zext i8 %sub to i32
|
| + ret i32 %ret
|
| +}
|
| +; CHECK-LABEL: sub8BitConst
|
| +; XCHECK: sub {{[abcd]l}}
|
| +
|
| +define internal i32 @mul8Bit(i32 %a, i32 %b) {
|
| +entry:
|
| + %a_8 = trunc i32 %a to i8
|
| + %b_8 = trunc i32 %b to i8
|
| + %mul = mul i8 %b_8, %a_8
|
| + %ret = zext i8 %mul to i32
|
| + ret i32 %ret
|
| +}
|
| +; CHECK-LABEL: mul8Bit
|
| +; CHECK: mul {{[abcd]l|byte ptr}}
|
| +
|
| +define internal i32 @mul8BitConst(i32 %a, i32 %b) {
|
| +entry:
|
| + %a_8 = trunc i32 %a to i8
|
| + %mul = mul i8 %a_8, 56
|
| + %ret = zext i8 %mul to i32
|
| + ret i32 %ret
|
| +}
|
| +; CHECK-LABEL: mul8BitConst
|
| +; 8-bit imul only accepts r/m, not imm
|
| +; CHECK: mov {{.*}}, 56
|
| +; CHECK: mul {{[abcd]l|byte ptr}}
|
| +
|
| +define internal i32 @udiv8Bit(i32 %a, i32 %b) {
|
| +entry:
|
| + %a_8 = trunc i32 %a to i8
|
| + %b_8 = trunc i32 %b to i8
|
| + %udiv = udiv i8 %b_8, %a_8
|
| + %ret = zext i8 %udiv to i32
|
| + ret i32 %ret
|
| +}
|
| +; CHECK-LABEL: udiv8Bit
|
| +; CHECK: div {{[abcd]l|byte ptr}}
|
| +
|
| +define internal i32 @udiv8BitConst(i32 %a, i32 %b) {
|
| +entry:
|
| + %a_8 = trunc i32 %a to i8
|
| + %udiv = udiv i8 %a_8, 123
|
| + %ret = zext i8 %udiv to i32
|
| + ret i32 %ret
|
| +}
|
| +; CHECK-LABEL: udiv8BitConst
|
| +; CHECK: div {{[abcd]l|byte ptr}}
|
| +
|
| +define internal i32 @urem8Bit(i32 %a, i32 %b) {
|
| +entry:
|
| + %a_8 = trunc i32 %a to i8
|
| + %b_8 = trunc i32 %b to i8
|
| + %urem = urem i8 %b_8, %a_8
|
| + %ret = zext i8 %urem to i32
|
| + ret i32 %ret
|
| +}
|
| +; CHECK-LABEL: urem8Bit
|
| +; CHECK: div {{[abcd]l|byte ptr}}
|
| +
|
| +define internal i32 @urem8BitConst(i32 %a, i32 %b) {
|
| +entry:
|
| + %a_8 = trunc i32 %a to i8
|
| + %urem = urem i8 %a_8, 123
|
| + %ret = zext i8 %urem to i32
|
| + ret i32 %ret
|
| +}
|
| +; CHECK-LABEL: urem8BitConst
|
| +; CHECK: div {{[abcd]l|byte ptr}}
|
| +
|
| +
|
| +define internal i32 @sdiv8Bit(i32 %a, i32 %b) {
|
| +entry:
|
| + %a_8 = trunc i32 %a to i8
|
| + %b_8 = trunc i32 %b to i8
|
| + %sdiv = sdiv i8 %b_8, %a_8
|
| + %ret = zext i8 %sdiv to i32
|
| + ret i32 %ret
|
| +}
|
| +; CHECK-LABEL: sdiv8Bit
|
| +; CHECK: idiv {{[abcd]l|byte ptr}}
|
| +
|
| +define internal i32 @sdiv8BitConst(i32 %a, i32 %b) {
|
| +entry:
|
| + %a_8 = trunc i32 %a to i8
|
| + %sdiv = sdiv i8 %a_8, 123
|
| + %ret = zext i8 %sdiv to i32
|
| + ret i32 %ret
|
| +}
|
| +; CHECK-LABEL: sdiv8BitConst
|
| +; CHECK: idiv {{[abcd]l|byte ptr}}
|
| +
|
| +define internal i32 @srem8Bit(i32 %a, i32 %b) {
|
| +entry:
|
| + %a_8 = trunc i32 %a to i8
|
| + %b_8 = trunc i32 %b to i8
|
| + %srem = srem i8 %b_8, %a_8
|
| + %ret = zext i8 %srem to i32
|
| + ret i32 %ret
|
| +}
|
| +; CHECK-LABEL: srem8Bit
|
| +; CHECK: idiv {{[abcd]l|byte ptr}}
|
| +
|
| +define internal i32 @srem8BitConst(i32 %a, i32 %b) {
|
| +entry:
|
| + %a_8 = trunc i32 %a to i8
|
| + %srem = srem i8 %a_8, 123
|
| + %ret = zext i8 %srem to i32
|
| + ret i32 %ret
|
| +}
|
| +; CHECK-LABEL: srem8BitConst
|
| +; CHECK: idiv {{[abcd]l|byte ptr}}
|
| +
|
| +
|
| +; ERRORS-NOT: ICE translation error
|
| +; DUMP-NOT: SZ
|
|
|