#ifndef PTX_SUBTARGET_H
#define PTX_SUBTARGET_H
#include "llvm/Target/TargetSubtargetInfo.h"
#define GET_SUBTARGETINFO_HEADER
#include "PTXGenSubtargetInfo.inc"
namespace llvm {
class StringRef;
class PTXSubtarget : public PTXGenSubtargetInfo {
virtual void anchor();
public:
enum PTXTargetEnum {
PTX_COMPUTE_1_0,
PTX_COMPUTE_1_1,
PTX_COMPUTE_1_2,
PTX_COMPUTE_1_3,
PTX_COMPUTE_2_0,
PTX_LAST_COMPUTE,
PTX_SM_1_0,
PTX_SM_1_1,
PTX_SM_1_2,
PTX_SM_1_3,
PTX_SM_2_0,
PTX_SM_2_1,
PTX_SM_2_2,
PTX_SM_2_3,
PTX_LAST_SM
};
enum PTXVersionEnum {
PTX_VERSION_2_0,
PTX_VERSION_2_1,
PTX_VERSION_2_2,
PTX_VERSION_2_3
};
private:
PTXTargetEnum PTXTarget;
PTXVersionEnum PTXVersion;
bool SupportsDouble;
bool SupportsFMA;
bool Is64Bit;
public:
PTXSubtarget(const std::string &TT, const std::string &CPU,
const std::string &FS, bool is64Bit);
std::string getTargetString() const;
std::string getPTXVersionString() const;
bool supportsDouble() const { return SupportsDouble; }
bool is64Bit() const { return Is64Bit; }
bool supportsFMA() const { return SupportsFMA; }
bool supportsPTX21() const { return PTXVersion >= PTX_VERSION_2_1; }
bool supportsPTX22() const { return PTXVersion >= PTX_VERSION_2_2; }
bool supportsPTX23() const { return PTXVersion >= PTX_VERSION_2_3; }
bool fdivNeedsRoundingMode() const {
return (PTXTarget >= PTX_SM_1_3 && PTXTarget < PTX_LAST_SM) ||
(PTXTarget >= PTX_COMPUTE_1_3 && PTXTarget < PTX_LAST_COMPUTE);
}
bool fmadNeedsRoundingMode() const {
return (PTXTarget >= PTX_SM_1_3 && PTXTarget < PTX_LAST_SM) ||
(PTXTarget >= PTX_COMPUTE_1_3 && PTXTarget < PTX_LAST_COMPUTE);
}
bool useParamSpaceForDeviceArgs() const {
return (PTXTarget >= PTX_SM_2_0 && PTXTarget < PTX_LAST_SM) ||
(PTXTarget >= PTX_COMPUTE_2_0 && PTXTarget < PTX_LAST_COMPUTE);
}
bool callsAreHandled() const {
return (PTXTarget >= PTX_SM_2_0 && PTXTarget < PTX_LAST_SM) ||
(PTXTarget >= PTX_COMPUTE_2_0 && PTXTarget < PTX_LAST_COMPUTE);
}
bool emitPtrAttribute() const {
return PTXVersion >= PTX_VERSION_2_2;
}
void ParseSubtargetFeatures(StringRef CPU, StringRef FS);
}; }
#endif // PTX_SUBTARGET_H