mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
[CodeGen] Do not split functions with attr "implicit-section-name".
The #pragma clang section can be used at a coarse granularity to specify the section used for bss/data/text/rodata for global objects. When split functions is enabled, the function may be split into two parts violating user expectations. Reference: https://clang.llvm.org/docs/LanguageExtensions.html#specifying-section-names-for-global-objects-pragma-clang-section Differential Revision: https://reviews.llvm.org/D101004
This commit is contained in:
parent
4dafa2234f
commit
5f0fcf1af8
@ -101,7 +101,8 @@ bool MachineFunctionSplitter::runOnMachineFunction(MachineFunction &MF) {
|
||||
// since the split part may not be placed in a contiguous region. It may also
|
||||
// be more beneficial to augment the linker to ensure contiguous layout of
|
||||
// split functions within the same section as specified by the attribute.
|
||||
if (!MF.getFunction().getSection().empty())
|
||||
if (!MF.getFunction().getSection().empty() ||
|
||||
MF.getFunction().hasFnAttribute("implicit-section-name"))
|
||||
return false;
|
||||
|
||||
// We don't want to proceed further for cold functions
|
||||
|
@ -223,6 +223,26 @@ exit:
|
||||
ret i32 %5
|
||||
}
|
||||
|
||||
define void @foo9(i1 zeroext %0) nounwind #0 !prof !14 {
|
||||
;; Check that function with section attribute is not split.
|
||||
; MFS-DEFAULTS-LABEL: foo9
|
||||
; MFS-DEFAULTS-NOT: foo9.cold:
|
||||
br i1 %0, label %2, label %4, !prof !17
|
||||
|
||||
2: ; preds = %1
|
||||
%3 = call i32 @bar()
|
||||
br label %6
|
||||
|
||||
4: ; preds = %1
|
||||
%5 = call i32 @baz()
|
||||
br label %6
|
||||
|
||||
6: ; preds = %4, %2
|
||||
%7 = tail call i32 @qux()
|
||||
ret void
|
||||
}
|
||||
|
||||
|
||||
declare i32 @bar()
|
||||
declare i32 @baz()
|
||||
declare i32 @bam()
|
||||
@ -232,6 +252,8 @@ declare i32 @__gxx_personality_v0(...)
|
||||
|
||||
@_ZTIi = external constant i8*
|
||||
|
||||
attributes #0 = { "implicit-section-name"="nosplit" }
|
||||
|
||||
!llvm.module.flags = !{!0}
|
||||
!0 = !{i32 1, !"ProfileSummary", !1}
|
||||
!1 = !{!2, !3, !4, !5, !6, !7, !8, !9}
|
||||
|
Loading…
Reference in New Issue
Block a user