@@ -1107,100 +1107,6 @@ template <class BaseCL> class MemSetBase : public BaseCL {
1107
1107
}
1108
1108
};
1109
1109
1110
- // The common base class for the atomic memset/memmove/memcpy intrinsics
1111
- // i.e. llvm.element.unordered.atomic.memset/memcpy/memmove
1112
- class AtomicMemIntrinsic : public MemIntrinsicBase <AtomicMemIntrinsic> {
1113
- private:
1114
- enum { ARG_ELEMENTSIZE = 3 };
1115
-
1116
- public:
1117
- Value *getRawElementSizeInBytes () const {
1118
- return const_cast <Value *>(getArgOperand (ARG_ELEMENTSIZE));
1119
- }
1120
-
1121
- ConstantInt *getElementSizeInBytesCst () const {
1122
- return cast<ConstantInt>(getRawElementSizeInBytes ());
1123
- }
1124
-
1125
- uint32_t getElementSizeInBytes () const {
1126
- return getElementSizeInBytesCst ()->getZExtValue ();
1127
- }
1128
-
1129
- void setElementSizeInBytes (Constant *V) {
1130
- assert (V->getType () == Type::getInt8Ty (getContext ()) &&
1131
- " setElementSizeInBytes called with value of wrong type!" );
1132
- setArgOperand (ARG_ELEMENTSIZE, V);
1133
- }
1134
-
1135
- static bool classof (const IntrinsicInst *I) {
1136
- switch (I->getIntrinsicID ()) {
1137
- case Intrinsic::memcpy_element_unordered_atomic:
1138
- case Intrinsic::memmove_element_unordered_atomic:
1139
- case Intrinsic::memset_element_unordered_atomic:
1140
- return true ;
1141
- default :
1142
- return false ;
1143
- }
1144
- }
1145
- static bool classof (const Value *V) {
1146
- return isa<IntrinsicInst>(V) && classof (cast<IntrinsicInst>(V));
1147
- }
1148
- };
1149
-
1150
- // / This class represents atomic memset intrinsic
1151
- // i.e. llvm.element.unordered.atomic.memset
1152
- class AtomicMemSetInst : public MemSetBase <AtomicMemIntrinsic> {
1153
- public:
1154
- static bool classof (const IntrinsicInst *I) {
1155
- return I->getIntrinsicID () == Intrinsic::memset_element_unordered_atomic;
1156
- }
1157
- static bool classof (const Value *V) {
1158
- return isa<IntrinsicInst>(V) && classof (cast<IntrinsicInst>(V));
1159
- }
1160
- };
1161
-
1162
- // This class wraps the atomic memcpy/memmove intrinsics
1163
- // i.e. llvm.element.unordered.atomic.memcpy/memmove
1164
- class AtomicMemTransferInst : public MemTransferBase <AtomicMemIntrinsic> {
1165
- public:
1166
- static bool classof (const IntrinsicInst *I) {
1167
- switch (I->getIntrinsicID ()) {
1168
- case Intrinsic::memcpy_element_unordered_atomic:
1169
- case Intrinsic::memmove_element_unordered_atomic:
1170
- return true ;
1171
- default :
1172
- return false ;
1173
- }
1174
- }
1175
- static bool classof (const Value *V) {
1176
- return isa<IntrinsicInst>(V) && classof (cast<IntrinsicInst>(V));
1177
- }
1178
- };
1179
-
1180
- // / This class represents the atomic memcpy intrinsic
1181
- // / i.e. llvm.element.unordered.atomic.memcpy
1182
- class AtomicMemCpyInst : public AtomicMemTransferInst {
1183
- public:
1184
- static bool classof (const IntrinsicInst *I) {
1185
- return I->getIntrinsicID () == Intrinsic::memcpy_element_unordered_atomic;
1186
- }
1187
- static bool classof (const Value *V) {
1188
- return isa<IntrinsicInst>(V) && classof (cast<IntrinsicInst>(V));
1189
- }
1190
- };
1191
-
1192
- // / This class represents the atomic memmove intrinsic
1193
- // / i.e. llvm.element.unordered.atomic.memmove
1194
- class AtomicMemMoveInst : public AtomicMemTransferInst {
1195
- public:
1196
- static bool classof (const IntrinsicInst *I) {
1197
- return I->getIntrinsicID () == Intrinsic::memmove_element_unordered_atomic;
1198
- }
1199
- static bool classof (const Value *V) {
1200
- return isa<IntrinsicInst>(V) && classof (cast<IntrinsicInst>(V));
1201
- }
1202
- };
1203
-
1204
1110
// / This is the common base class for memset/memcpy/memmove.
1205
1111
class MemIntrinsic : public MemIntrinsicBase <MemIntrinsic> {
1206
1112
private:
@@ -1345,6 +1251,9 @@ class MemMoveInst : public MemTransferInst {
1345
1251
// i.e. llvm.element.unordered.atomic.memset/memcpy/memmove
1346
1252
// and llvm.memset/memcpy/memmove
1347
1253
class AnyMemIntrinsic : public MemIntrinsicBase <AnyMemIntrinsic> {
1254
+ private:
1255
+ enum { ARG_ELEMENTSIZE = 3 };
1256
+
1348
1257
public:
1349
1258
bool isVolatile () const {
1350
1259
// Only the non-atomic intrinsics can be volatile
@@ -1353,6 +1262,17 @@ class AnyMemIntrinsic : public MemIntrinsicBase<AnyMemIntrinsic> {
1353
1262
return false ;
1354
1263
}
1355
1264
1265
+ bool isAtomic () const {
1266
+ switch (getIntrinsicID ()) {
1267
+ case Intrinsic::memcpy_element_unordered_atomic:
1268
+ case Intrinsic::memmove_element_unordered_atomic:
1269
+ case Intrinsic::memset_element_unordered_atomic:
1270
+ return true ;
1271
+ default :
1272
+ return false ;
1273
+ }
1274
+ }
1275
+
1356
1276
static bool classof (const IntrinsicInst *I) {
1357
1277
switch (I->getIntrinsicID ()) {
1358
1278
case Intrinsic::memcpy :
@@ -1371,6 +1291,16 @@ class AnyMemIntrinsic : public MemIntrinsicBase<AnyMemIntrinsic> {
1371
1291
static bool classof (const Value *V) {
1372
1292
return isa<IntrinsicInst>(V) && classof (cast<IntrinsicInst>(V));
1373
1293
}
1294
+
1295
+ Value *getRawElementSizeInBytes () const {
1296
+ assert (isAtomic ());
1297
+ return const_cast <Value *>(getArgOperand (ARG_ELEMENTSIZE));
1298
+ }
1299
+
1300
+ uint32_t getElementSizeInBytes () const {
1301
+ assert (isAtomic ());
1302
+ return cast<ConstantInt>(getRawElementSizeInBytes ())->getZExtValue ();
1303
+ }
1374
1304
};
1375
1305
1376
1306
// / This class represents any memset intrinsic
0 commit comments