Fix run-test 458-long-to-fpu.
- Make $noinline$DoubleConvert actually exercise
long-to-double conversions (instead of long-to-float
conversions).
- Change the inlining-defeating strategy: introduce an
always-throwing branch in $noinline$FloatConvert and
$noinline$DoubleConvert instead of using recursion, as the
inliner now inlines recursive calls (down to a certain
depth).
Change-Id: Ib83a89039968e597cf74d26b5779d410f3caf743
diff --git a/test/458-long-to-fpu/info.txt b/test/458-long-to-fpu/info.txt
index 7459cfb..cf51df5c 100644
--- a/test/458-long-to-fpu/info.txt
+++ b/test/458-long-to-fpu/info.txt
@@ -1,2 +1,2 @@
Regression test for x86's code generator, which had a bug in
-the long-to-float and long-to-double implementations.
+the long-to-float and long-to-double implementations.
diff --git a/test/458-long-to-fpu/src/Main.java b/test/458-long-to-fpu/src/Main.java
index a8b6e78..d1615dc 100644
--- a/test/458-long-to-fpu/src/Main.java
+++ b/test/458-long-to-fpu/src/Main.java
@@ -16,27 +16,30 @@
public class Main {
public static void main(String[] args) {
- System.out.println(floatConvert(false));
- System.out.println(doubleConvert(false));
+ System.out.println($noinline$FloatConvert(false));
+ System.out.println($noinline$DoubleConvert(false));
}
- public static long floatConvert(boolean flag) {
- if (flag) {
- // Try defeating inlining.
- floatConvert(false);
+ // A dummy value to defeat inlining of these routines.
+ static boolean doThrow = false;
+
+ public static long $noinline$FloatConvert(boolean flag) {
+ // Try defeating inlining.
+ if (doThrow) {
+ throw new Error();
}
long l = myLong;
myFloat = (float)l;
return l;
}
- public static long doubleConvert(boolean flag) {
- if (flag) {
- // Try defeating inlining.
- floatConvert(false);
+ public static long $noinline$DoubleConvert(boolean flag) {
+ // Try defeating inlining.
+ if (doThrow) {
+ throw new Error();
}
long l = myLong;
- myFloat = (float)l;
+ myDouble = (double)l;
return l;
}