[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / Hexagon / rdf-filter-defs.ll
blob68ae19acb8d652a652dc4c3e92749217e739979f
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 { ptr, [12 x i8] }
12 %type.4 = type { i8 }
14 define weak_odr dereferenceable(28) ptr @fred(ptr %p0, i32 %p1, ptr dereferenceable(28) %p2, i32 %p3, i32 %p4) local_unnamed_addr align 2 {
15 b0:
16   %t0 = getelementptr inbounds %type.0, ptr %p0, i32 0, i32 2
17   %t1 = load i32, ptr %t0, align 4
18   %t2 = icmp ult i32 %t1, %p1
19   %t3 = getelementptr inbounds %type.0, ptr %p2, i32 0, i32 2
20   br i1 %t2, label %b2, label %b1
22 b1:
23   %t4 = load i32, ptr %t3, align 4
24   %t5 = icmp ult i32 %t4, %p3
25   br i1 %t5, label %b2, label %b3
27 b2:
28   tail call void @blah(ptr %p0)
29   %t7 = load i32, ptr %t3, align 4
30   %t8 = load i32, ptr %t0, align 4
31   br label %b3
33 b3:
34   %t9 = phi i32 [ %t8, %b2 ], [ %t1, %b1 ]
35   %t10 = phi i32 [ %t7, %b2 ], [ %t4, %b1 ]
36   %t11 = sub i32 %t10, %p3
37   %t12 = icmp ult i32 %t11, %p4
38   %t13 = select i1 %t12, i32 %t11, i32 %p4
39   %t14 = xor i32 %t9, -1
40   %t15 = icmp ult i32 %t13, %t14
41   br i1 %t15, label %b5, label %b4
43 b4:
44   tail call void @danny(ptr %p0)
45   br label %b5
47 b5:
48   %t17 = icmp eq i32 %t13, 0
49   br i1 %t17, label %b33, label %b6
51 b6:
52   %t18 = load i32, ptr %t0, align 4
53   %t19 = add i32 %t18, %t13
54   %t20 = icmp eq i32 %t19, -1
55   br i1 %t20, label %b7, label %b8
57 b7:
58   tail call void @danny(ptr %p0)
59   br label %b8
61 b8:
62   %t22 = getelementptr inbounds %type.0, ptr %p0, i32 0, i32 3
63   %t23 = load i32, ptr %t22, align 4
64   %t24 = icmp ult i32 %t23, %t19
65   br i1 %t24, label %b9, label %b10
67 b9:
68   %t25 = load i32, ptr %t0, align 4
69   tail call void @sammy(ptr nonnull %p0, i32 %t19, i32 %t25)
70   %t26 = load i32, ptr %t22, align 4
71   br label %b15
73 b10:
74   %t27 = icmp eq i32 %t19, 0
75   br i1 %t27, label %b11, label %b15
77 b11:
78   %t28 = icmp ugt i32 %t23, 15
79   %t29 = getelementptr inbounds %type.0, ptr %p0, i32 0, i32 1
80   br i1 %t28, label %b12, label %b13
82 b12:
83   %t31 = load ptr, ptr %t29, align 4
84   br label %b14
86 b13:
87   br label %b14
89 b14:
90   %t33 = phi ptr [ %t31, %b12 ], [ %t29, %b13 ]
91   store i32 0, ptr %t0, align 4
92   br label %b31
94 b15:
95   %t34 = phi i32 [ %t26, %b9 ], [ %t23, %b10 ]
96   %t35 = icmp ugt i32 %t34, 15
97   %t36 = getelementptr inbounds %type.0, ptr %p0, i32 0, i32 1
98   br i1 %t35, label %b16, label %b17
100 b16:
101   %t38 = load ptr, ptr %t36, align 4
102   br label %b18
104 b17:
105   br label %b18
107 b18:
108   %t41 = phi ptr [ %t38, %b16 ], [ %t36, %b17 ]
109   %t42 = phi ptr [ %t38, %b16 ], [ %t36, %b17 ]
110   %t43 = getelementptr inbounds i8, ptr %t41, i32 %p1
111   %t44 = getelementptr inbounds i8, ptr %t43, i32 %t13
112   %t45 = getelementptr inbounds i8, ptr %t42, i32 %p1
113   %t46 = load i32, ptr %t0, align 4
114   %t47 = sub i32 %t46, %p1
115   tail call void @llvm.memmove.p0.p0.i32(ptr %t44, ptr %t45, i32 %t47, i1 false) #1
116   %t48 = icmp eq ptr %p0, %p2
117   %t49 = load i32, ptr %t22, align 4
118   %t50 = icmp ugt i32 %t49, 15
119   br i1 %t50, label %b19, label %b20
121 b19:
122   %t52 = load ptr, ptr %t36, align 4
123   br label %b21
125 b20:
126   br label %b21
128 b21:
129   %t54 = phi ptr [ %t52, %b19 ], [ %t36, %b20 ]
130   %t55 = getelementptr inbounds i8, ptr %t54, i32 %p1
131   br i1 %t48, label %b22, label %b26
133 b22:
134   br i1 %t50, label %b23, label %b24
136 b23:
137   %t57 = load ptr, ptr %t36, align 4
138   br label %b25
140 b24:
141   br label %b25
143 b25:
144   %t59 = phi ptr [ %t57, %b23 ], [ %t36, %b24 ]
145   %t60 = icmp ult i32 %p1, %p3
146   %t61 = select i1 %t60, i32 %t13, i32 0
147   %t62 = add i32 %t61, %p3
148   %t63 = getelementptr inbounds i8, ptr %t59, i32 %t62
149   tail call void @llvm.memmove.p0.p0.i32(ptr %t55, ptr %t63, i32 %t13, i1 false) #1
150   br label %b27
152 b26:
153   %t64 = getelementptr inbounds %type.0, ptr %p2, i32 0, i32 3
154   %t65 = load i32, ptr %t64, align 4
155   %t66 = icmp ugt i32 %t65, 15
156   %t67 = getelementptr inbounds %type.0, ptr %p2, i32 0, i32 1
157   %t69 = load ptr, ptr %t67, align 4
158   %t71 = select i1 %t66, ptr %t69, ptr %t67
159   %t72 = getelementptr inbounds i8, ptr %t71, i32 %p3
160   tail call void @llvm.memcpy.p0.p0.i32(ptr %t55, ptr %t72, i32 %t13, i1 false) #1
161   br label %b27
163 b27:
164   %t73 = load i32, ptr %t22, align 4
165   %t74 = icmp ugt i32 %t73, 15
166   br i1 %t74, label %b28, label %b29
168 b28:
169   %t76 = load ptr, ptr %t36, align 4
170   br label %b30
172 b29:
173   br label %b30
175 b30:
176   %t78 = phi ptr [ %t76, %b28 ], [ %t36, %b29 ]
177   store i32 %t19, ptr %t0, align 4
178   %t79 = getelementptr inbounds i8, ptr %t78, i32 %t19
179   br label %b31
181 b31:
182   %t80 = phi ptr [ %t33, %b14 ], [ %t79, %b30 ]
183   store i8 0, ptr %t80, align 1
184   br label %b33
186 b33:
187   ret ptr %p0
190 declare void @llvm.memcpy.p0.p0.i32(ptr nocapture writeonly, ptr nocapture readonly, i32, i1) #0
191 declare void @llvm.memmove.p0.p0.i32(ptr nocapture, ptr nocapture readonly, i32, i1) #0
193 declare void @blah(ptr) local_unnamed_addr
194 declare void @danny(ptr) local_unnamed_addr
195 declare void @sammy(ptr, i32, i32) local_unnamed_addr align 2
197 attributes #0 = { argmemonly nounwind }
198 attributes #1 = { nounwind }