1 #ifndef HALIDE_CODEGEN_X86_H 2 #define HALIDE_CODEGEN_X86_H 3 4 /** \file 5 * Defines the code-generator for producing x86 machine code 6 */ 7 8 #include "CodeGen_Posix.h" 9 #include "Target.h" 10 11 namespace llvm { 12 class JITEventListener; 13 } 14 15 namespace Halide { 16 namespace Internal { 17 18 /** A code generator that emits x86 code from a given Halide stmt. */ 19 class CodeGen_X86 : public CodeGen_Posix { 20 public: 21 /** Create an x86 code generator. Processor features can be 22 * enabled using the appropriate flags in the target struct. */ 23 CodeGen_X86(Target); 24 25 protected: 26 std::string mcpu() const override; 27 std::string mattrs() const override; 28 bool use_soft_float_abi() const override; 29 int native_vector_bits() const override; 30 31 int vector_lanes_for_slice(const Type &t) const; 32 33 llvm::Type *llvm_type_of(const Type &t) const override; 34 35 using CodeGen_Posix::visit; 36 37 /** Nodes for which we want to emit specific sse/avx intrinsics */ 38 // @{ 39 void visit(const Add *) override; 40 void visit(const Sub *) override; 41 void visit(const Cast *) override; 42 void visit(const Call *) override; 43 void visit(const GT *) override; 44 void visit(const LT *) override; 45 void visit(const LE *) override; 46 void visit(const GE *) override; 47 void visit(const EQ *) override; 48 void visit(const NE *) override; 49 void visit(const Select *) override; 50 void visit(const VectorReduce *) override; 51 void visit(const Mul *) override; 52 // @} 53 }; 54 55 } // namespace Internal 56 } // namespace Halide 57 58 #endif 59