[Demangle] Add a few more options to the microsoft demangler
[llvm-complete.git] / test / CodeGen / Hexagon / rdf-filter-defs.ll
blob5c55c500634debec89cd26a5c42951059f311144
1 ; RUN: llc -march=hexagon -verify-machineinstrs < %s | FileCheck %s
3 ; Check that this testcase compiles successfully.
4 ; CHECK: dealloc_return
6 target triple = "hexagon"
8 %type.0 = type { %type.1, %type.3, i32, i32 }
9 %type.1 = type { %type.2 }
10 %type.2 = type { i8 }
11 %type.3 = type { i8*, [12 x i8] }
12 %type.4 = type { i8 }
14 define weak_odr dereferenceable(28) %type.0* @fred(%type.0* %p0, i32 %p1, %type.0* dereferenceable(28) %p2, i32 %p3, i32 %p4) local_unnamed_addr align 2 {
15 b0:
16   %t0 = getelementptr inbounds %type.0, %type.0* %p0, i32 0, i32 2
17   %t1 = load i32, i32* %t0, align 4
18   %t2 = icmp ult i32 %t1, %p1
19   %t3 = getelementptr inbounds %type.0, %type.0* %p2, i32 0, i32 2
20   br i1 %t2, label %b2, label %b1
22 b1:
23   %t4 = load i32, i32* %t3, align 4
24   %t5 = icmp ult i32 %t4, %p3
25   br i1 %t5, label %b2, label %b3
27 b2:
28   %t6 = bitcast %type.0* %p0 to %type.4*
29   tail call void @blah(%type.4* %t6)
30   %t7 = load i32, i32* %t3, align 4
31   %t8 = load i32, i32* %t0, align 4
32   br label %b3
34 b3:
35   %t9 = phi i32 [ %t8, %b2 ], [ %t1, %b1 ]
36   %t10 = phi i32 [ %t7, %b2 ], [ %t4, %b1 ]
37   %t11 = sub i32 %t10, %p3
38   %t12 = icmp ult i32 %t11, %p4
39   %t13 = select i1 %t12, i32 %t11, i32 %p4
40   %t14 = xor i32 %t9, -1
41   %t15 = icmp ult i32 %t13, %t14
42   br i1 %t15, label %b5, label %b4
44 b4:
45   %t16 = bitcast %type.0* %p0 to %type.4*
46   tail call void @danny(%type.4* %t16)
47   br label %b5
49 b5:
50   %t17 = icmp eq i32 %t13, 0
51   br i1 %t17, label %b33, label %b6
53 b6:
54   %t18 = load i32, i32* %t0, align 4
55   %t19 = add i32 %t18, %t13
56   %t20 = icmp eq i32 %t19, -1
57   br i1 %t20, label %b7, label %b8
59 b7:
60   %t21 = bitcast %type.0* %p0 to %type.4*
61   tail call void @danny(%type.4* %t21)
62   br label %b8
64 b8:
65   %t22 = getelementptr inbounds %type.0, %type.0* %p0, i32 0, i32 3
66   %t23 = load i32, i32* %t22, align 4
67   %t24 = icmp ult i32 %t23, %t19
68   br i1 %t24, label %b9, label %b10
70 b9:
71   %t25 = load i32, i32* %t0, align 4
72   tail call void @sammy(%type.0* nonnull %p0, i32 %t19, i32 %t25)
73   %t26 = load i32, i32* %t22, align 4
74   br label %b15
76 b10:
77   %t27 = icmp eq i32 %t19, 0
78   br i1 %t27, label %b11, label %b15
80 b11:
81   %t28 = icmp ugt i32 %t23, 15
82   %t29 = getelementptr inbounds %type.0, %type.0* %p0, i32 0, i32 1
83   br i1 %t28, label %b12, label %b13
85 b12:
86   %t30 = getelementptr inbounds %type.3, %type.3* %t29, i32 0, i32 0
87   %t31 = load i8*, i8** %t30, align 4
88   br label %b14
90 b13:
91   %t32 = bitcast %type.3* %t29 to i8*
92   br label %b14
94 b14:
95   %t33 = phi i8* [ %t31, %b12 ], [ %t32, %b13 ]
96   store i32 0, i32* %t0, align 4
97   br label %b31
99 b15:
100   %t34 = phi i32 [ %t26, %b9 ], [ %t23, %b10 ]
101   %t35 = icmp ugt i32 %t34, 15
102   %t36 = getelementptr inbounds %type.0, %type.0* %p0, i32 0, i32 1
103   br i1 %t35, label %b16, label %b17
105 b16:
106   %t37 = getelementptr inbounds %type.3, %type.3* %t36, i32 0, i32 0
107   %t38 = load i8*, i8** %t37, align 4
108   br label %b18
110 b17:
111   %t39 = bitcast %type.3* %t36 to i8*
112   %t40 = bitcast %type.3* %t36 to i8*
113   br label %b18
115 b18:
116   %t41 = phi i8* [ %t38, %b16 ], [ %t39, %b17 ]
117   %t42 = phi i8* [ %t38, %b16 ], [ %t40, %b17 ]
118   %t43 = getelementptr inbounds i8, i8* %t41, i32 %p1
119   %t44 = getelementptr inbounds i8, i8* %t43, i32 %t13
120   %t45 = getelementptr inbounds i8, i8* %t42, i32 %p1
121   %t46 = load i32, i32* %t0, align 4
122   %t47 = sub i32 %t46, %p1
123   tail call void @llvm.memmove.p0i8.p0i8.i32(i8* %t44, i8* %t45, i32 %t47, i1 false) #1
124   %t48 = icmp eq %type.0* %p0, %p2
125   %t49 = load i32, i32* %t22, align 4
126   %t50 = icmp ugt i32 %t49, 15
127   br i1 %t50, label %b19, label %b20
129 b19:
130   %t51 = getelementptr inbounds %type.3, %type.3* %t36, i32 0, i32 0
131   %t52 = load i8*, i8** %t51, align 4
132   br label %b21
134 b20:
135   %t53 = bitcast %type.3* %t36 to i8*
136   br label %b21
138 b21:
139   %t54 = phi i8* [ %t52, %b19 ], [ %t53, %b20 ]
140   %t55 = getelementptr inbounds i8, i8* %t54, i32 %p1
141   br i1 %t48, label %b22, label %b26
143 b22:
144   br i1 %t50, label %b23, label %b24
146 b23:
147   %t56 = getelementptr inbounds %type.3, %type.3* %t36, i32 0, i32 0
148   %t57 = load i8*, i8** %t56, align 4
149   br label %b25
151 b24:
152   %t58 = bitcast %type.3* %t36 to i8*
153   br label %b25
155 b25:
156   %t59 = phi i8* [ %t57, %b23 ], [ %t58, %b24 ]
157   %t60 = icmp ult i32 %p1, %p3
158   %t61 = select i1 %t60, i32 %t13, i32 0
159   %t62 = add i32 %t61, %p3
160   %t63 = getelementptr inbounds i8, i8* %t59, i32 %t62
161   tail call void @llvm.memmove.p0i8.p0i8.i32(i8* %t55, i8* %t63, i32 %t13, i1 false) #1
162   br label %b27
164 b26:
165   %t64 = getelementptr inbounds %type.0, %type.0* %p2, i32 0, i32 3
166   %t65 = load i32, i32* %t64, align 4
167   %t66 = icmp ugt i32 %t65, 15
168   %t67 = getelementptr inbounds %type.0, %type.0* %p2, i32 0, i32 1
169   %t68 = getelementptr inbounds %type.3, %type.3* %t67, i32 0, i32 0
170   %t69 = load i8*, i8** %t68, align 4
171   %t70 = bitcast %type.3* %t67 to i8*
172   %t71 = select i1 %t66, i8* %t69, i8* %t70
173   %t72 = getelementptr inbounds i8, i8* %t71, i32 %p3
174   tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* %t55, i8* %t72, i32 %t13, i1 false) #1
175   br label %b27
177 b27:
178   %t73 = load i32, i32* %t22, align 4
179   %t74 = icmp ugt i32 %t73, 15
180   br i1 %t74, label %b28, label %b29
182 b28:
183   %t75 = getelementptr inbounds %type.3, %type.3* %t36, i32 0, i32 0
184   %t76 = load i8*, i8** %t75, align 4
185   br label %b30
187 b29:
188   %t77 = bitcast %type.3* %t36 to i8*
189   br label %b30
191 b30:
192   %t78 = phi i8* [ %t76, %b28 ], [ %t77, %b29 ]
193   store i32 %t19, i32* %t0, align 4
194   %t79 = getelementptr inbounds i8, i8* %t78, i32 %t19
195   br label %b31
197 b31:
198   %t80 = phi i8* [ %t33, %b14 ], [ %t79, %b30 ]
199   store i8 0, i8* %t80, align 1
200   br label %b33
202 b33:
203   ret %type.0* %p0
206 declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i1) #0
207 declare void @llvm.memmove.p0i8.p0i8.i32(i8* nocapture, i8* nocapture readonly, i32, i1) #0
209 declare void @blah(%type.4*) local_unnamed_addr
210 declare void @danny(%type.4*) local_unnamed_addr
211 declare void @sammy(%type.0*, i32, i32) local_unnamed_addr align 2
213 attributes #0 = { argmemonly nounwind }
214 attributes #1 = { nounwind }