[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
http://llvm.org/bugs/show_bug.cgi?id=20978
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