Index: include/clang/Driver/Options.td =================================================================== --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -1266,6 +1266,10 @@ Group; def mnopower8_crypto : Flag<["-"], "mno-crypto">, Group; +def mdirect_move : Flag<["-"], "mdirect-move">, + Group; +def mnodirect_move : Flag<["-"], "mno-direct-move">, + Group; def mhtm : Flag<["-"], "mhtm">, Group; def mno_htm : Flag<["-"], "mno-htm">, Group; def mfprnd : Flag<["-"], "mfprnd">, Group; Index: lib/Basic/Targets.cpp =================================================================== --- lib/Basic/Targets.cpp +++ lib/Basic/Targets.cpp @@ -742,6 +742,7 @@ bool HasVSX; bool HasP8Vector; bool HasP8Crypto; + bool HasDirectMove; bool HasQPX; bool HasHTM; @@ -751,7 +752,7 @@ public: PPCTargetInfo(const llvm::Triple &Triple) : TargetInfo(Triple), HasVSX(false), HasP8Vector(false), - HasP8Crypto(false), HasQPX(false), HasHTM(false) { + HasP8Crypto(false), HasDirectMove(false), HasQPX(false), HasHTM(false) { BigEndian = (Triple.getArch() != llvm::Triple::ppc64le); LongDoubleWidth = LongDoubleAlign = 128; LongDoubleFormat = &llvm::APFloat::PPCDoubleDouble; @@ -1021,6 +1022,11 @@ continue; } + if (Feature == "direct-move") { + HasDirectMove = true; + continue; + } + if (Feature == "qpx") { HasQPX = true; continue; @@ -1233,6 +1239,10 @@ .Case("ppc64le", true) .Case("pwr8", true) .Default(false); + Features["direct-move"] = llvm::StringSwitch(CPU) + .Case("ppc64le", true) + .Case("pwr8", true) + .Default(false); } bool PPCTargetInfo::hasFeature(StringRef Feature) const { @@ -1241,6 +1251,7 @@ .Case("vsx", HasVSX) .Case("power8-vector", HasP8Vector) .Case("crypto", HasP8Crypto) + .Case("direct-move", HasDirectMove) .Case("qpx", HasQPX) .Case("htm", HasHTM) .Default(false);