Skip to content

Commit e90ab31

Browse files
committed
[RISCV] Add coverage for select between simm12 constant and zero [nfc]
The zicond codegen for this involves an extra register for basically no purpose; to be addressed in an upcoming change.
1 parent ec581e4 commit e90ab31

File tree

1 file changed

+185
-0
lines changed

1 file changed

+185
-0
lines changed

llvm/test/CodeGen/RISCV/select-const.ll

Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1077,3 +1077,188 @@ define i32 @sext_or_constant2(i32 signext %x) {
10771077
%cond = select i1 %cmp, i32 573857, i32 %ext
10781078
ret i32 %cond
10791079
}
1080+
1081+
1082+
define i32 @select_0_6(i32 signext %x) {
1083+
; RV32I-LABEL: select_0_6:
1084+
; RV32I: # %bb.0:
1085+
; RV32I-NEXT: srai a0, a0, 2
1086+
; RV32I-NEXT: srli a0, a0, 30
1087+
; RV32I-NEXT: slli a0, a0, 1
1088+
; RV32I-NEXT: ret
1089+
;
1090+
; RV32IF-LABEL: select_0_6:
1091+
; RV32IF: # %bb.0:
1092+
; RV32IF-NEXT: srai a0, a0, 2
1093+
; RV32IF-NEXT: srli a0, a0, 30
1094+
; RV32IF-NEXT: slli a0, a0, 1
1095+
; RV32IF-NEXT: ret
1096+
;
1097+
; RV32ZICOND-LABEL: select_0_6:
1098+
; RV32ZICOND: # %bb.0:
1099+
; RV32ZICOND-NEXT: srli a0, a0, 31
1100+
; RV32ZICOND-NEXT: li a1, 6
1101+
; RV32ZICOND-NEXT: czero.eqz a0, a1, a0
1102+
; RV32ZICOND-NEXT: ret
1103+
;
1104+
; RV64I-LABEL: select_0_6:
1105+
; RV64I: # %bb.0:
1106+
; RV64I-NEXT: srai a0, a0, 2
1107+
; RV64I-NEXT: srli a0, a0, 62
1108+
; RV64I-NEXT: slli a0, a0, 1
1109+
; RV64I-NEXT: ret
1110+
;
1111+
; RV64IFD-LABEL: select_0_6:
1112+
; RV64IFD: # %bb.0:
1113+
; RV64IFD-NEXT: srai a0, a0, 2
1114+
; RV64IFD-NEXT: srli a0, a0, 62
1115+
; RV64IFD-NEXT: slli a0, a0, 1
1116+
; RV64IFD-NEXT: ret
1117+
;
1118+
; RV64ZICOND-LABEL: select_0_6:
1119+
; RV64ZICOND: # %bb.0:
1120+
; RV64ZICOND-NEXT: srli a0, a0, 63
1121+
; RV64ZICOND-NEXT: li a1, 6
1122+
; RV64ZICOND-NEXT: czero.eqz a0, a1, a0
1123+
; RV64ZICOND-NEXT: ret
1124+
%cmp = icmp sgt i32 %x, -1
1125+
%cond = select i1 %cmp, i32 0, i32 6
1126+
ret i32 %cond
1127+
}
1128+
1129+
define i32 @select_6_0(i32 signext %x) {
1130+
; RV32I-LABEL: select_6_0:
1131+
; RV32I: # %bb.0:
1132+
; RV32I-NEXT: srli a0, a0, 31
1133+
; RV32I-NEXT: addi a0, a0, -1
1134+
; RV32I-NEXT: andi a0, a0, 6
1135+
; RV32I-NEXT: ret
1136+
;
1137+
; RV32IF-LABEL: select_6_0:
1138+
; RV32IF: # %bb.0:
1139+
; RV32IF-NEXT: srli a0, a0, 31
1140+
; RV32IF-NEXT: addi a0, a0, -1
1141+
; RV32IF-NEXT: andi a0, a0, 6
1142+
; RV32IF-NEXT: ret
1143+
;
1144+
; RV32ZICOND-LABEL: select_6_0:
1145+
; RV32ZICOND: # %bb.0:
1146+
; RV32ZICOND-NEXT: srli a0, a0, 31
1147+
; RV32ZICOND-NEXT: li a1, 6
1148+
; RV32ZICOND-NEXT: czero.nez a0, a1, a0
1149+
; RV32ZICOND-NEXT: ret
1150+
;
1151+
; RV64I-LABEL: select_6_0:
1152+
; RV64I: # %bb.0:
1153+
; RV64I-NEXT: srli a0, a0, 63
1154+
; RV64I-NEXT: addi a0, a0, -1
1155+
; RV64I-NEXT: andi a0, a0, 6
1156+
; RV64I-NEXT: ret
1157+
;
1158+
; RV64IFD-LABEL: select_6_0:
1159+
; RV64IFD: # %bb.0:
1160+
; RV64IFD-NEXT: srli a0, a0, 63
1161+
; RV64IFD-NEXT: addi a0, a0, -1
1162+
; RV64IFD-NEXT: andi a0, a0, 6
1163+
; RV64IFD-NEXT: ret
1164+
;
1165+
; RV64ZICOND-LABEL: select_6_0:
1166+
; RV64ZICOND: # %bb.0:
1167+
; RV64ZICOND-NEXT: srli a0, a0, 63
1168+
; RV64ZICOND-NEXT: li a1, 6
1169+
; RV64ZICOND-NEXT: czero.nez a0, a1, a0
1170+
; RV64ZICOND-NEXT: ret
1171+
%cmp = icmp sgt i32 %x, -1
1172+
%cond = select i1 %cmp, i32 6, i32 0
1173+
ret i32 %cond
1174+
}
1175+
1176+
define i32 @select_0_394(i32 signext %x) {
1177+
; RV32I-LABEL: select_0_394:
1178+
; RV32I: # %bb.0:
1179+
; RV32I-NEXT: srai a0, a0, 31
1180+
; RV32I-NEXT: andi a0, a0, 394
1181+
; RV32I-NEXT: ret
1182+
;
1183+
; RV32IF-LABEL: select_0_394:
1184+
; RV32IF: # %bb.0:
1185+
; RV32IF-NEXT: srai a0, a0, 31
1186+
; RV32IF-NEXT: andi a0, a0, 394
1187+
; RV32IF-NEXT: ret
1188+
;
1189+
; RV32ZICOND-LABEL: select_0_394:
1190+
; RV32ZICOND: # %bb.0:
1191+
; RV32ZICOND-NEXT: srli a0, a0, 31
1192+
; RV32ZICOND-NEXT: li a1, 394
1193+
; RV32ZICOND-NEXT: czero.eqz a0, a1, a0
1194+
; RV32ZICOND-NEXT: ret
1195+
;
1196+
; RV64I-LABEL: select_0_394:
1197+
; RV64I: # %bb.0:
1198+
; RV64I-NEXT: srai a0, a0, 63
1199+
; RV64I-NEXT: andi a0, a0, 394
1200+
; RV64I-NEXT: ret
1201+
;
1202+
; RV64IFD-LABEL: select_0_394:
1203+
; RV64IFD: # %bb.0:
1204+
; RV64IFD-NEXT: srai a0, a0, 63
1205+
; RV64IFD-NEXT: andi a0, a0, 394
1206+
; RV64IFD-NEXT: ret
1207+
;
1208+
; RV64ZICOND-LABEL: select_0_394:
1209+
; RV64ZICOND: # %bb.0:
1210+
; RV64ZICOND-NEXT: srli a0, a0, 63
1211+
; RV64ZICOND-NEXT: li a1, 394
1212+
; RV64ZICOND-NEXT: czero.eqz a0, a1, a0
1213+
; RV64ZICOND-NEXT: ret
1214+
%cmp = icmp sgt i32 %x, -1
1215+
%cond = select i1 %cmp, i32 0, i32 394
1216+
ret i32 %cond
1217+
}
1218+
1219+
define i32 @select_394_0(i32 signext %x) {
1220+
; RV32I-LABEL: select_394_0:
1221+
; RV32I: # %bb.0:
1222+
; RV32I-NEXT: srli a0, a0, 31
1223+
; RV32I-NEXT: addi a0, a0, -1
1224+
; RV32I-NEXT: andi a0, a0, 394
1225+
; RV32I-NEXT: ret
1226+
;
1227+
; RV32IF-LABEL: select_394_0:
1228+
; RV32IF: # %bb.0:
1229+
; RV32IF-NEXT: srli a0, a0, 31
1230+
; RV32IF-NEXT: addi a0, a0, -1
1231+
; RV32IF-NEXT: andi a0, a0, 394
1232+
; RV32IF-NEXT: ret
1233+
;
1234+
; RV32ZICOND-LABEL: select_394_0:
1235+
; RV32ZICOND: # %bb.0:
1236+
; RV32ZICOND-NEXT: srli a0, a0, 31
1237+
; RV32ZICOND-NEXT: li a1, 394
1238+
; RV32ZICOND-NEXT: czero.nez a0, a1, a0
1239+
; RV32ZICOND-NEXT: ret
1240+
;
1241+
; RV64I-LABEL: select_394_0:
1242+
; RV64I: # %bb.0:
1243+
; RV64I-NEXT: srli a0, a0, 63
1244+
; RV64I-NEXT: addi a0, a0, -1
1245+
; RV64I-NEXT: andi a0, a0, 394
1246+
; RV64I-NEXT: ret
1247+
;
1248+
; RV64IFD-LABEL: select_394_0:
1249+
; RV64IFD: # %bb.0:
1250+
; RV64IFD-NEXT: srli a0, a0, 63
1251+
; RV64IFD-NEXT: addi a0, a0, -1
1252+
; RV64IFD-NEXT: andi a0, a0, 394
1253+
; RV64IFD-NEXT: ret
1254+
;
1255+
; RV64ZICOND-LABEL: select_394_0:
1256+
; RV64ZICOND: # %bb.0:
1257+
; RV64ZICOND-NEXT: srli a0, a0, 63
1258+
; RV64ZICOND-NEXT: li a1, 394
1259+
; RV64ZICOND-NEXT: czero.nez a0, a1, a0
1260+
; RV64ZICOND-NEXT: ret
1261+
%cmp = icmp sgt i32 %x, -1
1262+
%cond = select i1 %cmp, i32 394, i32 0
1263+
ret i32 %cond
1264+
}

0 commit comments

Comments
 (0)