#ifndef HALIDE_CODEGEN_X86_H #define HALIDE_CODEGEN_X86_H /** \file * Defines the code-generator for producing x86 machine code */ #include "CodeGen_Posix.h" #include "Target.h" namespace llvm { class JITEventListener; } namespace Halide { namespace Internal { /** A code generator that emits x86 code from a given Halide stmt. */ class CodeGen_X86 : public CodeGen_Posix { public: /** Create an x86 code generator. Processor features can be * enabled using the appropriate flags in the target struct. */ CodeGen_X86(Target); protected: std::string mcpu() const override; std::string mattrs() const override; bool use_soft_float_abi() const override; int native_vector_bits() const override; int vector_lanes_for_slice(const Type &t) const; llvm::Type *llvm_type_of(const Type &t) const override; using CodeGen_Posix::visit; /** Nodes for which we want to emit specific sse/avx intrinsics */ // @{ void visit(const Add *) override; void visit(const Sub *) override; void visit(const Cast *) override; void visit(const Call *) override; void visit(const GT *) override; void visit(const LT *) override; void visit(const LE *) override; void visit(const GE *) override; void visit(const EQ *) override; void visit(const NE *) override; void visit(const Select *) override; void visit(const VectorReduce *) override; void visit(const Mul *) override; // @} }; } // namespace Internal } // namespace Halide #endif