class PTXTargetInfo : public TargetInfo {
static const char * const GCCRegNames[];
static const Builtin::Info BuiltinInfo[];
+ std::vector<llvm::StringRef> AvailableFeatures;
public:
PTXTargetInfo(const std::string& triple) : TargetInfo(triple) {
TLSSupported = false;
LongWidth = LongAlign = 64;
+ // Define available target features
+ // These must be defined in sorted order!
+ AvailableFeatures.push_back("compute10");
+ AvailableFeatures.push_back("compute11");
+ AvailableFeatures.push_back("compute12");
+ AvailableFeatures.push_back("compute13");
+ AvailableFeatures.push_back("compute20");
+ AvailableFeatures.push_back("double");
+ AvailableFeatures.push_back("no-fma");
+ AvailableFeatures.push_back("ptx20");
+ AvailableFeatures.push_back("ptx21");
+ AvailableFeatures.push_back("ptx22");
+ AvailableFeatures.push_back("ptx23");
+ AvailableFeatures.push_back("sm10");
+ AvailableFeatures.push_back("sm11");
+ AvailableFeatures.push_back("sm12");
+ AvailableFeatures.push_back("sm13");
+ AvailableFeatures.push_back("sm20");
+ AvailableFeatures.push_back("sm21");
+ AvailableFeatures.push_back("sm22");
+ AvailableFeatures.push_back("sm23");
}
virtual void getTargetDefines(const LangOptions &Opts,
MacroBuilder &Builder) const {
bool PTXTargetInfo::setFeatureEnabled(llvm::StringMap<bool> &Features,
const std::string &Name,
bool Enabled) const {
- if (Enabled) {
- if (Name == "double")
- Features["double"] = true;
- else if (Name == "no-fma")
- Features["no-fma"] = true;
- else if (Name == "compute10")
- Features["compute10"] = true;
- else if (Name == "compute11")
- Features["compute11"] = true;
- else if (Name == "compute12")
- Features["compute12"] = true;
- else if (Name == "compute13")
- Features["compute13"] = true;
- else if (Name == "compute20")
- Features["compute20"] = true;
- else if (Name == "ptx20")
- Features["ptx20"] = true;
- else if (Name == "ptx21")
- Features["ptx21"] = true;
- else if (Name == "ptx22")
- Features["ptx22"] = true;
- else if (Name == "ptx23")
- Features["ptx23"] = true;
- else if (Name == "sm10")
- Features["sm10"] = true;
- else if (Name == "sm11")
- Features["sm11"] = true;
- else if (Name == "sm12")
- Features["sm12"] = true;
- else if (Name == "sm13")
- Features["sm13"] = true;
- else if (Name == "sm20")
- Features["sm20"] = true;
- else if (Name == "sm21")
- Features["sm21"] = true;
- else if (Name == "sm22")
- Features["sm22"] = true;
- else if (Name == "sm23")
- Features["sm23"] = true;
+ if(std::binary_search(AvailableFeatures.begin(), AvailableFeatures.end(),
+ Name)) {
+ Features[Name] = Enabled;
+ return true;
} else {
- if (Name == "double")
- Features["double"] = false;
- else if (Name == "no-fma")
- Features["no-fma"] = false;
- else if (Name == "compute10")
- Features["compute10"] = false;
- else if (Name == "compute11")
- Features["compute11"] = false;
- else if (Name == "compute12")
- Features["compute12"] = false;
- else if (Name == "compute13")
- Features["compute13"] = false;
- else if (Name == "compute20")
- Features["compute20"] = false;
- else if (Name == "ptx20")
- Features["ptx20"] = false;
- else if (Name == "ptx21")
- Features["ptx21"] = false;
- else if (Name == "ptx22")
- Features["ptx22"] = false;
- else if (Name == "ptx23")
- Features["ptx23"] = false;
- else if (Name == "sm10")
- Features["sm10"] = false;
- else if (Name == "sm11")
- Features["sm11"] = false;
- else if (Name == "sm12")
- Features["sm12"] = false;
- else if (Name == "sm13")
- Features["sm13"] = false;
- else if (Name == "sm20")
- Features["sm20"] = false;
- else if (Name == "sm21")
- Features["sm21"] = false;
- else if (Name == "sm22")
- Features["sm22"] = false;
- else if (Name == "sm23")
- Features["sm23"] = false;
+ return false;
}
-
- return true;
}
class PTX32TargetInfo : public PTXTargetInfo {