mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-02 07:11:49 +00:00
Don't merge tiny functions.
It's silly to merge functions like these: define void @foo(i32 %x) { ret void } define void @bar(i32 %x) { ret void } to get define void @bar(i32) { tail call void @foo(i32 %0) ret void } git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191786 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
04132a6c5c
commit
187c774a76
@ -836,6 +836,18 @@ bool MergeFunctions::insert(ComparableFunction &NewF) {
|
||||
|
||||
const ComparableFunction &OldF = *Result.first;
|
||||
|
||||
// Don't merge tiny functions, since it can just end up making the function
|
||||
// larger.
|
||||
// FIXME: Should still merge them if they are unnamed_addr and produce an
|
||||
// alias.
|
||||
if (NewF.getFunc()->size() == 1) {
|
||||
if (NewF.getFunc()->front().size() <= 2) {
|
||||
DEBUG(dbgs() << NewF.getFunc()->getName()
|
||||
<< " is to small to bother merging\n");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Never thunk a strong function to a weak function.
|
||||
assert(!OldF.getFunc()->mayBeOverridden() ||
|
||||
NewF.getFunc()->mayBeOverridden());
|
||||
|
@ -1,18 +1,27 @@
|
||||
; RUN: opt -S -mergefunc < %s | FileCheck %s
|
||||
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
|
||||
|
||||
; CHECK-LABEL: f0
|
||||
|
||||
declare void @stuff()
|
||||
|
||||
; CHECK-LABEL: @f0(
|
||||
define void @f0(i64 %p0) {
|
||||
entry:
|
||||
call void @stuff()
|
||||
call void @stuff()
|
||||
call void @stuff()
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK-LABEL: f1
|
||||
; CHECK-LABEL: @f1(
|
||||
; CHECK: ptrtoint i64*
|
||||
; CHECK: tail call void @f0(i64
|
||||
|
||||
define void @f1(i64* %p0) {
|
||||
entry:
|
||||
call void @stuff()
|
||||
call void @stuff()
|
||||
call void @stuff()
|
||||
ret void
|
||||
}
|
||||
|
||||
|
14
test/Transforms/MergeFunc/too-small.ll
Normal file
14
test/Transforms/MergeFunc/too-small.ll
Normal file
@ -0,0 +1,14 @@
|
||||
; RUN: opt -S -mergefunc < %s | FileCheck %s
|
||||
|
||||
define void @foo(i32 %x) {
|
||||
; CHECK-LABEL: @foo(
|
||||
; CHECK-NOT: call
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @bar(i32 %x) {
|
||||
; CHECK-LABEL: @bar(
|
||||
; CHECK-NOT: call
|
||||
ret void
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user