Remember to promote load/store types for stack to register size.
authorEric Christopher <echristo@apple.com>
Thu, 7 Oct 2010 21:40:18 +0000 (21:40 +0000)
committerEric Christopher <echristo@apple.com>
Thu, 7 Oct 2010 21:40:18 +0000 (21:40 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115984 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMFastISel.cpp

index 497259c40719133a48f650ba671c0e9b466eab0e..05209aa2f192624e41097cf2420c6d378192671c 100644 (file)
@@ -629,6 +629,9 @@ bool ARMFastISel::ARMComputeRegOffset(const Value *Obj, unsigned &Reg,
 bool ARMFastISel::ARMLoadAlloca(const Instruction *I, EVT VT) {
   Value *Op0 = I->getOperand(0);
 
+  // Promote load/store types.
+  if (VT == MVT::i8 || VT == MVT::i16) VT = MVT::i32;
+
   // Verify it's an alloca.
   if (const AllocaInst *AI = dyn_cast<AllocaInst>(Op0)) {
     DenseMap<const AllocaInst*, int>::iterator SI =
@@ -735,6 +738,9 @@ bool ARMFastISel::SelectLoad(const Instruction *I) {
 bool ARMFastISel::ARMStoreAlloca(const Instruction *I, unsigned SrcReg, EVT VT){
   Value *Op1 = I->getOperand(1);
 
+  // Promote load/store types.
+  if (VT == MVT::i8 || VT == MVT::i16) VT = MVT::i32;
+
   // Verify it's an alloca.
   if (const AllocaInst *AI = dyn_cast<AllocaInst>(Op1)) {
     DenseMap<const AllocaInst*, int>::iterator SI =