Open hiraditya opened 11 months ago
@llvm/issue-subscribers-backend-risc-v
Author: AdityaK (hiraditya)
cc: @topperc @teresajohnson
Maybe we should also improve the warning to include the offending file that is causing the issue?
The warning comes from:
llvm/lib/Target/RISCV/RISCVISelLowering.cpp
@@ -92,7 +92,7 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
ABI = Subtarget.is64Bit() ? RISCVABI::ABI_LP64 : RISCVABI::ABI_ILP32;
} else if ((ABI == RISCVABI::ABI_ILP32D || ABI == RISCVABI::ABI_LP64D) &&
!Subtarget.hasStdExtD()) {
The warning is only emitted from (IIUC) compiler generated functions like
define void @__cfi_check(i64 %0, ptr %1, ptr %2) align 4096
define private void @.cfi.jumptable() #46 align 8
Seems like the bug is in functions like CrossDSOCFI::buildCFICheck(Module &M)
where the compiler doesn't provide desired target attributes for generated functions.
Currently arm has a hacky way of adding target-feature
when generating __cfi_check
(https://github.com/llvm/llvm-project/blob/4ed543d414b6f39fb5302322eecb8abf33c76f89/llvm/lib/Transforms/IPO/CrossDSOCFI.cpp#L94-L100) but it is likely other places were missed.
Seems like we are missing something like a 'target-feature-unification' pass as the final binary can only support a specific ABI.
Related patch #98673
This happens while building aosp with lto. A reduced case of building libziparchive also gives this warning. Here is the linker invocation.
All the binary files (including the ones in .a) have 'double-float ABI'. it could be that the bitcode files 'out/soong/.intermediates/system/libziparchive/libziparchive/android_vendor_ramdisk_riscv64_static_cfi_lto-none/obj/system/libziparchive/*.o' are not getting compiled with the double-float flag?
Repro steps if you one can download aosp.
Related discussions/PRs/issues: