Stackmap shadows should consider call returns a branch target.
[oota-llvm.git] / test / CodeGen / X86 / ins_subreg_coalesce-3.ll
1 ; RUN: llc < %s -march=x86-64 | grep mov | count 3
2
3         %struct.COMPOSITE = type { i8, i16, i16 }
4         %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 }
5         %struct.FILE_POS = type { i8, i8, i16, i32 }
6         %struct.FIRST_UNION = type { %struct.FILE_POS }
7         %struct.FONT_INFO = type { %struct.metrics*, i8*, i16*, %struct.COMPOSITE*, i32, %struct.rec*, %struct.rec*, i16, i16, i16*, i8*, i8*, i16* }
8         %struct.FOURTH_UNION = type { %struct.STYLE }
9         %struct.GAP = type { i8, i8, i16 }
10         %struct.LIST = type { %struct.rec*, %struct.rec* }
11         %struct.SECOND_UNION = type { { i16, i8, i8 } }
12         %struct.STYLE = type { { %struct.GAP }, { %struct.GAP }, i16, i16, i32 }
13         %struct.THIRD_UNION = type { %struct.FILE*, [8 x i8] }
14         %struct.__sFILEX = type opaque
15         %struct.__sbuf = type { i8*, i32 }
16         %struct.head_type = type { [2 x %struct.LIST], %struct.FIRST_UNION, %struct.SECOND_UNION, %struct.THIRD_UNION, %struct.FOURTH_UNION, %struct.rec*, { %struct.rec* }, %struct.rec*, %struct.rec*, %struct.rec*, %struct.rec*, %struct.rec*, %struct.rec*, %struct.rec*, %struct.rec*, i32 }
17         %struct.metrics = type { i16, i16, i16, i16, i16 }
18         %struct.rec = type { %struct.head_type }
19
20 define void @FontChange(i1 %foo) nounwind {
21 entry:
22         br i1 %foo, label %bb298, label %bb49
23 bb49:           ; preds = %entry
24         ret void
25 bb298:          ; preds = %entry
26         br i1 %foo, label %bb304, label %bb366
27 bb304:          ; preds = %bb298
28         br i1 %foo, label %bb330, label %bb428
29 bb330:          ; preds = %bb366, %bb304
30         br label %bb366
31 bb366:          ; preds = %bb330, %bb298
32         br i1 %foo, label %bb330, label %bb428
33 bb428:          ; preds = %bb366, %bb304
34         br i1 %foo, label %bb650, label %bb433
35 bb433:          ; preds = %bb428
36         ret void
37 bb650:          ; preds = %bb650, %bb428
38         %tmp658 = load i8* null, align 8                ; <i8> [#uses=1]
39         %tmp659 = icmp eq i8 %tmp658, 0         ; <i1> [#uses=1]
40         br i1 %tmp659, label %bb650, label %bb662
41 bb662:          ; preds = %bb650
42         br label %bb761
43 bb688:          ; preds = %bb662
44         ret void
45 bb761:          ; preds = %bb662
46         %tmp487248736542 = load i32* null, align 4              ; <i32> [#uses=2]
47         %tmp487648776541 = and i32 %tmp487248736542, 57344              ; <i32> [#uses=1]
48         %tmp4881 = icmp eq i32 %tmp487648776541, 8192           ; <i1> [#uses=1]
49         br i1 %tmp4881, label %bb4884, label %bb4897
50 bb4884:         ; preds = %bb761
51         %tmp488948906540 = and i32 %tmp487248736542, 7168               ; <i32> [#uses=1]
52         %tmp4894 = icmp eq i32 %tmp488948906540, 1024           ; <i1> [#uses=1]
53         br i1 %tmp4894, label %bb4932, label %bb4897
54 bb4897:         ; preds = %bb4884, %bb761
55         ret void
56 bb4932:         ; preds = %bb4884
57         %tmp4933 = load i32* null, align 4              ; <i32> [#uses=1]
58         br i1 %foo, label %bb5054, label %bb4940
59 bb4940:         ; preds = %bb4932
60         %tmp4943 = load i32* null, align 4              ; <i32> [#uses=2]
61         switch i32 %tmp4933, label %bb5054 [
62                  i32 159, label %bb4970
63                  i32 160, label %bb5002
64         ]
65 bb4970:         ; preds = %bb4940
66         %tmp49746536 = trunc i32 %tmp4943 to i16                ; <i16> [#uses=1]
67         %tmp49764977 = and i16 %tmp49746536, 4095               ; <i16> [#uses=1]
68         %mask498049814982 = zext i16 %tmp49764977 to i64                ; <i64> [#uses=1]
69         %tmp4984 = getelementptr %struct.FONT_INFO* null, i64 %mask498049814982, i32 5          ; <%struct.rec**> [#uses=1]
70         %tmp4985 = load %struct.rec** %tmp4984, align 8         ; <%struct.rec*> [#uses=1]
71         %tmp4988 = getelementptr %struct.rec* %tmp4985, i64 0, i32 0, i32 3             ; <%struct.THIRD_UNION*> [#uses=1]
72         %tmp4991 = bitcast %struct.THIRD_UNION* %tmp4988 to i32*                ; <i32*> [#uses=1]
73         %tmp4992 = load i32* %tmp4991, align 8          ; <i32> [#uses=1]
74         %tmp49924993 = trunc i32 %tmp4992 to i16                ; <i16> [#uses=1]
75         %tmp4996 = add i16 %tmp49924993, 0              ; <i16> [#uses=1]
76         br label %bb5054
77 bb5002:         ; preds = %bb4940
78         %tmp50066537 = trunc i32 %tmp4943 to i16                ; <i16> [#uses=1]
79         %tmp50085009 = and i16 %tmp50066537, 4095               ; <i16> [#uses=1]
80         %mask501250135014 = zext i16 %tmp50085009 to i64                ; <i64> [#uses=1]
81         %tmp5016 = getelementptr %struct.FONT_INFO* null, i64 %mask501250135014, i32 5          ; <%struct.rec**> [#uses=1]
82         %tmp5017 = load %struct.rec** %tmp5016, align 8         ; <%struct.rec*> [#uses=1]
83         %tmp5020 = getelementptr %struct.rec* %tmp5017, i64 0, i32 0, i32 3             ; <%struct.THIRD_UNION*> [#uses=1]
84         %tmp5023 = bitcast %struct.THIRD_UNION* %tmp5020 to i32*                ; <i32*> [#uses=1]
85         %tmp5024 = load i32* %tmp5023, align 8          ; <i32> [#uses=1]
86         %tmp50245025 = trunc i32 %tmp5024 to i16                ; <i16> [#uses=1]
87         %tmp5028 = sub i16 %tmp50245025, 0              ; <i16> [#uses=1]
88         br label %bb5054
89 bb5054:         ; preds = %bb5002, %bb4970, %bb4940, %bb4932
90         %flen.0.reg2mem.0 = phi i16 [ %tmp4996, %bb4970 ], [ %tmp5028, %bb5002 ], [ 0, %bb4932 ], [ undef, %bb4940 ]            ; <i16> [#uses=0]
91         ret void
92 }