[PATCH] x86 inline-asm: error-out on a 64-bit variable bound to a single register in 32-bit mode

Akira Hatanaka ahatanak at gmail.com
Wed Jul 23 15:56:23 PDT 2014


llvm should error-out when a 64-bit variable is bound to a single register
in x86 32-bit mode, but ToT clang/llvm fails to detect this error and
continues compilation until it crashes in type-legalization:

$ llc test/CodeGen/X86/inline-asm-regsize.ll  -O3
-mtriple=i386-apple-darwin -o -

inline-asm-regsize.ll  -O3 -mtriple=i386-apple-darwin -o -

.section __TEXT,__text,regular,pure_instructions

ExpandIntegerResult #0: 0x7fa2d1041728: i64 = Register %RCX [ID=0]


Do not know how to expand the result of this operator!

UNREACHABLE executed at
/Users/ahatanaka/projects/llvm/git/llvm3/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp:1116!

The attached patch fixes llvm to error-out and print this error message:

error: Cannot bind a variable larger than 32-bit to a single register in
32-bit mode


My initial solution was to have clang detect this error in
TargetInfo::validateConstraintModifier. However, the code in
SemaStmtAsm.cpp has to be changed to error-out instead of issuing a
warning, which I wasn't sure was the right thing to do. I am attaching this
patch too in case someone has a suggestion or an opinion on it.

<rdar://problem/17476970>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140723/4369dffc/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: x86inlineasm-regsize1.patch
Type: application/octet-stream
Size: 5685 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140723/4369dffc/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: x86inlineasm-clang1.patch
Type: application/octet-stream
Size: 750 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140723/4369dffc/attachment-0001.obj>


More information about the llvm-commits mailing list