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
26 lines
1.2 KiB
LLVM
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}
|