xref: /llvm-project/llvm/test/CodeGen/RISCV/select-to-and-zext.ll (revision 862407510595e37266e3dc0df6a00cad78f420bf)
1e3e9c940SNoah Goldstein; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2e3e9c940SNoah Goldstein; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \
3e3e9c940SNoah Goldstein; RUN:   | FileCheck %s -check-prefix=RV32I
4e3e9c940SNoah Goldstein; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \
5e3e9c940SNoah Goldstein; RUN:   | FileCheck %s -check-prefix=RV64I
6e3e9c940SNoah Goldstein
7e3e9c940SNoah Goldstein
8e3e9c940SNoah Goldsteindefine i32 @from_cmpeq(i32 %xx, i32 %y) {
9e3e9c940SNoah Goldstein; RV32I-LABEL: from_cmpeq:
10e3e9c940SNoah Goldstein; RV32I:       # %bb.0:
11e3e9c940SNoah Goldstein; RV32I-NEXT:    addi a0, a0, -9
12e3e9c940SNoah Goldstein; RV32I-NEXT:    seqz a0, a0
13de7881ebSNoah Goldstein; RV32I-NEXT:    and a0, a0, a1
14e3e9c940SNoah Goldstein; RV32I-NEXT:    ret
15e3e9c940SNoah Goldstein;
16e3e9c940SNoah Goldstein; RV64I-LABEL: from_cmpeq:
17e3e9c940SNoah Goldstein; RV64I:       # %bb.0:
18e3e9c940SNoah Goldstein; RV64I-NEXT:    sext.w a0, a0
19e3e9c940SNoah Goldstein; RV64I-NEXT:    addi a0, a0, -9
20e3e9c940SNoah Goldstein; RV64I-NEXT:    seqz a0, a0
21de7881ebSNoah Goldstein; RV64I-NEXT:    and a0, a0, a1
22e3e9c940SNoah Goldstein; RV64I-NEXT:    ret
23e3e9c940SNoah Goldstein  %x = icmp eq i32 %xx, 9
24e3e9c940SNoah Goldstein  %masked = and i32 %y, 1
25e3e9c940SNoah Goldstein
26e3e9c940SNoah Goldstein  %r = select i1 %x, i32 %masked, i32 0
27e3e9c940SNoah Goldstein  ret i32 %r
28e3e9c940SNoah Goldstein}
29e3e9c940SNoah Goldstein
30e3e9c940SNoah Goldsteindefine i32 @from_cmpeq_fail_bad_andmask(i32 %xx, i32 %y) {
31e3e9c940SNoah Goldstein; RV32I-LABEL: from_cmpeq_fail_bad_andmask:
32e3e9c940SNoah Goldstein; RV32I:       # %bb.0:
33e3e9c940SNoah Goldstein; RV32I-NEXT:    addi a0, a0, -9
34e3e9c940SNoah Goldstein; RV32I-NEXT:    snez a0, a0
35e3e9c940SNoah Goldstein; RV32I-NEXT:    addi a0, a0, -1
36e3e9c940SNoah Goldstein; RV32I-NEXT:    and a0, a1, a0
37e3e9c940SNoah Goldstein; RV32I-NEXT:    andi a0, a0, 3
38e3e9c940SNoah Goldstein; RV32I-NEXT:    ret
39e3e9c940SNoah Goldstein;
40e3e9c940SNoah Goldstein; RV64I-LABEL: from_cmpeq_fail_bad_andmask:
41e3e9c940SNoah Goldstein; RV64I:       # %bb.0:
42e3e9c940SNoah Goldstein; RV64I-NEXT:    sext.w a0, a0
43e3e9c940SNoah Goldstein; RV64I-NEXT:    addi a0, a0, -9
44e3e9c940SNoah Goldstein; RV64I-NEXT:    snez a0, a0
45*86240751SPhilip Reames; RV64I-NEXT:    addi a0, a0, -1
46e3e9c940SNoah Goldstein; RV64I-NEXT:    and a0, a1, a0
47e3e9c940SNoah Goldstein; RV64I-NEXT:    andi a0, a0, 3
48e3e9c940SNoah Goldstein; RV64I-NEXT:    ret
49e3e9c940SNoah Goldstein  %x = icmp eq i32 %xx, 9
50e3e9c940SNoah Goldstein  %masked = and i32 %y, 3
51e3e9c940SNoah Goldstein  %r = select i1 %x, i32 %masked, i32 0
52e3e9c940SNoah Goldstein  ret i32 %r
53e3e9c940SNoah Goldstein}
54e3e9c940SNoah Goldstein
55e3e9c940SNoah Goldsteindefine i32 @from_i1(i1 %x, i32 %y) {
56e3e9c940SNoah Goldstein; RV32I-LABEL: from_i1:
57e3e9c940SNoah Goldstein; RV32I:       # %bb.0:
58de7881ebSNoah Goldstein; RV32I-NEXT:    and a0, a0, a1
59e3e9c940SNoah Goldstein; RV32I-NEXT:    andi a0, a0, 1
60e3e9c940SNoah Goldstein; RV32I-NEXT:    ret
61e3e9c940SNoah Goldstein;
62e3e9c940SNoah Goldstein; RV64I-LABEL: from_i1:
63e3e9c940SNoah Goldstein; RV64I:       # %bb.0:
64de7881ebSNoah Goldstein; RV64I-NEXT:    and a0, a0, a1
65e3e9c940SNoah Goldstein; RV64I-NEXT:    andi a0, a0, 1
66e3e9c940SNoah Goldstein; RV64I-NEXT:    ret
67e3e9c940SNoah Goldstein  %masked = and i32 %y, 1
68e3e9c940SNoah Goldstein  %r = select i1 %x, i32 %masked, i32 0
69e3e9c940SNoah Goldstein  ret i32 %r
70e3e9c940SNoah Goldstein}
71e3e9c940SNoah Goldstein
72e3e9c940SNoah Goldsteindefine i32 @from_trunc_i8(i8 %xx, i32 %y) {
73e3e9c940SNoah Goldstein; RV32I-LABEL: from_trunc_i8:
74e3e9c940SNoah Goldstein; RV32I:       # %bb.0:
75de7881ebSNoah Goldstein; RV32I-NEXT:    and a0, a0, a1
76e3e9c940SNoah Goldstein; RV32I-NEXT:    andi a0, a0, 1
77e3e9c940SNoah Goldstein; RV32I-NEXT:    ret
78e3e9c940SNoah Goldstein;
79e3e9c940SNoah Goldstein; RV64I-LABEL: from_trunc_i8:
80e3e9c940SNoah Goldstein; RV64I:       # %bb.0:
81de7881ebSNoah Goldstein; RV64I-NEXT:    and a0, a0, a1
82e3e9c940SNoah Goldstein; RV64I-NEXT:    andi a0, a0, 1
83e3e9c940SNoah Goldstein; RV64I-NEXT:    ret
84e3e9c940SNoah Goldstein  %masked = and i32 %y, 1
85e3e9c940SNoah Goldstein  %x = trunc i8 %xx to i1
86e3e9c940SNoah Goldstein  %r = select i1 %x, i32 %masked, i32 0
87e3e9c940SNoah Goldstein  ret i32 %r
88e3e9c940SNoah Goldstein}
89e3e9c940SNoah Goldstein
90e3e9c940SNoah Goldsteindefine i32 @from_trunc_i64(i64 %xx, i32 %y) {
91e3e9c940SNoah Goldstein; RV32I-LABEL: from_trunc_i64:
92e3e9c940SNoah Goldstein; RV32I:       # %bb.0:
93de7881ebSNoah Goldstein; RV32I-NEXT:    and a0, a0, a2
94e3e9c940SNoah Goldstein; RV32I-NEXT:    andi a0, a0, 1
95e3e9c940SNoah Goldstein; RV32I-NEXT:    ret
96e3e9c940SNoah Goldstein;
97e3e9c940SNoah Goldstein; RV64I-LABEL: from_trunc_i64:
98e3e9c940SNoah Goldstein; RV64I:       # %bb.0:
99de7881ebSNoah Goldstein; RV64I-NEXT:    and a0, a0, a1
100e3e9c940SNoah Goldstein; RV64I-NEXT:    andi a0, a0, 1
101e3e9c940SNoah Goldstein; RV64I-NEXT:    ret
102e3e9c940SNoah Goldstein  %masked = and i32 %y, 1
103e3e9c940SNoah Goldstein  %x = trunc i64 %xx to i1
104e3e9c940SNoah Goldstein  %r = select i1 %x, i32 %masked, i32 0
105e3e9c940SNoah Goldstein  ret i32 %r
106e3e9c940SNoah Goldstein}
107e3e9c940SNoah Goldstein
108e3e9c940SNoah Goldsteindefine i32 @from_i1_fail_bad_select0(i1 %x, i32 %y) {
109e3e9c940SNoah Goldstein; RV32I-LABEL: from_i1_fail_bad_select0:
110e3e9c940SNoah Goldstein; RV32I:       # %bb.0:
111e3e9c940SNoah Goldstein; RV32I-NEXT:    andi a0, a0, 1
112e3e9c940SNoah Goldstein; RV32I-NEXT:    bnez a0, .LBB5_2
113e3e9c940SNoah Goldstein; RV32I-NEXT:  # %bb.1:
114e3e9c940SNoah Goldstein; RV32I-NEXT:    li a0, 1
115e3e9c940SNoah Goldstein; RV32I-NEXT:    ret
116e3e9c940SNoah Goldstein; RV32I-NEXT:  .LBB5_2:
117e3e9c940SNoah Goldstein; RV32I-NEXT:    andi a0, a1, 1
118e3e9c940SNoah Goldstein; RV32I-NEXT:    ret
119e3e9c940SNoah Goldstein;
120e3e9c940SNoah Goldstein; RV64I-LABEL: from_i1_fail_bad_select0:
121e3e9c940SNoah Goldstein; RV64I:       # %bb.0:
122e3e9c940SNoah Goldstein; RV64I-NEXT:    andi a0, a0, 1
123e3e9c940SNoah Goldstein; RV64I-NEXT:    bnez a0, .LBB5_2
124e3e9c940SNoah Goldstein; RV64I-NEXT:  # %bb.1:
125e3e9c940SNoah Goldstein; RV64I-NEXT:    li a0, 1
126e3e9c940SNoah Goldstein; RV64I-NEXT:    ret
127e3e9c940SNoah Goldstein; RV64I-NEXT:  .LBB5_2:
128e3e9c940SNoah Goldstein; RV64I-NEXT:    andi a0, a1, 1
129e3e9c940SNoah Goldstein; RV64I-NEXT:    ret
130e3e9c940SNoah Goldstein  %masked = and i32 %y, 1
131e3e9c940SNoah Goldstein  %r = select i1 %x, i32 %masked, i32 1
132e3e9c940SNoah Goldstein  ret i32 %r
133e3e9c940SNoah Goldstein}
134e3e9c940SNoah Goldstein
135e3e9c940SNoah Goldsteindefine i32 @from_i1_fail_bad_select1(i1 %x, i32 %y) {
136e3e9c940SNoah Goldstein; RV32I-LABEL: from_i1_fail_bad_select1:
137e3e9c940SNoah Goldstein; RV32I:       # %bb.0:
138e3e9c940SNoah Goldstein; RV32I-NEXT:    addi a0, a0, -1
139e3e9c940SNoah Goldstein; RV32I-NEXT:    and a0, a1, a0
140e3e9c940SNoah Goldstein; RV32I-NEXT:    andi a0, a0, 1
141e3e9c940SNoah Goldstein; RV32I-NEXT:    ret
142e3e9c940SNoah Goldstein;
143e3e9c940SNoah Goldstein; RV64I-LABEL: from_i1_fail_bad_select1:
144e3e9c940SNoah Goldstein; RV64I:       # %bb.0:
145*86240751SPhilip Reames; RV64I-NEXT:    addi a0, a0, -1
146e3e9c940SNoah Goldstein; RV64I-NEXT:    and a0, a1, a0
147e3e9c940SNoah Goldstein; RV64I-NEXT:    andi a0, a0, 1
148e3e9c940SNoah Goldstein; RV64I-NEXT:    ret
149e3e9c940SNoah Goldstein  %masked = and i32 %y, 1
150e3e9c940SNoah Goldstein  %r = select i1 %x, i32 0, i32 %masked
151e3e9c940SNoah Goldstein  ret i32 %r
152e3e9c940SNoah Goldstein}
153