Skip to content

Commit 375ac6d

Browse files
Anjian-WenRealFYang
authored andcommitted
8355796: RISC-V: compiler/vectorapi/AllBitsSetVectorMatchRuleTest.java fails after JDK-8355657
Reviewed-by: fyang, gcao
1 parent 1a9a928 commit 375ac6d

File tree

1 file changed

+124
-32
lines changed

1 file changed

+124
-32
lines changed

src/hotspot/cpu/riscv/riscv_v.ad

+124-32
Original file line numberDiff line numberDiff line change
@@ -1123,16 +1123,38 @@ instruct vxorL_vx_masked(vReg dst_src, iRegL src, vRegMask_V0 v0) %{
11231123

11241124
// vector and not
11251125

1126-
instruct vand_not(vReg dst, vReg src1, vReg src2, immI_M1 m1) %{
1127-
predicate(UseZvbb &&
1128-
(Matcher::vector_element_basic_type(n) == T_BYTE ||
1129-
Matcher::vector_element_basic_type(n) == T_SHORT ||
1130-
Matcher::vector_element_basic_type(n) == T_INT));
1126+
instruct vand_notB(vReg dst, vReg src1, vReg src2, immI_M1 m1) %{
1127+
predicate(UseZvbb && Matcher::vector_element_basic_type(n) == T_BYTE);
11311128
match(Set dst (AndV src1 (XorV src2 (Replicate m1))));
1132-
format %{ "vand_not $dst, $src1, $src2" %}
1129+
format %{ "vand_notB $dst, $src1, $src2" %}
11331130
ins_encode %{
1134-
BasicType bt = Matcher::vector_element_basic_type(this);
1135-
__ vsetvli_helper(bt, Matcher::vector_length(this));
1131+
__ vsetvli_helper(T_BYTE, Matcher::vector_length(this));
1132+
__ vandn_vv(as_VectorRegister($dst$$reg),
1133+
as_VectorRegister($src1$$reg),
1134+
as_VectorRegister($src2$$reg));
1135+
%}
1136+
ins_pipe(pipe_slow);
1137+
%}
1138+
1139+
instruct vand_notS(vReg dst, vReg src1, vReg src2, immI_M1 m1) %{
1140+
predicate(UseZvbb && Matcher::vector_element_basic_type(n) == T_SHORT);
1141+
match(Set dst (AndV src1 (XorV src2 (Replicate m1))));
1142+
format %{ "vand_notS $dst, $src1, $src2" %}
1143+
ins_encode %{
1144+
__ vsetvli_helper(T_SHORT, Matcher::vector_length(this));
1145+
__ vandn_vv(as_VectorRegister($dst$$reg),
1146+
as_VectorRegister($src1$$reg),
1147+
as_VectorRegister($src2$$reg));
1148+
%}
1149+
ins_pipe(pipe_slow);
1150+
%}
1151+
1152+
instruct vand_notI(vReg dst, vReg src1, vReg src2, immI_M1 m1) %{
1153+
predicate(UseZvbb && Matcher::vector_element_basic_type(n) == T_INT);
1154+
match(Set dst (AndV src1 (XorV src2 (Replicate m1))));
1155+
format %{ "vand_notI $dst, $src1, $src2" %}
1156+
ins_encode %{
1157+
__ vsetvli_helper(T_INT, Matcher::vector_length(this));
11361158
__ vandn_vv(as_VectorRegister($dst$$reg),
11371159
as_VectorRegister($src1$$reg),
11381160
as_VectorRegister($src2$$reg));
@@ -1153,16 +1175,40 @@ instruct vand_notL(vReg dst, vReg src1, vReg src2, immL_M1 m1) %{
11531175
ins_pipe(pipe_slow);
11541176
%}
11551177

1156-
instruct vand_not_masked(vReg dst_src1, vReg src2, immI_M1 m1, vRegMask_V0 v0) %{
1157-
predicate(UseZvbb &&
1158-
(Matcher::vector_element_basic_type(n) == T_BYTE ||
1159-
Matcher::vector_element_basic_type(n) == T_SHORT ||
1160-
Matcher::vector_element_basic_type(n) == T_INT));
1178+
instruct vand_notB_masked(vReg dst_src1, vReg src2, immI_M1 m1, vRegMask_V0 v0) %{
1179+
predicate(UseZvbb && Matcher::vector_element_basic_type(n) == T_BYTE);
11611180
match(Set dst_src1 (AndV (Binary dst_src1 (XorV src2 (Replicate m1))) v0));
1162-
format %{ "vand_not_masked $dst_src1, $dst_src1, $src2, $v0" %}
1181+
format %{ "vand_notB_masked $dst_src1, $dst_src1, $src2, $v0" %}
11631182
ins_encode %{
1164-
BasicType bt = Matcher::vector_element_basic_type(this);
1165-
__ vsetvli_helper(bt, Matcher::vector_length(this));
1183+
__ vsetvli_helper(T_BYTE, Matcher::vector_length(this));
1184+
__ vandn_vv(as_VectorRegister($dst_src1$$reg),
1185+
as_VectorRegister($dst_src1$$reg),
1186+
as_VectorRegister($src2$$reg),
1187+
Assembler::v0_t);
1188+
%}
1189+
ins_pipe(pipe_slow);
1190+
%}
1191+
1192+
instruct vand_notS_masked(vReg dst_src1, vReg src2, immI_M1 m1, vRegMask_V0 v0) %{
1193+
predicate(UseZvbb && Matcher::vector_element_basic_type(n) == T_SHORT);
1194+
match(Set dst_src1 (AndV (Binary dst_src1 (XorV src2 (Replicate m1))) v0));
1195+
format %{ "vand_notS_masked $dst_src1, $dst_src1, $src2, $v0" %}
1196+
ins_encode %{
1197+
__ vsetvli_helper(T_SHORT, Matcher::vector_length(this));
1198+
__ vandn_vv(as_VectorRegister($dst_src1$$reg),
1199+
as_VectorRegister($dst_src1$$reg),
1200+
as_VectorRegister($src2$$reg),
1201+
Assembler::v0_t);
1202+
%}
1203+
ins_pipe(pipe_slow);
1204+
%}
1205+
1206+
instruct vand_notI_masked(vReg dst_src1, vReg src2, immI_M1 m1, vRegMask_V0 v0) %{
1207+
predicate(UseZvbb && Matcher::vector_element_basic_type(n) == T_INT);
1208+
match(Set dst_src1 (AndV (Binary dst_src1 (XorV src2 (Replicate m1))) v0));
1209+
format %{ "vand_notI_masked $dst_src1, $dst_src1, $src2, $v0" %}
1210+
ins_encode %{
1211+
__ vsetvli_helper(T_INT, Matcher::vector_length(this));
11661212
__ vandn_vv(as_VectorRegister($dst_src1$$reg),
11671213
as_VectorRegister($dst_src1$$reg),
11681214
as_VectorRegister($src2$$reg),
@@ -1185,16 +1231,38 @@ instruct vand_notL_masked(vReg dst_src1, vReg src2, immL_M1 m1, vRegMask_V0 v0)
11851231
ins_pipe(pipe_slow);
11861232
%}
11871233

1188-
instruct vand_not_vx(vReg dst, vReg src1, iRegIorL2I src2, immI_M1 m1) %{
1189-
predicate(UseZvbb &&
1190-
(Matcher::vector_element_basic_type(n) == T_BYTE ||
1191-
Matcher::vector_element_basic_type(n) == T_SHORT ||
1192-
Matcher::vector_element_basic_type(n) == T_INT));
1234+
instruct vand_notB_vx(vReg dst, vReg src1, iRegIorL2I src2, immI_M1 m1) %{
1235+
predicate(UseZvbb && Matcher::vector_element_basic_type(n) == T_BYTE);
11931236
match(Set dst (AndV src1 (Replicate (XorI src2 m1))));
1194-
format %{ "vand_not_vx $dst, $src1, $src2" %}
1237+
format %{ "vand_notB_vx $dst, $src1, $src2" %}
11951238
ins_encode %{
1196-
BasicType bt = Matcher::vector_element_basic_type(this);
1197-
__ vsetvli_helper(bt, Matcher::vector_length(this));
1239+
__ vsetvli_helper(T_BYTE, Matcher::vector_length(this));
1240+
__ vandn_vx(as_VectorRegister($dst$$reg),
1241+
as_VectorRegister($src1$$reg),
1242+
as_Register($src2$$reg));
1243+
%}
1244+
ins_pipe(pipe_slow);
1245+
%}
1246+
1247+
instruct vand_notS_vx(vReg dst, vReg src1, iRegIorL2I src2, immI_M1 m1) %{
1248+
predicate(UseZvbb && Matcher::vector_element_basic_type(n) == T_SHORT);
1249+
match(Set dst (AndV src1 (Replicate (XorI src2 m1))));
1250+
format %{ "vand_notS_vx $dst, $src1, $src2" %}
1251+
ins_encode %{
1252+
__ vsetvli_helper(T_SHORT, Matcher::vector_length(this));
1253+
__ vandn_vx(as_VectorRegister($dst$$reg),
1254+
as_VectorRegister($src1$$reg),
1255+
as_Register($src2$$reg));
1256+
%}
1257+
ins_pipe(pipe_slow);
1258+
%}
1259+
1260+
instruct vand_notI_vx(vReg dst, vReg src1, iRegIorL2I src2, immI_M1 m1) %{
1261+
predicate(UseZvbb && Matcher::vector_element_basic_type(n) == T_INT);
1262+
match(Set dst (AndV src1 (Replicate (XorI src2 m1))));
1263+
format %{ "vand_notI_vx $dst, $src1, $src2" %}
1264+
ins_encode %{
1265+
__ vsetvli_helper(T_INT, Matcher::vector_length(this));
11981266
__ vandn_vx(as_VectorRegister($dst$$reg),
11991267
as_VectorRegister($src1$$reg),
12001268
as_Register($src2$$reg));
@@ -1215,16 +1283,40 @@ instruct vand_notL_vx(vReg dst, vReg src1, iRegL src2, immL_M1 m1) %{
12151283
ins_pipe(pipe_slow);
12161284
%}
12171285

1218-
instruct vand_not_vx_masked(vReg dst_src1, iRegIorL2I src2, immI_M1 m1, vRegMask_V0 v0) %{
1219-
predicate(UseZvbb &&
1220-
(Matcher::vector_element_basic_type(n) == T_BYTE ||
1221-
Matcher::vector_element_basic_type(n) == T_SHORT ||
1222-
Matcher::vector_element_basic_type(n) == T_INT));
1286+
instruct vand_notB_vx_masked(vReg dst_src1, iRegIorL2I src2, immI_M1 m1, vRegMask_V0 v0) %{
1287+
predicate(UseZvbb && Matcher::vector_element_basic_type(n) == T_BYTE);
12231288
match(Set dst_src1 (AndV (Binary dst_src1 (Replicate (XorI src2 m1))) v0));
1224-
format %{ "vand_not_vx_masked $dst_src1, $dst_src1, $src2, $v0" %}
1289+
format %{ "vand_notB_vx_masked $dst_src1, $dst_src1, $src2, $v0" %}
12251290
ins_encode %{
1226-
BasicType bt = Matcher::vector_element_basic_type(this);
1227-
__ vsetvli_helper(bt, Matcher::vector_length(this));
1291+
__ vsetvli_helper(T_BYTE, Matcher::vector_length(this));
1292+
__ vandn_vx(as_VectorRegister($dst_src1$$reg),
1293+
as_VectorRegister($dst_src1$$reg),
1294+
as_Register($src2$$reg),
1295+
Assembler::v0_t);
1296+
%}
1297+
ins_pipe(pipe_slow);
1298+
%}
1299+
1300+
instruct vand_notS_vx_masked(vReg dst_src1, iRegIorL2I src2, immI_M1 m1, vRegMask_V0 v0) %{
1301+
predicate(UseZvbb && Matcher::vector_element_basic_type(n) == T_SHORT);
1302+
match(Set dst_src1 (AndV (Binary dst_src1 (Replicate (XorI src2 m1))) v0));
1303+
format %{ "vand_notS_vx_masked $dst_src1, $dst_src1, $src2, $v0" %}
1304+
ins_encode %{
1305+
__ vsetvli_helper(T_SHORT, Matcher::vector_length(this));
1306+
__ vandn_vx(as_VectorRegister($dst_src1$$reg),
1307+
as_VectorRegister($dst_src1$$reg),
1308+
as_Register($src2$$reg),
1309+
Assembler::v0_t);
1310+
%}
1311+
ins_pipe(pipe_slow);
1312+
%}
1313+
1314+
instruct vand_notI_vx_masked(vReg dst_src1, iRegIorL2I src2, immI_M1 m1, vRegMask_V0 v0) %{
1315+
predicate(UseZvbb && Matcher::vector_element_basic_type(n) == T_INT);
1316+
match(Set dst_src1 (AndV (Binary dst_src1 (Replicate (XorI src2 m1))) v0));
1317+
format %{ "vand_notI_vx_masked $dst_src1, $dst_src1, $src2, $v0" %}
1318+
ins_encode %{
1319+
__ vsetvli_helper(T_INT, Matcher::vector_length(this));
12281320
__ vandn_vx(as_VectorRegister($dst_src1$$reg),
12291321
as_VectorRegister($dst_src1$$reg),
12301322
as_Register($src2$$reg),

0 commit comments

Comments
 (0)