Files
clang-p2996/clang/test/CodeGen/enable-split-lto-unit.ll
David Greene 53adfa8750 [clang] Do not duplicate "EnableSplitLTOUnit" module flag
If clang's output is set to bitcode and LTO is enabled, clang would
unconditionally add the flag to the module.  Unfortunately, if the input were a
bitcode or IR file and had the flag set, this would result in two copies of the
flag, which is illegal IR.  Guard the setting of the flag by checking whether it
already exists.  This follows existing practice for the related "ThinLTO" module
flag.

Differential Revision: https://reviews.llvm.org/D112177
2021-12-02 08:24:56 -08:00

26 lines
1.2 KiB
LLVM

; Test that we do not duplicate the EnableSplitLTOUnit module flag.
;
; Disable the verifier so the compiler doesn't abort and thus lead to empty
; output and false pass.
;
; RUN: %clang_cc1 -fno-legacy-pass-manager -emit-llvm-bc -flto=full -disable-llvm-verifier -o - %s | llvm-dis | FileCheck %s --check-prefix=FULL-NPM
; RUN: %clang_cc1 -fno-legacy-pass-manager -emit-llvm-bc -flto=thin -disable-llvm-verifier -o - %s | llvm-dis | FileCheck %s --check-prefix=THIN-NPM
; RUN: %clang_cc1 -flegacy-pass-manager -emit-llvm-bc -flto=full -disable-llvm-verifier -o - %s | llvm-dis | FileCheck %s --check-prefix=FULL-OPM
; RUN: %clang_cc1 -flegacy-pass-manager -emit-llvm-bc -flto=thin -disable-llvm-verifier -o - %s | llvm-dis | FileCheck %s --check-prefix=THIN-OPM
define dso_local void @main() local_unnamed_addr {
entry:
ret void
}
; FULL-NPM-NOT: !llvm.module.flags = !{!0, !1, !2, !3, !3}
; FULL-OPM-NOT: !llvm.module.flags = !{!0, !1, !2, !3, !3}
; THIN-NPM-NOT: !llvm.module.flags = !{!0, !1, !2, !3, !4}
; THIN-OPM-NOT: !llvm.module.flags = !{!0, !1, !2, !3, !4}
!llvm.module.flags = !{!0, !1, !2, !3}
!0 = !{i32 1, !"wchar_size", i32 2}
!1 = !{i32 7, !"frame-pointer", i32 2}
!2 = !{i32 1, !"ThinLTO", i32 0}
!3 = !{i32 1, !"EnableSplitLTOUnit", i32 1}