Skip to content

Atomic instructions unsupported & Cause crashing of clang #49

Description

@AzureianGH

(command: ez80-clang -S -o C:\CEdev\examples\hello_world\src\test.S .\tests\00\out.ll -nostdinc -Xclang -fforce-mangle-main-argc-argv -fno-autolink -fno-addrsig -fno-threadsafe-statics -fno-aligned-allocation -mllvm -profile-guided-section-prefix=false -mllvm -z80-gas-style -ffunction-sections -fdata-sections -fno-math-errno -D__TICE__=1 -DNDEBUG=1)

fatal error: error in backend: unable to legalize instruction: %17:_(s8), %18:_(s1) = G_ATOMIC_CMPXCHG_WITH_SUCCESS %10:_(p0), %19:_, %15:_ :: (load store acquire acquire (s8) on %ir._cctor_init_d) (in function: _cctor_check)
PLEASE submit a bug report to https://github.com/CE-Programming/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: C:\\CEdev\\bin\\ez80-clang.exe -S -o C:\\CEdev\\examples\\hello_world\\src\\test.S .\\tests\\00\\out.ll -nostdinc -Xclang -fforce-mangle-main-argc-argv -fno-autolink -fno-addrsig -fno-threadsafe-statics -fno-aligned-allocation -mllvm -profile-guided-section-prefix=false -mllvm -z80-gas-style -ffunction-sections -fdata-sections -fno-math-errno -D__TICE__=1 -DNDEBUG=1
1.      Code generation
2.      Running pass 'Function Pass Manager' on module '.\tests\00\out.ll'.
3.      Running pass 'Legalizer' on function '@_cctor_check'
Exception Code: 0xE0000046
#0 0x76424984 (C:\WINDOWS\System32\KERNELBASE.dll+0x164984)
#1 0x003b4d06 (C:\CEdev\bin\ez80-clang.exe+0x2c4d06)
#2 0x01000000 (C:\CEdev\bin\ez80-clang.exe+0xf10000)
ez80-clang: error: clang frontend command failed with exit code 70 (use -v to see invocation)
clang version 19.1.0 (https://github.com/CE-Programming/llvm-project ef28e9c54cd1333a6091ab2ffbd315b465fc5090)
Target: ez80
Thread model: posix
InstalledDir: C:\CEdev\bin
ez80-clang: note: diagnostic msg: Error generating preprocessed source(s) - no preprocessable inputs.

When compiling LLVM IR, ez80-clang crashes in the SelectionDAG/GlobalISel Legalizer pass. The failure occurs when compiling a cmpxchg instruction.

Reproducible:

@_cctor_init_state = global [1 x i8] [i8 0], align 1

define void @_cctor_check(i32 %_cctor_init_a) {
entry:
    %_cctor_init_c = zext i32 %_cctor_init_a to i64
    %_cctor_init_d = getelementptr inbounds [1 x i8], ptr @_cctor_init_state, i64 0, i64 %_cctor_init_c
    
    ; CMPXCHG kills it here
    %_cctor_init_cmp = cmpxchg ptr %_cctor_init_d, i8 0, i8 1 acquire acquire
    ret void
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions