Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Blocker
-
Resolution: Fixed
-
Affects Version/s: None
-
Fix Version/s: 2.9.3
-
Component/s: Compiler: Optimizing, Instruction Architecture: Intel
-
Labels:None
-
Number of attachments :
Description
SPEC JVM 98's _200_check is failing when run with -X:aos:initial_compiler=opt -X:irc:O2 -X:aos:enable_recompilation=false . The output looks like:
checkRemainders: long Failed: -10.5 % -7.0 = -3.5 (should be: -3.5
******************************************
remainders failed
******************************************
It also fails with O0. The failing HIR is:
-13 LABEL0 Frequency: 1.0
-2 EG ir_prologue l0sa(Lspec/benchmarks/_200_check/PepTest;,x,d), l2psd(D,d), l3psd(D,d), l4psd(D,d) =
0 G yieldpoint_prologue
4 double_rem t6sd(D) = l2psd(D,d), l3psd(D,d)
6 double_ifcmp t8sv(GUARD) = l4psd(D,d), t6sd(D), ==F, LABEL2, Probability: 0.5
-1 bbend BB0 (ENTRY)
9 LABEL1 Frequency: 0.5
which is odd as it doesn't give scope for clobbering the x87 values in between the fprem and the compare. Other odd things are that it will pass and the fail in phases. Also it only fails when the test values are -10.5 % -7.0 == -3.5, it passes in the cases where one of the arguments is positive. The IR itself looks sane. It's possible this could be a OPT_SaveVolatile quirk.