brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.2 KiB · 13fcd94 Raw
156 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mattr=+sve2 -force-streaming-compatible < %s | FileCheck %s3; RUN: llc -mattr=+sme -force-streaming < %s | FileCheck %s4; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE5 6 7target triple = "aarch64-unknown-linux-gnu"8 9define void @store_trunc_v8i16i8(ptr %ap, ptr %dest) {10; CHECK-LABEL: store_trunc_v8i16i8:11; CHECK:       // %bb.0:12; CHECK-NEXT:    ptrue p0.h, vl813; CHECK-NEXT:    ldr q0, [x0]14; CHECK-NEXT:    st1b { z0.h }, p0, [x1]15; CHECK-NEXT:    ret16;17; NONEON-NOSVE-LABEL: store_trunc_v8i16i8:18; NONEON-NOSVE:       // %bb.0:19; NONEON-NOSVE-NEXT:    ldr q0, [x0]20; NONEON-NOSVE-NEXT:    str q0, [sp, #-32]!21; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 3222; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #14]23; NONEON-NOSVE-NEXT:    strb w8, [sp, #31]24; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #12]25; NONEON-NOSVE-NEXT:    strb w8, [sp, #30]26; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #10]27; NONEON-NOSVE-NEXT:    strb w8, [sp, #29]28; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #8]29; NONEON-NOSVE-NEXT:    strb w8, [sp, #28]30; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #6]31; NONEON-NOSVE-NEXT:    strb w8, [sp, #27]32; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #4]33; NONEON-NOSVE-NEXT:    strb w8, [sp, #26]34; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #2]35; NONEON-NOSVE-NEXT:    strb w8, [sp, #25]36; NONEON-NOSVE-NEXT:    ldrh w8, [sp]37; NONEON-NOSVE-NEXT:    strb w8, [sp, #24]38; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]39; NONEON-NOSVE-NEXT:    str d0, [x1]40; NONEON-NOSVE-NEXT:    add sp, sp, #3241; NONEON-NOSVE-NEXT:    ret42  %a = load <8 x i16>, ptr %ap43  %val = trunc <8 x i16> %a to <8 x i8>44  store <8 x i8> %val, ptr %dest45  ret void46}47 48define void @store_trunc_v4i32i8(ptr %ap, ptr %dest) {49; CHECK-LABEL: store_trunc_v4i32i8:50; CHECK:       // %bb.0:51; CHECK-NEXT:    ptrue p0.s, vl452; CHECK-NEXT:    ldr q0, [x0]53; CHECK-NEXT:    st1b { z0.s }, p0, [x1]54; CHECK-NEXT:    ret55;56; NONEON-NOSVE-LABEL: store_trunc_v4i32i8:57; NONEON-NOSVE:       // %bb.0:58; NONEON-NOSVE-NEXT:    ldr q0, [x0]59; NONEON-NOSVE-NEXT:    str q0, [sp, #-16]!60; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 1661; NONEON-NOSVE-NEXT:    ldp w9, w8, [sp, #8]62; NONEON-NOSVE-NEXT:    ldp w10, w11, [sp]63; NONEON-NOSVE-NEXT:    strb w8, [x1, #3]64; NONEON-NOSVE-NEXT:    strb w9, [x1, #2]65; NONEON-NOSVE-NEXT:    strb w11, [x1, #1]66; NONEON-NOSVE-NEXT:    strb w10, [x1]67; NONEON-NOSVE-NEXT:    add sp, sp, #1668; NONEON-NOSVE-NEXT:    ret69  %a = load <4 x i32>, ptr %ap70  %val = trunc <4 x i32> %a to <4 x i8>71  store <4 x i8> %val, ptr %dest72  ret void73}74 75define void @store_trunc_v4i32i16(ptr %ap, ptr %dest) {76; CHECK-LABEL: store_trunc_v4i32i16:77; CHECK:       // %bb.0:78; CHECK-NEXT:    ptrue p0.s, vl479; CHECK-NEXT:    ldr q0, [x0]80; CHECK-NEXT:    st1h { z0.s }, p0, [x1]81; CHECK-NEXT:    ret82;83; NONEON-NOSVE-LABEL: store_trunc_v4i32i16:84; NONEON-NOSVE:       // %bb.0:85; NONEON-NOSVE-NEXT:    ldr q0, [x0]86; NONEON-NOSVE-NEXT:    str q0, [sp, #-32]!87; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 3288; NONEON-NOSVE-NEXT:    ldp w8, w9, [sp, #8]89; NONEON-NOSVE-NEXT:    strh w9, [sp, #30]90; NONEON-NOSVE-NEXT:    strh w8, [sp, #28]91; NONEON-NOSVE-NEXT:    ldp w8, w9, [sp]92; NONEON-NOSVE-NEXT:    strh w9, [sp, #26]93; NONEON-NOSVE-NEXT:    strh w8, [sp, #24]94; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]95; NONEON-NOSVE-NEXT:    str d0, [x1]96; NONEON-NOSVE-NEXT:    add sp, sp, #3297; NONEON-NOSVE-NEXT:    ret98  %a = load <4 x i32>, ptr %ap99  %val = trunc <4 x i32> %a to <4 x i16>100  store <4 x i16> %val, ptr %dest101  ret void102}103 104define void @store_trunc_v2i64i8(ptr %ap, ptr %dest) {105; CHECK-LABEL: store_trunc_v2i64i8:106; CHECK:       // %bb.0:107; CHECK-NEXT:    ptrue p0.d, vl2108; CHECK-NEXT:    ldr q0, [x0]109; CHECK-NEXT:    st1w { z0.d }, p0, [x1]110; CHECK-NEXT:    ret111;112; NONEON-NOSVE-LABEL: store_trunc_v2i64i8:113; NONEON-NOSVE:       // %bb.0:114; NONEON-NOSVE-NEXT:    ldr q0, [x0]115; NONEON-NOSVE-NEXT:    str q0, [sp, #-32]!116; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 32117; NONEON-NOSVE-NEXT:    ldp x8, x9, [sp]118; NONEON-NOSVE-NEXT:    stp w8, w9, [sp, #24]119; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]120; NONEON-NOSVE-NEXT:    str d0, [x1]121; NONEON-NOSVE-NEXT:    add sp, sp, #32122; NONEON-NOSVE-NEXT:    ret123  %a = load <2 x i64>, ptr %ap124  %val = trunc <2 x i64> %a to <2 x i32>125  store <2 x i32> %val, ptr %dest126  ret void127}128 129define void @store_trunc_v2i256i64(ptr %ap, ptr %dest) {130; CHECK-LABEL: store_trunc_v2i256i64:131; CHECK:       // %bb.0:132; CHECK-NEXT:    ldr d1, [x0, #32]133; CHECK-NEXT:    ptrue p0.d, vl1134; CHECK-NEXT:    ldr d0, [x0]135; CHECK-NEXT:    splice z0.d, p0, { z0.d, z1.d }136; CHECK-NEXT:    str q0, [x1]137; CHECK-NEXT:    ret138;139; NONEON-NOSVE-LABEL: store_trunc_v2i256i64:140; NONEON-NOSVE:       // %bb.0:141; NONEON-NOSVE-NEXT:    ldr x8, [x0, #32]142; NONEON-NOSVE-NEXT:    ldr x9, [x0]143; NONEON-NOSVE-NEXT:    stp x9, x8, [sp, #-32]!144; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 32145; NONEON-NOSVE-NEXT:    ldp d0, d1, [sp]146; NONEON-NOSVE-NEXT:    stp d0, d1, [sp, #16]147; NONEON-NOSVE-NEXT:    ldr q0, [sp, #16]148; NONEON-NOSVE-NEXT:    str q0, [x1]149; NONEON-NOSVE-NEXT:    add sp, sp, #32150; NONEON-NOSVE-NEXT:    ret151  %a = load <2 x i256>, ptr %ap152  %val = trunc <2 x i256> %a to <2 x i64>153  store <2 x i64> %val, ptr %dest154  ret void155}156