Clean up LiveVariables and change how it deals with partial updates and kills. This also eliminate the horrible check which scan forward to the end of the basic block. It should be faster and more accurate.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@82676 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Evan Cheng
2009-09-24 02:15:22 +00:00
parent 1d75d3a8ae
commit ad934b821c
5 changed files with 170 additions and 209 deletions

View File

@@ -0,0 +1,91 @@
; RUN: llc < %s -mtriple=x86_64-apple-darwin10
; rdar://7247745
%struct._lck_mtx_ = type { %union.anon }
%struct._lck_rw_t_internal_ = type <{ i16, i8, i8, i32, i32, i32 }>
%struct.anon = type { i64, i64, [2 x i8], i8, i8, i32 }
%struct.memory_object = type { i32, i32, %struct.memory_object_pager_ops* }
%struct.memory_object_control = type { i32, i32, %struct.vm_object* }
%struct.memory_object_pager_ops = type { void (%struct.memory_object*)*, void (%struct.memory_object*)*, i32 (%struct.memory_object*, %struct.memory_object_control*, i32)*, i32 (%struct.memory_object*)*, i32 (%struct.memory_object*, i64, i32, i32, i32*)*, i32 (%struct.memory_object*, i64, i32, i64*, i32*, i32, i32, i32)*, i32 (%struct.memory_object*, i64, i32)*, i32 (%struct.memory_object*, i64, i64, i32)*, i32 (%struct.memory_object*, i64, i64, i32)*, i32 (%struct.memory_object*, i32)*, i32 (%struct.memory_object*)*, i8* }
%struct.queue_entry = type { %struct.queue_entry*, %struct.queue_entry* }
%struct.upl = type { %struct._lck_mtx_, i32, i32, %struct.vm_object*, i64, i32, i64, %struct.vm_object*, i32, i8* }
%struct.upl_page_info = type <{ i32, i8, [3 x i8] }>
%struct.vm_object = type { %struct.queue_entry, %struct._lck_rw_t_internal_, i64, %struct.vm_page*, i32, i32, i32, i32, %struct.vm_object*, %struct.vm_object*, i64, %struct.memory_object*, i64, %struct.memory_object_control*, i32, i16, i16, [2 x i8], i8, i8, %struct.queue_entry, %struct.queue_entry, i64, i32, i32, i32, i8*, i64, i8, i8, [2 x i8], %struct.queue_entry }
%struct.vm_page = type { %struct.queue_entry, %struct.queue_entry, %struct.vm_page*, %struct.vm_object*, i64, [2 x i8], i8, i8, i32, i8, i8, i8, i8, i32 }
%union.anon = type { %struct.anon }
declare i64 @OSAddAtomic64(i64, i64*) noredzone noimplicitfloat
define i32 @upl_commit_range(%struct.upl* %upl, i32 %offset, i32 %size, i32 %flags, %struct.upl_page_info* %page_list, i32 %count, i32* nocapture %empty) nounwind noredzone noimplicitfloat {
entry:
br i1 undef, label %if.then, label %if.end
if.end: ; preds = %entry
br i1 undef, label %if.end143, label %if.then136
if.then136: ; preds = %if.end
unreachable
if.end143: ; preds = %if.end
br i1 undef, label %if.else155, label %if.then153
if.then153: ; preds = %if.end143
br label %while.cond
if.else155: ; preds = %if.end143
unreachable
while.cond: ; preds = %if.end1039, %if.then153
br i1 undef, label %if.then1138, label %while.body
while.body: ; preds = %while.cond
br i1 undef, label %if.end260, label %if.then217
if.then217: ; preds = %while.body
br i1 undef, label %if.end260, label %if.then230
if.then230: ; preds = %if.then217
br i1 undef, label %if.then246, label %if.end260
if.then246: ; preds = %if.then230
br label %if.end260
if.end260: ; preds = %if.then246, %if.then230, %if.then217, %while.body
br i1 undef, label %if.end296, label %if.then266
if.then266: ; preds = %if.end260
unreachable
if.end296: ; preds = %if.end260
br i1 undef, label %if.end1039, label %if.end306
if.end306: ; preds = %if.end296
br i1 undef, label %if.end796, label %if.then616
if.then616: ; preds = %if.end306
br i1 undef, label %commit_next_page, label %do.body716
do.body716: ; preds = %if.then616
%call721 = call i64 @OSAddAtomic64(i64 1, i64* undef) nounwind noredzone noimplicitfloat ; <i64> [#uses=0]
call void asm sideeffect "movq\090x0($0),%rdi\0A\09movq\090x8($0),%rsi\0A\09.section __DATA, __data\0A\09.globl __dtrace_probeDOLLAR${:uid}4794___vminfo____pgrec\0A\09__dtrace_probeDOLLAR${:uid}4794___vminfo____pgrec:.quad 1f\0A\09.text\0A\091:nop\0A\09nop\0A\09nop\0A\09", "r,~{memory},~{di},~{si},~{dirflag},~{fpsr},~{flags}"(i64* undef) nounwind
br label %commit_next_page
if.end796: ; preds = %if.end306
unreachable
commit_next_page: ; preds = %do.body716, %if.then616
br i1 undef, label %if.end1039, label %if.then1034
if.then1034: ; preds = %commit_next_page
br label %if.end1039
if.end1039: ; preds = %if.then1034, %commit_next_page, %if.end296
br label %while.cond
if.then1138: ; preds = %while.cond
unreachable
if.then: ; preds = %entry
ret i32 4
}