[PATCH] D118354: [AVR][NFC] Fix incorrect register states in expanding pseudo instructions
Ben Shi via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 28 06:21:08 PST 2022
benshi001 added a comment.
Without this patch, the following simple C code will crash.
int foo(char a, char b, ...) {
return a + b;
}
The crash message is
# After AVR pseudo instruction expansion pass
# Machine code for function add: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten
Frame Objects:
fi#-3: size=2, align=1, fixed, at location [SP+6]
fi#-2: size=1, align=1, fixed, at location [SP+4]
fi#-1: size=2, align=1, fixed, at location [SP+2]
fi#0: dead
fi#1: dead
fi#2: size=1, align=1, at location [SP-1]
fi#3: size=1, align=1, at location [SP-2]
bb.0 (%ir-block.2):
liveins: $r28, $r29
frame-setup PUSHRr killed $r28, implicit-def $sp, implicit $sp
frame-setup PUSHRr killed $r29, implicit-def $sp, implicit $sp
$r28 = frame-setup INRdA 61
$r29 = frame-setup INRdA 62
dead early-clobber $r24 = LDDRdPtrQ $r29r28, 7 :: (load (s8) from %fixed-stack.1)
early-clobber $r24 = LDDRdPtrQ $r29r28, 5 :: (load (s16) from %fixed-stack.2, align 1)
early-clobber $r25 = LDDRdPtrQ $r29r28, 6 :: (load (s16) from %fixed-stack.2, align 1)
early-clobber $r24 = LDDRdPtrQ $r29r28, 5 :: (dereferenceable load (s16) from %ir.3, align 1)
early-clobber $r25 = LDDRdPtrQ $r29r28, 6 :: (dereferenceable load (s16) from %ir.3, align 1)
early-clobber $r18 = LDDRdPtrQ $r29r28, 7 :: (dereferenceable load (s8) from %ir.4)
$r19 = MOVRdRr killed $r18
$r19 = ADDRdRr $r19(tied-def 0), killed $r19, implicit-def $sreg
$r19 = SBCRdRr killed $r19(tied-def 0), killed $r19, implicit-def dead $sreg, implicit killed $sreg
$r24 = ADDRdRr $r24(tied-def 0), killed $r18, implicit-def $sreg
$r25 = ADCRdRr $r25(tied-def 0), killed $r19, implicit-def dead $sreg, implicit killed $sreg
$r29 = POPRd implicit-def $sp, implicit $sp
$r28 = POPRd implicit-def $sp, implicit $sp
RET implicit killed $r25r24
# End machine code for function add.
*** Bad machine code: Using an undefined physical register ***
- function: add
- basic block: %bb.0 (0x55dbe136ed40)
- instruction: $r24 = ADDRdRr $r24(tied-def 0), killed $r18, implicit-def $sreg
- operand 2: killed $r18
fatal error: error in backend: Found 1 machine code errors.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0. Program arguments: ../build-avr-1/bin/clang test.c --target=avr -mmcu=atmega328 -S
1. <eof> parser at end of file
2. Code generation
3. Running pass 'Function Pass Manager' on module 'test.c'.
4. Running pass 'Verify generated machine code' on function '@add'
#0 0x000055dbdce2227f PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
#1 0x000055dbdce1fdfc llvm::sys::CleanupOnSignal(unsigned long) (../build-avr-1/bin/clang+0x1fc0dfc)
#2 0x000055dbdcd6d968 llvm::CrashRecoveryContext::HandleExit(int) (../build-avr-1/bin/clang+0x1f0e968)
#3 0x000055dbdce181be llvm::sys::Process::Exit(int, bool) (../build-avr-1/bin/clang+0x1fb91be)
#4 0x000055dbdbad90a6 (../build-avr-1/bin/clang+0xc7a0a6)
#5 0x000055dbdcd7530f llvm::report_fatal_error(llvm::Twine const&, bool) (../build-avr-1/bin/clang+0x1f1630f)
#6 0x000055dbdc247a3e (anonymous namespace)::MachineVerifierPass::runOnMachineFunction(llvm::MachineFunction&) (.part.480) MachineVerifier.cpp:0:0
#7 0x000055dbdc247a71 (anonymous namespace)::MachineVerifierPass::runOnMachineFunction(llvm::MachineFunction&) MachineVerifier.cpp:0:0
#8 0x000055dbdc1e1038 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (../build-avr-1/bin/clang+0x1382038)
#9 0x000055dbdc6a345f llvm::FPPassManager::runOnFunction(llvm::Function&) (../build-avr-1/bin/clang+0x184445f)
#10 0x000055dbdc6a36f1 llvm::FPPassManager::runOnModule(llvm::Module&) (../build-avr-1/bin/clang+0x18446f1)
#11 0x000055dbdc6a49ef llvm::legacy::PassManagerImpl::run(llvm::Module&) (../build-avr-1/bin/clang+0x18459ef)
#12 0x000055dbdd138b4a clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream> >) (../build-avr-1/bin/clang+0x22d9b4a)
#13 0x000055dbddd6a919 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) crtstuff.c:0:0
#14 0x000055dbde95d4a9 clang::ParseAST(clang::Sema&, bool, bool) (../build-avr-1/bin/clang+0x3afe4a9)
#15 0x000055dbddd6ab02 clang::CodeGenAction::ExecuteAction() (../build-avr-1/bin/clang+0x2f0bb02)
#16 0x000055dbdd7972e1 clang::FrontendAction::Execute() (../build-avr-1/bin/clang+0x29382e1)
#17 0x000055dbdd73119a clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (../build-avr-1/bin/clang+0x28d219a)
#18 0x000055dbdd8627b7 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (../build-avr-1/bin/clang+0x2a037b7)
#19 0x000055dbdbadaa84 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (../build-avr-1/bin/clang+0xc7ba84)
#20 0x000055dbdbad693d ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0
#21 0x000055dbdd5caa75 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#22 0x000055dbdcd6d813 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (../build-avr-1/bin/clang+0x1f0e813)
#23 0x000055dbdd5cce68 clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, bool*) const (../build-avr-1/bin/clang+0x276de68)
#24 0x000055dbdd5a08ba clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&) const (../build-avr-1/bin/clang+0x27418ba)
#25 0x000055dbdd5a148f clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) const (../build-avr-1/bin/clang+0x274248f)
#26 0x000055dbdd5a86e7 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) (../build-avr-1/bin/clang+0x27496e7)
#27 0x000055dbdba4cd78 main (../build-avr-1/bin/clang+0xbedd78)
#28 0x00007f1836a46bf7 __libc_start_main /build/glibc-S9d2JN/glibc-2.27/csu/../csu/libc-start.c:344:0
#29 0x000055dbdbad64ea _start (../build-avr-1/bin/clang+0xc774ea)
clang-14: error: clang frontend command failed with exit code 70 (use -v to see invocation)
clang version 14.0.0 (git at github.com:llvm/llvm-project.git 0adf0fd5cb59211934e96bfcdaedb18bfbb6357d)
Target: avr
Thread model: posix
InstalledDir: /home/shiben/work/llvm-project/build-avr-4/../build-avr-1/bin
clang-14: note: diagnostic msg:
********************
PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang-14: note: diagnostic msg: /tmp/test-c9b549.c
clang-14: note: diagnostic msg: /tmp/test-c9b549.sh
clang-14: note: diagnostic msg:
********************
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D118354/new/
https://reviews.llvm.org/D118354
More information about the llvm-commits
mailing list