mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-26 23:29:22 +00:00
bootstrapping. It's not safe to leave identity subreg_to_reg and insert_subreg around. - Relax register scavenging to allow use of partially "not-live" registers. It's common for targets to operate on registers where the top bits are undef. e.g. s0 = d0 = insert_subreg d0<undef>, s0, 1 ... = d0 When the insert_subreg is eliminated by the coalescer, the scavenger used to complain. The previous fix was to keep to insert_subreg around. But that's brittle and it's overly conservative when we want to use the scavenger to allocate registers. It's actually legal and desirable for other instructions to use the "undef" part of d0. e.g. s0 = d0 = insert_subreg d0<undef>, s0, 1 ... s1 = = s1 = d0 We probably need add a "partial-undef" marker on machine operand so the machine verifier would not complain. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85091 91177308-0d34-0410-b5e6-96231b3b80d8
172 lines
11 KiB
LLVM
172 lines
11 KiB
LLVM
; RUN: llc < %s -mtriple=x86_64-apple-darwin -relocation-model=pic -disable-fp-elim
|
|
|
|
%struct.DecRefPicMarking_t = type { i32, i32, i32, i32, i32, %struct.DecRefPicMarking_t* }
|
|
%struct.FrameStore = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, %struct.StorablePicture*, %struct.StorablePicture*, %struct.StorablePicture* }
|
|
%struct.StorablePicture = type { i32, i32, i32, i32, i32, [50 x [6 x [33 x i64]]], [50 x [6 x [33 x i64]]], [50 x [6 x [33 x i64]]], [50 x [6 x [33 x i64]]], i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i16**, i16***, i8*, i16**, i8***, i64***, i64***, i16****, i8**, i8**, %struct.StorablePicture*, %struct.StorablePicture*, %struct.StorablePicture*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [2 x i32], i32, %struct.DecRefPicMarking_t*, i32 }
|
|
|
|
define fastcc void @insert_picture_in_dpb(%struct.FrameStore* nocapture %fs, %struct.StorablePicture* %p) nounwind ssp {
|
|
entry:
|
|
%0 = getelementptr inbounds %struct.FrameStore* %fs, i64 0, i32 12 ; <%struct.StorablePicture**> [#uses=1]
|
|
%1 = icmp eq i32 undef, 0 ; <i1> [#uses=1]
|
|
br i1 %1, label %bb.i, label %bb36.i
|
|
|
|
bb.i: ; preds = %entry
|
|
br i1 undef, label %bb3.i, label %bb14.preheader.i
|
|
|
|
bb3.i: ; preds = %bb.i
|
|
unreachable
|
|
|
|
bb14.preheader.i: ; preds = %bb.i
|
|
br i1 undef, label %bb9.i, label %bb20.preheader.i
|
|
|
|
bb9.i: ; preds = %bb9.i, %bb14.preheader.i
|
|
br i1 undef, label %bb9.i, label %bb20.preheader.i
|
|
|
|
bb20.preheader.i: ; preds = %bb9.i, %bb14.preheader.i
|
|
br i1 undef, label %bb18.i, label %bb29.preheader.i
|
|
|
|
bb18.i: ; preds = %bb20.preheader.i
|
|
unreachable
|
|
|
|
bb29.preheader.i: ; preds = %bb20.preheader.i
|
|
br i1 undef, label %bb24.i, label %bb30.i
|
|
|
|
bb24.i: ; preds = %bb29.preheader.i
|
|
unreachable
|
|
|
|
bb30.i: ; preds = %bb29.preheader.i
|
|
store i32 undef, i32* undef, align 8
|
|
br label %bb67.preheader.i
|
|
|
|
bb36.i: ; preds = %entry
|
|
br label %bb67.preheader.i
|
|
|
|
bb67.preheader.i: ; preds = %bb36.i, %bb30.i
|
|
%2 = phi %struct.StorablePicture* [ null, %bb36.i ], [ undef, %bb30.i ] ; <%struct.StorablePicture*> [#uses=2]
|
|
%3 = phi %struct.StorablePicture* [ null, %bb36.i ], [ undef, %bb30.i ] ; <%struct.StorablePicture*> [#uses=2]
|
|
%4 = phi %struct.StorablePicture* [ null, %bb36.i ], [ undef, %bb30.i ] ; <%struct.StorablePicture*> [#uses=2]
|
|
%5 = phi %struct.StorablePicture* [ null, %bb36.i ], [ undef, %bb30.i ] ; <%struct.StorablePicture*> [#uses=1]
|
|
%6 = phi %struct.StorablePicture* [ null, %bb36.i ], [ undef, %bb30.i ] ; <%struct.StorablePicture*> [#uses=1]
|
|
%7 = phi %struct.StorablePicture* [ null, %bb36.i ], [ undef, %bb30.i ] ; <%struct.StorablePicture*> [#uses=1]
|
|
%8 = phi %struct.StorablePicture* [ null, %bb36.i ], [ undef, %bb30.i ] ; <%struct.StorablePicture*> [#uses=1]
|
|
%9 = phi %struct.StorablePicture* [ null, %bb36.i ], [ undef, %bb30.i ] ; <%struct.StorablePicture*> [#uses=1]
|
|
%10 = phi %struct.StorablePicture* [ null, %bb36.i ], [ undef, %bb30.i ] ; <%struct.StorablePicture*> [#uses=1]
|
|
%11 = phi %struct.StorablePicture* [ null, %bb36.i ], [ undef, %bb30.i ] ; <%struct.StorablePicture*> [#uses=1]
|
|
%12 = phi %struct.StorablePicture* [ null, %bb36.i ], [ undef, %bb30.i ] ; <%struct.StorablePicture*> [#uses=1]
|
|
br i1 undef, label %bb38.i, label %bb68.i
|
|
|
|
bb38.i: ; preds = %bb66.i, %bb67.preheader.i
|
|
%13 = phi %struct.StorablePicture* [ %37, %bb66.i ], [ %2, %bb67.preheader.i ] ; <%struct.StorablePicture*> [#uses=1]
|
|
%14 = phi %struct.StorablePicture* [ %38, %bb66.i ], [ %3, %bb67.preheader.i ] ; <%struct.StorablePicture*> [#uses=1]
|
|
%15 = phi %struct.StorablePicture* [ %39, %bb66.i ], [ %4, %bb67.preheader.i ] ; <%struct.StorablePicture*> [#uses=1]
|
|
%16 = phi %struct.StorablePicture* [ %40, %bb66.i ], [ %5, %bb67.preheader.i ] ; <%struct.StorablePicture*> [#uses=1]
|
|
%17 = phi %struct.StorablePicture* [ %40, %bb66.i ], [ %6, %bb67.preheader.i ] ; <%struct.StorablePicture*> [#uses=1]
|
|
%18 = phi %struct.StorablePicture* [ %40, %bb66.i ], [ %7, %bb67.preheader.i ] ; <%struct.StorablePicture*> [#uses=1]
|
|
%19 = phi %struct.StorablePicture* [ %40, %bb66.i ], [ %8, %bb67.preheader.i ] ; <%struct.StorablePicture*> [#uses=1]
|
|
%20 = phi %struct.StorablePicture* [ %40, %bb66.i ], [ %9, %bb67.preheader.i ] ; <%struct.StorablePicture*> [#uses=1]
|
|
%21 = phi %struct.StorablePicture* [ %40, %bb66.i ], [ %10, %bb67.preheader.i ] ; <%struct.StorablePicture*> [#uses=1]
|
|
%22 = phi %struct.StorablePicture* [ %40, %bb66.i ], [ %11, %bb67.preheader.i ] ; <%struct.StorablePicture*> [#uses=1]
|
|
%23 = phi %struct.StorablePicture* [ %40, %bb66.i ], [ %12, %bb67.preheader.i ] ; <%struct.StorablePicture*> [#uses=1]
|
|
%indvar248.i = phi i64 [ %indvar.next249.i, %bb66.i ], [ 0, %bb67.preheader.i ] ; <i64> [#uses=3]
|
|
%storemerge52.i = trunc i64 %indvar248.i to i32 ; <i32> [#uses=1]
|
|
%24 = getelementptr inbounds %struct.StorablePicture* %23, i64 0, i32 19 ; <i32*> [#uses=0]
|
|
br i1 undef, label %bb.nph51.i, label %bb66.i
|
|
|
|
bb.nph51.i: ; preds = %bb38.i
|
|
%25 = sdiv i32 %storemerge52.i, 8 ; <i32> [#uses=0]
|
|
br label %bb39.i
|
|
|
|
bb39.i: ; preds = %bb64.i, %bb.nph51.i
|
|
%26 = phi %struct.StorablePicture* [ %17, %bb.nph51.i ], [ null, %bb64.i ] ; <%struct.StorablePicture*> [#uses=1]
|
|
%27 = phi %struct.StorablePicture* [ %18, %bb.nph51.i ], [ null, %bb64.i ] ; <%struct.StorablePicture*> [#uses=0]
|
|
%28 = phi %struct.StorablePicture* [ %19, %bb.nph51.i ], [ null, %bb64.i ] ; <%struct.StorablePicture*> [#uses=0]
|
|
%29 = phi %struct.StorablePicture* [ %20, %bb.nph51.i ], [ null, %bb64.i ] ; <%struct.StorablePicture*> [#uses=0]
|
|
%30 = phi %struct.StorablePicture* [ %21, %bb.nph51.i ], [ null, %bb64.i ] ; <%struct.StorablePicture*> [#uses=0]
|
|
%31 = phi %struct.StorablePicture* [ %22, %bb.nph51.i ], [ null, %bb64.i ] ; <%struct.StorablePicture*> [#uses=0]
|
|
br i1 undef, label %bb57.i, label %bb40.i
|
|
|
|
bb40.i: ; preds = %bb39.i
|
|
br i1 undef, label %bb57.i, label %bb41.i
|
|
|
|
bb41.i: ; preds = %bb40.i
|
|
%storemerge10.i = select i1 undef, i32 2, i32 4 ; <i32> [#uses=1]
|
|
%32 = zext i32 %storemerge10.i to i64 ; <i64> [#uses=1]
|
|
br i1 undef, label %bb45.i, label %bb47.i
|
|
|
|
bb45.i: ; preds = %bb41.i
|
|
%33 = getelementptr inbounds %struct.StorablePicture* %26, i64 0, i32 5, i64 undef, i64 %32, i64 undef ; <i64*> [#uses=1]
|
|
%34 = load i64* %33, align 8 ; <i64> [#uses=1]
|
|
br label %bb47.i
|
|
|
|
bb47.i: ; preds = %bb45.i, %bb41.i
|
|
%storemerge11.i = phi i64 [ %34, %bb45.i ], [ 0, %bb41.i ] ; <i64> [#uses=0]
|
|
%scevgep246.i = getelementptr i64* undef, i64 undef ; <i64*> [#uses=0]
|
|
br label %bb64.i
|
|
|
|
bb57.i: ; preds = %bb40.i, %bb39.i
|
|
br i1 undef, label %bb58.i, label %bb60.i
|
|
|
|
bb58.i: ; preds = %bb57.i
|
|
br label %bb60.i
|
|
|
|
bb60.i: ; preds = %bb58.i, %bb57.i
|
|
%35 = load i64*** undef, align 8 ; <i64**> [#uses=1]
|
|
%scevgep256.i = getelementptr i64** %35, i64 %indvar248.i ; <i64**> [#uses=1]
|
|
%36 = load i64** %scevgep256.i, align 8 ; <i64*> [#uses=1]
|
|
%scevgep243.i = getelementptr i64* %36, i64 undef ; <i64*> [#uses=1]
|
|
store i64 -1, i64* %scevgep243.i, align 8
|
|
br label %bb64.i
|
|
|
|
bb64.i: ; preds = %bb60.i, %bb47.i
|
|
br i1 undef, label %bb39.i, label %bb66.i
|
|
|
|
bb66.i: ; preds = %bb64.i, %bb38.i
|
|
%37 = phi %struct.StorablePicture* [ %13, %bb38.i ], [ null, %bb64.i ] ; <%struct.StorablePicture*> [#uses=2]
|
|
%38 = phi %struct.StorablePicture* [ %14, %bb38.i ], [ null, %bb64.i ] ; <%struct.StorablePicture*> [#uses=2]
|
|
%39 = phi %struct.StorablePicture* [ %15, %bb38.i ], [ null, %bb64.i ] ; <%struct.StorablePicture*> [#uses=2]
|
|
%40 = phi %struct.StorablePicture* [ %16, %bb38.i ], [ null, %bb64.i ] ; <%struct.StorablePicture*> [#uses=8]
|
|
%indvar.next249.i = add i64 %indvar248.i, 1 ; <i64> [#uses=1]
|
|
br i1 undef, label %bb38.i, label %bb68.i
|
|
|
|
bb68.i: ; preds = %bb66.i, %bb67.preheader.i
|
|
%41 = phi %struct.StorablePicture* [ %2, %bb67.preheader.i ], [ %37, %bb66.i ] ; <%struct.StorablePicture*> [#uses=0]
|
|
%42 = phi %struct.StorablePicture* [ %3, %bb67.preheader.i ], [ %38, %bb66.i ] ; <%struct.StorablePicture*> [#uses=1]
|
|
%43 = phi %struct.StorablePicture* [ %4, %bb67.preheader.i ], [ %39, %bb66.i ] ; <%struct.StorablePicture*> [#uses=1]
|
|
br i1 undef, label %bb.nph48.i, label %bb108.i
|
|
|
|
bb.nph48.i: ; preds = %bb68.i
|
|
br label %bb80.i
|
|
|
|
bb80.i: ; preds = %bb104.i, %bb.nph48.i
|
|
%44 = phi %struct.StorablePicture* [ %42, %bb.nph48.i ], [ null, %bb104.i ] ; <%struct.StorablePicture*> [#uses=1]
|
|
%45 = phi %struct.StorablePicture* [ %43, %bb.nph48.i ], [ null, %bb104.i ] ; <%struct.StorablePicture*> [#uses=1]
|
|
br i1 undef, label %bb.nph39.i, label %bb104.i
|
|
|
|
bb.nph39.i: ; preds = %bb80.i
|
|
br label %bb81.i
|
|
|
|
bb81.i: ; preds = %bb102.i, %bb.nph39.i
|
|
%46 = phi %struct.StorablePicture* [ %44, %bb.nph39.i ], [ %48, %bb102.i ] ; <%struct.StorablePicture*> [#uses=0]
|
|
%47 = phi %struct.StorablePicture* [ %45, %bb.nph39.i ], [ %48, %bb102.i ] ; <%struct.StorablePicture*> [#uses=0]
|
|
br i1 undef, label %bb83.i, label %bb82.i
|
|
|
|
bb82.i: ; preds = %bb81.i
|
|
br i1 undef, label %bb83.i, label %bb101.i
|
|
|
|
bb83.i: ; preds = %bb82.i, %bb81.i
|
|
br label %bb102.i
|
|
|
|
bb101.i: ; preds = %bb82.i
|
|
br label %bb102.i
|
|
|
|
bb102.i: ; preds = %bb101.i, %bb83.i
|
|
%48 = load %struct.StorablePicture** %0, align 8 ; <%struct.StorablePicture*> [#uses=2]
|
|
br i1 undef, label %bb81.i, label %bb104.i
|
|
|
|
bb104.i: ; preds = %bb102.i, %bb80.i
|
|
br label %bb80.i
|
|
|
|
bb108.i: ; preds = %bb68.i
|
|
unreachable
|
|
}
|