From 274148811a2b600c1ca4414bea4f1693bdc11b08 Mon Sep 17 00:00:00 2001 From: Feng Zou Date: Wed, 10 Sep 2025 18:39:39 +0800 Subject: [PATCH 1/4] [LTO] Fix the issue of setting default triple when the triple is empty. --- llvm/lib/LTO/LTOCodeGenerator.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/llvm/lib/LTO/LTOCodeGenerator.cpp b/llvm/lib/LTO/LTOCodeGenerator.cpp index cdeab98ff6c98..8ea4e530dc3eb 100644 --- a/llvm/lib/LTO/LTOCodeGenerator.cpp +++ b/llvm/lib/LTO/LTOCodeGenerator.cpp @@ -377,8 +377,9 @@ bool LTOCodeGenerator::determineTarget() { TripleStr = MergedModule->getTargetTriple().str(); llvm::Triple Triple(TripleStr); - if (TripleStr.empty()) { - TripleStr = sys::getDefaultTargetTriple(); + if (Triple.empty()) { + Triple = llvm::Triple(sys::getDefaultTargetTriple()); + TripleStr = Triple.getTriple(); MergedModule->setTargetTriple(Triple); } From 5b4918515d2e111c171cab738e253376521c4dfa Mon Sep 17 00:00:00 2001 From: Feng Zou Date: Wed, 10 Sep 2025 23:02:33 +0800 Subject: [PATCH 2/4] Add test --- llvm/test/LTO/X86/empty-triple.ll | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 llvm/test/LTO/X86/empty-triple.ll diff --git a/llvm/test/LTO/X86/empty-triple.ll b/llvm/test/LTO/X86/empty-triple.ll new file mode 100644 index 0000000000000..200d7121f69d6 --- /dev/null +++ b/llvm/test/LTO/X86/empty-triple.ll @@ -0,0 +1,7 @@ +; RUN: llvm-as < %s >%t1 +; RUN: llvm-lto -o %t2 %t1 2>&1 | FileCheck --allow-empty %s + +; The test is to check the triple is set to default one when it's empty. +; Otherwise, an error will be raised by llvm-lto. + +; CHECK-NOT: llvm-lto: error: No available targets are compatible with triple "" From 68c1a9599f410b2cf0da835f2e47f04342678531 Mon Sep 17 00:00:00 2001 From: Feng Zou Date: Thu, 11 Sep 2025 09:02:14 +0800 Subject: [PATCH 3/4] Update test and rewrite to avoid constructing Triple from empty string --- llvm/lib/LTO/LTOCodeGenerator.cpp | 9 ++++----- llvm/test/LTO/{X86 => }/empty-triple.ll | 4 ++-- 2 files changed, 6 insertions(+), 7 deletions(-) rename llvm/test/LTO/{X86 => }/empty-triple.ll (51%) diff --git a/llvm/lib/LTO/LTOCodeGenerator.cpp b/llvm/lib/LTO/LTOCodeGenerator.cpp index 8ea4e530dc3eb..23e22e7ffcd5c 100644 --- a/llvm/lib/LTO/LTOCodeGenerator.cpp +++ b/llvm/lib/LTO/LTOCodeGenerator.cpp @@ -376,12 +376,11 @@ bool LTOCodeGenerator::determineTarget() { return true; TripleStr = MergedModule->getTargetTriple().str(); - llvm::Triple Triple(TripleStr); - if (Triple.empty()) { - Triple = llvm::Triple(sys::getDefaultTargetTriple()); - TripleStr = Triple.getTriple(); - MergedModule->setTargetTriple(Triple); + if (TripleStr.empty()) { + TripleStr = sys::getDefaultTargetTriple(); + MergedModule->setTargetTriple(Triple(TripleStr)); } + llvm::Triple Triple(TripleStr); // create target machine from info for merged modules std::string ErrMsg; diff --git a/llvm/test/LTO/X86/empty-triple.ll b/llvm/test/LTO/empty-triple.ll similarity index 51% rename from llvm/test/LTO/X86/empty-triple.ll rename to llvm/test/LTO/empty-triple.ll index 200d7121f69d6..09d90e0388efa 100644 --- a/llvm/test/LTO/X86/empty-triple.ll +++ b/llvm/test/LTO/empty-triple.ll @@ -1,7 +1,7 @@ ; RUN: llvm-as < %s >%t1 -; RUN: llvm-lto -o %t2 %t1 2>&1 | FileCheck --allow-empty %s +; RUN: llvm-lto -o /dev/null %t1 2>&1 | FileCheck --allow-empty %s ; The test is to check the triple is set to default one when it's empty. ; Otherwise, an error will be raised by llvm-lto. -; CHECK-NOT: llvm-lto: error: No available targets are compatible with triple "" +; CHECK-NOT: error From 036b628a51c8b3d9cdc315daebb8e35a1fa0cada Mon Sep 17 00:00:00 2001 From: Feng Zou Date: Thu, 11 Sep 2025 09:23:57 +0800 Subject: [PATCH 4/4] Update test to check valid output --- llvm/test/LTO/empty-triple.ll | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/llvm/test/LTO/empty-triple.ll b/llvm/test/LTO/empty-triple.ll index 09d90e0388efa..b4af8607ac353 100644 --- a/llvm/test/LTO/empty-triple.ll +++ b/llvm/test/LTO/empty-triple.ll @@ -1,7 +1,12 @@ ; RUN: llvm-as < %s >%t1 -; RUN: llvm-lto -o /dev/null %t1 2>&1 | FileCheck --allow-empty %s +; RUN: llvm-lto -exported-symbol=main -filetype=asm -o - %t1 2>&1 | FileCheck %s ; The test is to check the triple is set to default one when it's empty. ; Otherwise, an error will be raised by llvm-lto. +; CHECK-LABEL: main ; CHECK-NOT: error +define void @main() { +entry: + ret void +}