[llvm-commits] [llvm] r112568 - /llvm/trunk/lib/Target/ARM/ARMFastISel.cpp

Eric Christopher echristo at apple.com
Mon Aug 30 18:28:42 PDT 2010


Author: echristo
Date: Mon Aug 30 20:28:42 2010
New Revision: 112568

URL: http://llvm.org/viewvc/llvm-project?rev=112568&view=rev
Log:
Rewrite slightly so we can expand for floating point types easier.

Modified:
    llvm/trunk/lib/Target/ARM/ARMFastISel.cpp

Modified: llvm/trunk/lib/Target/ARM/ARMFastISel.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMFastISel.cpp?rev=112568&r1=112567&r2=112568&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMFastISel.cpp (original)
+++ llvm/trunk/lib/Target/ARM/ARMFastISel.cpp Mon Aug 30 20:28:42 2010
@@ -318,8 +318,9 @@
   // Only handle simple types.
   if (VT == MVT::Other || !VT.isSimple()) return false;
   
-  // For now, only handle 32-bit types.
-  return VT == MVT::i32;
+  // Handle all legal types, i.e. a register that will directly hold this
+  // value.
+  return TLI.isTypeLegal(VT);
 }
 
 // Computes the Reg+Offset to get to an object.
@@ -387,7 +388,6 @@
       return true;
     }
   }
-  
   return false;
 }
 
@@ -395,25 +395,33 @@
                               unsigned Reg, int Offset) {
   
   assert(VT.isSimple() && "Non-simple types are invalid here!");
+  
+  bool isThumb = AFI->isThumbFunction();
+  unsigned Opc;
+  
   switch (VT.getSimpleVT().SimpleTy) {
     default: 
       assert(false && "Trying to emit for an unhandled type!");
       return false;
-    case MVT::i32: {
-      ResultReg = createResultReg(ARM::GPRRegisterClass);
-      // TODO: Fix the Addressing modes so that these can share some code.
-      // Since this is a Thumb1 load this will work in Thumb1 or 2 mode.
-      if (AFI->isThumbFunction())
-        AddOptionalDefs(BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL,
-                                TII.get(ARM::tLDR), ResultReg)
-                        .addReg(Reg).addImm(Offset).addReg(0));
-      else
-        AddOptionalDefs(BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL,
-                                TII.get(ARM::LDR), ResultReg)
-                        .addReg(Reg).addReg(0).addImm(Offset));
-      return true;
-    }
-  }
+    case MVT::i32:
+      Opc = isThumb ? ARM::tLDR : ARM::LDR;
+      break;
+  }
+  
+  ResultReg = createResultReg(TLI.getRegClassFor(VT));
+  
+  // TODO: Fix the Addressing modes so that these can share some code.
+  // Since this is a Thumb1 load this will work in Thumb1 or 2 mode.
+  if (isThumb)
+    AddOptionalDefs(BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL,
+                            TII.get(Opc), ResultReg)
+                    .addReg(Reg).addImm(Offset).addReg(0));
+  else
+    AddOptionalDefs(BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL,
+                            TII.get(Opc), ResultReg)
+                    .addReg(Reg).addReg(0).addImm(Offset));
+                    
+  return true;
 }
 
 bool ARMFastISel::ARMSelectLoad(const Instruction *I) {





More information about the llvm-commits mailing list