-
Notifications
You must be signed in to change notification settings - Fork 16.5k
Closed
Labels
Description
| Bugzilla Link | 48379 |
| Resolution | FIXED |
| Resolved on | Dec 18, 2020 12:11 |
| Version | 11.0 |
| OS | Linux |
| Blocks | #47144 |
| CC | @aemerson,@Arnaud-de-Grandmaison-ARM,@ornata,@smeenai,@smithp35,@tstellar |
| Fixed by commit(s) | 0b60906 195a7af 9e16c5b 280e47e |
Extended Description
The following code hits an error with clang11 when compiled as so:
clang++ -march=armv8-a -target aarch64-none-linux-android21 file.cpp
long multiply() {
auto a = static_cast<__uint128_t>(0);
return (static_cast<unsigned long>(a) & (1ULL << 63)) != 0 ? a : a;
}
Here' the IR that is generated via -S -emit-llvm:
; ModuleID = 'third-party/fmt/fmt/src/format.cc'
source_filename = "third-party/fmt/fmt/src/format.cc"
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
target triple = "aarch64-none-linux-android21"
; Function Attrs: noinline nounwind optnone
define dso_local i64 @​_Z8multiplyv() #​0 {
entry:
%a = alloca i128, align 16
store i128 0, i128* %a, align 16
%0 = load i128, i128* %a, align 16
%conv = trunc i128 %0 to i64
%and = and i64 %conv, -9223372036854775808
%cmp = icmp ne i64 %and, 0
br i1 %cmp, label %cond.true, label %cond.false
cond.true: ; preds = %entry
%1 = load i128, i128* %a, align 16
br label %cond.end
cond.false: ; preds = %entry
%2 = load i128, i128* %a, align 16
br label %cond.end
cond.end: ; preds = %cond.false, %cond.true
%cond = phi i128 [ %1, %cond.true ], [ %2, %cond.false ]
%conv1 = trunc i128 %cond to i64
ret i64 %conv1
}
attributes #​0 = { noinline nounwind optnone "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="non-leaf" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" "target-features"="+neon" "unsafe-fp-math"="false" "use-soft-float"="false" }
!llvm.module.flags = !{#0, !​1, !​2}
!llvm.ident = !{#3}
!​0 = !{i32 1, !"wchar_size", i32 4}
!​1 = !{i32 7, !"PIC Level", i32 2}
!​2 = !{i32 7, !"PIE Level", i32 2}
!​3 = !{!"Facebook clang version 11.0.1 (llvm: 81c8deff8cbad869e7238842ebf9c94f3220a73d, cfe: 81c8deff8cbad869e7238842ebf9c94f3220a73d, compiler-rt: 81c8deff8cbad869e7238842ebf9c94f3220a73d, lld: 81c8deff8cbad869e7238842ebf9c94f3220a73d)"}
Here's the error:
unimplemented reg-to-reg copy
UNREACHABLE executed at /mnt/btrfs/trunk-grepo-llvm-c2-122478666-1604424455/external/llvm-project/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp:3012!
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0. Program arguments: /data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang++ -march=armv8-a -target aarch64-none-linux-android21 -c third-party/fmt/fmt/src/format.cc
1. <eof> parser at end of file
2. Code generation
3. Running pass 'Function Pass Manager' on module 'third-party/fmt/fmt/src/format.cc'.
4. Running pass 'Post-RA pseudo instruction expansion pass' on function '@_Z8multiplyv'
#​0 0x00000000039dedcf llvm::sys::PrintStackTrace(llvm::raw_ostream&) (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x39dedcf)
#​1 0x00000000039dcfd0 llvm::sys::RunSignalHandlers() (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x39dcfd0)
#​2 0x00000000039de46d llvm::sys::CleanupOnSignal(unsigned long) (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x39de46d)
#​3 0x0000000003967203 (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x3967203)
#​4 0x0000000003967356 (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x3967356)
#​5 0x00007fcb272e4b80 __restore_rt (/usr/local/fbcode/platform007/lib/libpthread.so.0+0x12b80)
#​6 0x00007fcb25de80ff raise /home/engshare/third-party2/glibc/2.26/src/glibc-2.26/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
#​7 0x00007fcb25dd1935 abort /home/engshare/third-party2/glibc/2.26/src/glibc-2.26/stdlib/abort.c:92:7
#​8 0x000000000396bee1 (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x396bee1)
#​9 0x0000000002586d29 (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x2586d29)
#​10 0x00000000031d0660 (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x31d0660)
#​11 0x0000000002fdcece llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x2fdcece)
#​12 0x00000000033951c1 llvm::FPPassManager::runOnFunction(llvm::Function&) (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x33951c1)
#​13 0x000000000339b508 llvm::FPPassManager::runOnModule(llvm::Module&) (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x339b508)
#​14 0x000000000339581e llvm::legacy::PassManagerImpl::run(llvm::Module&) (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x339581e)
#​15 0x0000000003bdbf5d clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::DataLayout const&, llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream> >) (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x3bdbf5d)
#​16 0x000000000434b08f (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x434b08f)
#​17 0x0000000005197933 clang::ParseAST(clang::Sema&, bool, bool) (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x5197933)
#​18 0x000000000429bc34 clang::FrontendAction::Execute() (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x429bc34)
#​19 0x0000000004217ec3 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x4217ec3)
#​20 0x0000000004345808 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x4345808)
#​21 0x00000000024d4f49 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x24d4f49)
#​22 0x00000000024d3239 (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x24d3239)
#​23 0x000000000411e242 (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x411e242)
#​24 0x0000000003967121 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x3967121)
#​25 0x000000000411d71d clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, bool*) const (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x411d71d)
#​26 0x00000000040f21a5 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&) const (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x40f21a5)
#​27 0x00000000040f2587 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) const (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x40f2587)
#​28 0x00000000041057ec clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x41057ec)
#​29 0x00000000024d2b6e main (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x24d2b6e)
#​30 0x00007fcb25dd21a6 __libc_start_main /home/engshare/third-party2/glibc/2.26/src/glibc-2.26/csu/../csu/libc-start.c:342:3
#​31 0x00000000024d014a _start (/data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin/clang+++0x24d014a)
clang++: error: clang frontend command failed due to signal (use -v to see invocation)
Facebook clang version 11.0.1 (llvm: 81c8deff8cbad869e7238842ebf9c94f3220a73d, cfe: 81c8deff8cbad869e7238842ebf9c94f3220a73d, compiler-rt: 81c8deff8cbad869e7238842ebf9c94f3220a73d, lld: 81c8deff8cbad869e7238842ebf9c94f3220a73d)
Target: aarch64-none-linux-android21
Thread model: posix
InstalledDir: /data/users/lanza/fbsource/buck-out/gen/fe3a39b8/xplat/toolchains/android/ndk/linux-llvm-11-asserts-cxx-arm64#link-tree/xplat/toolchains/android/ndk/llvm_toolchain/bin
clang++: note: diagnostic msg:
********************
PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang++: note: diagnostic msg: /tmp/format-635961.cpp
clang++: note: diagnostic msg: /tmp/format-635961.sh
clang++: note: diagnostic msg:
********************
Here's I->getParent()->getParent()->dump() at the point of the crash
# Machine code for function _Z8multiplyv: NoPHIs, TracksLiveness, NoVRegs, Legalized, RegBankSelected, Selected, TiedOpsRewritten
Frame Objects:
fi#0: size=16, align=16, at location [SP-16]
fi#1: size=8, align=8, at location [SP-24]
bb.1.entry:
successors: %bb.2(0x40000000), %bb.3(0x40000000); %bb.2(50.00%), %bb.3(50.00%)
$sp = frame-setup SUBXri $sp, 32, 0
$x8 = ORRXrr $xzr, $xzr
renamable $q0 = IMPLICIT_DEF
renamable $q0 = INSvi64gpr renamable $q0(tied-def 0), 0, renamable $x8
renamable $q0 = INSvi64gpr renamable $q0(tied-def 0), 1, killed renamable $x8
STRQui killed renamable $q0, $sp, 1 :: (store 16 into %ir.a)
renamable $q0 = LDRQui $sp, 1 :: (dereferenceable load 16 from %ir.a)
$w0 = FMOVSWr $s0, implicit killed $q0
renamable $x8 = COPY killed renamable $w0
TBZX killed renamable $x8, 63, %bb.3
bb.2.cond.true:
; predecessors: %bb.1
successors: %bb.4(0x80000000); %bb.4(100.00%)
renamable $q0 = LDRQui $sp, 1 :: (dereferenceable load 16 from %ir.a)
renamable $d1 = COPY renamable $d0
renamable $d2 = CPYi64 killed renamable $q0, 1
STRDui killed $d1, $sp, 1 :: (store 8 into %stack.1)
B %bb.4
bb.3.cond.false:
; predecessors: %bb.1
successors: %bb.4(0x80000000); %bb.4(100.00%)
renamable $q0 = LDRQui $sp, 1 :: (dereferenceable load 16 from %ir.a)
renamable $d1 = COPY renamable $d0
renamable $d2 = CPYi64 killed renamable $q0, 1
STRDui killed $d1, $sp, 1 :: (store 8 into %stack.1)
bb.4.cond.end:
; predecessors: %bb.3, %bb.2
$d0 = LDRDui $sp, 1 :: (load 8 from %stack.1)
$x0 = COPY killed renamable $d0
$sp = frame-destroy ADDXri $sp, 32, 0
RET_ReallyLR implicit killed $x0
# End machine code for function _Z8multiplyv.
Here's I->dump()
renamable $x8 = COPY killed renamable $w0
Reactions are currently unavailable