B3::reduceStrength's DCE should be more agro and less wrong
[WebKit-https.git] / Source / JavaScriptCore / b3 / B3Common.h
index 0e9a168..4628490 100644 (file)
@@ -38,6 +38,44 @@ bool shouldDumpIRAtEachPhase();
 bool shouldValidateIR();
 bool shouldValidateIRAtEachPhase();
 bool shouldSaveIRBeforePhase();
+bool shouldMeasurePhaseTiming();
+
+template<typename ResultType, typename InputType, typename BitsType>
+inline bool isRepresentableAsImpl(InputType originalValue)
+{
+    // Get the raw bits of the original value.
+    BitsType originalBits = bitwise_cast<BitsType>(originalValue);
+
+    // Convert the original value to the desired result type.
+    ResultType result = static_cast<ResultType>(originalValue);
+
+    // Convert the converted value back to the original type. The original value is representable
+    // using the new type if such round-tripping doesn't lose bits.
+    InputType newValue = static_cast<InputType>(result);
+
+    // Get the raw bits of the round-tripped value.
+    BitsType newBits = bitwise_cast<BitsType>(newValue);
+    
+    return originalBits == newBits;
+}
+
+template<typename ResultType>
+inline bool isRepresentableAs(int32_t value)
+{
+    return isRepresentableAsImpl<ResultType, int32_t, int32_t>(value);
+}
+
+template<typename ResultType>
+inline bool isRepresentableAs(int64_t value)
+{
+    return isRepresentableAsImpl<ResultType, int64_t, int64_t>(value);
+}
+
+template<typename ResultType>
+inline bool isRepresentableAs(double value)
+{
+    return isRepresentableAsImpl<ResultType, double, int64_t>(value);
+}
 
 } } // namespace JSC::B3