Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
86350bb
initial commit
May 20, 2025
58a7f7a
disable cmovei/l => vectorblend
May 21, 2025
e967fea
split from pr 25341
May 22, 2025
e27247b
initial commit
Sep 12, 2025
4a75e87
Merge branch 'openjdk:master' into master
Hamlin-Li Sep 12, 2025
4ee1df1
Merge branch 'openjdk:master' into master
Hamlin-Li Sep 15, 2025
0ff5e42
Merge branch 'openjdk:master' into master
Hamlin-Li Sep 18, 2025
924c4c9
Merge branch 'openjdk:master' into master
Hamlin-Li Sep 22, 2025
75dee02
Merge branch 'openjdk:master' into master
Hamlin-Li Sep 25, 2025
57973f4
Merge branch 'openjdk:master' into master
Hamlin-Li Sep 25, 2025
4b058ce
Merge branch 'openjdk:master' into master
Hamlin-Li Sep 29, 2025
b73a502
Merge branch 'openjdk:master' into master
Hamlin-Li Sep 30, 2025
8eba0c0
Merge branch 'openjdk:master' into master
Hamlin-Li Oct 1, 2025
7f36f23
Merge branch 'openjdk:master' into master
Hamlin-Li Oct 13, 2025
3089ec9
Merge branch 'openjdk:master' into master
Hamlin-Li Oct 14, 2025
2238d76
Merge branch 'openjdk:master' into master
Hamlin-Li Oct 16, 2025
c0358cf
Merge branch 'openjdk:master' into master
Hamlin-Li Oct 20, 2025
f54562f
Merge branch 'openjdk:master' into master
Hamlin-Li Oct 29, 2025
6635678
Merge branch 'openjdk:master' into master
Hamlin-Li Nov 3, 2025
bd5599b
Merge branch 'master' into vectorize-CMove-Bool
Nov 3, 2025
2ba466b
disable riscv
Nov 4, 2025
2a0e1ad
disable Op_CMoveI/Op_CMoveL in VectorNode::opcode
Nov 4, 2025
9e5f137
revert supports_transform_cmove_to_vectorblend for all cpus
Nov 4, 2025
736425c
Merge branch 'openjdk:master' into master
Hamlin-Li Nov 4, 2025
bc0c9b3
fix JDK-8371297: assert in BoolTest
Nov 4, 2025
f34c74b
initial commit
Nov 4, 2025
5b85c74
fix code path change in VectorNode::implemented
Nov 5, 2025
0dd56fb
Merge branch 'vectorize-CMove-Bool' into vectorize-CMove-Bool-riscv-C…
Nov 5, 2025
81996cf
simplify
Nov 5, 2025
6ba8b0c
merge from vectorize-CMove-Bool
Nov 5, 2025
56b6e02
comments
Nov 5, 2025
1d2cc08
Merge branch 'vectorize-CMove-Bool' into vectorize-CMove-Bool-riscv-C…
Nov 5, 2025
caf9b1b
add (scalar) cmove tests
Nov 7, 2025
767d863
add jmh tests
Nov 7, 2025
51bb93d
Merge branch 'master' into vectorize-CMove-Bool-riscv-CMoveF-D
Nov 7, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/hotspot/cpu/aarch64/matcher_aarch64.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -204,4 +204,9 @@
static bool is_feat_fp16_supported() {
return (VM_Version::supports_fphp() && VM_Version::supports_asimdhp());
}

static bool supports_vector_different_use_def_size() {
return false;
}

#endif // CPU_AARCH64_MATCHER_AARCH64_HPP
4 changes: 4 additions & 0 deletions src/hotspot/cpu/arm/matcher_arm.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -193,4 +193,8 @@
return false;
}

static bool supports_vector_different_use_def_size() {
return false;
}

#endif // CPU_ARM_MATCHER_ARM_HPP
4 changes: 4 additions & 0 deletions src/hotspot/cpu/ppc/matcher_ppc.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -203,4 +203,8 @@
return false;
}

static bool supports_vector_different_use_def_size() {
return false;
}

#endif // CPU_PPC_MATCHER_PPC_HPP
81 changes: 81 additions & 0 deletions src/hotspot/cpu/riscv/c2_MacroAssembler_riscv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2067,6 +2067,87 @@ void C2_MacroAssembler::enc_cmove_cmp_fp(int cmpFlag, FloatRegister op1, FloatRe
}
}

