Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Inline assembly constraint "X" triggers assert #26867

Closed
kbeyls opened this issue Feb 5, 2016 · 7 comments
Closed

Inline assembly constraint "X" triggers assert #26867

kbeyls opened this issue Feb 5, 2016 · 7 comments
Assignees
Labels
backend:ARM bugzilla Issues migrated from bugzilla

Comments

@kbeyls
Copy link
Collaborator

kbeyls commented Feb 5, 2016

Bugzilla Link 26493
Resolution FIXED
Resolved on May 10, 2016 04:49
Version trunk
OS All
Blocks #21794 #27571
CC @rengolin,@sbaranga-arm,@stephenhines

Extended Description

When trying to build https://gitorious.org/arm-neon-tests/arm-neon-tests with clang, clang crashes with assertion failures.

Below are 2 small reproducers, which each trigger a different assert. These snippets use the "X" inline assembly constraint to avoid the inline assembly being reordered with the computations happening later. The technique is explained in detail at http://www.ethernut.de/en/documents/arm-inline-asm.html, under section "C code optimization".

$ cat t2.c
double f2(double f, int pscr_value) {
asm volatile("vmsr fpscr,%1" : "=X" ((f)): "r" (pscr_value));
return f+f;
}
$ cat t3.c
typedef signed char int8_t;
typedef attribute((neon_vector_type(8))) int8_t int8x8_t;
void f (void)
{
int8x8_t vector_res_int8x8;
unsigned int fpscr;
asm volatile ("vmsr fpscr,%1" : "=X" ((vector_res_int8x8)) : "r" (fpscr));
}
$ ~/dev/llvm.org/build/bin/clang -target armv7a-none-eabi -c -mcpu=cortex-a9 -mfloat-abi=hard -S -O -o- t2.c
.text
.syntax unified
.eabi_attribute 67, "2.09" @ Tag_conformance
.cpu cortex-a9
.eabi_attribute 6, 10 @ Tag_CPU_arch
.eabi_attribute 7, 65 @ Tag_CPU_arch_profile
.eabi_attribute 8, 1 @ Tag_ARM_ISA_use
.eabi_attribute 9, 2 @ Tag_THUMB_ISA_use
.fpu neon-fp16
.eabi_attribute 17, 1 @ Tag_ABI_PCS_GOT_use
.eabi_attribute 20, 1 @ Tag_ABI_FP_denormal
.eabi_attribute 21, 1 @ Tag_ABI_FP_exceptions
.eabi_attribute 23, 3 @ Tag_ABI_FP_number_model
.eabi_attribute 34, 0 @ Tag_CPU_unaligned_access
.eabi_attribute 24, 1 @ Tag_ABI_align_needed
.eabi_attribute 25, 1 @ Tag_ABI_align_preserved
.eabi_attribute 28, 1 @ Tag_ABI_VFP_args
.eabi_attribute 36, 1 @ Tag_FP_HP_extension
.eabi_attribute 38, 1 @ Tag_ABI_FP_16bit_format
.eabi_attribute 42, 1 @ Tag_MPextension_use
.eabi_attribute 18, 4 @ Tag_ABI_PCS_wchar_t
.eabi_attribute 26, 2 @ Tag_ABI_enum_size
.eabi_attribute 14, 0 @ Tag_ABI_PCS_R9_use
.eabi_attribute 68, 1 @ Tag_Virtualization_use
.file "t2.c"
Assertion failed: (ConstraintID != InlineAsm::Constraint_Unknown && "Failed to convert memory constraint code to constraint id."), function visitInlineAsm, file /Users/kribey01/dev/llvm.org/llvm-clang-compiler-rt
/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp, line 6401.
0 clang-3.9 0x0000000101f6f96b llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 43
1 clang-3.9 0x0000000101f6ebe6 llvm::sys::RunSignalHandlers() + 70
2 clang-3.9 0x0000000101f70012 SignalHandler(int) + 322
3 libsystem_platform.dylib 0x00007fff8e779f1a _sigtramp + 26
4 clang-3.9 0x0000000104041fd7 clang::Stmt::StatisticsEnabled + 92386
5 clang-3.9 0x0000000101f6fe26 abort + 22
6 clang-3.9 0x0000000101f6fe01 __assert_rtn + 81
7 clang-3.9 0x00000001025e4eff llvm::SelectionDAGBuilder::visitInlineAsm(llvm::ImmutableCallSite) + 15695
8 clang-3.9 0x00000001025cd895 llvm::SelectionDAGBuilder::visit(llvm::Instruction const&) + 69
9 clang-3.9 0x000000010264c2e8 llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator<llvm::Instruction const>, llvm::ilist_iterator<llvm::Instruction const>, bool&) + 40
10 clang-3.9 0x000000010264bf74 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) + 6612
11 clang-3.9 0x0000000102649554 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) + 2020
12 clang-3.9 0x000000010108f4f4 (anonymous namespace)::ARMDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) + 20
13 clang-3.9 0x00000001019b94dc llvm::MachineFunctionPass::runOnFunction(llvm::Function&) + 140
14 clang-3.9 0x0000000101b9acd8 llvm::FPPassManager::runOnFunction(llvm::Function&) + 328
15 clang-3.9 0x0000000101b9af2b llvm::FPPassManager::runOnModule(llvm::Module&) + 43
16 clang-3.9 0x0000000101b9b3b6 llvm::legacy::PassManagerImpl::run(llvm::Module&) + 806
17 clang-3.9 0x00000001020cb6be clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Modu
le*, clang::BackendAction, llvm::raw_pwrite_stream*) + 8750
18 clang-3.9 0x000000010223c502 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) + 514
19 clang-3.9 0x000000010290cdd5 clang::ParseAST(clang::Sema&, bool, bool) + 581
20 clang-3.9 0x000000010240c69b clang::FrontendAction::Execute() + 75
21 clang-3.9 0x00000001023d2e81 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 1073
22 clang-3.9 0x000000010244b3bf clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 4047
23 clang-3.9 0x0000000100df7da3 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) + 1491
24 clang-3.9 0x0000000100df67d0 main + 11568
25 libdyld.dylib 0x00007fff9aabd5c9 start + 1
Stack dump:
0. Program arguments: /Users/kribey01/dev/llvm.org/build/bin/clang-3.9 -cc1 -triple armv7-none--eabi -S -disable-free -main-file-name t2.c -mrelocation-model static -mthread-model posix -mdisable-fp-elim -fm
ath-errno -masm-verbose -mconstructor-aliases -target-cpu cortex-a9 -target-feature +strict-align -target-abi aapcs -mfloat-abi hard -target-linker-version 253.6 -dwarf-column-info -debugger-tuning=gdb -coverage-
file /Users/kribey01/dev/triage/android/201602_arm_neon_tests/arm-neon-tests/- -resource-dir /Users/kribey01/dev/llvm.org/build/bin/../lib/clang/3.9.0 -O2 -fdebug-compilation-dir /Users/kribey01/dev/triage/androi
d/201602_arm_neon_tests/arm-neon-tests -ferror-limit 19 -fmessage-length 212 -fallow-half-arguments-and-returns -fno-signed-char -fobjc-runtime=gcc -fdiagnostics-show-option -fcolor-diagnostics -vectorize-loops -
vectorize-slp -o - -x c t2.c

  1.  <eof> parser at end of file
    
  2.  Code generation
    
  3.  Running pass 'Function Pass Manager' on module 't2.c'.
    
  4.  Running pass 'ARM Instruction Selection' on function '@f2'
    

