text: #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;
      // @}
  };
  
  }  // namespace Internal
  }  // namespace Halide
  
  #endif
  