Squelch UBSAN divide-by-zero error.

It's not unexpected to divide by zero during constant-folding.

Bug: oss-fuzz:58809
Change-Id: Ia02f95d8b98ab0d691652d6aafef5fc80af30cf7
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/695876
Commit-Queue: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
diff --git a/resources/sksl/intrinsics/Normalize.sksl b/resources/sksl/intrinsics/Normalize.sksl
index 8f508ab..8a366fa 100644
--- a/resources/sksl/intrinsics/Normalize.sksl
+++ b/resources/sksl/intrinsics/Normalize.sksl
@@ -2,6 +2,9 @@
 uniform half4 colorGreen, colorRed;
 
 half4 main(float2 coords) {
+    // Ensure that normalizing zero doesn't trigger a UBSAN divide-by-zero report.
+    float normalizeZero = normalize(0);
+
     const half4 constVec = half4(20, 0, 0, 0);
     half4 expectedVec = half4(1, 0, 0, 0);
 
diff --git a/src/sksl/ir/SkSLFunctionCall.cpp b/src/sksl/ir/SkSLFunctionCall.cpp
index f425951..22f7d8d 100644
--- a/src/sksl/ir/SkSLFunctionCall.cpp
+++ b/src/sksl/ir/SkSLFunctionCall.cpp
@@ -413,7 +413,7 @@
 double evaluate_add(double a, double b, double)        { return a + b; }
 double evaluate_sub(double a, double b, double)        { return a - b; }
 double evaluate_mul(double a, double b, double)        { return a * b; }
-double evaluate_div(double a, double b, double)        { return a / b; }
+double evaluate_div(double a, double b, double)        { return sk_ieee_double_divide(a, b); }
 double evaluate_abs(double a, double, double)          { return std::abs(a); }
 double evaluate_sign(double a, double, double)         { return (a > 0) - (a < 0); }
 double evaluate_opposite_sign(double a,double, double) { return (a < 0) - (a > 0); }