[llvm-commits] [PATCH] - Bug 8621 - inline asm - please review
John Thompson
john.thompson.jtsoftware at gmail.com
Wed Nov 17 15:31:14 PST 2010
Chris, you are too quick!
Thanks. (Or the response in the bug report.)
-John
On Wed, Nov 17, 2010 at 3:29 PM, John Thompson <
john.thompson.jtsoftware at gmail.com> wrote:
> From my comment to the bug:
>
> It looks like a problem with the back end.
>
> I reduced the test case to:
>
> void func()
> {
> unsigned int src = 0, dst = 0;
> static const unsigned long flagmask = 1;
> unsigned long flags = 1;
> unsigned long newflags = ~(0UL);
> asm (
> "pushfq \n"
> "andq %2, (%%rsp) \n"
> "orq %3, (%%rsp) \n"
> "popfq \n"
> "addb %4, %1 \n"
> "pushfq \n"
> "popq %0 \n"
> :
> "=&rm" (newflags) ,
> "=&rm" (*(unsigned char *)&dst)
> :
> "i" (~flagmask) ,
> "r" (flags & flagmask) ,
> "r" (*(unsigned char *)&src) ,
> "1" (*(unsigned char *)&dst)
> : "cc");
> }
>
> The constraints involved in the problem are index 1 and 5, which we see do
> match types in the above code.
>
> This change seems to fix it:
>
> Index: lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
> ===================================================================
> --- lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp (revision 119175)
> +++ lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp (working copy)
> @@ -5545,9 +5545,6 @@
> // If this is an input or an indirect output, process the call
> argument.
> // BasicBlocks are labels, currently appearing only in asm's.
> if (OpInfo.CallOperandVal) {
> - // Strip bitcasts, if any. This mostly comes up for functions.
> - OpInfo.CallOperandVal = OpInfo.CallOperandVal->stripPointerCasts();
> -
> if (const BasicBlock *BB =
> dyn_cast<BasicBlock>(OpInfo.CallOperandVal)) {
> OpInfo.CallOperand = DAG.getBasicBlock(FuncInfo.MBBMap[BB]);
> } else {
>
> The removed code apparently was stripping the pointer cast. I don't know
> the original reason for it.
>
> I ran the LLVM regression tests, test suite, and gcc tests, with no
> differences. Does this seem like the correct fix? If so, let me know and
> I'll check this in. Or was there a reason for the cast stripping?
>
> It doesn't appear to be related to my inline asm work.
>
> -John
>
>
> --
> John Thompson
> John.Thompson.JTSoftware at gmail.com
>
>
--
John Thompson
John.Thompson.JTSoftware at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20101117/71fe4517/attachment.html>
More information about the llvm-commits
mailing list