2008-10-17-SpillerBug.ll is currently failing, but this doesn't reflect an actual...
[oota-llvm.git] / test / CodeGen / X86 / 2008-10-17-SpillerBug.ll
1 ; RUN: llvm-as < %s | llc -mtriple=x86_64-pc-linux-gnu -regalloc=pbqp -stats |& grep {Number of dead stores elided} | grep 2
2 ; XFAIL: *
3 ; PR2898
4
5         %struct.BiContextType = type { i16, i8 }
6         %struct.Bitstream = type { i32, i32, i32, i32, i8*, i32 }
7         %struct.DataPartition = type { %struct.Bitstream*, %struct.DecodingEnvironment, i32 (%struct.SyntaxElement*, %struct.ImageParameters*, %struct.DataPartition*)* }
8         %struct.DecRefPicMarking_t = type { i32, i32, i32, i32, i32, %struct.DecRefPicMarking_t* }
9         %struct.DecodingEnvironment = type { i32, i32, i32, i32, i32, i8*, i32* }
10         %struct.ImageParameters = type { i32, i32, i32, i32, i32*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [16 x [16 x i16]], [6 x [32 x i32]], [16 x [16 x i32]], [4 x [12 x [4 x [4 x i32]]]], [16 x i32], i8**, i32*, i32***, i32**, i32, i32, i32, i32, %struct.Slice*, %struct.Macroblock*, i32, i32, i32, i32, i32, i32, %struct.DecRefPicMarking_t*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [3 x i32], i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32***, i32***, i32****, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [3 x [2 x i32]], [3 x [2 x i32]], i32, i32, i64, i64, %struct.timeb, %struct.timeb, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
11         %struct.Macroblock = type { i32, [2 x i32], i32, i32, %struct.Macroblock*, %struct.Macroblock*, i32, [2 x [4 x [4 x [2 x i32]]]], i32, i64, i64, i32, i32, [4 x i8], [4 x i8], i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
12         %struct.MotionInfoContexts = type { [4 x [11 x %struct.BiContextType]], [2 x [9 x %struct.BiContextType]], [2 x [10 x %struct.BiContextType]], [2 x [6 x %struct.BiContextType]], [4 x %struct.BiContextType], [4 x %struct.BiContextType], [3 x %struct.BiContextType] }
13         %struct.Slice = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, %struct.DataPartition*, %struct.MotionInfoContexts*, %struct.TextureInfoContexts*, i32, i32*, i32*, i32*, i32, i32*, i32*, i32*, i32 (%struct.ImageParameters*, %struct.inp_par*)*, i32, i32, i32, i32 }
14         %struct.SyntaxElement = type { i32, i32, i32, i32, i32, i32, i32, i32, void (i32, i32, i32*, i32*)*, void (%struct.SyntaxElement*, %struct.ImageParameters*, %struct.DecodingEnvironment*)* }
15         %struct.TextureInfoContexts = type { [2 x %struct.BiContextType], [4 x %struct.BiContextType], [3 x [4 x %struct.BiContextType]], [10 x [4 x %struct.BiContextType]], [10 x [15 x %struct.BiContextType]], [10 x [15 x %struct.BiContextType]], [10 x [5 x %struct.BiContextType]], [10 x [5 x %struct.BiContextType]], [10 x [15 x %struct.BiContextType]], [10 x [15 x %struct.BiContextType]] }
16         %struct.inp_par = type { [1000 x i8], [1000 x i8], [1000 x i8], i32, i32, i32, i32, i32, i32, i32, i32 }
17         %struct.timeb = type { i64, i16, i16, i16 }
18
19 define i1 @itrans8x8_bb15_bb15_2E_ce(%struct.ImageParameters* %img, i32 %ioff, [8 x [8 x i32]]* %m6, i64, i64, i64, i64, i64, i64, i64, i64, i32 %i.2.reg2mem.0, i32* %.out, i32* %.out1, i32* %.out2, i32* %.out3, i32* %.out4, i32* %.out5, i32* %.out6, i32* %.out7, i32* %.out8, i32* %indvar.next58.out) {
20 newFuncRoot:
21         br label %bb15.ce
22
23 codeRepl1.exitStub:             ; preds = %bb15.ce
24         store i32 %8, i32* %.out
25         store i32 %24, i32* %.out1
26         store i32 %25, i32* %.out2
27         store i32 %26, i32* %.out3
28         store i32 %27, i32* %.out4
29         store i32 %53, i32* %.out5
30         store i32 %55, i32* %.out6
31         store i32 %57, i32* %.out7
32         store i32 %59, i32* %.out8
33         store i32 %indvar.next58, i32* %indvar.next58.out
34         ret i1 true
35
36 bb15.bb15_crit_edge.exitStub:           ; preds = %bb15.ce
37         store i32 %8, i32* %.out
38         store i32 %24, i32* %.out1
39         store i32 %25, i32* %.out2
40         store i32 %26, i32* %.out3
41         store i32 %27, i32* %.out4
42         store i32 %53, i32* %.out5
43         store i32 %55, i32* %.out6
44         store i32 %57, i32* %.out7
45         store i32 %59, i32* %.out8
46         store i32 %indvar.next58, i32* %indvar.next58.out
47         ret i1 false
48
49 bb15.ce:                ; preds = %newFuncRoot
50         %8 = add i32 %i.2.reg2mem.0, %ioff              ; <i32> [#uses=3]
51         %9 = sext i32 %i.2.reg2mem.0 to i64             ; <i64> [#uses=8]
52         %10 = getelementptr [8 x [8 x i32]]* %m6, i64 0, i64 %9, i64 0          ; <i32*> [#uses=1]
53         %11 = load i32* %10, align 4            ; <i32> [#uses=2]
54         %12 = getelementptr [8 x [8 x i32]]* %m6, i64 0, i64 %9, i64 4          ; <i32*> [#uses=1]
55         %13 = load i32* %12, align 4            ; <i32> [#uses=2]
56         %14 = add i32 %13, %11          ; <i32> [#uses=2]
57         %15 = sub i32 %11, %13          ; <i32> [#uses=2]
58         %16 = getelementptr [8 x [8 x i32]]* %m6, i64 0, i64 %9, i64 2          ; <i32*> [#uses=1]
59         %17 = load i32* %16, align 4            ; <i32> [#uses=2]
60         %18 = ashr i32 %17, 1           ; <i32> [#uses=1]
61         %19 = getelementptr [8 x [8 x i32]]* %m6, i64 0, i64 %9, i64 6          ; <i32*> [#uses=1]
62         %20 = load i32* %19, align 4            ; <i32> [#uses=2]
63         %21 = sub i32 %18, %20          ; <i32> [#uses=2]
64         %22 = ashr i32 %20, 1           ; <i32> [#uses=1]
65         %23 = add i32 %22, %17          ; <i32> [#uses=2]
66         %24 = add i32 %23, %14          ; <i32> [#uses=4]
67         %25 = add i32 %21, %15          ; <i32> [#uses=4]
68         %26 = sub i32 %15, %21          ; <i32> [#uses=4]
69         %27 = sub i32 %14, %23          ; <i32> [#uses=4]
70         %28 = getelementptr [8 x [8 x i32]]* %m6, i64 0, i64 %9, i64 5          ; <i32*> [#uses=1]
71         %29 = load i32* %28, align 4            ; <i32> [#uses=4]
72         %30 = getelementptr [8 x [8 x i32]]* %m6, i64 0, i64 %9, i64 3          ; <i32*> [#uses=1]
73         %31 = load i32* %30, align 4            ; <i32> [#uses=4]
74         %32 = getelementptr [8 x [8 x i32]]* %m6, i64 0, i64 %9, i64 7          ; <i32*> [#uses=1]
75         %33 = load i32* %32, align 4            ; <i32> [#uses=4]
76         %34 = ashr i32 %33, 1           ; <i32> [#uses=1]
77         %35 = sub i32 %29, %31          ; <i32> [#uses=1]
78         %36 = sub i32 %35, %33          ; <i32> [#uses=1]
79         %37 = sub i32 %36, %34          ; <i32> [#uses=2]
80         %38 = getelementptr [8 x [8 x i32]]* %m6, i64 0, i64 %9, i64 1          ; <i32*> [#uses=1]
81         %39 = load i32* %38, align 4            ; <i32> [#uses=4]
82         %40 = ashr i32 %31, 1           ; <i32> [#uses=1]
83         %41 = add i32 %33, %39          ; <i32> [#uses=1]
84         %42 = sub i32 %41, %31          ; <i32> [#uses=1]
85         %43 = sub i32 %42, %40          ; <i32> [#uses=2]
86         %44 = ashr i32 %29, 1           ; <i32> [#uses=1]
87         %45 = sub i32 %33, %39          ; <i32> [#uses=1]
88         %46 = add i32 %45, %29          ; <i32> [#uses=1]
89         %47 = add i32 %46, %44          ; <i32> [#uses=2]
90         %48 = ashr i32 %39, 1           ; <i32> [#uses=1]
91         %49 = add i32 %29, %31          ; <i32> [#uses=1]
92         %50 = add i32 %49, %39          ; <i32> [#uses=1]
93         %51 = add i32 %50, %48          ; <i32> [#uses=2]
94         %52 = ashr i32 %51, 2           ; <i32> [#uses=1]
95         %53 = add i32 %52, %37          ; <i32> [#uses=4]
96         %54 = ashr i32 %37, 2           ; <i32> [#uses=1]
97         %55 = sub i32 %51, %54          ; <i32> [#uses=4]
98         %56 = ashr i32 %47, 2           ; <i32> [#uses=1]
99         %57 = add i32 %56, %43          ; <i32> [#uses=4]
100         %58 = ashr i32 %43, 2           ; <i32> [#uses=1]
101         %59 = sub i32 %58, %47          ; <i32> [#uses=4]
102         %60 = add i32 %55, %24          ; <i32> [#uses=1]
103         %61 = sext i32 %8 to i64                ; <i64> [#uses=8]
104         %62 = getelementptr %struct.ImageParameters* %img, i64 0, i32 27, i64 %0, i64 %61               ; <i32*> [#uses=1]
105         store i32 %60, i32* %62, align 4
106         %63 = add i32 %59, %25          ; <i32> [#uses=1]
107         %64 = getelementptr %struct.ImageParameters* %img, i64 0, i32 27, i64 %1, i64 %61               ; <i32*> [#uses=1]
108         store i32 %63, i32* %64, align 4
109         %65 = add i32 %57, %26          ; <i32> [#uses=1]
110         %66 = getelementptr %struct.ImageParameters* %img, i64 0, i32 27, i64 %2, i64 %61               ; <i32*> [#uses=1]
111         store i32 %65, i32* %66, align 4
112         %67 = add i32 %53, %27          ; <i32> [#uses=1]
113         %68 = getelementptr %struct.ImageParameters* %img, i64 0, i32 27, i64 %3, i64 %61               ; <i32*> [#uses=1]
114         store i32 %67, i32* %68, align 4
115         %69 = sub i32 %27, %53          ; <i32> [#uses=1]
116         %70 = getelementptr %struct.ImageParameters* %img, i64 0, i32 27, i64 %4, i64 %61               ; <i32*> [#uses=1]
117         store i32 %69, i32* %70, align 4
118         %71 = sub i32 %26, %57          ; <i32> [#uses=1]
119         %72 = getelementptr %struct.ImageParameters* %img, i64 0, i32 27, i64 %5, i64 %61               ; <i32*> [#uses=1]
120         store i32 %71, i32* %72, align 4
121         %73 = sub i32 %25, %59          ; <i32> [#uses=1]
122         %74 = getelementptr %struct.ImageParameters* %img, i64 0, i32 27, i64 %6, i64 %61               ; <i32*> [#uses=1]
123         store i32 %73, i32* %74, align 4
124         %75 = sub i32 %24, %55          ; <i32> [#uses=1]
125         %76 = getelementptr %struct.ImageParameters* %img, i64 0, i32 27, i64 %7, i64 %61               ; <i32*> [#uses=1]
126         store i32 %75, i32* %76, align 4
127         %indvar.next58 = add i32 %i.2.reg2mem.0, 1              ; <i32> [#uses=3]
128         %exitcond59 = icmp eq i32 %indvar.next58, 8             ; <i1> [#uses=1]
129         br i1 %exitcond59, label %codeRepl1.exitStub, label %bb15.bb15_crit_edge.exitStub
130 }