Remove the experimental (and unused) pre-ra splitting pass. Greedy regalloc can split live ranges.

llvm-svn: 133962
This commit is contained in:
Evan Cheng 2011-06-27 23:40:45 +00:00
parent 163b4a70fb
commit b7d00313dc
14 changed files with 0 additions and 1777 deletions

View File

@ -73,8 +73,6 @@ namespace llvm {
/// This pass is still in development
extern char &StrongPHIEliminationID;
extern char &PreAllocSplittingID;
/// LiveStacks pass. An analysis keeping track of the liveness of stack slots.
extern char &LiveStacksID;

View File

@ -177,7 +177,6 @@ void initializePostDomOnlyViewerPass(PassRegistry&);
void initializePostDomPrinterPass(PassRegistry&);
void initializePostDomViewerPass(PassRegistry&);
void initializePostDominatorTreePass(PassRegistry&);
void initializePreAllocSplittingPass(PassRegistry&);
void initializePreVerifierPass(PassRegistry&);
void initializePrintDbgInfoPass(PassRegistry&);
void initializePrintFunctionPassPass(PassRegistry&);

View File

@ -37,7 +37,6 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
initializeOptimizePHIsPass(Registry);
initializePHIEliminationPass(Registry);
initializePeepholeOptimizerPass(Registry);
initializePreAllocSplittingPass(Registry);
initializeProcessImplicitDefsPass(Registry);
initializePEIPass(Registry);
initializeRALinScanPass(Registry);

File diff suppressed because it is too large Load Diff

View File

@ -57,11 +57,6 @@ NewHeuristic("new-spilling-heuristic",
cl::desc("Use new spilling heuristic"),
cl::init(false), cl::Hidden);
static cl::opt<bool>
PreSplitIntervals("pre-alloc-split",
cl::desc("Pre-register allocation live interval splitting"),
cl::init(false), cl::Hidden);
static cl::opt<bool>
TrivCoalesceEnds("trivial-coalesce-ends",
cl::desc("Attempt trivial coalescing of interval ends"),
@ -104,7 +99,6 @@ namespace {
initializeRegisterCoalescerPass(
*PassRegistry::getPassRegistry());
initializeCalculateSpillWeightsPass(*PassRegistry::getPassRegistry());
initializePreAllocSplittingPass(*PassRegistry::getPassRegistry());
initializeLiveStacksPass(*PassRegistry::getPassRegistry());
initializeMachineDominatorTreePass(*PassRegistry::getPassRegistry());
initializeMachineLoopInfoPass(*PassRegistry::getPassRegistry());
@ -217,8 +211,6 @@ namespace {
// to coalescing and which analyses coalescing invalidates.
AU.addRequiredTransitive<RegisterCoalescer>();
AU.addRequired<CalculateSpillWeights>();
if (PreSplitIntervals)
AU.addRequiredID(PreAllocSplittingID);
AU.addRequiredID(LiveStacksID);
AU.addPreservedID(LiveStacksID);
AU.addRequired<MachineLoopInfo>();
@ -401,7 +393,6 @@ INITIALIZE_PASS_BEGIN(RALinScan, "linearscan-regalloc",
INITIALIZE_PASS_DEPENDENCY(LiveIntervals)
INITIALIZE_PASS_DEPENDENCY(StrongPHIElimination)
INITIALIZE_PASS_DEPENDENCY(CalculateSpillWeights)
INITIALIZE_PASS_DEPENDENCY(PreAllocSplitting)
INITIALIZE_PASS_DEPENDENCY(LiveStacks)
INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
INITIALIZE_PASS_DEPENDENCY(VirtRegMap)

View File

@ -1,24 +0,0 @@
; RUN: llc < %s -march=x86 -mattr=+sse2 -pre-alloc-split -regalloc=linearscan -stats |& \
; RUN: grep {pre-alloc-split} | grep {Number of intervals split} | grep 1
; XFAIL: *
define void @test(double* %P, i32 %cond) nounwind {
entry:
%0 = load double* %P, align 8 ; <double> [#uses=1]
%1 = fadd double %0, 4.000000e+00 ; <double> [#uses=2]
%2 = icmp eq i32 %cond, 0 ; <i1> [#uses=1]
br i1 %2, label %bb1, label %bb
bb: ; preds = %entry
%3 = fadd double %1, 4.000000e+00 ; <double> [#uses=1]
br label %bb1
bb1: ; preds = %bb, %entry
%A.0 = phi double [ %3, %bb ], [ %1, %entry ] ; <double> [#uses=1]
%4 = fmul double %A.0, 4.000000e+00 ; <double> [#uses=1]
%5 = tail call i32 (...)* @bar() nounwind ; <i32> [#uses=0]
store double %4, double* %P, align 8
ret void
}
declare i32 @bar(...)

View File

@ -1,51 +0,0 @@
; RUN: llc < %s -march=x86 -mattr=+sse2 -pre-alloc-split -regalloc=linearscan
define i32 @main(i32 %argc, i8** %argv) nounwind {
entry:
br label %bb14.i
bb14.i: ; preds = %bb14.i, %entry
%i8.0.reg2mem.0.i = phi i32 [ 0, %entry ], [ %0, %bb14.i ] ; <i32> [#uses=1]
%0 = add i32 %i8.0.reg2mem.0.i, 1 ; <i32> [#uses=2]
%1 = fadd double 0.000000e+00, 0.000000e+00 ; <double> [#uses=1]
%2 = fadd double 0.000000e+00, 0.000000e+00 ; <double> [#uses=1]
%3 = fadd double 0.000000e+00, 0.000000e+00 ; <double> [#uses=1]
%exitcond75.i = icmp eq i32 %0, 32 ; <i1> [#uses=1]
br i1 %exitcond75.i, label %bb24.i, label %bb14.i
bb24.i: ; preds = %bb14.i
%4 = fdiv double 0.000000e+00, 0.000000e+00 ; <double> [#uses=1]
%5 = fdiv double %1, 0.000000e+00 ; <double> [#uses=1]
%6 = fdiv double %2, 0.000000e+00 ; <double> [#uses=1]
%7 = fdiv double %3, 0.000000e+00 ; <double> [#uses=1]
br label %bb31.i
bb31.i: ; preds = %bb31.i, %bb24.i
%tmp.0.reg2mem.0.i = phi i32 [ 0, %bb24.i ], [ %indvar.next64.i, %bb31.i ] ; <i32> [#uses=1]
%indvar.next64.i = add i32 %tmp.0.reg2mem.0.i, 1 ; <i32> [#uses=2]
%exitcond65.i = icmp eq i32 %indvar.next64.i, 64 ; <i1> [#uses=1]
br i1 %exitcond65.i, label %bb33.i, label %bb31.i
bb33.i: ; preds = %bb31.i
br label %bb35.preheader.i
bb5.i.i: ; preds = %bb35.preheader.i
%8 = call double @floor(double 0.000000e+00) nounwind readnone ; <double> [#uses=0]
br label %bb7.i.i
bb7.i.i: ; preds = %bb35.preheader.i, %bb5.i.i
br label %bb35.preheader.i
bb35.preheader.i: ; preds = %bb7.i.i, %bb33.i
%9 = fsub double 0.000000e+00, %4 ; <double> [#uses=1]
store double %9, double* null, align 8
%10 = fsub double 0.000000e+00, %5 ; <double> [#uses=1]
store double %10, double* null, align 8
%11 = fsub double 0.000000e+00, %6 ; <double> [#uses=1]
store double %11, double* null, align 8
%12 = fsub double 0.000000e+00, %7 ; <double> [#uses=1]
store double %12, double* null, align 8
br i1 false, label %bb7.i.i, label %bb5.i.i
}
declare double @floor(double) nounwind readnone

View File

@ -1,34 +0,0 @@
; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+sse2 -pre-alloc-split -regalloc=linearscan | FileCheck %s
@.str = private constant [28 x i8] c"\0A\0ADOUBLE D = %f\0A\00", align 1 ; <[28 x i8]*> [#uses=1]
@.str1 = private constant [37 x i8] c"double to long l1 = %ld\09\09(0x%lx)\0A\00", align 8 ; <[37 x i8]*> [#uses=1]
@.str2 = private constant [35 x i8] c"double to uint ui1 = %u\09\09(0x%x)\0A\00", align 8 ; <[35 x i8]*> [#uses=1]
@.str3 = private constant [37 x i8] c"double to ulong ul1 = %lu\09\09(0x%lx)\0A\00", align 8 ; <[37 x i8]*> [#uses=1]
define i32 @main(i32 %argc, i8** nocapture %argv) nounwind ssp {
; CHECK: movsd %xmm0, (%rsp)
entry:
%0 = icmp sgt i32 %argc, 4 ; <i1> [#uses=1]
br i1 %0, label %bb, label %bb2
bb: ; preds = %entry
%1 = getelementptr inbounds i8** %argv, i64 4 ; <i8**> [#uses=1]
%2 = load i8** %1, align 8 ; <i8*> [#uses=1]
%3 = tail call double @atof(i8* %2) nounwind ; <double> [#uses=1]
br label %bb2
bb2: ; preds = %bb, %entry
%storemerge = phi double [ %3, %bb ], [ 2.000000e+00, %entry ] ; <double> [#uses=4]
%4 = fptoui double %storemerge to i32 ; <i32> [#uses=2]
%5 = fptoui double %storemerge to i64 ; <i64> [#uses=2]
%6 = fptosi double %storemerge to i64 ; <i64> [#uses=2]
%7 = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([28 x i8]* @.str, i64 0, i64 0), double %storemerge) nounwind ; <i32> [#uses=0]
%8 = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([37 x i8]* @.str1, i64 0, i64 0), i64 %6, i64 %6) nounwind ; <i32> [#uses=0]
%9 = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([35 x i8]* @.str2, i64 0, i64 0), i32 %4, i32 %4) nounwind ; <i32> [#uses=0]
%10 = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([37 x i8]* @.str3, i64 0, i64 0), i64 %5, i64 %5) nounwind ; <i32> [#uses=0]
ret i32 0
}
declare double @atof(i8* nocapture) nounwind readonly
declare i32 @printf(i8* nocapture, ...) nounwind

View File

@ -1,26 +0,0 @@
; RUN: llc < %s -march=x86 -mattr=+sse2 -pre-alloc-split -regalloc=linearscan -stats |& \
; RUN: grep {pre-alloc-split} | grep {Number of intervals split} | grep 2
define i32 @main(i32 %argc, i8** %argv) nounwind {
entry:
br label %bb
bb: ; preds = %bb, %entry
%k.0.reg2mem.0 = phi double [ 1.000000e+00, %entry ], [ %6, %bb ] ; <double> [#uses=2]
%Flint.0.reg2mem.0 = phi double [ 0.000000e+00, %entry ], [ %5, %bb ] ; <double> [#uses=1]
%twoThrd.0.reg2mem.0 = phi double [ 0.000000e+00, %entry ], [ %1, %bb ] ; <double> [#uses=1]
%0 = tail call double @llvm.pow.f64(double 0x3FE5555555555555, double 0.000000e+00) ; <double> [#uses=1]
%1 = fadd double %0, %twoThrd.0.reg2mem.0 ; <double> [#uses=1]
%2 = tail call double @sin(double %k.0.reg2mem.0) nounwind readonly ; <double> [#uses=1]
%3 = fmul double 0.000000e+00, %2 ; <double> [#uses=1]
%4 = fdiv double 1.000000e+00, %3 ; <double> [#uses=1]
store double %Flint.0.reg2mem.0, double* null
store double %twoThrd.0.reg2mem.0, double* null
%5 = fadd double %4, %Flint.0.reg2mem.0 ; <double> [#uses=1]
%6 = fadd double %k.0.reg2mem.0, 1.000000e+00 ; <double> [#uses=1]
br label %bb
}
declare double @llvm.pow.f64(double, double) nounwind readonly
declare double @sin(double) nounwind readonly

View File

@ -1,56 +0,0 @@
; RUN: llc < %s -march=x86 -mattr=+sse2 -pre-alloc-split -regalloc=linearscan
target triple = "i386-apple-darwin9.5"
%struct.FILE = type { i8*, i32, i32, i16, i16, %struct.__sbuf, i32, i8*, i32 (i8*)*, i32 (i8*, i8*, i32)*, i64 (i8*, i64, i32)*, i32 (i8*, i8*, i32)*, %struct.__sbuf, %struct.__sFILEX*, i32, [3 x i8], [1 x i8], %struct.__sbuf, i32, i64 }
%struct.__sFILEX = type opaque
%struct.__sbuf = type { i8*, i32 }
@"\01LC1" = external constant [48 x i8] ; <[48 x i8]*> [#uses=1]
define i32 @main() nounwind {
entry:
br label %bb5.us
bb5.us: ; preds = %bb8.split, %bb5.us, %entry
%i.0.reg2mem.0.ph = phi i32 [ 0, %entry ], [ %indvar.next53, %bb8.split ], [ %i.0.reg2mem.0.ph, %bb5.us ] ; <i32> [#uses=2]
%j.0.reg2mem.0.us = phi i32 [ %indvar.next47, %bb5.us ], [ 0, %bb8.split ], [ 0, %entry ] ; <i32> [#uses=1]
%indvar.next47 = add i32 %j.0.reg2mem.0.us, 1 ; <i32> [#uses=2]
%exitcond48 = icmp eq i32 %indvar.next47, 256 ; <i1> [#uses=1]
br i1 %exitcond48, label %bb8.split, label %bb5.us
bb8.split: ; preds = %bb5.us
%indvar.next53 = add i32 %i.0.reg2mem.0.ph, 1 ; <i32> [#uses=2]
%exitcond54 = icmp eq i32 %indvar.next53, 256 ; <i1> [#uses=1]
br i1 %exitcond54, label %bb11, label %bb5.us
bb11: ; preds = %bb11, %bb8.split
%i.1.reg2mem.0 = phi i32 [ %indvar.next44, %bb11 ], [ 0, %bb8.split ] ; <i32> [#uses=1]
%indvar.next44 = add i32 %i.1.reg2mem.0, 1 ; <i32> [#uses=2]
%exitcond45 = icmp eq i32 %indvar.next44, 63 ; <i1> [#uses=1]
br i1 %exitcond45, label %bb14, label %bb11
bb14: ; preds = %bb14, %bb11
%indvar = phi i32 [ %indvar.next40, %bb14 ], [ 0, %bb11 ] ; <i32> [#uses=1]
%indvar.next40 = add i32 %indvar, 1 ; <i32> [#uses=2]
%exitcond41 = icmp eq i32 %indvar.next40, 32768 ; <i1> [#uses=1]
br i1 %exitcond41, label %bb28, label %bb14
bb28: ; preds = %bb14
%0 = fdiv double 2.550000e+02, 0.000000e+00 ; <double> [#uses=1]
br label %bb30
bb30: ; preds = %bb36, %bb28
%m.1.reg2mem.0 = phi i32 [ %m.0, %bb36 ], [ 0, %bb28 ] ; <i32> [#uses=1]
%1 = fmul double 0.000000e+00, %0 ; <double> [#uses=1]
%2 = fptosi double %1 to i32 ; <i32> [#uses=1]
br i1 false, label %bb36, label %bb35
bb35: ; preds = %bb30
%3 = tail call i32 (%struct.FILE*, i8*, ...)* @fprintf(%struct.FILE* null, i8* getelementptr ([48 x i8]* @"\01LC1", i32 0, i32 0), i32 0, i32 0, i32 0, i32 %2) nounwind ; <i32> [#uses=0]
br label %bb36
bb36: ; preds = %bb35, %bb30
%m.0 = phi i32 [ 0, %bb35 ], [ %m.1.reg2mem.0, %bb30 ] ; <i32> [#uses=1]
br label %bb30
}
declare i32 @fprintf(%struct.FILE*, i8*, ...) nounwind

View File

@ -1,36 +0,0 @@
; RUN: llc < %s -mtriple=i386-apple-darwin -mattr=+sse2 -pre-alloc-split -regalloc=linearscan | grep {divsd 24} | count 1
@current_surfaces.b = external global i1 ; <i1*> [#uses=1]
declare double @sin(double) nounwind readonly
declare double @asin(double) nounwind readonly
define fastcc void @trace_line(i32 %line) nounwind {
entry:
%.b3 = load i1* @current_surfaces.b ; <i1> [#uses=1]
br i1 %.b3, label %bb.nph, label %return
bb.nph: ; preds = %entry
%0 = load double* null, align 8 ; <double> [#uses=1]
%1 = load double* null, align 8 ; <double> [#uses=2]
%2 = fcmp une double %0, 0.000000e+00 ; <i1> [#uses=1]
br i1 %2, label %bb9.i, label %bb13.i
bb9.i: ; preds = %bb.nph
%3 = tail call double @asin(double 0.000000e+00) nounwind readonly ; <double> [#uses=0]
%4 = fdiv double 1.000000e+00, %1 ; <double> [#uses=1]
%5 = fmul double %4, 0.000000e+00 ; <double> [#uses=1]
%6 = tail call double @asin(double %5) nounwind readonly ; <double> [#uses=0]
unreachable
bb13.i: ; preds = %bb.nph
%7 = fdiv double 1.000000e+00, %1 ; <double> [#uses=1]
%8 = tail call double @sin(double 0.000000e+00) nounwind readonly ; <double> [#uses=1]
%9 = fmul double %7, %8 ; <double> [#uses=1]
%10 = tail call double @asin(double %9) nounwind readonly ; <double> [#uses=0]
unreachable
return: ; preds = %entry
ret void
}

View File

@ -1,34 +0,0 @@
; RUN: llc < %s -march=x86 -mattr=+sse2 -pre-alloc-split -regalloc=linearscan
@object_distance = external global double, align 8 ; <double*> [#uses=1]
@axis_slope_angle = external global double, align 8 ; <double*> [#uses=1]
@current_surfaces.b = external global i1 ; <i1*> [#uses=1]
declare double @sin(double) nounwind readonly
declare double @asin(double) nounwind readonly
declare double @tan(double) nounwind readonly
define fastcc void @trace_line(i32 %line) nounwind {
entry:
%.b3 = load i1* @current_surfaces.b ; <i1> [#uses=1]
br i1 %.b3, label %bb, label %return
bb: ; preds = %bb, %entry
%0 = tail call double @asin(double 0.000000e+00) nounwind readonly ; <double> [#uses=1]
%1 = fadd double 0.000000e+00, %0 ; <double> [#uses=2]
%2 = tail call double @asin(double 0.000000e+00) nounwind readonly ; <double> [#uses=1]
%3 = fsub double %1, %2 ; <double> [#uses=2]
store double %3, double* @axis_slope_angle, align 8
%4 = fdiv double %1, 2.000000e+00 ; <double> [#uses=1]
%5 = tail call double @sin(double %4) nounwind readonly ; <double> [#uses=1]
%6 = fmul double 0.000000e+00, %5 ; <double> [#uses=1]
%7 = tail call double @tan(double %3) nounwind readonly ; <double> [#uses=0]
%8 = fadd double 0.000000e+00, %6 ; <double> [#uses=1]
store double %8, double* @object_distance, align 8
br label %bb
return: ; preds = %entry
ret void
}

View File

@ -1,35 +0,0 @@
; RUN: llc < %s -march=x86 -mattr=+sse2 -pre-alloc-split -regalloc=linearscan -stats |& \
; RUN: grep {pre-alloc-split} | grep {Number of intervals split} | grep 1
@current_surfaces.b = external global i1 ; <i1*> [#uses=1]
declare double @asin(double) nounwind readonly
declare double @tan(double) nounwind readonly
define fastcc void @trace_line(i32 %line) nounwind {
entry:
%.b3 = load i1* @current_surfaces.b ; <i1> [#uses=1]
br i1 %.b3, label %bb, label %return
bb: ; preds = %bb9.i, %entry
%.rle4 = phi double [ %7, %bb9.i ], [ 0.000000e+00, %entry ] ; <double> [#uses=1]
%0 = load double* null, align 8 ; <double> [#uses=3]
%1 = fcmp une double %0, 0.000000e+00 ; <i1> [#uses=1]
br i1 %1, label %bb9.i, label %bb13.i
bb9.i: ; preds = %bb
%2 = fsub double %.rle4, %0 ; <double> [#uses=0]
%3 = tail call double @asin(double %.rle4) nounwind readonly ; <double> [#uses=0]
%4 = fmul double 0.000000e+00, %0 ; <double> [#uses=1]
%5 = tail call double @tan(double 0.000000e+00) nounwind readonly ; <double> [#uses=0]
%6 = fmul double %4, 0.000000e+00 ; <double> [#uses=1]
%7 = fadd double %6, 0.000000e+00 ; <double> [#uses=1]
br i1 false, label %return, label %bb
bb13.i: ; preds = %bb
unreachable
return: ; preds = %bb9.i, %entry
ret void
}

View File

@ -1,38 +0,0 @@
; RUN: llc < %s -march=x86 -mattr=+sse2 -pre-alloc-split -regalloc=linearscan -stats |& \
; RUN: grep {pre-alloc-split} | grep {Number of intervals split} | grep 1
@current_surfaces.b = external global i1 ; <i1*> [#uses=1]
declare double @sin(double) nounwind readonly
declare double @asin(double) nounwind readonly
declare double @tan(double) nounwind readonly
define fastcc void @trace_line(i32 %line) nounwind {
entry:
%.b3 = load i1* @current_surfaces.b ; <i1> [#uses=1]
br i1 %.b3, label %bb, label %return
bb: ; preds = %bb9.i, %entry
%.rle4 = phi double [ %8, %bb9.i ], [ 0.000000e+00, %entry ] ; <double> [#uses=1]
%0 = load double* null, align 8 ; <double> [#uses=3]
%1 = fcmp une double %0, 0.000000e+00 ; <i1> [#uses=1]
br i1 %1, label %bb9.i, label %bb13.i
bb9.i: ; preds = %bb
%2 = fsub double %.rle4, %0 ; <double> [#uses=0]
%3 = tail call double @asin(double %.rle4) nounwind readonly ; <double> [#uses=0]
%4 = tail call double @sin(double 0.000000e+00) nounwind readonly ; <double> [#uses=1]
%5 = fmul double %4, %0 ; <double> [#uses=1]
%6 = tail call double @tan(double 0.000000e+00) nounwind readonly ; <double> [#uses=0]
%7 = fmul double %5, 0.000000e+00 ; <double> [#uses=1]
%8 = fadd double %7, 0.000000e+00 ; <double> [#uses=1]
br i1 false, label %return, label %bb
bb13.i: ; preds = %bb
unreachable
return: ; preds = %bb9.i, %entry
ret void
}