mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-14 02:33:53 +00:00
Don't crash SPU BE with memory accesses with big alignmnet.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123620 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5de5d4b6d0
commit
8702e8be8d
@ -560,7 +560,7 @@ LowerLOAD(SDValue Op, SelectionDAG &DAG, const SPUSubtarget *ST) {
|
||||
assert( LN->getAddressingMode() == ISD::UNINDEXED
|
||||
&& "we should get only UNINDEXED adresses");
|
||||
// clean aligned loads can be selected as-is
|
||||
if (InVT.getSizeInBits() == 128 && alignment == 16)
|
||||
if (InVT.getSizeInBits() == 128 && (alignment%16) == 0)
|
||||
return SDValue();
|
||||
|
||||
// Get pointerinfos to the memory chunk(s) that contain the data to load
|
||||
@ -573,7 +573,7 @@ LowerLOAD(SDValue Op, SelectionDAG &DAG, const SPUSubtarget *ST) {
|
||||
SDValue basePtr = LN->getBasePtr();
|
||||
SDValue rotate;
|
||||
|
||||
if (alignment == 16) {
|
||||
if ((alignment%16) == 0) {
|
||||
ConstantSDNode *CN;
|
||||
|
||||
// Special cases for a known aligned load to simplify the base pointer
|
||||
@ -777,7 +777,7 @@ LowerSTORE(SDValue Op, SelectionDAG &DAG, const SPUSubtarget *ST) {
|
||||
assert( SN->getAddressingMode() == ISD::UNINDEXED
|
||||
&& "we should get only UNINDEXED adresses");
|
||||
// clean aligned loads can be selected as-is
|
||||
if (StVT.getSizeInBits() == 128 && alignment == 16)
|
||||
if (StVT.getSizeInBits() == 128 && (alignment%16) == 0)
|
||||
return SDValue();
|
||||
|
||||
SDValue alignLoadVec;
|
||||
@ -785,7 +785,7 @@ LowerSTORE(SDValue Op, SelectionDAG &DAG, const SPUSubtarget *ST) {
|
||||
SDValue the_chain = SN->getChain();
|
||||
SDValue insertEltOffs;
|
||||
|
||||
if (alignment == 16) {
|
||||
if ((alignment%16) == 0) {
|
||||
ConstantSDNode *CN;
|
||||
// Special cases for a known aligned load to simplify the base pointer
|
||||
// and insertion byte:
|
||||
|
@ -162,3 +162,12 @@ define void @store_misaligned( i32 %val, i32* %ptr) {
|
||||
store i32 %val, i32*%ptr, align 2
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @store_v8( <8 x float> %val, <8 x float>* %ptr )
|
||||
{
|
||||
;CHECK: stq
|
||||
;CHECK: stq
|
||||
;CHECK: bi $lr
|
||||
store <8 x float> %val, <8 x float>* %ptr
|
||||
ret void
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user