@@ -1077,3 +1077,188 @@ define i32 @sext_or_constant2(i32 signext %x) {
1077
1077
%cond = select i1 %cmp , i32 573857 , i32 %ext
1078
1078
ret i32 %cond
1079
1079
}
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