[InstCombine] Signed saturation patterns
[llvm-core.git] / test / MC / Hexagon / instructions / alu32_pred.s
blobe5fded0a3691766d7b3bb07952a218799abf6c0c
1 # RUN: llvm-mc -triple hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s
2 # Hexagon Programmer's Reference Manual 11.1.3 ALU32/PRED
4 # Conditional add
5 # CHECK: f1 c3 75 74
6 if (p3) r17 = add(r21, #31)
7 # CHECK: 03 40 45 85
8 # CHECK-NEXT: f1 e3 75 74
9 { p3 = r5
10 if (p3.new) r17 = add(r21, #31) }
11 # CHECK: f1 c3 f5 74
12 if (!p3) r17 = add(r21, #31)
13 # CHECK: 03 40 45 85
14 # CHECK-NEXT: f1 e3 f5 74
15 { p3 = r5
16 if (!p3.new) r17 = add(r21, #31) }
17 # CHECK: 71 df 15 fb
18 if (p3) r17 = add(r21, r31)
19 # CHECK: 03 40 45 85
20 # CHECK-NEXT: 71 ff 15 fb
21 { p3 = r5
22 if (p3.new) r17 = add(r21, r31) }
23 # CHECK: f1 df 15 fb
24 if (!p3) r17 = add(r21, r31)
25 # CHECK: 03 40 45 85
26 # CHECK-NEXT: f1 ff 15 fb
27 { p3 = r5
28 if (!p3.new) r17 = add(r21, r31) }
30 # Conditional shift halfword
31 # CHECK: 11 e3 15 70
32 if (p3) r17 = aslh(r21)
33 # CHECK: 03 40 45 85
34 # CHECK-NEXT: 11 e7 15 70
35 { p3 = r5
36 if (p3.new) r17 = aslh(r21) }
37 # CHECK: 11 eb 15 70
38 if (!p3) r17 = aslh(r21)
39 # CHECK: 03 40 45 85
40 # CHECK-NEXT: 11 ef 15 70
41 { p3 = r5
42 if (!p3.new) r17 = aslh(r21) }
43 # CHECK: 11 e3 35 70
44 if (p3) r17 = asrh(r21)
45 # CHECK: 03 40 45 85
46 # CHECK-NEXT: 11 e7 35 70
47 { p3 = r5
48 if (p3.new) r17 = asrh(r21) }
49 # CHECK: 11 eb 35 70
50 if (!p3) r17 = asrh(r21)
51 # CHECK: 03 40 45 85
52 # CHECK-NEXT: 11 ef 35 70
53 { p3 = r5
54 if (!p3.new) r17 = asrh(r21) }
56 # Conditional combine
57 # CHECK: 70 df 15 fd
58 if (p3) r17:16 = combine(r21, r31)
59 # CHECK: f0 df 15 fd
60 if (!p3) r17:16 = combine(r21, r31)
61 # CHECK: 03 40 45 85
62 # CHECK-NEXT: 70 ff 15 fd
63 { p3 = r5
64 if (p3.new) r17:16 = combine(r21, r31) }
65 # CHECK: 03 40 45 85
66 # CHECK-NEXT: f0 ff 15 fd
67 { p3 = r5
68 if (!p3.new) r17:16 = combine(r21, r31) }
70 # Conditional logical operations
71 # CHECK: 71 df 15 f9
72 if (p3) r17 = and(r21, r31)
73 # CHECK: f1 df 15 f9
74 if (!p3) r17 = and(r21, r31)
75 # CHECK: 03 40 45 85
76 # CHECK-NEXT: 71 ff 15 f9
77 { p3 = r5
78 if (p3.new) r17 = and(r21, r31) }
79 # CHECK: 03 40 45 85
80 # CHECK-NEXT: f1 ff 15 f9
81 { p3 = r5
82 if (!p3.new) r17 = and(r21, r31) }
83 # CHECK: 71 df 35 f9
84 if (p3) r17 = or(r21, r31)
85 # CHECK: f1 df 35 f9
86 if (!p3) r17 = or(r21, r31)
87 # CHECK: 03 40 45 85
88 # CHECK-NEXT: 71 ff 35 f9
89 { p3 = r5
90 if (p3.new) r17 = or(r21, r31) }
91 # CHECK: 03 40 45 85
92 # CHECK-NEXT: f1 ff 35 f9
93 { p3 = r5
94 if (!p3.new) r17 = or(r21, r31) }
95 # CHECK: 71 df 75 f9
96 if (p3) r17 = xor(r21, r31)
97 # CHECK: f1 df 75 f9
98 if (!p3) r17 = xor(r21, r31)
99 # CHECK: 03 40 45 85
100 # CHECK-NEXT: 71 ff 75 f9
101 { p3 = r5
102 if (p3.new) r17 = xor(r21, r31) }
103 # CHECK: 03 40 45 85
104 # CHECK-NEXT: f1 ff 75 f9
105 { p3 = r5
106 if (!p3.new) r17 = xor(r21, r31) }
108 # Conditional subtract
109 # CHECK: 71 df 35 fb
110 if (p3) r17 = sub(r31, r21)
111 # CHECK: f1 df 35 fb
112 if (!p3) r17 = sub(r31, r21)
113 # CHECK: 03 40 45 85
114 # CHECK-NEXT: 71 ff 35 fb
115 { p3 = r5
116 if (p3.new) r17 = sub(r31, r21) }
117 # CHECK: 03 40 45 85
118 # CHECK-NEXT: f1 ff 35 fb
119 { p3 = r5
120 if (!p3.new) r17 = sub(r31, r21) }
122 # Conditional sign extend
123 # CHECK: 11 e3 b5 70
124 if (p3) r17 = sxtb(r21)
125 # CHECK: 11 eb b5 70
126 if (!p3) r17 = sxtb(r21)
127 # CHECK: 03 40 45 85
128 # CHECK-NEXT: 11 e7 b5 70
129 { p3 = r5
130 if (p3.new) r17 = sxtb(r21) }
131 # CHECK: 03 40 45 85
132 # CHECK-NEXT: 11 ef b5 70
133 { p3 = r5
134 if (!p3.new) r17 = sxtb(r21) }
135 # CHECK: 11 e3 f5 70
136 if (p3) r17 = sxth(r21)
137 # CHECK: 11 eb f5 70
138 if (!p3) r17 = sxth(r21)
139 # CHECK: 03 40 45 85
140 # CHECK-NEXT: 11 e7 f5 70
141 { p3 = r5
142 if (p3.new) r17 = sxth(r21) }
143 # CHECK: 03 40 45 85
144 # CHECK-NEXT: 11 ef f5 70
145 { p3 = r5
146 if (!p3.new) r17 = sxth(r21) }
148 # Conditional transfer
149 # CHECK: b1 c2 60 7e
150 if (p3) r17 = #21
151 # CHECK: b1 c2 e0 7e
152 if (!p3) r17 = #21
153 # CHECK: 03 40 45 85
154 # CHECK-NEXT: b1 e2 60 7e
155 { p3 = r5
156 if (p3.new) r17 = #21 }
157 # CHECK: 03 40 45 85
158 # CHECK-NEXT: b1 e2 e0 7e
159 { p3 = r5
160 if (!p3.new) r17 = #21 }
162 # Conditional zero extend
163 # CHECK: 11 e3 95 70
164 if (p3) r17 = zxtb(r21)
165 # CHECK: 11 eb 95 70
166 if (!p3) r17 = zxtb(r21)
167 # CHECK: 03 40 45 85
168 # CHECK-NEXT: 11 e7 95 70
169 { p3 = r5
170 if (p3.new) r17 = zxtb(r21) }
171 # CHECK: 03 40 45 85
172 # CHECK-NEXT: 11 ef 95 70
173 { p3 = r5
174 if (!p3.new) r17 = zxtb(r21) }
175 # CHECK: 11 e3 d5 70
176 if (p3) r17 = zxth(r21)
177 # CHECK: 11 eb d5 70
178 if (!p3) r17 = zxth(r21)
179 # CHECK: 03 40 45 85
180 # CHECK-NEXT: 11 e7 d5 70
181 { p3 = r5
182 if (p3.new) r17 = zxth(r21) }
183 # CHECK: 03 40 45 85
184 # CHECK-NEXT: 11 ef d5 70
185 { p3 = r5
186 if (!p3.new) r17 = zxth(r21) }
188 # Compare
189 # CHECK: e3 c3 15 75
190 p3 = cmp.eq(r21, #31)
191 # CHECK: f3 c3 15 75
192 p3 = !cmp.eq(r21, #31)
193 # CHECK: e3 c3 55 75
194 p3 = cmp.gt(r21, #31)
195 # CHECK: f3 c3 55 75
196 p3 = !cmp.gt(r21, #31)
197 # CHECK: e3 c3 95 75
198 p3 = cmp.gtu(r21, #31)
199 # CHECK: f3 c3 95 75
200 p3 = !cmp.gtu(r21, #31)
201 # CHECK: 03 df 15 f2
202 p3 = cmp.eq(r21, r31)
203 # CHECK: 13 df 15 f2
204 p3 = !cmp.eq(r21, r31)
205 # CHECK: 03 df 55 f2
206 p3 = cmp.gt(r21, r31)
207 # CHECK: 13 df 55 f2
208 p3 = !cmp.gt(r21, r31)
209 # CHECK: 03 df 75 f2
210 p3 = cmp.gtu(r21, r31)
211 # CHECK: 13 df 75 f2
212 p3 = !cmp.gtu(r21, r31)
214 # Compare to general register
215 # CHECK: f1 e3 55 73
216 r17 = cmp.eq(r21, #31)
217 # CHECK: f1 e3 75 73
218 r17 = !cmp.eq(r21, #31)
219 # CHECK: 11 df 55 f3
220 r17 = cmp.eq(r21, r31)
221 # CHECK: 11 df 75 f3
222 r17 = !cmp.eq(r21, r31)