@@ -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