@@ -146,20 +146,18 @@ define i64 @select_imm_reg(i64 %t, i1 %cond) {
146
146
; RV32ZICOND-LABEL: select_imm_reg:
147
147
; RV32ZICOND: # %bb.0:
148
148
; 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
153
150
; RV32ZICOND-NEXT: czero.nez a1, a1, a2
151
+ ; RV32ZICOND-NEXT: czero.nez a0, a0, a2
152
+ ; RV32ZICOND-NEXT: addi a0, a0, 3
154
153
; RV32ZICOND-NEXT: ret
155
154
;
156
155
; RV64ZICOND-LABEL: select_imm_reg:
157
156
; RV64ZICOND: # %bb.0:
158
157
; RV64ZICOND-NEXT: andi a1, a1, 1
159
- ; RV64ZICOND-NEXT: li a2, 3
158
+ ; RV64ZICOND-NEXT: addi a0, a0, - 3
160
159
; 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
163
161
; RV64ZICOND-NEXT: ret
164
162
%4 = select i1 %cond , i64 3 , i64 %t
165
163
ret i64 %4
@@ -170,20 +168,18 @@ define i64 @select_reg_imm(i64 %t, i1 %cond) {
170
168
; RV32ZICOND-LABEL: select_reg_imm:
171
169
; RV32ZICOND: # %bb.0:
172
170
; 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
177
172
; RV32ZICOND-NEXT: czero.eqz a1, a1, a2
173
+ ; RV32ZICOND-NEXT: czero.eqz a0, a0, a2
174
+ ; RV32ZICOND-NEXT: addi a0, a0, 3
178
175
; RV32ZICOND-NEXT: ret
179
176
;
180
177
; RV64ZICOND-LABEL: select_reg_imm:
181
178
; RV64ZICOND: # %bb.0:
182
179
; 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
185
181
; RV64ZICOND-NEXT: czero.eqz a0, a0, a1
186
- ; RV64ZICOND-NEXT: or a0, a0, a2
182
+ ; RV64ZICOND-NEXT: addi a0, a0, 3
187
183
; RV64ZICOND-NEXT: ret
188
184
%4 = select i1 %cond , i64 %t , i64 3
189
185
ret i64 %4
@@ -194,21 +190,19 @@ define i64 @select_imm_reg_neg_2048(i64 %t, i1 %cond) {
194
190
; RV32ZICOND-LABEL: select_imm_reg_neg_2048:
195
191
; RV32ZICOND: # %bb.0:
196
192
; 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
198
195
; 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
203
198
; RV32ZICOND-NEXT: ret
204
199
;
205
200
; RV64ZICOND-LABEL: select_imm_reg_neg_2048:
206
201
; RV64ZICOND: # %bb.0:
207
202
; RV64ZICOND-NEXT: andi a1, a1, 1
208
- ; RV64ZICOND-NEXT: li a2 , -2048
203
+ ; RV64ZICOND-NEXT: xori a0, a0 , -2048
209
204
; 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
212
206
; RV64ZICOND-NEXT: ret
213
207
%4 = select i1 %cond , i64 -2048 , i64 %t
214
208
ret i64 %4
0 commit comments