| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6 |
| ; RUN: llc -mtriple=arm64-apple-macosx -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-IAENABLED |
| ; RUN: llc -mtriple=arm64-apple-macosx --lower-interleaved-accesses=false -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-IADISABLED |
| |
| define <8 x double> @uitofp_load_fadd_intrinsic(ptr %p) { |
| ; CHECK-IAENABLED-LABEL: uitofp_load_fadd_intrinsic: |
| ; CHECK-IAENABLED: ; %bb.0: |
| ; CHECK-IAENABLED-NEXT: ld4.8h { v0, v1, v2, v3 }, [x0] |
| ; CHECK-IAENABLED-NEXT: ushll2.4s v4, v0, #0 |
| ; CHECK-IAENABLED-NEXT: ushll.4s v5, v0, #0 |
| ; CHECK-IAENABLED-NEXT: ushll2.4s v6, v1, #0 |
| ; CHECK-IAENABLED-NEXT: ushll.4s v7, v1, #0 |
| ; CHECK-IAENABLED-NEXT: ushll2.4s v16, v2, #0 |
| ; CHECK-IAENABLED-NEXT: ushll.4s v17, v2, #0 |
| ; CHECK-IAENABLED-NEXT: ushll2.4s v18, v3, #0 |
| ; CHECK-IAENABLED-NEXT: ushll.4s v0, v3, #0 |
| ; CHECK-IAENABLED-NEXT: ushll2.2d v1, v4, #0 |
| ; CHECK-IAENABLED-NEXT: ushll2.2d v2, v5, #0 |
| ; CHECK-IAENABLED-NEXT: ushll.2d v3, v4, #0 |
| ; CHECK-IAENABLED-NEXT: ushll.2d v4, v5, #0 |
| ; CHECK-IAENABLED-NEXT: ushll2.2d v5, v6, #0 |
| ; CHECK-IAENABLED-NEXT: ushll2.2d v19, v7, #0 |
| ; CHECK-IAENABLED-NEXT: ushll.2d v6, v6, #0 |
| ; CHECK-IAENABLED-NEXT: ushll.2d v7, v7, #0 |
| ; CHECK-IAENABLED-NEXT: ushll2.2d v20, v16, #0 |
| ; CHECK-IAENABLED-NEXT: ushll2.2d v21, v17, #0 |
| ; CHECK-IAENABLED-NEXT: ushll.2d v16, v16, #0 |
| ; CHECK-IAENABLED-NEXT: ushll.2d v17, v17, #0 |
| ; CHECK-IAENABLED-NEXT: ushll.2d v22, v0, #0 |
| ; CHECK-IAENABLED-NEXT: ushll2.2d v23, v18, #0 |
| ; CHECK-IAENABLED-NEXT: ushll2.2d v0, v0, #0 |
| ; CHECK-IAENABLED-NEXT: ushll.2d v18, v18, #0 |
| ; CHECK-IAENABLED-NEXT: ucvtf.2d v1, v1 |
| ; CHECK-IAENABLED-NEXT: ucvtf.2d v2, v2 |
| ; CHECK-IAENABLED-NEXT: ucvtf.2d v3, v3 |
| ; CHECK-IAENABLED-NEXT: ucvtf.2d v4, v4 |
| ; CHECK-IAENABLED-NEXT: ucvtf.2d v5, v5 |
| ; CHECK-IAENABLED-NEXT: ucvtf.2d v19, v19 |
| ; CHECK-IAENABLED-NEXT: ucvtf.2d v6, v6 |
| ; CHECK-IAENABLED-NEXT: ucvtf.2d v7, v7 |
| ; CHECK-IAENABLED-NEXT: ucvtf.2d v20, v20 |
| ; CHECK-IAENABLED-NEXT: ucvtf.2d v21, v21 |
| ; CHECK-IAENABLED-NEXT: ucvtf.2d v16, v16 |
| ; CHECK-IAENABLED-NEXT: ucvtf.2d v17, v17 |
| ; CHECK-IAENABLED-NEXT: ucvtf.2d v22, v22 |
| ; CHECK-IAENABLED-NEXT: ucvtf.2d v23, v23 |
| ; CHECK-IAENABLED-NEXT: ucvtf.2d v0, v0 |
| ; CHECK-IAENABLED-NEXT: ucvtf.2d v18, v18 |
| ; CHECK-IAENABLED-NEXT: fadd.2d v1, v1, v5 |
| ; CHECK-IAENABLED-NEXT: fadd.2d v4, v4, v7 |
| ; CHECK-IAENABLED-NEXT: fadd.2d v6, v3, v6 |
| ; CHECK-IAENABLED-NEXT: fadd.2d v2, v2, v19 |
| ; CHECK-IAENABLED-NEXT: fadd.2d v3, v17, v22 |
| ; CHECK-IAENABLED-NEXT: fadd.2d v5, v16, v18 |
| ; CHECK-IAENABLED-NEXT: fadd.2d v7, v21, v0 |
| ; CHECK-IAENABLED-NEXT: fadd.2d v16, v20, v23 |
| ; CHECK-IAENABLED-NEXT: fadd.2d v0, v4, v3 |
| ; CHECK-IAENABLED-NEXT: fadd.2d v3, v1, v16 |
| ; CHECK-IAENABLED-NEXT: fadd.2d v1, v2, v7 |
| ; CHECK-IAENABLED-NEXT: fadd.2d v2, v6, v5 |
| ; CHECK-IAENABLED-NEXT: ret |
| ; |
| ; CHECK-IADISABLED-LABEL: uitofp_load_fadd_intrinsic: |
| ; CHECK-IADISABLED: ; %bb.0: |
| ; CHECK-IADISABLED-NEXT: ldp q2, q1, [x0] |
| ; CHECK-IADISABLED-NEXT: movi.2d v0, #0x00ffff0000ffff |
| ; CHECK-IADISABLED-NEXT: ldp q4, q3, [x0, #32] |
| ; CHECK-IADISABLED-NEXT: uzp1.8h v6, v2, v1 |
| ; CHECK-IADISABLED-NEXT: uzp2.8h v1, v2, v1 |
| ; CHECK-IADISABLED-NEXT: uzp1.8h v5, v4, v3 |
| ; CHECK-IADISABLED-NEXT: uzp2.8h v3, v4, v3 |
| ; CHECK-IADISABLED-NEXT: and.16b v2, v6, v0 |
| ; CHECK-IADISABLED-NEXT: and.16b v7, v1, v0 |
| ; CHECK-IADISABLED-NEXT: ushr.4s v6, v6, #16 |
| ; CHECK-IADISABLED-NEXT: and.16b v4, v5, v0 |
| ; CHECK-IADISABLED-NEXT: and.16b v0, v3, v0 |
| ; CHECK-IADISABLED-NEXT: ushr.4s v5, v5, #16 |
| ; CHECK-IADISABLED-NEXT: ushr.4s v1, v1, #16 |
| ; CHECK-IADISABLED-NEXT: ushr.4s v3, v3, #16 |
| ; CHECK-IADISABLED-NEXT: ushll2.2d v16, v2, #0 |
| ; CHECK-IADISABLED-NEXT: ushll.2d v2, v2, #0 |
| ; CHECK-IADISABLED-NEXT: ushll2.2d v18, v7, #0 |
| ; CHECK-IADISABLED-NEXT: ushll2.2d v17, v4, #0 |
| ; CHECK-IADISABLED-NEXT: ushll.2d v4, v4, #0 |
| ; CHECK-IADISABLED-NEXT: ushll2.2d v19, v0, #0 |
| ; CHECK-IADISABLED-NEXT: ushll.2d v7, v7, #0 |
| ; CHECK-IADISABLED-NEXT: ushll.2d v0, v0, #0 |
| ; CHECK-IADISABLED-NEXT: ushll2.2d v20, v6, #0 |
| ; CHECK-IADISABLED-NEXT: ushll2.2d v21, v5, #0 |
| ; CHECK-IADISABLED-NEXT: ushll.2d v6, v6, #0 |
| ; CHECK-IADISABLED-NEXT: ushll.2d v5, v5, #0 |
| ; CHECK-IADISABLED-NEXT: ushll.2d v22, v1, #0 |
| ; CHECK-IADISABLED-NEXT: ushll2.2d v1, v1, #0 |
| ; CHECK-IADISABLED-NEXT: ushll2.2d v23, v3, #0 |
| ; CHECK-IADISABLED-NEXT: ushll.2d v3, v3, #0 |
| ; CHECK-IADISABLED-NEXT: ucvtf.2d v16, v16 |
| ; CHECK-IADISABLED-NEXT: ucvtf.2d v17, v17 |
| ; CHECK-IADISABLED-NEXT: ucvtf.2d v2, v2 |
| ; CHECK-IADISABLED-NEXT: ucvtf.2d v4, v4 |
| ; CHECK-IADISABLED-NEXT: ucvtf.2d v18, v18 |
| ; CHECK-IADISABLED-NEXT: ucvtf.2d v19, v19 |
| ; CHECK-IADISABLED-NEXT: ucvtf.2d v7, v7 |
| ; CHECK-IADISABLED-NEXT: ucvtf.2d v0, v0 |
| ; CHECK-IADISABLED-NEXT: ucvtf.2d v20, v20 |
| ; CHECK-IADISABLED-NEXT: ucvtf.2d v21, v21 |
| ; CHECK-IADISABLED-NEXT: ucvtf.2d v6, v6 |
| ; CHECK-IADISABLED-NEXT: ucvtf.2d v5, v5 |
| ; CHECK-IADISABLED-NEXT: ucvtf.2d v22, v22 |
| ; CHECK-IADISABLED-NEXT: ucvtf.2d v1, v1 |
| ; CHECK-IADISABLED-NEXT: ucvtf.2d v23, v23 |
| ; CHECK-IADISABLED-NEXT: ucvtf.2d v3, v3 |
| ; CHECK-IADISABLED-NEXT: fadd.2d v4, v4, v0 |
| ; CHECK-IADISABLED-NEXT: fadd.2d v0, v2, v7 |
| ; CHECK-IADISABLED-NEXT: fadd.2d v2, v17, v19 |
| ; CHECK-IADISABLED-NEXT: fadd.2d v7, v16, v18 |
| ; CHECK-IADISABLED-NEXT: fadd.2d v6, v6, v22 |
| ; CHECK-IADISABLED-NEXT: fadd.2d v1, v20, v1 |
| ; CHECK-IADISABLED-NEXT: fadd.2d v5, v5, v3 |
| ; CHECK-IADISABLED-NEXT: fadd.2d v3, v21, v23 |
| ; CHECK-IADISABLED-NEXT: fadd.2d v0, v0, v6 |
| ; CHECK-IADISABLED-NEXT: fadd.2d v1, v7, v1 |
| ; CHECK-IADISABLED-NEXT: fadd.2d v3, v2, v3 |
| ; CHECK-IADISABLED-NEXT: fadd.2d v2, v4, v5 |
| ; CHECK-IADISABLED-NEXT: ret |
| %l = load <32 x i16>, ptr %p |
| %deinterleaved = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.vector.deinterleave4.v32i16(<32 x i16> %l) |
| %s1 = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %deinterleaved, 0 |
| %z1 = uitofp <8 x i16> %s1 to <8 x double> |
| %s2 = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %deinterleaved, 1 |
| %z2 = uitofp <8 x i16> %s2 to <8 x double> |
| %s3 = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %deinterleaved, 2 |
| %z3 = uitofp <8 x i16> %s3 to <8 x double> |
| %s4 = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %deinterleaved, 3 |
| %z4 = uitofp <8 x i16> %s4 to <8 x double> |
| %a = fadd <8 x double> %z1, %z2 |
| %b = fadd <8 x double> %z3, %z4 |
| %c = fadd <8 x double> %a, %b |
| ret <8 x double> %c |
| } |
| ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: |
| ; CHECK: {{.*}} |