Revision 2b3aaa8d6a5bb54a3da4e32395bb80ca09b4e4b3 authored by xndcn on 08 January 2021, 19:46:56 UTC, committed by GitHub on 08 January 2021, 19:46:56 UTC
* Add max threads checking for Metal

Originally, this checking will be asserted by Metal API Validation
in Xcode, otherwise the program will crash or output wrong results.

* Disable the max threads checking for Metal in non-debug runtime

* Disable error/metal_threads_too_large test for non-OSX target
1 parent 081f472
Raw File
FuzzFloatStores.cpp
#include "FuzzFloatStores.h"
#include "IRMutator.h"
#include "IROperator.h"

namespace Halide {
namespace Internal {

namespace {
class FuzzFloatStores : public IRMutator {
    using IRMutator::visit;

    Stmt visit(const Store *op) override {
        Type t = op->value.type();
        if (t.is_float()) {
            // Drop the last bit of the mantissa.
            Expr value = op->value;
            Expr mask = make_one(t.with_code(Type::UInt));
            value = reinterpret(mask.type(), value);
            value = value & ~mask;
            value = reinterpret(t, value);
            return Store::make(op->name, value, op->index, op->param, op->predicate, op->alignment);
        } else {
            return IRMutator::visit(op);
        }
    }
};
}  // namespace

Stmt fuzz_float_stores(const Stmt &s) {
    return FuzzFloatStores().mutate(s);
}

}  // namespace Internal
}  // namespace Halide
back to top