mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-24 23:28:41 +00:00
Improved bitcode support for insertvalue/extractvalue.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51822 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -774,7 +774,7 @@ bool BitcodeReader::ParseConstants() {
|
|||||||
// CE_EXTRACTVAL: [opty, opval, n x indices]
|
// CE_EXTRACTVAL: [opty, opval, n x indices]
|
||||||
const Type *AggTy = getTypeByID(Record[0]);
|
const Type *AggTy = getTypeByID(Record[0]);
|
||||||
if (!AggTy || !AggTy->isAggregateType())
|
if (!AggTy || !AggTy->isAggregateType())
|
||||||
return Error("Invalid CE_INSERTVAL record");
|
return Error("Invalid CE_EXTRACTVAL record");
|
||||||
Constant *Agg = ValueList.getConstantFwdRef(Record[1], AggTy);
|
Constant *Agg = ValueList.getConstantFwdRef(Record[1], AggTy);
|
||||||
SmallVector<unsigned, 4> Indices;
|
SmallVector<unsigned, 4> Indices;
|
||||||
for (unsigned i = 2, e = Record.size(); i != e; ++i) {
|
for (unsigned i = 2, e = Record.size(); i != e; ++i) {
|
||||||
@@ -796,7 +796,7 @@ bool BitcodeReader::ParseConstants() {
|
|||||||
return Error("Invalid CE_INSERTVAL record");
|
return Error("Invalid CE_INSERTVAL record");
|
||||||
Constant *Agg = ValueList.getConstantFwdRef(Record[1], AggTy);
|
Constant *Agg = ValueList.getConstantFwdRef(Record[1], AggTy);
|
||||||
const Type *ValTy = getTypeByID(Record[2]);
|
const Type *ValTy = getTypeByID(Record[2]);
|
||||||
Constant *Val = ValueList.getConstantFwdRef(Record[2], ValTy);
|
Constant *Val = ValueList.getConstantFwdRef(Record[3], ValTy);
|
||||||
SmallVector<unsigned, 4> Indices;
|
SmallVector<unsigned, 4> Indices;
|
||||||
for (unsigned i = 4, e = Record.size(); i != e; ++i) {
|
for (unsigned i = 4, e = Record.size(); i != e; ++i) {
|
||||||
uint64_t Index = Record[i];
|
uint64_t Index = Record[i];
|
||||||
|
@@ -738,16 +738,23 @@ static void WriteInstruction(const Instruction &I, unsigned InstID,
|
|||||||
for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i)
|
for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i)
|
||||||
PushValueAndType(I.getOperand(i), InstID, Vals, VE);
|
PushValueAndType(I.getOperand(i), InstID, Vals, VE);
|
||||||
break;
|
break;
|
||||||
case Instruction::ExtractValue:
|
case Instruction::ExtractValue: {
|
||||||
Code = bitc::FUNC_CODE_INST_EXTRACTVAL;
|
Code = bitc::FUNC_CODE_INST_EXTRACTVAL;
|
||||||
for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i)
|
PushValueAndType(I.getOperand(0), InstID, Vals, VE);
|
||||||
PushValueAndType(I.getOperand(i), InstID, Vals, VE);
|
const ExtractValueInst *EVI = cast<ExtractValueInst>(&I);
|
||||||
|
for (const unsigned *i = EVI->idx_begin(), *e = EVI->idx_end(); i != e; ++i)
|
||||||
|
Vals.push_back(*i);
|
||||||
break;
|
break;
|
||||||
case Instruction::InsertValue:
|
}
|
||||||
|
case Instruction::InsertValue: {
|
||||||
Code = bitc::FUNC_CODE_INST_INSERTVAL;
|
Code = bitc::FUNC_CODE_INST_INSERTVAL;
|
||||||
for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i)
|
PushValueAndType(I.getOperand(0), InstID, Vals, VE);
|
||||||
PushValueAndType(I.getOperand(i), InstID, Vals, VE);
|
PushValueAndType(I.getOperand(1), InstID, Vals, VE);
|
||||||
|
const InsertValueInst *IVI = cast<InsertValueInst>(&I);
|
||||||
|
for (const unsigned *i = IVI->idx_begin(), *e = IVI->idx_end(); i != e; ++i)
|
||||||
|
Vals.push_back(*i);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case Instruction::Select:
|
case Instruction::Select:
|
||||||
Code = bitc::FUNC_CODE_INST_SELECT;
|
Code = bitc::FUNC_CODE_INST_SELECT;
|
||||||
PushValueAndType(I.getOperand(1), InstID, Vals, VE);
|
PushValueAndType(I.getOperand(1), InstID, Vals, VE);
|
||||||
|
Reference in New Issue
Block a user