[LLVMbugs] [Bug 20978] New: Inline assembly handling of adding negative numbers not as smart as gcc's

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Wed Sep 17 10:34:44 PDT 2014


            Bug ID: 20978
           Summary: Inline assembly handling of adding negative numbers
                    not as smart as gcc's
           Product: clang
           Version: trunk
          Hardware: Other
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: -New Bugs
          Assignee: unassignedclangbugs at nondot.org
          Reporter: bero at lindev.ch
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified

Created attachment 13047
  --> http://llvm.org/bugs/attachment.cgi?id=13047&action=edit
test case

Compiling the attached test case with clang -target aarch64-linux-android -O2
-c test.c -o test.o results in

test.c:5:3: error: expected compatible register, symbol or integer in range
      [0, 4095]
                "add %w[result], %w[result], %w[num]    \n\t"
<inline asm>:1:14: note: instantiated into assembly here
        add w0, w0, #4294967295 
1 error generated.

This is not unreasonable, given add doesn't take a negative number and the
constraint is set to IJr (J --> valid for sub --> doesn't catch the -1).

However, gcc (tested Linaro 4.9-2014.09, but it's probably the same for older
gcc, the code has compiled with gcc forever) compiles the code just fine,
recognizes what it meant to do, and generates
        sub w0, w0, #1

It would be nice if clang could match - better compatibility and the generated
code is better than what could be achieved by the workarounds (changing the
constraint to Ir or adding an if clause for add vs. sub).

You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20140917/91c652ec/attachment.html>

More information about the llvm-bugs mailing list