Be careful about scheduling nodes above previous calls. It increase usages of

more callee-saved registers and introduce copies. Only allows it if scheduling
a node above calls would end up lessen register pressure.

Call operands also has added ABI restrictions for register allocation, so be
extra careful with hoisting them above calls.

rdar://9329627


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130245 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Evan Cheng
2011-04-26 21:31:35 +00:00
parent 90fab0f9d8
commit 554daa67bd
8 changed files with 138 additions and 27 deletions

View File

@@ -1,20 +0,0 @@
; RUN: llc < %s -regalloc=fast -relocation-model=pic | FileCheck %s
target triple = "thumbv6-apple-darwin10"
@fred = internal global i32 0 ; <i32*> [#uses=1]
define void @foo() nounwind {
entry:
; CHECK: str r0, [sp
%0 = call i32 (...)* @bar() nounwind ; <i32> [#uses=1]
; CHECK: blx _bar
; CHECK: ldr r1, [sp
store i32 %0, i32* @fred, align 4
br label %return
return: ; preds = %entry
ret void
}
declare i32 @bar(...)