clang-3.9: error: unable to execute command: Illegal instruction: 4
clang-3.9: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 3.9.0 (ssh://kribey01@e103606-lin.cambridge.arm.com/work/llvm.org/llvm-clang-compiler-rt/tools/clang da6e53c2620d92ec6ff16c23af69c4e531d23417) (ssh://kribey01@e103606-lin.cambridge.arm.com/work/llvm
.org/llvm-clang-compiler-rt bb152043ce23844ccd348b0cde05f301b1319b70)
Target: armv7a-none--eabi
Thread model: posix
InstalledDir: /Users/kribey01/dev/llvm.org/build/bin
clang-3.9: note: diagnostic msg: PLEASE submit a bug report to http://llvm.org/bugs/ and include the crash backtrace, preprocessed source, and associated run script.
clang-3.9: note: diagnostic msg:


PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang-3.9: note: diagnostic msg: /var/folders/th/cnt0054d153g3xf5rt87856x_1kq80/T/t2-07d0cb.c
clang-3.9: note: diagnostic msg: /var/folders/th/cnt0054d153g3xf5rt87856x_1kq80/T/t2-07d0cb.sh
clang-3.9: note: diagnostic msg:


$ ~/dev/llvm.org/build/bin/clang -target armv7a-none-eabi -c -mcpu=cortex-a9 -mfloat-abi=hard -S -O -o- t3.c
.text
.syntax unified
.eabi_attribute 67, "2.09" @ Tag_conformance
.cpu cortex-a9
.eabi_attribute 6, 10 @ Tag_CPU_arch
.eabi_attribute 7, 65 @ Tag_CPU_arch_profile
.eabi_attribute 8, 1 @ Tag_ARM_ISA_use
.eabi_attribute 9, 2 @ Tag_THUMB_ISA_use
.fpu neon-fp16
.eabi_attribute 17, 1 @ Tag_ABI_PCS_GOT_use
.eabi_attribute 20, 1 @ Tag_ABI_FP_denormal
.eabi_attribute 21, 1 @ Tag_ABI_FP_exceptions
.eabi_attribute 23, 3 @ Tag_ABI_FP_number_model
.eabi_attribute 34, 0 @ Tag_CPU_unaligned_access
.eabi_attribute 24, 1 @ Tag_ABI_align_needed
.eabi_attribute 25, 1 @ Tag_ABI_align_preserved
.eabi_attribute 28, 1 @ Tag_ABI_VFP_args
.eabi_attribute 36, 1 @ Tag_FP_HP_extension
.eabi_attribute 38, 1 @ Tag_ABI_FP_16bit_format
.eabi_attribute 42, 1 @ Tag_MPextension_use
.eabi_attribute 18, 4 @ Tag_ABI_PCS_wchar_t
.eabi_attribute 26, 2 @ Tag_ABI_enum_size
.eabi_attribute 14, 0 @ Tag_ABI_PCS_R9_use
.eabi_attribute 68, 1 @ Tag_Virtualization_use
.file "t3.c"
Assertion failed: (Val && "isa<> used on a null pointer"), function doit, file /Users/kribey01/dev/llvm.org/llvm-clang-compiler-rt/include/llvm/Support/Casting.h, line 95.
0 clang-3.9 0x000000010721196b llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 43
1 clang-3.9 0x0000000107210be6 llvm::sys::RunSignalHandlers() + 70
2 clang-3.9 0x0000000107212012 SignalHandler(int) + 322
3 libsystem_platform.dylib 0x00007fff8e779f1a _sigtramp + 26
4 clang-3.9 0x00000001092e3fe6 clang::Stmt::StatisticsEnabled + 92401
5 clang-3.9 0x0000000107211e26 abort + 22
6 clang-3.9 0x0000000107211e01 __assert_rtn + 81
7 clang-3.9 0x00000001078a50b7 diagnosePossiblyInvalidConstraint(llvm::LLVMContext&, llvm::Value const*, llvm::Twine const&) + 247
8 clang-3.9 0x000000010786b062 getCopyFromParts(llvm::SelectionDAG&, llvm::SDLoc, llvm::SDValue const*, unsigned int, llvm::MVT, llvm::EVT, llvm::Value const*, llvm::ISD::NodeType) + 2114
9 clang-3.9 0x000000010786a662 llvm::RegsForValue::getCopyFromRegs(llvm::SelectionDAG&, llvm::FunctionLoweringInfo&, llvm::SDLoc, llvm::SDValue&, llvm::SDValue*, llvm::Value const*) const + 2498
10 clang-3.9 0x000000010788605b llvm::SelectionDAGBuilder::visitInlineAsm(llvm::ImmutableCallSite) + 11947
11 clang-3.9 0x000000010786f895 llvm::SelectionDAGBuilder::visit(llvm::Instruction const&) + 69
12 clang-3.9 0x00000001078ee2e8 llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator<llvm::Instruction const>, llvm::ilist_iterator<llvm::Instruction const>, bool&) + 40
13 clang-3.9 0x00000001078edf74 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) + 6612
14 clang-3.9 0x00000001078eb554 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) + 2020
15 clang-3.9 0x00000001063314f4 (anonymous namespace)::ARMDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) + 20
16 clang-3.9 0x0000000106c5b4dc llvm::MachineFunctionPass::runOnFunction(llvm::Function&) + 140
17 clang-3.9 0x0000000106e3ccd8 llvm::FPPassManager::runOnFunction(llvm::Function&) + 328
18 clang-3.9 0x0000000106e3cf2b llvm::FPPassManager::runOnModule(llvm::Module&) + 43
19 clang-3.9 0x0000000106e3d3b6 llvm::legacy::PassManagerImpl::run(llvm::Module&) + 806
20 clang-3.9 0x000000010736d6be clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Mod
le*, clang::BackendAction, llvm::raw_pwrite_stream*) + 8750
21 clang-3.9 0x00000001074de502 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) + 514
22 clang-3.9 0x0000000107baedd5 clang::ParseAST(clang::Sema&, bool, bool) + 581
23 clang-3.9 0x00000001076ae69b clang::FrontendAction::Execute() + 75
24 clang-3.9 0x0000000107674e81 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 1073
25 clang-3.9 0x00000001076ed3bf clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 4047
26 clang-3.9 0x0000000106099da3 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) + 1491
27 clang-3.9 0x00000001060987d0 main + 11568
28 libdyld.dylib 0x00007fff9aabd5c9 start + 1
Stack dump:
0. Program arguments: /Users/kribey01/dev/llvm.org/build/bin/clang-3.9 -cc1 -triple armv7-none--eabi -S -disable-free -main-file-name t3.c -mrelocation-model static -mthread-model posix -mdisable-fp-elim -f
ath-errno -masm-verbose -mconstructor-aliases -target-cpu cortex-a9 -target-feature +strict-align -target-abi aapcs -mfloat-abi hard -target-linker-version 253.6 -dwarf-column-info -debugger-tuning=gdb -coverage
file /Users/kribey01/dev/triage/android/201602_arm_neon_tests/arm-neon-tests/- -resource-dir /Users/kribey01/dev/llvm.org/build/bin/../lib/clang/3.9.0 -O2 -fdebug-compilation-dir /Users/kribey01/dev/triage/andro
d/201602_arm_neon_tests/arm-neon-tests -ferror-limit 19 -fmessage-length 212 -fallow-half-arguments-and-returns -fno-signed-char -fobjc-runtime=gcc -fdiagnostics-show-option -fcolor-diagnostics -vectorize-loops
vectorize-slp -o - -x c t3.c

  1.  <eof> parser at end of file
    
  2.  Code generation
    
  3.  Running pass 'Function Pass Manager' on module 't3.c'.
    
  4.  Running pass 'ARM Instruction Selection' on function '@f'
    

