110 lines · plain
1;; Basic FatLTO tests.2; REQUIRES: x86_64-linux3 4; RUN: rm -rf %t && split-file %s %t5 6;; Ensure that input files contain .llvm.lto section7; RUN: llc %t/a-LTO.ll --filetype=obj -o %t/a-fatLTO.o8; RUN: opt --module-summary %t/a-LTO.ll -o %t/a-fatLTO.bc9; RUN: llvm-objcopy --add-section=.llvm.lto=%t/a-fatLTO.bc %t/a-fatLTO.o10; RUN: llvm-objcopy --set-section-flags=.llvm.lto=readonly,exclude %t/a-fatLTO.o11; RUN: llvm-readobj -S %t/a-fatLTO.o | FileCheck --check-prefix=CHECK-A %s12 13; CHECK-A: Name: .llvm.lto14 15; RUN: llc %t/main-LTO.ll --filetype=obj -o %t/main-fatLTO.o16; RUN: opt --module-summary %t/main-LTO.ll -o %t/main-fatLTO.bc17; RUN: llvm-objcopy --add-section=.llvm.lto=%t/main-fatLTO.bc %t/main-fatLTO.o18; RUN: llvm-objcopy --set-section-flags=.llvm.lto=readonly,exclude %t/main-fatLTO.o19; RUN: llvm-readobj -S %t/main-fatLTO.o | FileCheck --check-prefix=CHECK-MAIN %s20 21; CHECK-MAIN: Name: .llvm.lto22 23;; Final executable should not have .llvm.lto section no matter what the target is24; RUN: %gold -plugin %llvmshlibdir/LLVMgold%shlibext -o %t/foo-fatLTO %t/a-fatLTO.o %t/main-fatLTO.o25; RUN: llvm-readobj -S %t/foo-fatLTO | FileCheck --check-prefix=CHECK-LTO-TARGET %s26 27;; Check that fat objects work w/ s=--start-lib28; RUN: %gold -plugin %llvmshlibdir/LLVMgold%shlibext -o %t/foo-fatLTO.start_lib --start-lib %t/a-fatLTO.o %t/main-fatLTO.o --end-lib29; RUN: llvm-readobj -S %t/foo-fatLTO.start_lib | FileCheck --check-prefix=CHECK-LTO-TARGET %s30 31;; Check if .llvm.lto section gets aggregated in LTO target32; CHECK-LTO-TARGET-NOT: Name: .llvm.lto33 34;; Final executable should not have .llvm.lto section no matter what the target is35; RUN: %gold -o %t/foo-fatNoLTO %t/a-fatLTO.o %/t/main-fatLTO.o36; RUN: llvm-readobj -S %t/foo-fatNoLTO | FileCheck --check-prefix=CHECK-NON-LTO-TARGET %s37 38;; Check if .llvm.lto section gets aggregated in non-LTO target39; CHECK-NON-LTO-TARGET-NOT: Name: .llvm.lto40 41;; Check if the LTO target executable produced from FatLTO object file is42;; identical to the one produced from LTO modules43; RUN: opt --module-summary %t/a-LTO.ll -o %t/a-LTO.bc44; RUN: opt --module-summary %t/main-LTO.ll -o %t/main-LTO.bc45; RUN: %gold -plugin %llvmshlibdir/LLVMgold%shlibext -o %t/foo-LTO %t/a-LTO.bc %t/main-LTO.bc46; RUN: cmp %t/foo-fatLTO %t/foo-LTO47 48;; Check if the no-LTO target executable produced from FatLTO object file is49;; identical to the one produced from regular object files50 51; RUN: llc %t/a-LTO.ll --filetype=obj -o %t/a.o52; RUN: llc %t/main-LTO.ll --filetype=obj -o %t/main.o53 54; RUN: %gold -o %t/foo-noLTO %t/a.o %t/main.o55; RUN: cmp %t/foo-fatNoLTO %t/foo-noLTO56 57;; Check archive support58; RUN: llvm-ar rcs %t/a.a %t/a-fatLTO.o59; RUN: %gold -plugin %llvmshlibdir/LLVMgold%shlibext -o %t/foo-fatLTO.archive %t/main-LTO.bc %t/a.a 60; RUN: cmp %t/foo-fatLTO.archive %t/foo-LTO61 62;--- a-LTO.ll63target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"64target triple = "x86_64-unknown-linux-gnu"65 66; Function Attrs: noinline nounwind uwtable67define dso_local i32 @_start() #0 {68entry:69 ret i32 070}71 72attributes #0 = { noinline nounwind uwtable }73 74!llvm.module.flags = !{!0, !1, !2, !3, !4, !5, !6}75 76!0 = !{i32 1, !"wchar_size", i32 4}77!1 = !{i32 7, !"PIC Level", i32 2}78!2 = !{i32 7, !"PIE Level", i32 2}79!3 = !{i32 7, !"uwtable", i32 2}80!4 = !{i32 7, !"frame-pointer", i32 2}81!5 = !{i32 1, !"ThinLTO", i32 0}82!6 = !{i32 1, !"EnableSplitLTOUnit", i32 1}83 84;--- main-LTO.ll85target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"86target triple = "x86_64-unknown-linux-gnu"87 88; Function Attrs: noinline nounwind uwtable89define dso_local i32 @main() #0 {90entry:91 %retval = alloca i32, align 492 store i32 0, ptr %retval, align 493 %call = call i32 (...) @_start()94 ret i32 %call95}96 97declare i32 @_start(...)98 99attributes #0 = { noinline nounwind uwtable }100 101!llvm.module.flags = !{!0, !1, !2, !3, !4, !5, !6}102 103!0 = !{i32 1, !"wchar_size", i32 4}104!1 = !{i32 7, !"PIC Level", i32 2}105!2 = !{i32 7, !"PIE Level", i32 2}106!3 = !{i32 7, !"uwtable", i32 2}107!4 = !{i32 7, !"frame-pointer", i32 2}108!5 = !{i32 1, !"ThinLTO", i32 0}109!6 = !{i32 1, !"EnableSplitLTOUnit", i32 1}110