<div dir="ltr">For the record this fixes a couple of low hanging fruit, but it could easily use a going over and more tests.<br><br><div class="gmail_quote"><div dir="ltr">On Thu, Jan 7, 2016 at 4:38 PM Eric Christopher via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: echristo<br>
Date: Thu Jan  7 18:34:44 2016<br>
New Revision: 257122<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=257122&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=257122&view=rev</a><br>
Log:<br>
Add some testing for thumb1 and thumb2 inline asm immediate constraints<br>
and fix a couple of bugs on inspection.<br>
<br>
Also fixes PR26061.<br>
<br>
Added:<br>
    llvm/trunk/test/CodeGen/ARM/inlineasm-imm-thumb.ll<br>
    llvm/trunk/test/CodeGen/ARM/inlineasm-imm-thumb2.ll<br>
Modified:<br>
    llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp<br>
<br>
Modified: llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp?rev=257122&r1=257121&r2=257122&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp?rev=257122&r1=257121&r2=257122&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp (original)<br>
+++ llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp Thu Jan  7 18:34:44 2016<br>
@@ -11475,7 +11475,7 @@ void ARMTargetLowering::LowerAsmOperandF<br>
         return;<br>
<br>
       case 'J':<br>
-        if (Subtarget->isThumb()) {  // FIXME thumb2<br>
+        if (Subtarget->isThumb1Only()) {<br>
           // This must be a constant between -255 and -1, for negated ADD<br>
           // immediates. This can be used in GCC with an "n" modifier that<br>
           // prints the negated value, for use with SUB instructions. It is<br>
@@ -11544,7 +11544,7 @@ void ARMTargetLowering::LowerAsmOperandF<br>
         return;<br>
<br>
       case 'M':<br>
-        if (Subtarget->isThumb()) { // FIXME thumb2<br>
+        if (Subtarget->isThumb1Only()) {<br>
           // This must be a multiple of 4 between 0 and 1020, for<br>
           // ADD sp + immediate.<br>
           if ((CVal >= 0 && CVal <= 1020) && ((CVal & 3) == 0))<br>
<br>
Added: llvm/trunk/test/CodeGen/ARM/inlineasm-imm-thumb.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/inlineasm-imm-thumb.ll?rev=257122&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/inlineasm-imm-thumb.ll?rev=257122&view=auto</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/ARM/inlineasm-imm-thumb.ll (added)<br>
+++ llvm/trunk/test/CodeGen/ARM/inlineasm-imm-thumb.ll Thu Jan  7 18:34:44 2016<br>
@@ -0,0 +1,20 @@<br>
+; RUN: llc -mtriple=thumbv5-none-linux-gnueabi -no-integrated-as %s -o /dev/null<br>
+<br>
+; Test thumb-mode "I" constraint, for any Data Processing immediate.<br>
+define void @testI() {<br>
+       tail call void asm sideeffect ".word $0", "I"( i32 255 ) nounwind<br>
+       ret void<br>
+}<br>
+<br>
+; Test thumb-mode "J" constraint, for compatibility with unknown use in GCC.<br>
+define void @testJ() {<br>
+       tail call void asm sideeffect ".word $0", "J"( i32 -254 ) nounwind<br>
+       ret void<br>
+}<br>
+<br>
+; Test thumb-mode "L" constraint, for negated Data Processing immediates.<br>
+define void @testL() {<br>
+       tail call void asm sideeffect ".word $0", "L"( i32 -7 ) nounwind<br>
+       ret void<br>
+}<br>
+<br>
<br>
Added: llvm/trunk/test/CodeGen/ARM/inlineasm-imm-thumb2.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/inlineasm-imm-thumb2.ll?rev=257122&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/inlineasm-imm-thumb2.ll?rev=257122&view=auto</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/ARM/inlineasm-imm-thumb2.ll (added)<br>
+++ llvm/trunk/test/CodeGen/ARM/inlineasm-imm-thumb2.ll Thu Jan  7 18:34:44 2016<br>
@@ -0,0 +1,31 @@<br>
+; RUN: llc -mtriple=thumbv7-linux-gnu -no-integrated-as %s -o /dev/null<br>
+<br>
+; Test thumb2-mode "I" constraint, for any Data Processing immediate.<br>
+define i32 @testI(i32 %x) {<br>
+       %y = call i32 asm "add $0, $1, $2", "=r,r,I"( i32 %x, i32 65280 ) nounwind<br>
+       ret i32 %y<br>
+}<br>
+<br>
+; Test thumb2-mode "J" constraint, for compatibility with unknown use in GCC.<br>
+define void @testJ() {<br>
+       tail call void asm sideeffect ".word $0", "J"( i32 4080 ) nounwind<br>
+       ret void<br>
+}<br>
+<br>
+; Test thumb2-mode "K" constraint, for bitwise inverted Data Processing immediates.<br>
+define void @testK() {<br>
+       tail call void asm sideeffect ".word $0", "K"( i32 16777215 ) nounwind<br>
+       ret void<br>
+}<br>
+<br>
+; Test thumb2-mode "L" constraint, for negated Data Processing immediates.<br>
+define void @testL() {<br>
+       tail call void asm sideeffect ".word $0", "L"( i32 -65280 ) nounwind<br>
+       ret void<br>
+}<br>
+<br>
+; Test thumb2-mode "M" constraint, for value between 0 and 32.<br>
+define i32 @testM(i32 %x) {<br>
+       %y = call i32 asm "lsl $0, $1, $2", "=r,r,M"( i32 %x, i32 31 ) nounwind<br>
+       ret i32 %y<br>
+}<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div></div>