<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Feb 3, 2015 at 12:55 PM, Reid Kleckner <span dir="ltr"><<a href="mailto:rnk@google.com" target="_blank">rnk@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>lgtm</div><div><br></div><div>+</div><div>+// No warnings expected.</div><div><br></div><div>Consider adding "// CHECK-NOT: warning:" to verify this.</div></div></blockquote><div><br></div><div>Hmm, we really should teach -verify to be able to check for fixits so we can avoid using FileCheck for this kind of test.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_extra"><div class="gmail_quote"><div><div class="h5">On Tue, Feb 3, 2015 at 11:53 AM, Akira Hatanaka <span dir="ltr"><<a href="mailto:ahatanak@gmail.com" target="_blank">ahatanak@gmail.com</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div dir="ltr">ping</div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Nov 3, 2014 at 1:07 PM, Akira Hatanaka <span dir="ltr"><<a href="mailto:ahatanak@gmail.com" target="_blank">ahatanak@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">ping</div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Oct 15, 2014 at 9:27 AM, Akira Hatanaka <span dir="ltr"><<a href="mailto:ahatanak@gmail.com" target="_blank">ahatanak@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div style="font-family:arial,sans-serif;font-size:13px">There were mistakes in my previous email. The correct mapping should be like this:</div><span><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">%0 => "+r" (one) => ConstraintIdx = 0</div><div style="font-family:arial,sans-serif;font-size:13px">%1 => "+r" (two) => ConstraintIdx = 1</div></span><div style="font-family:arial,sans-serif;font-size:13px">%2 => "r" (three) => ConstraintIdx = 2</div><div style="font-family:arial,sans-serif;font-size:13px">%3 => "+r" (one) => ConstraintIdx = 0</div><div style="font-family:arial,sans-serif;font-size:13px">%4 => "+r" (two) => ConstraintIdx = 1</div></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Oct 15, 2014 at 8:36 AM, Akira Hatanaka <span dir="ltr"><<a href="mailto:ahatanak@gmail.com" target="_blank">ahatanak@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">The attached patch fixes a bug in Sema::ActOnGCCAsmStmt where it wasn't computing the corresponding ConstraintIdx from an operand number correctly when there were constraints with the '+' modifier.<div><br></div><div>For example, when the following inline-asm statement is compiled,</div><div><br></div><div><div>void g2(int one, int two, int three) {</div><div>  asm volatile ("%0 %1 %2 %3 %4" : "+r" (one), "+r"(two) : "r"(three));<br></div><div>}</div></div><div><br></div><div>the existing code maps the operand number in the assembly template to ConstraintIdx in the following way:</div><div><br></div><div>%0 => "+r" (one) => ConstraintIdx = 0</div><div><div>%1 => "+r" (one) => ConstraintIdx = 0</div></div><div><div>%2 => "+r" (two) => ConstraintIdx = 1</div></div><div><div>%3 => "+r" (two) => ConstraintIdx = 1</div></div><div><div>%4 => "+r" (three) => ConstraintIdx = 2</div></div><div><br></div><div><div>The correct mapping should be like this:</div><div><br></div></div><div><div>%0 => "+r" (one) => ConstraintIdx = 0</div><div>%1 => "+r" (two) => ConstraintIdx = 1</div><div>%3 => "+r" (three) => ConstraintIdx = 2</div><div>%4 => "+r" (one) => ConstraintIdx = 0</div><div>%5 => "+r" (two) => ConstraintIdx = 1<br></div></div><div><br></div><div>I couldn't find the rule documented anywhere in the link below, but judging from the code I see in CodeGenFunction::EmitAsmStmt and the IR clang generates, I believe this is the correct way to find the corresponding constraint.</div><div><br></div><div><a href="https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html" target="_blank">https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html</a></div><div> </div><div>This is the IR generated:</div><div><br></div><div>%1 = tail call { i32, i32 } asm sideeffect "$0 $1 $2 $3 $4", "=r,=r,r,0,1"(i32 %three, i32 %one, i32 %two)</div></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div><br></div></div>_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
<br></blockquote></div><br></div>
<br>_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
<br></blockquote></div><br></div></div>