void C2_MacroAssembler::enc_cmove_fp_cmp(int cmpFlag,
Register op1, Register op2, Register tmp1, Register tmp2,
FloatRegister dst, FloatRegister src, bool is_single) {
bool is_unsigned = (cmpFlag & unsigned_branch_mask) == unsigned_branch_mask;
int op_select = cmpFlag & (~unsigned_branch_mask);

switch (op_select) {
case BoolTest::eq:
cmov_fp_eq(op1, op2, tmp1, tmp2, dst, src, is_single);
break;
case BoolTest::ne:
cmov_fp_ne(op1, op2, tmp1, tmp2, dst, src, is_single);
break;
case BoolTest::le:
if (is_unsigned) {
cmov_fp_leu(op1, op2, tmp1, tmp2, dst, src, is_single);
} else {
cmov_fp_le(op1, op2, tmp1, tmp2, dst, src, is_single);
}
break;
case BoolTest::ge:
if (is_unsigned) {
cmov_fp_geu(op1, op2, tmp1, tmp2, dst, src, is_single);
} else {
cmov_fp_ge(op1, op2, tmp1, tmp2, dst, src, is_single);
}
break;
case BoolTest::lt:
if (is_unsigned) {
cmov_fp_ltu(op1, op2, tmp1, tmp2, dst, src, is_single);
} else {
cmov_fp_lt(op1, op2, tmp1, tmp2, dst, src, is_single);
}
break;
case BoolTest::gt:
if (is_unsigned) {
cmov_fp_gtu(op1, op2, tmp1, tmp2, dst, src, is_single);
} else {
cmov_fp_gt(op1, op2, tmp1, tmp2, dst, src, is_single);
}
break;
default:
assert(false, "unsupported compare condition");
ShouldNotReachHere();
}
}

void C2_MacroAssembler::enc_cmove_fp_cmp_fp(int cmpFlag,
FloatRegister op1, FloatRegister op2,
Register tmp1, Register tmp2,
FloatRegister dst, FloatRegister src,
bool cmp_single, bool cmov_single) {
int op_select = cmpFlag & (~unsigned_branch_mask);

switch (op_select) {
case BoolTest::eq:
cmov_fp_cmp_fp_eq(op1, op2, tmp1, tmp2, dst, src, cmp_single, cmov_single);
break;
case BoolTest::ne:
cmov_fp_cmp_fp_ne(op1, op2, tmp1, tmp2, dst, src, cmp_single, cmov_single);
break;
case BoolTest::le:
cmov_fp_cmp_fp_le(op1, op2, tmp1, tmp2, dst, src, cmp_single, cmov_single);
break;
case BoolTest::ge:
assert(false, "Should go to BoolTest::le case");
ShouldNotReachHere();
break;
case BoolTest::lt:
cmov_fp_cmp_fp_lt(op1, op2, tmp1, tmp2, dst, src, cmp_single, cmov_single);
break;
case BoolTest::gt:
assert(false, "Should go to BoolTest::lt case");
ShouldNotReachHere();
break;
default:
assert(false, "unsupported compare condition");
ShouldNotReachHere();
}
}

// Set dst to NaN if any NaN input.
void C2_MacroAssembler::minmax_fp(FloatRegister dst, FloatRegister src1, FloatRegister src2,
FLOAT_TYPE ft, bool is_min) {
Expand Down
10 changes: 10 additions & 0 deletions src/hotspot/cpu/riscv/c2_MacroAssembler_riscv.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,16 @@
FloatRegister op1, FloatRegister op2,
Register dst, Register src, bool is_single);

void enc_cmove_fp_cmp(int cmpFlag,
Register op1, Register op2, Register tmp1, Register tmp2,
FloatRegister dst, FloatRegister src, bool is_single);

void enc_cmove_fp_cmp_fp(int cmpFlag,
FloatRegister op1, FloatRegister op2,
Register tmp1, Register tmp2,
FloatRegister dst, FloatRegister src,
bool cmp_single, bool cmov_single);

void spill(Register r, bool is64, int offset) {
is64 ? sd(r, Address(sp, offset))
: sw(r, Address(sp, offset));
Expand Down
Loading