mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-09 01:38:03 +00:00
R600/SI: Wrap local memory pointer in AssertZExt on SI
These pointers are really just offsets and they will always be less than 16-bits. Using AssertZExt allows us to use computeKnownBits to prove that these values are positive. We will use this information in a later commit. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216277 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9048dc6867
commit
80544654f3
@ -504,6 +504,18 @@ SDValue SITargetLowering::LowerFormalArguments(
|
||||
SDValue Arg = LowerParameter(DAG, VT, MemVT, DL, DAG.getRoot(),
|
||||
36 + VA.getLocMemOffset(),
|
||||
Ins[i].Flags.isSExt());
|
||||
|
||||
const PointerType *ParamTy =
|
||||
dyn_cast<PointerType>(FType->getParamType(Ins[i].OrigArgIndex));
|
||||
if (Subtarget->getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS &&
|
||||
ParamTy && ParamTy->getAddressSpace() == AMDGPUAS::LOCAL_ADDRESS) {
|
||||
// On SI local pointers are just offsets into LDS, so they are always
|
||||
// less than 16-bits. On CI and newer they could potentially be
|
||||
// real pointers, so we can't guarantee their size.
|
||||
Arg = DAG.getNode(ISD::AssertZext, DL, Arg.getValueType(), Arg,
|
||||
DAG.getValueType(MVT::i16));
|
||||
}
|
||||
|
||||
InVals.push_back(Arg);
|
||||
continue;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user