mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-09 11:25:55 +00:00
Add insertvalue and extractvalue folding support in IRBuilder.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53931 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -573,29 +573,40 @@ public:
|
|||||||
return Insert(new GetResultInst(V, Index), Name);
|
return Insert(new GetResultInst(V, Index), Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
ExtractValueInst *CreateExtractValue(Value *Agg, unsigned Idx,
|
Value *CreateExtractValue(Value *Agg, unsigned Idx,
|
||||||
const char *Name = "") {
|
const char *Name = "") {
|
||||||
|
if (Constant *AggC = dyn_cast<Constant>(Agg))
|
||||||
|
return ConstantExpr::getExtractValue(AggC, &Idx, 1);
|
||||||
return Insert(ExtractValueInst::Create(Agg, Idx), Name);
|
return Insert(ExtractValueInst::Create(Agg, Idx), Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename InputIterator>
|
template<typename InputIterator>
|
||||||
ExtractValueInst *CreateExtractValue(Value *Agg,
|
Value *CreateExtractValue(Value *Agg,
|
||||||
InputIterator IdxBegin,
|
InputIterator IdxBegin,
|
||||||
InputIterator IdxEnd,
|
InputIterator IdxEnd,
|
||||||
const char *Name = "") {
|
const char *Name = "") {
|
||||||
|
if (Constant *AggC = dyn_cast<Constant>(Agg))
|
||||||
|
return ConstantExpr::getExtractValue(AggC, IdxBegin, IdxEnd - IdxBegin);
|
||||||
return Insert(ExtractValueInst::Create(Agg, IdxBegin, IdxEnd), Name);
|
return Insert(ExtractValueInst::Create(Agg, IdxBegin, IdxEnd), Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
InsertValueInst *CreateInsertValue(Value *Agg, Value *Val, unsigned Idx,
|
Value *CreateInsertValue(Value *Agg, Value *Val, unsigned Idx,
|
||||||
const char *Name = "") {
|
const char *Name = "") {
|
||||||
|
if (Constant *AggC = dyn_cast<Constant>(Agg))
|
||||||
|
if (Constant *ValC = dyn_cast<Constant>(Val))
|
||||||
|
return ConstantExpr::getInsertValue(AggC, ValC, &Idx, 1);
|
||||||
return Insert(InsertValueInst::Create(Agg, Val, Idx), Name);
|
return Insert(InsertValueInst::Create(Agg, Val, Idx), Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename InputIterator>
|
template<typename InputIterator>
|
||||||
InsertValueInst *CreateInsertValue(Value *Agg, Value *Val,
|
Value *CreateInsertValue(Value *Agg, Value *Val,
|
||||||
InputIterator IdxBegin,
|
InputIterator IdxBegin,
|
||||||
InputIterator IdxEnd,
|
InputIterator IdxEnd,
|
||||||
const char *Name = "") {
|
const char *Name = "") {
|
||||||
|
if (Constant *AggC = dyn_cast<Constant>(Agg))
|
||||||
|
if (Constant *ValC = dyn_cast<Constant>(Val))
|
||||||
|
return ConstantExpr::getInsertValue(AggC, ValC,
|
||||||
|
IdxBegin, IdxEnd - IdxBegin);
|
||||||
return Insert(InsertValueInst::Create(Agg, Val, IdxBegin, IdxEnd), Name);
|
return Insert(InsertValueInst::Create(Agg, Val, IdxBegin, IdxEnd), Name);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user