mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-17 06:33:21 +00:00
Preserve load alignment in instcombine transformations. I've been unable to
create a testcase where this matters. The select+load transformation only occurs when isSafeToLoadUnconditionally is true, and in those situations, instcombine also changes the underlying objects to be aligned. This seems like a good idea regardless, and I've verified that it doesn't pessimize the subsequent realignment. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@94850 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e3a1e50680
commit
fb2ea6130d
@ -117,6 +117,7 @@ static Instruction *InstCombineLoadCast(InstCombiner &IC, LoadInst &LI,
|
||||
// the result of the loaded value.
|
||||
Value *NewLoad =
|
||||
IC.Builder->CreateLoad(CastOp, LI.isVolatile(), CI->getName());
|
||||
cast<LoadInst>(NewLoad)->setAlignment(LI.getAlignment());
|
||||
// Now cast the result of the load.
|
||||
return new BitCastInst(NewLoad, LI.getType());
|
||||
}
|
||||
@ -205,6 +206,8 @@ Instruction *InstCombiner::visitLoadInst(LoadInst &LI) {
|
||||
SI->getOperand(1)->getName()+".val");
|
||||
Value *V2 = Builder->CreateLoad(SI->getOperand(2),
|
||||
SI->getOperand(2)->getName()+".val");
|
||||
cast<LoadInst>(V1)->setAlignment(LI.getAlignment());
|
||||
cast<LoadInst>(V2)->setAlignment(LI.getAlignment());
|
||||
return SelectInst::Create(SI->getCondition(), V1, V2);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user