[lld] [llvm] [RISCV] Fix alignment when mixing rvc/norvc relax/norelax code (PR #150159)

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 31 07:49:05 PDT 2025


================
@@ -309,9 +309,12 @@ bool RISCVAsmBackend::relaxAlign(MCFragment &F, unsigned &Size) {
   // Use default handling unless linker relaxation is enabled and the alignment
   // is larger than the nop size.
   const MCSubtargetInfo *STI = F.getSubtargetInfo();
-  if (!STI->hasFeature(RISCV::FeatureRelax))
+  if (!STI->hasFeature(RISCV::FeatureRelax) && !hasRelaxEver(F.getParent()))
     return false;
-  unsigned MinNopLen = STI->hasFeature(RISCV::FeatureStdExtZca) ? 2 : 4;
+  unsigned MinNopLen =
+      hasRVCEver(F.getParent()) || STI->hasFeature(RISCV::FeatureStdExtZca)
----------------
topperc wrote:

Check `STI->hasFeature(RISCV::FeatureStdExtZca)` first?

https://github.com/llvm/llvm-project/pull/150159


More information about the llvm-commits mailing list