|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
2 | 2 | ; RUN: llc < %s -mtriple=sparc-unknown-linux-gnu | FileCheck %s --check-prefixes=SPARC
|
3 | 3 | ; RUN: llc < %s -mtriple=sparc64-unknown-linux-gnu | FileCheck %s --check-prefixes=SPARC64
|
| 4 | +; RUN: llc < %s -mtriple=sparc64-unknown-linux-gnu -mattr=vis3 | FileCheck %s --check-prefixes=SPARC64-VIS3 |
4 | 5 |
|
5 | 6 | define { i128, i8 } @muloti_test(i128 %l, i128 %r) nounwind {
|
6 | 7 | ; SPARC-LABEL: muloti_test:
|
@@ -213,6 +214,49 @@ define { i128, i8 } @muloti_test(i128 %l, i128 %r) nounwind {
|
213 | 214 | ; SPARC64-NEXT: srl %i3, 0, %i2
|
214 | 215 | ; SPARC64-NEXT: ret
|
215 | 216 | ; SPARC64-NEXT: restore
|
| 217 | +; |
| 218 | +; SPARC64-VIS3-LABEL: muloti_test: |
| 219 | +; SPARC64-VIS3: .register %g2, #scratch |
| 220 | +; SPARC64-VIS3-NEXT: .register %g3, #scratch |
| 221 | +; SPARC64-VIS3-NEXT: ! %bb.0: ! %start |
| 222 | +; SPARC64-VIS3-NEXT: save %sp, -128, %sp |
| 223 | +; SPARC64-VIS3-NEXT: mov %g0, %i5 |
| 224 | +; SPARC64-VIS3-NEXT: umulxhi %i0, %i3, %i4 |
| 225 | +; SPARC64-VIS3-NEXT: srax %i0, 63, %g2 |
| 226 | +; SPARC64-VIS3-NEXT: mulx %g2, %i3, %g3 |
| 227 | +; SPARC64-VIS3-NEXT: add %i4, %g3, %i4 |
| 228 | +; SPARC64-VIS3-NEXT: umulxhi %i1, %i3, %g3 |
| 229 | +; SPARC64-VIS3-NEXT: mulx %i0, %i3, %g4 |
| 230 | +; SPARC64-VIS3-NEXT: addcc %g4, %g3, %g3 |
| 231 | +; SPARC64-VIS3-NEXT: addxccc %i4, %g0, %g4 |
| 232 | +; SPARC64-VIS3-NEXT: umulxhi %i1, %i2, %i4 |
| 233 | +; SPARC64-VIS3-NEXT: srax %i2, 63, %g5 |
| 234 | +; SPARC64-VIS3-NEXT: mulx %i1, %g5, %l0 |
| 235 | +; SPARC64-VIS3-NEXT: add %i4, %l0, %l0 |
| 236 | +; SPARC64-VIS3-NEXT: mulx %i1, %i2, %i4 |
| 237 | +; SPARC64-VIS3-NEXT: addcc %i4, %g3, %i4 |
| 238 | +; SPARC64-VIS3-NEXT: addxccc %l0, %g0, %g3 |
| 239 | +; SPARC64-VIS3-NEXT: srax %g3, 63, %l0 |
| 240 | +; SPARC64-VIS3-NEXT: addcc %g4, %g3, %g3 |
| 241 | +; SPARC64-VIS3-NEXT: srax %g4, 63, %g4 |
| 242 | +; SPARC64-VIS3-NEXT: addxccc %g4, %l0, %g4 |
| 243 | +; SPARC64-VIS3-NEXT: and %g5, %i0, %g5 |
| 244 | +; SPARC64-VIS3-NEXT: and %g2, %i2, %g2 |
| 245 | +; SPARC64-VIS3-NEXT: add %g2, %g5, %g2 |
| 246 | +; SPARC64-VIS3-NEXT: umulxhi %i0, %i2, %g5 |
| 247 | +; SPARC64-VIS3-NEXT: sub %g5, %g2, %g2 |
| 248 | +; SPARC64-VIS3-NEXT: mulx %i0, %i2, %i0 |
| 249 | +; SPARC64-VIS3-NEXT: addcc %i0, %g3, %i0 |
| 250 | +; SPARC64-VIS3-NEXT: addxccc %g2, %g4, %i2 |
| 251 | +; SPARC64-VIS3-NEXT: srax %i4, 63, %g2 |
| 252 | +; SPARC64-VIS3-NEXT: xor %i2, %g2, %i2 |
| 253 | +; SPARC64-VIS3-NEXT: xor %i0, %g2, %i0 |
| 254 | +; SPARC64-VIS3-NEXT: or %i0, %i2, %i0 |
| 255 | +; SPARC64-VIS3-NEXT: movrnz %i0, 1, %i5 |
| 256 | +; SPARC64-VIS3-NEXT: mulx %i1, %i3, %i1 |
| 257 | +; SPARC64-VIS3-NEXT: srl %i5, 0, %i2 |
| 258 | +; SPARC64-VIS3-NEXT: ret |
| 259 | +; SPARC64-VIS3-NEXT: restore %g0, %i4, %o0 |
216 | 260 | start:
|
217 | 261 | %0 = tail call { i128, i1 } @llvm.smul.with.overflow.i128(i128 %l, i128 %r)
|
218 | 262 | %1 = extractvalue { i128, i1 } %0, 0
|
|
0 commit comments