blob: e616e98a85c94e5239703359ba478264172494d5 [file] [log] [blame]
Jim Stichnothdd30c812014-09-04 16:39:02 -07001; Test sext and zext instructions with i1 source operands.
2
3; RUN: %llvm2ice -O2 --verbose none %s \
4; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj \
5; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s
6; RUN: %llvm2ice -Om1 --verbose none %s \
7; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj \
8; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s
9; RUN: %llvm2ice --verbose none %s | FileCheck --check-prefix=ERRORS %s
10; RUN: %llvm2iceinsts %s | %szdiff %s | FileCheck --check-prefix=DUMP %s
11; RUN: %llvm2iceinsts --pnacl %s | %szdiff %s \
12; RUN: | FileCheck --check-prefix=DUMP %s
13
14define internal i8 @sext1To8(i32 %a) {
15entry:
16 %a.arg_trunc = trunc i32 %a to i1
17 %conv = sext i1 %a.arg_trunc to i8
18 ret i8 %conv
19}
20; CHECK-LABEL: sext1To8
21; CHECK: mov
22; CHECK: shl {{.*}}, 7
23; CHECK: sar {{.*}}, 7
24
25define internal i16 @sext1To16(i32 %a) {
26entry:
27 %a.arg_trunc = trunc i32 %a to i1
28 %conv = sext i1 %a.arg_trunc to i16
29 ret i16 %conv
30}
31; CHECK-LABEL: sext1To16
32; CHECK: mov
33; CHECK: shl {{.*}}, 15
34; CHECK: sar {{.*}}, 15
35
36define internal i32 @sext1To32(i32 %a) {
37entry:
38 %a.arg_trunc = trunc i32 %a to i1
39 %conv = sext i1 %a.arg_trunc to i32
40 ret i32 %conv
41}
42; CHECK-LABEL: sext1To32
43; CHECK: mov
44; CHECK: shl {{.*}}, 31
45; CHECK: sar {{.*}}, 31
46
47define internal i64 @sext1To64(i32 %a) {
48entry:
49 %a.arg_trunc = trunc i32 %a to i1
50 %conv = sext i1 %a.arg_trunc to i64
51 ret i64 %conv
52}
53; CHECK-LABEL: sext1To64
54; CHECK: mov
55; CHECK: shl {{.*}}, 31
56; CHECK: sar {{.*}}, 31
57; CHECK: sar {{.*}}, 31
58
59define internal i8 @zext1To8(i32 %a) {
60entry:
61 %a.arg_trunc = trunc i32 %a to i1
62 %conv = zext i1 %a.arg_trunc to i8
63 ret i8 %conv
64}
65; CHECK-LABEL: zext1To8
66; CHECK: and {{.*}}, 1
67
68define internal i16 @zext1To16(i32 %a) {
69entry:
70 %a.arg_trunc = trunc i32 %a to i1
71 %conv = zext i1 %a.arg_trunc to i16
72 ret i16 %conv
73}
74; CHECK-LABEL: zext1To16
75; CHECK: and {{.*}}, 1
76
77define internal i32 @zext1To32(i32 %a) {
78entry:
79 %a.arg_trunc = trunc i32 %a to i1
80 %conv = zext i1 %a.arg_trunc to i32
81 ret i32 %conv
82}
83; CHECK-LABEL: zext1To32
84; CHECK: and {{.*}}, 1
85
86define internal i64 @zext1To64(i32 %a) {
87entry:
88 %a.arg_trunc = trunc i32 %a to i1
89 %conv = zext i1 %a.arg_trunc to i64
90 ret i64 %conv
91}
92; CHECK-LABEL: zext1To64
93; CHECK: and {{.*}}, 1
94
95; ERRORS-NOT: ICE translation error
96; DUMP-NOT: SZ