-
Bug
-
Resolution: Fixed
-
P3
-
8, 11, 17, 18, 19
-
b30
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8279247 | 19 | Aleksey Shipilev | P3 | Resolved | Fixed | b04 |
JDK-8279758 | 18.0.1 | Aleksey Shipilev | P3 | Resolved | Fixed | b02 |
JDK-8279551 | 17.0.3-oracle | Tobias Hartmann | P3 | Resolved | Fixed | b01 |
JDK-8280892 | 17.0.3 | Aleksey Shipilev | P3 | Resolved | Fixed | b01 |
JDK-8279441 | 11.0.15-oracle | Tobias Hartmann | P3 | Resolved | Fixed | b01 |
JDK-8281719 | 11.0.15 | Aleksey Shipilev | P3 | Resolved | Fixed | b02 |
$ CONF=linux-x86-server-fastdebug make run-test TEST=jdk/incubator/vector/Float128VectorTests.java TEST_VM_OPTS="-XX:UseSSE=0 -XX:UseAVX=0"
test Float128VectorTests.SINHFloat128VectorTests(float[cornerCaseValue(i)]): success
o39 SqrtF === _ o12 [[o40 2 ]]
--N: o39 SqrtF === _ o12 [[o40 2 ]]
--N: o12 Parm === o3 [[o39 ]] Parm2: float
REGFPR 0 REGFPR
REGFPR1 0 REGFPR1
REGF 100 MoveVL2F
LEGREGF 200 MoveF2LEG
VLREGF 0 VLREGF
# To suppress the following error report, specify this argument
# after -XX: or in .hotspotrc: SuppressErrorAt=/matcher.cpp:1716
The current match rules are:
// sqrtss instruction needs destination register to be pre initialized for best performance
// Therefore only the instruct rule where the input is pre-loaded into dst register is defined below
instruct sqrtF_reg(regF dst) %{
predicate(UseSSE>=1);
match(Set dst (SqrtF dst));
format %{ "sqrtss $dst, $dst" %}
ins_encode %{
__ sqrtss($dst$$XMMRegister, $dst$$XMMRegister);
%}
ins_pipe(pipe_slow);
%}
The node is generated here:
//------------------------------Ideal------------------------------------------
// If we see pattern ConvF2D SomeDoubleOp ConvD2F, do operation as float.
Node *ConvD2FNode::Ideal(PhaseGVN *phase, bool can_reshape) {
if ( in(1)->Opcode() == Op_SqrtD ) {
Node* sqrtd = in(1);
if ( sqrtd->in(1)->Opcode() == Op_ConvF2D ) {
if ( Matcher::match_rule_supported(Op_SqrtF) ) {
Node* convf2d = sqrtd->in(1);
return new SqrtFNode(phase->C, sqrtd->in(0), convf2d->in(1));
}
}
}
return NULL;
}
I actually thought Matcher::match_rule_supported looks at predicate(...) in the match rule above, but apparently it just hard-codes the exceptions! Op_SqrtF (and Op_SqrtD) should be handled there.
This only affects x86_32, as x86_64 always runs with UseSSE >= 2.
- backported by
-
JDK-8279247 C2: Bad AD file when matching SqrtF with UseSSE=0
- Resolved
-
JDK-8279441 C2: Bad AD file when matching SqrtF with UseSSE=0
- Resolved
-
JDK-8279551 C2: Bad AD file when matching SqrtF with UseSSE=0
- Resolved
-
JDK-8279758 C2: Bad AD file when matching SqrtF with UseSSE=0
- Resolved
-
JDK-8280892 C2: Bad AD file when matching SqrtF with UseSSE=0
- Resolved
-
JDK-8281719 C2: Bad AD file when matching SqrtF with UseSSE=0
- Resolved
- relates to
-
JDK-8280526 x86_32 Math.sqrt performance regression with -XX:UseSSE={0,1}
- Resolved
- links to
-
Commit openjdk/jdk11u-dev/bd420d2a
-
Commit openjdk/jdk17u-dev/d34650ad
-
Commit openjdk/jdk18/9d5ae2e3
-
Review openjdk/jdk11u-dev/819
-
Review openjdk/jdk17u-dev/51
-
Review openjdk/jdk18/60