[llvm] [SandboxIR][NFC] Introduce templated CastInstImpl to simplify subclasses (PR #101427)
Arthur Eubanks via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 31 16:54:42 PDT 2024
================
@@ -1431,146 +1431,42 @@ class CastInst : public Instruction {
#endif
};
-class SIToFPInst final : public CastInst {
+// Helper class to simplify stamping out CastInst subclasses.
+template <Instruction::Opcode Op> class CastInstImpl : public CastInst {
public:
static Value *create(Value *Src, Type *DestTy, BBIterator WhereIt,
BasicBlock *WhereBB, Context &Ctx,
- const Twine &Name = "");
- static Value *create(Value *Src, Type *DestTy, Instruction *InsertBefore,
- Context &Ctx, const Twine &Name = "");
- static Value *create(Value *Src, Type *DestTy, BasicBlock *InsertAtEnd,
- Context &Ctx, const Twine &Name = "");
-
- static bool classof(const Value *From) {
- if (auto *I = dyn_cast<Instruction>(From))
- return I->getOpcode() == Opcode::SIToFP;
- return false;
+ const Twine &Name = "") {
+ return CastInst::create(DestTy, Op, Src, WhereIt, WhereBB, Ctx, Name);
}
-#ifndef NDEBUG
- void dump(raw_ostream &OS) const final;
- LLVM_DUMP_METHOD void dump() const final;
-#endif // NDEBUG
-};
-
-class FPToUIInst final : public CastInst {
-public:
- static Value *create(Value *Src, Type *DestTy, BBIterator WhereIt,
- BasicBlock *WhereBB, Context &Ctx,
- const Twine &Name = "");
static Value *create(Value *Src, Type *DestTy, Instruction *InsertBefore,
- Context &Ctx, const Twine &Name = "");
- static Value *create(Value *Src, Type *DestTy, BasicBlock *InsertAtEnd,
- Context &Ctx, const Twine &Name = "");
-
- static bool classof(const Value *From) {
- if (auto *I = dyn_cast<Instruction>(From))
- return I->getOpcode() == Opcode::FPToUI;
- return false;
+ Context &Ctx, const Twine &Name = "") {
+ return create(Src, DestTy, InsertBefore->getIterator(),
+ InsertBefore->getParent(), Ctx, Name);
}
-#ifndef NDEBUG
----------------
aeubanks wrote:
it looks like all `dump()` methods are the same right now, with multi-instructions being different in the future. there's gotta be a better way of deduplicating some of the logic, seeing so many copies of
```
void FooInst::dump(raw_ostream &OS) const {
dumpCommonPrefix(OS);
dumpCommonSuffix(OS);
}
```
hurts.
can you test if `B().f()` in
```
struct A {
void f();
};
struct B : A {
using A::f;
};
```
works with gdb?
https://github.com/llvm/llvm-project/pull/101427
More information about the llvm-commits
mailing list