|
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 |
| 2 | +; RUN: llc -mtriple=aarch64 -mattr=+sve2 < %s | FileCheck %s |
| 3 | + |
| 4 | +define void @main(ptr %0) { |
| 5 | +; CHECK-LABEL: main: |
| 6 | +; CHECK: // %bb.0: // %entry |
| 7 | +; CHECK-NEXT: mov z0.d, #0 // =0x0 |
| 8 | +; CHECK-NEXT: ptrue p0.d, vl1 |
| 9 | +; CHECK-NEXT: mov z1.d, z0.d |
| 10 | +; CHECK-NEXT: ext z1.b, z1.b, z0.b, #8 |
| 11 | +; CHECK-NEXT: uzp1 v1.2s, v0.2s, v1.2s |
| 12 | +; CHECK-NEXT: neg v1.2s, v1.2s |
| 13 | +; CHECK-NEXT: smov x8, v1.s[0] |
| 14 | +; CHECK-NEXT: smov x9, v1.s[1] |
| 15 | +; CHECK-NEXT: mov z0.d, p0/m, x8 |
| 16 | +; CHECK-NEXT: mov z0.d, p0/m, x9 |
| 17 | +; CHECK-NEXT: ptrue p0.d |
| 18 | +; CHECK-NEXT: st1d { z0.d }, p0, [x0] |
| 19 | +; CHECK-NEXT: ret |
| 20 | +"entry": |
| 21 | + %1 = bitcast <vscale x 2 x i64> zeroinitializer to <vscale x 4 x i32> |
| 22 | + %a = extractelement <vscale x 4 x i32> %1, i64 0 |
| 23 | + %b = insertelement <2 x i32> zeroinitializer, i32 %a, i64 0 |
| 24 | + %2 = bitcast <vscale x 2 x i64> zeroinitializer to <vscale x 4 x i32> |
| 25 | + %c = extractelement <vscale x 4 x i32> %2, i64 2 |
| 26 | + %d = insertelement <2 x i32> %b, i32 %c, i64 1 |
| 27 | + %e = sub <2 x i32> zeroinitializer, %d |
| 28 | + %f = extractelement <2 x i32> %e, i64 0 |
| 29 | + %g = sext i32 %f to i64 |
| 30 | + %h = insertelement <vscale x 2 x i64> zeroinitializer, i64 %g, i64 0 |
| 31 | + %i = extractelement <2 x i32> %e, i64 1 |
| 32 | + %j = sext i32 %i to i64 |
| 33 | + %k = insertelement <vscale x 2 x i64> %h, i64 %j, i64 0 |
| 34 | + store <vscale x 2 x i64> %k, ptr %0, align 16 |
| 35 | + ret void |
| 36 | +} |
0 commit comments