代码拉取完成,页面将自动刷新
同步操作将从 Gitee 极速下载/Halide 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include "UnsafePromises.h"
#include "IRMutator.h"
#include "IROperator.h"
namespace Halide {
namespace Internal {
namespace {
class LowerUnsafePromises : public IRMutator {
using IRMutator::visit;
Expr visit(const Call *op) override {
if (op->is_intrinsic(Call::unsafe_promise_clamped)) {
if (check) {
Expr is_clamped = op->args[0] >= op->args[1] && op->args[0] <= op->args[2];
std::ostringstream promise_expr_text;
promise_expr_text << is_clamped;
Expr cond_as_string = StringImm::make(promise_expr_text.str());
Expr promise_broken_error =
Call::make(Int(32),
"halide_error_requirement_failed",
{cond_as_string, StringImm::make("from unsafe_promise_clamped")},
Call::Extern);
return Call::make(op->args[0].type(),
Call::require,
{mutate(is_clamped), mutate(op->args[0]), promise_broken_error},
Call::PureIntrinsic);
} else {
return mutate(op->args[0]);
}
} else {
return IRMutator::visit(op);
}
}
bool check;
public:
LowerUnsafePromises(bool check)
: check(check) {
}
};
class LowerSafePromises : public IRMutator {
using IRMutator::visit;
Expr visit(const Call *op) override {
if (op->is_intrinsic(Call::promise_clamped)) {
return mutate(op->args[0]);
} else {
return IRMutator::visit(op);
}
}
};
} // namespace
Stmt lower_unsafe_promises(const Stmt &s, const Target &t) {
return LowerUnsafePromises(t.has_feature(Target::CheckUnsafePromises)).mutate(s);
}
Stmt lower_safe_promises(const Stmt &s) {
return LowerSafePromises().mutate(s);
}
} // namespace Internal
} // namespace Halide
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。