From dc21810a1d36c269bfef30d5562b39c6ffb04de7 Mon Sep 17 00:00:00 2001 From: Ying Huang Date: Thu, 15 May 2025 05:43:12 -0400 Subject: [PATCH] [COFF][Mips] Set PrivateGlobalPrefix to .L When calling external functions which start with `L`, would generate error: assembler label 'LeaveFoo' can not be undefined. This pr would fix this issue. Fix #134914. --- .../Mips/MCTargetDesc/MipsMCAsmInfo.cpp | 2 ++ .../CodeGen/Mips/private-global-prefix.ll | 24 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 llvm/test/CodeGen/Mips/private-global-prefix.ll diff --git a/llvm/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.cpp b/llvm/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.cpp index 59c5bcb89bede..11df6fecaf37b 100644 --- a/llvm/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.cpp +++ b/llvm/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.cpp @@ -53,5 +53,7 @@ MipsCOFFMCAsmInfo::MipsCOFFMCAsmInfo() { ExceptionsType = ExceptionHandling::WinEH; + PrivateGlobalPrefix = ".L"; + PrivateLabelPrefix = ".L"; AllowAtInName = true; } diff --git a/llvm/test/CodeGen/Mips/private-global-prefix.ll b/llvm/test/CodeGen/Mips/private-global-prefix.ll new file mode 100644 index 0000000000000..e60b9c1d7eba5 --- /dev/null +++ b/llvm/test/CodeGen/Mips/private-global-prefix.ll @@ -0,0 +1,24 @@ +; RUN: llc -mtriple=mipsel-w64-windows-gnu < %s | FileCheck %s -check-prefix=MIPSEL + +define void @f() { +; MIPSEL-LABEL: f: +; MIPSEL: # %bb.0: # %entry +; MIPSEL-NEXT: addiu $sp, $sp, -24 +; MIPSEL-NEXT: sw $ra, 20($sp) +; MIPSEL-NEXT: jal LeaveFoo +; MIPSEL-NEXT: nop +; MIPSEL-NEXT: jal LocalBar +; MIPSEL-NEXT: nop +; MIPSEL-NEXT: lw $ra, 20($sp) +; MIPSEL-NEXT: jr $ra +; MIPSEL-NEXT: addiu $sp, $sp, 24 + +entry: + call void @LeaveFoo() + call void @LocalBar() + ret void +} + +declare void @LeaveFoo() +declare void @LocalBar() +