[llvm] r329747 - [IR] Refactor memset inst classes (NFC)
Daniel Neilson via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 10 12:51:45 PDT 2018
Author: dneilson
Date: Tue Apr 10 12:51:44 2018
New Revision: 329747
URL: http://llvm.org/viewvc/llvm-project?rev=329747&view=rev
Log:
[IR] Refactor memset inst classes (NFC)
Summary:
A simple refactor to remove duplicate code in the definitions of
MemSetInst, AtomicMemSetInst, and AnyMemSetInst. Introduce a
templated base class that contains all of the methods unique to
a memset intrinsic, and derive these three classes from that.
Modified:
llvm/trunk/include/llvm/IR/IntrinsicInst.h
Modified: llvm/trunk/include/llvm/IR/IntrinsicInst.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/IntrinsicInst.h?rev=329747&r1=329746&r2=329747&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/IntrinsicInst.h (original)
+++ llvm/trunk/include/llvm/IR/IntrinsicInst.h Tue Apr 10 12:51:44 2018
@@ -309,6 +309,28 @@ namespace llvm {
}
};
+ /// Common base class for all memset intrinsics. Simply provides
+ /// common methods.
+ template <class BaseCL> class MemSetBase : public BaseCL {
+ private:
+ enum { ARG_VALUE = 1 };
+
+ public:
+ Value *getValue() const {
+ return const_cast<Value *>(BaseCL::getArgOperand(ARG_VALUE));
+ }
+ const Use &getValueUse() const {
+ return BaseCL::getArgOperandUse(ARG_VALUE);
+ }
+ Use &getValueUse() { return BaseCL::getArgOperandUse(ARG_VALUE); }
+
+ void setValue(Value *Val) {
+ assert(getValue()->getType() == Val->getType() &&
+ "setValue called with value of wrong type!");
+ BaseCL::setArgOperand(ARG_VALUE, Val);
+ }
+ };
+
// The common base class for the atomic memset/memmove/memcpy intrinsics
// i.e. llvm.element.unordered.atomic.memset/memcpy/memmove
class AtomicMemIntrinsic : public MemIntrinsicBase<AtomicMemIntrinsic> {
@@ -351,23 +373,8 @@ namespace llvm {
/// This class represents atomic memset intrinsic
// i.e. llvm.element.unordered.atomic.memset
- class AtomicMemSetInst : public AtomicMemIntrinsic {
- private:
- enum { ARG_VALUE = 1 };
-
+ class AtomicMemSetInst : public MemSetBase<AtomicMemIntrinsic> {
public:
- Value *getValue() const {
- return const_cast<Value *>(getArgOperand(ARG_VALUE));
- }
- const Use &getValueUse() const { return getArgOperandUse(ARG_VALUE); }
- Use &getValueUse() { return getArgOperandUse(ARG_VALUE); }
-
- void setValue(Value *Val) {
- assert(getValue()->getType() == Val->getType() &&
- "setValue called with value of wrong type!");
- setArgOperand(ARG_VALUE, Val);
- }
-
static bool classof(const IntrinsicInst *I) {
return I->getIntrinsicID() == Intrinsic::memset_element_unordered_atomic;
}
@@ -451,19 +458,8 @@ namespace llvm {
};
/// This class wraps the llvm.memset intrinsic.
- class MemSetInst : public MemIntrinsic {
+ class MemSetInst : public MemSetBase<MemIntrinsic> {
public:
- /// Return the arguments to the instruction.
- Value *getValue() const { return const_cast<Value*>(getArgOperand(1)); }
- const Use &getValueUse() const { return getArgOperandUse(1); }
- Use &getValueUse() { return getArgOperandUse(1); }
-
- void setValue(Value *Val) {
- assert(getValue()->getType() == Val->getType() &&
- "setValue called with value of wrong type!");
- setArgOperand(1, Val);
- }
-
// Methods for support type inquiry through isa, cast, and dyn_cast:
static bool classof(const IntrinsicInst *I) {
return I->getIntrinsicID() == Intrinsic::memset;
@@ -544,23 +540,8 @@ namespace llvm {
/// This class represents any memset intrinsic
// i.e. llvm.element.unordered.atomic.memset
// and llvm.memset
- class AnyMemSetInst : public AnyMemIntrinsic {
- private:
- enum { ARG_VALUE = 1 };
-
+ class AnyMemSetInst : public MemSetBase<AnyMemIntrinsic> {
public:
- Value *getValue() const {
- return const_cast<Value *>(getArgOperand(ARG_VALUE));
- }
- const Use &getValueUse() const { return getArgOperandUse(ARG_VALUE); }
- Use &getValueUse() { return getArgOperandUse(ARG_VALUE); }
-
- void setValue(Value *Val) {
- assert(getValue()->getType() == Val->getType() &&
- "setValue called with value of wrong type!");
- setArgOperand(ARG_VALUE, Val);
- }
-
static bool classof(const IntrinsicInst *I) {
switch (I->getIntrinsicID()) {
case Intrinsic::memset:
More information about the llvm-commits
mailing list