<div dir="ltr">On Sat, Jun 8, 2013 at 5:20 PM, JF Bastien <span dir="ltr"><<a href="mailto:jfb@google.com" target="_blank" class="cremed">jfb@google.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: jfb<br>
Date: Sat Jun  8 19:20:24 2013<br>
New Revision: 183624<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=183624&view=rev" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-project?rev=183624&view=rev</a><br>
Log:<br>
ARM FastISel fix load register classes<br>
<br>
The register classes when emitting loads weren't quite restricting enough, leading to MI verification failure on the result register.<br>
<br>
These are new failures that weren't there the first time I tried enabling ARM FastISel for new targets.<br></blockquote><div><br></div><div>Is this something you can add a regression test that specifically exercises the issue so we don't regress? (I realize that you can likely reproduce this just be enabling various verifiers on existing tests, or enabling fast isel on them, but it'd be good to explicitly test the things you end up fixing.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Modified:<br>
    llvm/trunk/lib/Target/ARM/ARMFastISel.cpp<br>
<br>
Modified: llvm/trunk/lib/Target/ARM/ARMFastISel.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMFastISel.cpp?rev=183624&r1=183623&r2=183624&view=diff" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMFastISel.cpp?rev=183624&r1=183623&r2=183624&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/Target/ARM/ARMFastISel.cpp (original)<br>
+++ llvm/trunk/lib/Target/ARM/ARMFastISel.cpp Sat Jun  8 19:20:24 2013<br>
@@ -1026,7 +1026,7 @@ bool ARMFastISel::ARMEmitLoad(MVT VT, un<br>
           useAM3 = true;<br>
         }<br>
       }<br>
-      RC = &ARM::GPRRegClass;<br>
+      RC = isThumb2 ? &ARM::rGPRRegClass : &ARM::GPRnopcRegClass;<br>
       break;<br>
     case MVT::i16:<br>
       if (Alignment && Alignment < 2 && !Subtarget->allowsUnalignedMem())<br>
@@ -1041,7 +1041,7 @@ bool ARMFastISel::ARMEmitLoad(MVT VT, un<br>
         Opc = isZExt ? ARM::LDRH : ARM::LDRSH;<br>
         useAM3 = true;<br>
       }<br>
-      RC = &ARM::GPRRegClass;<br>
+      RC = isThumb2 ? &ARM::rGPRRegClass : &ARM::GPRnopcRegClass;<br>
       break;<br>
     case MVT::i32:<br>
       if (Alignment && Alignment < 4 && !Subtarget->allowsUnalignedMem())<br>
@@ -1055,7 +1055,7 @@ bool ARMFastISel::ARMEmitLoad(MVT VT, un<br>
       } else {<br>
         Opc = ARM::LDRi12;<br>
       }<br>
-      RC = &ARM::GPRRegClass;<br>
+      RC = isThumb2 ? &ARM::rGPRRegClass : &ARM::GPRnopcRegClass;<br>
       break;<br>
     case MVT::f32:<br>
       if (!Subtarget->hasVFP2()) return false;<br>
@@ -1064,7 +1064,7 @@ bool ARMFastISel::ARMEmitLoad(MVT VT, un<br>
         needVMOV = true;<br>
         VT = MVT::i32;<br>
         Opc = isThumb2 ? ARM::t2LDRi12 : ARM::LDRi12;<br>
-        RC = &ARM::GPRRegClass;<br>
+        RC = isThumb2 ? &ARM::rGPRRegClass : &ARM::GPRnopcRegClass;<br>
       } else {<br>
         Opc = ARM::VLDRS;<br>
         RC = TLI.getRegClassFor(VT);<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu" class="cremed">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank" class="cremed">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div>