mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-01 00:33:09 +00:00
Implement another getelementptr folding opportunity that arises when
linking stuff with appending linkage git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6180 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9bc02a4deb
commit
0ec3590664
@ -150,6 +150,22 @@ Constant *ConstantFoldGetElementPtr(const Constant *C,
|
||||
// If C is null and all idx's are null, return null of the right type.
|
||||
|
||||
// FIXME: Implement folding of GEP constant exprs the same as instcombine does
|
||||
|
||||
// Implement folding of:
|
||||
// int* getelementptr ([2 x int]* cast ([3 x int]* %X to [2 x int]*),
|
||||
// long 0, long 0)
|
||||
// To: int* getelementptr ([3 x int]* %X, long 0, long 0)
|
||||
//
|
||||
if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(C))
|
||||
if (CE->getOpcode() == Instruction::Cast && IdxList.size() > 1)
|
||||
if (const PointerType *SPT =
|
||||
dyn_cast<PointerType>(CE->getOperand(0)->getType()))
|
||||
if (const ArrayType *SAT = dyn_cast<ArrayType>(SPT->getElementType()))
|
||||
if (const ArrayType *CAT =
|
||||
dyn_cast<ArrayType>(cast<PointerType>(C->getType())->getElementType()))
|
||||
if (CAT->getElementType() == SAT->getElementType())
|
||||
return ConstantExpr::getGetElementPtr(
|
||||
(Constant*)cast<Constant>(CE->getOperand(0)), IdxList);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user