@@ -1222,7 +1222,6 @@ class MemIntrinsic : public MemIntrinsicBase<MemIntrinsic> {
12221222 case Intrinsic::memmove:
12231223 case Intrinsic::memset:
12241224 case Intrinsic::memset_inline:
1225- case Intrinsic::experimental_memset_pattern:
12261225 case Intrinsic::memcpy_inline:
12271226 return true ;
12281227 default :
@@ -1234,16 +1233,14 @@ class MemIntrinsic : public MemIntrinsicBase<MemIntrinsic> {
12341233 }
12351234};
12361235
1237- // / This class wraps the llvm.memset, llvm.memset.inline, and
1238- // / llvm.experimental.memset.pattern intrinsics.
1236+ // / This class wraps the llvm.memset and llvm.memset.inline intrinsics.
12391237class MemSetInst : public MemSetBase <MemIntrinsic> {
12401238public:
12411239 // Methods for support type inquiry through isa, cast, and dyn_cast:
12421240 static bool classof (const IntrinsicInst *I) {
12431241 switch (I->getIntrinsicID ()) {
12441242 case Intrinsic::memset:
12451243 case Intrinsic::memset_inline:
1246- case Intrinsic::experimental_memset_pattern:
12471244 return true ;
12481245 default :
12491246 return false ;
@@ -1266,8 +1263,36 @@ class MemSetInlineInst : public MemSetInst {
12661263 }
12671264};
12681265
1266+ // / This is the base class for memset.pattern
1267+ class MemSetPatternIntrinsic : public MemIntrinsicBase <MemIntrinsic> {
1268+ private:
1269+ enum { ARG_VOLATILE = 3 };
1270+
1271+ public:
1272+ ConstantInt *getVolatileCst () const {
1273+ return cast<ConstantInt>(const_cast <Value *>(getArgOperand (ARG_VOLATILE)));
1274+ }
1275+
1276+ bool isVolatile () const { return !getVolatileCst ()->isZero (); }
1277+
1278+ void setVolatile (Constant *V) { setArgOperand (ARG_VOLATILE, V); }
1279+
1280+ // Methods for support of type inquiry through isa, cast, and dyn_cast:
1281+ static bool classof (const IntrinsicInst *I) {
1282+ switch (I->getIntrinsicID ()) {
1283+ case Intrinsic::experimental_memset_pattern:
1284+ return true ;
1285+ default :
1286+ return false ;
1287+ }
1288+ }
1289+ static bool classof (const Value *V) {
1290+ return isa<IntrinsicInst>(V) && classof (cast<IntrinsicInst>(V));
1291+ }
1292+ };
1293+
12691294// / This class wraps the llvm.experimental.memset.pattern intrinsic.
1270- class MemSetPatternInst : public MemSetInst {
1295+ class MemSetPatternInst : public MemSetBase <MemSetPatternIntrinsic> {
12711296public:
12721297 // Methods for support type inquiry through isa, cast, and dyn_cast:
12731298 static bool classof (const IntrinsicInst *I) {
@@ -1354,7 +1379,6 @@ class AnyMemIntrinsic : public MemIntrinsicBase<AnyMemIntrinsic> {
13541379 case Intrinsic::memmove:
13551380 case Intrinsic::memset:
13561381 case Intrinsic::memset_inline:
1357- case Intrinsic::experimental_memset_pattern:
13581382 case Intrinsic::memcpy_element_unordered_atomic:
13591383 case Intrinsic::memmove_element_unordered_atomic:
13601384 case Intrinsic::memset_element_unordered_atomic:
@@ -1377,7 +1401,6 @@ class AnyMemSetInst : public MemSetBase<AnyMemIntrinsic> {
13771401 switch (I->getIntrinsicID ()) {
13781402 case Intrinsic::memset:
13791403 case Intrinsic::memset_inline:
1380- case Intrinsic::experimental_memset_pattern:
13811404 case Intrinsic::memset_element_unordered_atomic:
13821405 return true ;
13831406 default :
0 commit comments