mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-24 23:28:41 +00:00
Add more IR support for the new extractvalue and insertvalue
instructions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51461 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1332,10 +1332,70 @@ int ShuffleVectorInst::getMaskValue(unsigned i) const {
|
||||
return cast<ConstantInt>(MaskCV->getOperand(i))->getZExtValue();
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// InsertValueInst Class
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
void InsertValueInst::init(Value *Agg, Value *Val, Value* const *Idx, unsigned NumIdx) {
|
||||
assert(NumOperands == 1+NumIdx && "NumOperands not initialized?");
|
||||
Use *OL = OperandList;
|
||||
OL[0].init(Agg, this);
|
||||
OL[1].init(Val, this);
|
||||
|
||||
for (unsigned i = 0; i != NumIdx; ++i)
|
||||
OL[i+2].init(Idx[i], this);
|
||||
}
|
||||
|
||||
void InsertValueInst::init(Value *Agg, Value *Val, Value *Idx) {
|
||||
assert(NumOperands == 3 && "NumOperands not initialized?");
|
||||
Use *OL = OperandList;
|
||||
OL[0].init(Agg, this);
|
||||
OL[1].init(Val, this);
|
||||
OL[2].init(Idx, this);
|
||||
}
|
||||
|
||||
InsertValueInst::InsertValueInst(const InsertValueInst &IVI)
|
||||
: Instruction(reinterpret_cast<const Type*>(IVI.getType()), InsertValue,
|
||||
OperandTraits<InsertValueInst>::op_end(this)
|
||||
- IVI.getNumOperands(),
|
||||
IVI.getNumOperands()) {
|
||||
Use *OL = OperandList;
|
||||
Use *IVIOL = IVI.OperandList;
|
||||
for (unsigned i = 0, E = NumOperands; i != E; ++i)
|
||||
OL[i].init(IVIOL[i], this);
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// ExtractValueInst Class
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
void ExtractValueInst::init(Value *Agg, Value* const *Idx, unsigned NumIdx) {
|
||||
assert(NumOperands == 1+NumIdx && "NumOperands not initialized?");
|
||||
Use *OL = OperandList;
|
||||
OL[0].init(Agg, this);
|
||||
|
||||
for (unsigned i = 0; i != NumIdx; ++i)
|
||||
OL[i+1].init(Idx[i], this);
|
||||
}
|
||||
|
||||
void ExtractValueInst::init(Value *Agg, Value *Idx) {
|
||||
assert(NumOperands == 2 && "NumOperands not initialized?");
|
||||
Use *OL = OperandList;
|
||||
OL[0].init(Agg, this);
|
||||
OL[1].init(Idx, this);
|
||||
}
|
||||
|
||||
ExtractValueInst::ExtractValueInst(const ExtractValueInst &EVI)
|
||||
: Instruction(reinterpret_cast<const Type*>(EVI.getType()), ExtractValue,
|
||||
OperandTraits<ExtractValueInst>::op_end(this)
|
||||
- EVI.getNumOperands(),
|
||||
EVI.getNumOperands()) {
|
||||
Use *OL = OperandList;
|
||||
Use *EVIOL = EVI.OperandList;
|
||||
for (unsigned i = 0, E = NumOperands; i != E; ++i)
|
||||
OL[i].init(EVIOL[i], this);
|
||||
}
|
||||
|
||||
// getIndexedType - Returns the type of the element that would be extracted
|
||||
// with an extractvalue instruction with the specified parameters.
|
||||
//
|
||||
@@ -2809,6 +2869,14 @@ VICmpInst* VICmpInst::clone() const {
|
||||
return new VICmpInst(getPredicate(), Op<0>(), Op<1>());
|
||||
}
|
||||
|
||||
ExtractValueInst *ExtractValueInst::clone() const {
|
||||
return new(getNumOperands()) ExtractValueInst(*this);
|
||||
}
|
||||
InsertValueInst *InsertValueInst::clone() const {
|
||||
return new(getNumOperands()) InsertValueInst(*this);
|
||||
}
|
||||
|
||||
|
||||
MallocInst *MallocInst::clone() const { return new MallocInst(*this); }
|
||||
AllocaInst *AllocaInst::clone() const { return new AllocaInst(*this); }
|
||||
FreeInst *FreeInst::clone() const { return new FreeInst(getOperand(0)); }
|
||||
|
Reference in New Issue
Block a user