clang-3.9: error: unable to execute command: Illegal instruction: 4
clang-3.9: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 3.9.0 (ssh://kribey01@e103606-lin.cambridge.arm.com/work/llvm.org/llvm-clang-compiler-rt/tools/clang da6e53c2620d92ec6ff16c23af69c4e531d23417) (ssh://kribey01@e103606-lin.cambridge.arm.com/work/llv
.org/llvm-clang-compiler-rt bb152043ce23844ccd348b0cde05f301b1319b70)
Target: armv7a-none--eabi
Thread model: posix
InstalledDir: /Users/kribey01/dev/llvm.org/build/bin
clang-3.9: note: diagnostic msg: PLEASE submit a bug report to http://llvm.org/bugs/ and include the crash backtrace, preprocessed source, and associated run script.
clang-3.9: note: diagnostic msg:


PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang-3.9: note: diagnostic msg: /var/folders/th/cnt0054d153g3xf5rt87856x_1kq80/T/t3-c62f0b.c
clang-3.9: note: diagnostic msg: /var/folders/th/cnt0054d153g3xf5rt87856x_1kq80/T/t3-c62f0b.sh
clang-3.9: note: diagnostic msg:


@kbeyls
Copy link
Collaborator Author

kbeyls commented Feb 5, 2016

assigned to @sbaranga-arm

@kbeyls
Copy link
Collaborator Author

kbeyls commented Feb 5, 2016

I'm assuming that similar asserts can be triggered for at least the AArch64 backend, but I haven't tested that yet.

@sbaranga-arm
Copy link
Mannequin

sbaranga-arm mannequin commented Apr 27, 2016

This should now work on ARM.

@stephenhines
Copy link
Collaborator

Silviu, do you know of a specific CL that fixes this, or were there multiple CLs?

@sbaranga-arm
Copy link
Mannequin

sbaranga-arm mannequin commented Apr 27, 2016

Sorry, should be just r267411.

@sbaranga-arm
Copy link
Mannequin

sbaranga-arm mannequin commented May 10, 2016

Also fixed the AArch64 side in r268907.

@rengolin
Copy link
Member

mentioned in issue #27571

This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backend:ARM bugzilla Issues migrated from bugzilla
Projects
None yet
Development

No branches or pull requests

3 participants