From 8f5d42a5d9343cc0361dafd16e3c97a477beb6f8 Mon Sep 17 00:00:00 2001 From: Alexander Root Date: Tue, 23 Aug 2022 18:07:15 -0400 Subject: [PATCH 1/3] lower saturating_cast in bounds inference --- src/Bounds.cpp | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/Bounds.cpp b/src/Bounds.cpp index 8090a20e721f..4d6d7f2c3a86 100644 --- a/src/Bounds.cpp +++ b/src/Bounds.cpp @@ -7,6 +7,7 @@ #include "Debug.h" #include "Deinterleave.h" #include "ExprUsesVar.h" +#include "FindIntrinsics.h" #include "Func.h" #include "IR.h" #include "IREquality.h" @@ -1213,16 +1214,8 @@ class Bounds : public IRVisitor { } else if (op->is_intrinsic(Call::saturating_cast)) { internal_assert(op->args.size() == 1); - Expr a = op->args[0]; + Expr a = lower_saturating_cast(op->type, op->args[0]); a.accept(this); - Interval a_interval = interval; - bounds_of_type(t); - if (a_interval.has_lower_bound()) { - interval.min = saturating_cast(t, a_interval.min); - } - if (a_interval.has_upper_bound()) { - interval.max = saturating_cast(t, a_interval.max); - } return; } else if (op->is_intrinsic(Call::unsafe_promise_clamped) || op->is_intrinsic(Call::promise_clamped)) { From 2d72863692cc443e8b41eb06a82ddd7088e7b987 Mon Sep 17 00:00:00 2001 From: Alexander Root Date: Tue, 23 Aug 2022 20:53:48 -0400 Subject: [PATCH 2/3] openGL fix to saturating_cast --- src/CodeGen_OpenGLCompute_Dev.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/CodeGen_OpenGLCompute_Dev.cpp b/src/CodeGen_OpenGLCompute_Dev.cpp index 3dc4ea6604fa..316a4abb2126 100644 --- a/src/CodeGen_OpenGLCompute_Dev.cpp +++ b/src/CodeGen_OpenGLCompute_Dev.cpp @@ -4,6 +4,7 @@ #include "CodeGen_GPU_Dev.h" #include "Debug.h" #include "Deinterleave.h" +#include "FindIntrinsics.h" #include "IRMatch.h" #include "IRMutator.h" #include "IROperator.h" @@ -466,6 +467,10 @@ void CodeGen_OpenGLCompute_C::visit(const Call *op) { print_assignment(op->type, print_expr(op->args[0]) + " / " + print_expr(op->args[1])); } else if (op->is_intrinsic(Call::mod_round_to_zero)) { print_assignment(op->type, print_expr(op->args[0]) + " % " + print_expr(op->args[1])); + } else if (op->is_intrinsic(Call::saturating_cast)) { + Expr e = lower_intrinsic(op); + print_expr(e); + return; } else { auto it = builtin.find(op->name); if (it == builtin.end()) { From 5801257b5b679746fdda799c730c733a31cce1dd Mon Sep 17 00:00:00 2001 From: Alexander Root Date: Tue, 23 Aug 2022 20:58:09 -0400 Subject: [PATCH 3/3] clang format --- src/CodeGen_OpenGLCompute_Dev.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/CodeGen_OpenGLCompute_Dev.cpp b/src/CodeGen_OpenGLCompute_Dev.cpp index 316a4abb2126..40acdd212fd2 100644 --- a/src/CodeGen_OpenGLCompute_Dev.cpp +++ b/src/CodeGen_OpenGLCompute_Dev.cpp @@ -468,9 +468,9 @@ void CodeGen_OpenGLCompute_C::visit(const Call *op) { } else if (op->is_intrinsic(Call::mod_round_to_zero)) { print_assignment(op->type, print_expr(op->args[0]) + " % " + print_expr(op->args[1])); } else if (op->is_intrinsic(Call::saturating_cast)) { - Expr e = lower_intrinsic(op); - print_expr(e); - return; + Expr e = lower_intrinsic(op); + print_expr(e); + return; } else { auto it = builtin.find(op->name); if (it == builtin.end()) {