@@ -146,20 +146,18 @@ define i64 @select_imm_reg(i64 %t, i1 %cond) {
146146; RV32ZICOND-LABEL: select_imm_reg:
147147; RV32ZICOND: # %bb.0:
148148; RV32ZICOND-NEXT: andi a2, a2, 1
149- ; RV32ZICOND-NEXT: li a3, 3
150- ; RV32ZICOND-NEXT: czero.nez a0, a0, a2
151- ; RV32ZICOND-NEXT: czero.eqz a3, a3, a2
152- ; RV32ZICOND-NEXT: or a0, a3, a0
149+ ; RV32ZICOND-NEXT: addi a0, a0, -3
153150; RV32ZICOND-NEXT: czero.nez a1, a1, a2
151+ ; RV32ZICOND-NEXT: czero.nez a0, a0, a2
152+ ; RV32ZICOND-NEXT: addi a0, a0, 3
154153; RV32ZICOND-NEXT: ret
155154;
156155; RV64ZICOND-LABEL: select_imm_reg:
157156; RV64ZICOND: # %bb.0:
158157; RV64ZICOND-NEXT: andi a1, a1, 1
159- ; RV64ZICOND-NEXT: li a2, 3
158+ ; RV64ZICOND-NEXT: addi a0, a0, - 3
160159; RV64ZICOND-NEXT: czero.nez a0, a0, a1
161- ; RV64ZICOND-NEXT: czero.eqz a1, a2, a1
162- ; RV64ZICOND-NEXT: or a0, a1, a0
160+ ; RV64ZICOND-NEXT: addi a0, a0, 3
163161; RV64ZICOND-NEXT: ret
164162 %4 = select i1 %cond , i64 3 , i64 %t
165163 ret i64 %4
@@ -170,20 +168,18 @@ define i64 @select_reg_imm(i64 %t, i1 %cond) {
170168; RV32ZICOND-LABEL: select_reg_imm:
171169; RV32ZICOND: # %bb.0:
172170; RV32ZICOND-NEXT: andi a2, a2, 1
173- ; RV32ZICOND-NEXT: li a3, 3
174- ; RV32ZICOND-NEXT: czero.nez a3, a3, a2
175- ; RV32ZICOND-NEXT: czero.eqz a0, a0, a2
176- ; RV32ZICOND-NEXT: or a0, a0, a3
171+ ; RV32ZICOND-NEXT: addi a0, a0, -3
177172; RV32ZICOND-NEXT: czero.eqz a1, a1, a2
173+ ; RV32ZICOND-NEXT: czero.eqz a0, a0, a2
174+ ; RV32ZICOND-NEXT: addi a0, a0, 3
178175; RV32ZICOND-NEXT: ret
179176;
180177; RV64ZICOND-LABEL: select_reg_imm:
181178; RV64ZICOND: # %bb.0:
182179; RV64ZICOND-NEXT: andi a1, a1, 1
183- ; RV64ZICOND-NEXT: li a2, 3
184- ; RV64ZICOND-NEXT: czero.nez a2, a2, a1
180+ ; RV64ZICOND-NEXT: addi a0, a0, -3
185181; RV64ZICOND-NEXT: czero.eqz a0, a0, a1
186- ; RV64ZICOND-NEXT: or a0, a0, a2
182+ ; RV64ZICOND-NEXT: addi a0, a0, 3
187183; RV64ZICOND-NEXT: ret
188184 %4 = select i1 %cond , i64 %t , i64 3
189185 ret i64 %4
@@ -194,21 +190,19 @@ define i64 @select_imm_reg_neg_2048(i64 %t, i1 %cond) {
194190; RV32ZICOND-LABEL: select_imm_reg_neg_2048:
195191; RV32ZICOND: # %bb.0:
196192; RV32ZICOND-NEXT: andi a2, a2, 1
197- ; RV32ZICOND-NEXT: li a3, -2048
193+ ; RV32ZICOND-NEXT: xori a0, a0, -2048
194+ ; RV32ZICOND-NEXT: neg a3, a2
198195; RV32ZICOND-NEXT: czero.nez a0, a0, a2
199- ; RV32ZICOND-NEXT: czero.eqz a3, a3, a2
200- ; RV32ZICOND-NEXT: neg a2, a2
201- ; RV32ZICOND-NEXT: or a0, a3, a0
202- ; RV32ZICOND-NEXT: or a1, a2, a1
196+ ; RV32ZICOND-NEXT: or a1, a3, a1
197+ ; RV32ZICOND-NEXT: xori a0, a0, -2048
203198; RV32ZICOND-NEXT: ret
204199;
205200; RV64ZICOND-LABEL: select_imm_reg_neg_2048:
206201; RV64ZICOND: # %bb.0:
207202; RV64ZICOND-NEXT: andi a1, a1, 1
208- ; RV64ZICOND-NEXT: li a2 , -2048
203+ ; RV64ZICOND-NEXT: xori a0, a0 , -2048
209204; RV64ZICOND-NEXT: czero.nez a0, a0, a1
210- ; RV64ZICOND-NEXT: czero.eqz a1, a2, a1
211- ; RV64ZICOND-NEXT: or a0, a1, a0
205+ ; RV64ZICOND-NEXT: xori a0, a0, -2048
212206; RV64ZICOND-NEXT: ret
213207 %4 = select i1 %cond , i64 -2048 , i64 %t
214208 ret i64 %4
0 commit comments