#ifndef LLVM_SANDBOXIR_INSTRUCTION_H
#define LLVM_SANDBOXIR_INSTRUCTION_H
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/PatternMatch.h"
#include "llvm/SandboxIR/BasicBlock.h"
#include "llvm/SandboxIR/Constant.h"
#include "llvm/SandboxIR/User.h"
namespace llvm::sandboxir {
class Instruction : public User { … };
template <typename LLVMT> class SingleLLVMInstructionImpl : public Instruction { … };
class FenceInst : public SingleLLVMInstructionImpl<llvm::FenceInst> { … };
class SelectInst : public SingleLLVMInstructionImpl<llvm::SelectInst> { … };
class InsertElementInst final
: public SingleLLVMInstructionImpl<llvm::InsertElementInst> { … };
class ExtractElementInst final
: public SingleLLVMInstructionImpl<llvm::ExtractElementInst> { … };
class ShuffleVectorInst final
: public SingleLLVMInstructionImpl<llvm::ShuffleVectorInst> { … };
class InsertValueInst
: public SingleLLVMInstructionImpl<llvm::InsertValueInst> { … };
class BranchInst : public SingleLLVMInstructionImpl<llvm::BranchInst> { … };
class UnaryInstruction
: public SingleLLVMInstructionImpl<llvm::UnaryInstruction> { … };
class ExtractValueInst : public UnaryInstruction { … };
class VAArgInst : public UnaryInstruction { … };
class FreezeInst : public UnaryInstruction { … };
class LoadInst final : public UnaryInstruction { … };
class StoreInst final : public SingleLLVMInstructionImpl<llvm::StoreInst> { … };
class UnreachableInst final : public Instruction { … };
class ReturnInst final : public SingleLLVMInstructionImpl<llvm::ReturnInst> { … };
class CallBase : public SingleLLVMInstructionImpl<llvm::CallBase> { … };
class CallInst final : public CallBase { … };
class InvokeInst final : public CallBase { … };
class CallBrInst final : public CallBase { … };
class LandingPadInst : public SingleLLVMInstructionImpl<llvm::LandingPadInst> { … };
class FuncletPadInst : public SingleLLVMInstructionImpl<llvm::FuncletPadInst> { … };
class CatchPadInst : public FuncletPadInst { … };
class CleanupPadInst : public FuncletPadInst { … };
class CatchReturnInst
: public SingleLLVMInstructionImpl<llvm::CatchReturnInst> { … };
class CleanupReturnInst
: public SingleLLVMInstructionImpl<llvm::CleanupReturnInst> { … };
class GetElementPtrInst final
: public SingleLLVMInstructionImpl<llvm::GetElementPtrInst> { … };
class CatchSwitchInst
: public SingleLLVMInstructionImpl<llvm::CatchSwitchInst> { … };
class ResumeInst : public SingleLLVMInstructionImpl<llvm::ResumeInst> { … };
class SwitchInst : public SingleLLVMInstructionImpl<llvm::SwitchInst> { … };
class UnaryOperator : public UnaryInstruction { … };
class BinaryOperator : public SingleLLVMInstructionImpl<llvm::BinaryOperator> { … };
class PossiblyDisjointInst : public BinaryOperator { … };
class AtomicRMWInst : public SingleLLVMInstructionImpl<llvm::AtomicRMWInst> { … };
class AtomicCmpXchgInst
: public SingleLLVMInstructionImpl<llvm::AtomicCmpXchgInst> { … };
class AllocaInst final : public UnaryInstruction { … };
class CastInst : public UnaryInstruction { … };
class PossiblyNonNegInst : public CastInst { … };
template <Instruction::Opcode Op> class CastInstImpl : public CastInst { … };
class TruncInst final : public CastInstImpl<Instruction::Opcode::Trunc> { … };
class ZExtInst final : public CastInstImpl<Instruction::Opcode::ZExt> { … };
class SExtInst final : public CastInstImpl<Instruction::Opcode::SExt> { … };
class FPTruncInst final : public CastInstImpl<Instruction::Opcode::FPTrunc> { … };
class FPExtInst final : public CastInstImpl<Instruction::Opcode::FPExt> { … };
class UIToFPInst final : public CastInstImpl<Instruction::Opcode::UIToFP> { … };
class SIToFPInst final : public CastInstImpl<Instruction::Opcode::SIToFP> { … };
class FPToUIInst final : public CastInstImpl<Instruction::Opcode::FPToUI> { … };
class FPToSIInst final : public CastInstImpl<Instruction::Opcode::FPToSI> { … };
class IntToPtrInst final : public CastInstImpl<Instruction::Opcode::IntToPtr> { … };
class PtrToIntInst final : public CastInstImpl<Instruction::Opcode::PtrToInt> { … };
class BitCastInst final : public CastInstImpl<Instruction::Opcode::BitCast> { … };
class AddrSpaceCastInst final
: public CastInstImpl<Instruction::Opcode::AddrSpaceCast> { … };
class PHINode final : public SingleLLVMInstructionImpl<llvm::PHINode> { … };
#define WRAP_STATIC_PREDICATE …
#define WRAP_MEMBER …
#define WRAP_BOTH …
class CmpInst : public SingleLLVMInstructionImpl<llvm::CmpInst> { … };
class ICmpInst : public CmpInst { … };
class FCmpInst : public CmpInst { … };
#undef WRAP_STATIC_PREDICATE
#undef WRAP_MEMBER
#undef WRAP_BOTH
class OpaqueInst : public SingleLLVMInstructionImpl<llvm::Instruction> { … };
}
#endif