From: Andrew Kaylor Date: Fri, 27 May 2016 22:56:49 +0000 (+0000) Subject: Update the stack coloring pass to remove lifetime intrinsics in the optnone/opt-bisec... X-Git-Tag: android-x86-7.1-r4~32650 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=c465f6c0403034c3715e329ee168d6e24a987952;p=android-x86%2Fexternal-llvm.git Update the stack coloring pass to remove lifetime intrinsics in the optnone/opt-bisect skip case. Differential Revision: http://reviews.llvm.org/D20453 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@271068 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/StackColoring.cpp b/lib/CodeGen/StackColoring.cpp index 281836e909d..17c01dc3c3f 100644 --- a/lib/CodeGen/StackColoring.cpp +++ b/lib/CodeGen/StackColoring.cpp @@ -963,9 +963,6 @@ void StackColoring::expungeSlotMap(DenseMap &SlotRemap, } bool StackColoring::runOnMachineFunction(MachineFunction &Func) { - if (skipFunction(*Func.getFunction())) - return false; - DEBUG(dbgs() << "********** Stack Coloring **********\n" << "********** Function: " << ((const Value*)Func.getFunction())->getName() << '\n'); @@ -1005,7 +1002,8 @@ bool StackColoring::runOnMachineFunction(MachineFunction &Func) { // Don't continue because there are not enough lifetime markers, or the // stack is too small, or we are told not to optimize the slots. - if (NumMarkers < 2 || TotalSize < 16 || DisableColoring) { + if (NumMarkers < 2 || TotalSize < 16 || DisableColoring || + skipFunction(*Func.getFunction())) { DEBUG(dbgs()<<"Will not try to merge slots.\n"); return removeAllMarkers(); } diff --git a/test/Feature/optnone-llc.ll b/test/Feature/optnone-llc.ll index 8abcd09eea5..a03757359c8 100644 --- a/test/Feature/optnone-llc.ll +++ b/test/Feature/optnone-llc.ll @@ -46,7 +46,6 @@ attributes #0 = { optnone noinline } ; LLC-Ox-DAG: Skipping pass 'Machine Copy Propagation Pass' ; LLC-Ox-DAG: Skipping pass 'Machine Instruction Scheduler' ; LLC-Ox-DAG: Skipping pass 'Machine Loop Invariant Code Motion' -; LLC-Ox-DAG: Skipping pass 'Merge disjoint stack slots' ; LLC-Ox-DAG: Skipping pass 'Optimize machine instruction PHIs' ; LLC-Ox-DAG: Skipping pass 'Peephole Optimizations' ; LLC-Ox-DAG: Skipping pass 'Post{{.*}}RA{{.*}}{{[Ss]}}cheduler' diff --git a/test/Other/opt-bisect-legacy-pass-manager.ll b/test/Other/opt-bisect-legacy-pass-manager.ll index 0e528ea4b32..6677c264e9c 100644 --- a/test/Other/opt-bisect-legacy-pass-manager.ll +++ b/test/Other/opt-bisect-legacy-pass-manager.ll @@ -154,3 +154,25 @@ bb.true: bb.false: ret i32 0 } + +; This function is here to verify that opt-bisect can skip all passes for +; functions that contain lifetime intrinsics. +define void @f4() { +entry: + %i = alloca i32, align 4 + %tmp = bitcast i32* %i to i8* + call void @llvm.lifetime.start(i64 4, i8* %tmp) + br label %for.cond + +for.cond: + br i1 undef, label %for.body, label %for.end + +for.body: + br label %for.cond + +for.end: + ret void +} + +declare void @llvm.lifetime.start(i64, i8* nocapture) +