Title: [192543] trunk/Source/_javascript_Core
Revision
192543
Author
commit-qu...@webkit.org
Date
2015-11-17 14:48:19 -0800 (Tue, 17 Nov 2015)

Log Message

[JSC] Remove FTLOutput operations that act directly on floats
https://bugs.webkit.org/show_bug.cgi?id=151342

Patch by Benjamin Poulain <bpoul...@apple.com> on 2015-11-17
Reviewed by Geoffrey Garen.

* ftl/FTLLowerDFGToLLVM.cpp:
(JSC::FTL::DFG::LowerDFGToLLVM::compileArithFRound):
(JSC::FTL::DFG::LowerDFGToLLVM::compileGetByVal):
(JSC::FTL::DFG::LowerDFGToLLVM::compilePutByVal):
* ftl/FTLOutput.cpp:
(JSC::FTL::Output::store):
* ftl/FTLOutput.h:
(JSC::FTL::Output::loadFloatToDouble):
(JSC::FTL::Output::fround):
(JSC::FTL::Output::loadFloat): Deleted.

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (192542 => 192543)


--- trunk/Source/_javascript_Core/ChangeLog	2015-11-17 22:46:53 UTC (rev 192542)
+++ trunk/Source/_javascript_Core/ChangeLog	2015-11-17 22:48:19 UTC (rev 192543)
@@ -1,3 +1,21 @@
+2015-11-17  Benjamin Poulain  <bpoul...@apple.com>
+
+        [JSC] Remove FTLOutput operations that act directly on floats
+        https://bugs.webkit.org/show_bug.cgi?id=151342
+
+        Reviewed by Geoffrey Garen.
+
+        * ftl/FTLLowerDFGToLLVM.cpp:
+        (JSC::FTL::DFG::LowerDFGToLLVM::compileArithFRound):
+        (JSC::FTL::DFG::LowerDFGToLLVM::compileGetByVal):
+        (JSC::FTL::DFG::LowerDFGToLLVM::compilePutByVal):
+        * ftl/FTLOutput.cpp:
+        (JSC::FTL::Output::store):
+        * ftl/FTLOutput.h:
+        (JSC::FTL::Output::loadFloatToDouble):
+        (JSC::FTL::Output::fround):
+        (JSC::FTL::Output::loadFloat): Deleted.
+
 2015-11-17  Filip Pizlo  <fpi...@apple.com>
 
         Add a FTL_USES_B3 compile-time setting and set it to 0.

Modified: trunk/Source/_javascript_Core/ftl/FTLLowerDFGToLLVM.cpp (192542 => 192543)


--- trunk/Source/_javascript_Core/ftl/FTLLowerDFGToLLVM.cpp	2015-11-17 22:46:53 UTC (rev 192542)
+++ trunk/Source/_javascript_Core/ftl/FTLLowerDFGToLLVM.cpp	2015-11-17 22:48:19 UTC (rev 192543)
@@ -2035,8 +2035,7 @@
     
     void compileArithFRound()
     {
-        LValue floatValue = m_out.fpCast(lowDouble(m_node->child1()), m_out.floatType);
-        setDouble(m_out.fpCast(floatValue, m_out.doubleType));
+        setDouble(m_out.fround(lowDouble(m_node->child1())));
     }
     
     void compileArithNegate()
@@ -2789,7 +2788,7 @@
                 LValue result;
                 switch (type) {
                 case TypeFloat32:
-                    result = m_out.fpCast(m_out.loadFloat(pointer), m_out.doubleType);
+                    result = m_out.loadFloatToDouble(pointer);
                     break;
                 case TypeFloat64:
                     result = m_out.loadDouble(pointer);
@@ -3062,7 +3061,7 @@
                     LValue value = lowDouble(child3);
                     switch (type) {
                     case TypeFloat32:
-                        valueToStore = m_out.fpCast(value, m_out.floatType);
+                        valueToStore = value;
                         refType = m_out.refFloat;
                         break;
                     case TypeFloat64:

Modified: trunk/Source/_javascript_Core/ftl/FTLOutput.cpp (192542 => 192543)


--- trunk/Source/_javascript_Core/ftl/FTLOutput.cpp	2015-11-17 22:46:53 UTC (rev 192542)
+++ trunk/Source/_javascript_Core/ftl/FTLOutput.cpp	2015-11-17 22:48:19 UTC (rev 192543)
@@ -91,6 +91,8 @@
 
 void Output::store(LValue value, TypedPointer pointer, LType refType)
 {
+    if (refType == refFloat)
+        value = buildFPCast(m_builder, value, floatType);
     LValue result = set(value, intToPtr(pointer.value(), refType));
     pointer.heap().decorateInstruction(result, *m_heaps);
 }

Modified: trunk/Source/_javascript_Core/ftl/FTLOutput.h (192542 => 192543)


--- trunk/Source/_javascript_Core/ftl/FTLOutput.h	2015-11-17 22:46:53 UTC (rev 192542)
+++ trunk/Source/_javascript_Core/ftl/FTLOutput.h	2015-11-17 22:48:19 UTC (rev 192543)
@@ -224,6 +224,8 @@
     LValue intToPtr(LValue value, LType type) { return buildIntToPtr(m_builder, value, type); }
     LValue ptrToInt(LValue value, LType type) { return buildPtrToInt(m_builder, value, type); }
     LValue bitCast(LValue value, LType type) { return buildBitCast(m_builder, value, type); }
+
+    LValue fround(LValue doubleValue);
     
     // Hilariously, the #define machinery in the stdlib means that this method is actually called
     // __builtin_alloca. So far this appears benign. :-|
@@ -249,7 +251,7 @@
     LValue load32(TypedPointer pointer) { return load(pointer, ref32); }
     LValue load64(TypedPointer pointer) { return load(pointer, ref64); }
     LValue loadPtr(TypedPointer pointer) { return load(pointer, refPtr); }
-    LValue loadFloat(TypedPointer pointer) { return load(pointer, refFloat); }
+    LValue loadFloatToDouble(TypedPointer pointer) { return buildFPCast(m_builder, load(pointer, refFloat), doubleType); }
     LValue loadDouble(TypedPointer pointer) { return load(pointer, refDouble); }
     void store16(LValue value, TypedPointer pointer) { store(value, pointer, ref16); }
     void store32(LValue value, TypedPointer pointer) { store(value, pointer, ref32); }
@@ -463,6 +465,12 @@
     return zeroExt(value16, int32);
 }
 
+inline LValue Output::fround(LValue doubleValue)
+{
+    LValue floatValue = buildFPCast(m_builder, doubleValue, floatType);
+    return buildFPCast(m_builder, floatValue, doubleType);
+}
+
 #define FTL_NEW_BLOCK(output, nameArguments) \
     (LIKELY(!verboseCompilationEnabled()) \
     ? (output).newBlock() \
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to