brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.8 KiB · f25c90a Raw
211 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon | FileCheck %s3 4; A vector TruncStore can not be selected.5; Test a trunc IR and a vector store IR can be selected correctly.6 7define void @v2i64_v2i32(<2 x i64> %a, ptr %result) {8; CHECK-LABEL: v2i64_v2i32:9; CHECK:       // %bb.0:10; CHECK-NEXT:    xtn v0.2s, v0.2d11; CHECK-NEXT:    str d0, [x0]12; CHECK-NEXT:    ret13  %b = trunc <2 x i64> %a to <2 x i32>14  store <2 x i32> %b, ptr %result15  ret void16}17 18define void @v4i64_v4i32(<4 x i64> %a, ptr %result) {19; CHECK-LABEL: v4i64_v4i32:20; CHECK:       // %bb.0:21; CHECK-NEXT:    uzp1 v0.4s, v0.4s, v1.4s22; CHECK-NEXT:    str q0, [x0]23; CHECK-NEXT:    ret24  %b = trunc <4 x i64> %a to <4 x i32>25  store <4 x i32> %b, ptr %result26  ret void27}28 29define void @v8i64_v8i32(<8 x i64> %a, ptr %result) {30; CHECK-LABEL: v8i64_v8i32:31; CHECK:       // %bb.0:32; CHECK-NEXT:    uzp1 v2.4s, v2.4s, v3.4s33; CHECK-NEXT:    uzp1 v0.4s, v0.4s, v1.4s34; CHECK-NEXT:    stp q0, q2, [x0]35; CHECK-NEXT:    ret36  %b = trunc <8 x i64> %a to <8 x i32>37  store <8 x i32> %b, ptr %result38  ret void39}40 41define void @v2i32_v2i16(<2 x i32> %a, ptr %result) {42; CHECK-LABEL: v2i32_v2i16:43; CHECK:       // %bb.0:44; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q045; CHECK-NEXT:    mov s1, v0.s[1]46; CHECK-NEXT:    str h0, [x0]47; CHECK-NEXT:    str h1, [x0, #2]48; CHECK-NEXT:    ret49  %b = trunc <2 x i32> %a to <2 x i16>50  store <2 x i16> %b, ptr %result51  ret void52}53 54define void @v4i32_v4i16(<4 x i32> %a, ptr %result) {55; CHECK-LABEL: v4i32_v4i16:56; CHECK:       // %bb.0:57; CHECK-NEXT:    xtn v0.4h, v0.4s58; CHECK-NEXT:    str d0, [x0]59; CHECK-NEXT:    ret60  %b = trunc <4 x i32> %a to <4 x i16>61  store <4 x i16> %b, ptr %result62  ret void63}64 65define void @v8i32_v8i16(<8 x i32> %a, ptr %result) {66; CHECK-LABEL: v8i32_v8i16:67; CHECK:       // %bb.0:68; CHECK-NEXT:    uzp1 v0.8h, v0.8h, v1.8h69; CHECK-NEXT:    str q0, [x0]70; CHECK-NEXT:    ret71  %b = trunc <8 x i32> %a to <8 x i16>72  store <8 x i16> %b, ptr %result73  ret void74}75 76define void @v16i32_v16i16(<16 x i32> %a, ptr %result) {77; CHECK-LABEL: v16i32_v16i16:78; CHECK:       // %bb.0:79; CHECK-NEXT:    uzp1 v2.8h, v2.8h, v3.8h80; CHECK-NEXT:    uzp1 v0.8h, v0.8h, v1.8h81; CHECK-NEXT:    stp q0, q2, [x0]82; CHECK-NEXT:    ret83  %b = trunc <16 x i32> %a to <16 x i16>84  store <16 x i16> %b, ptr %result85  ret void86}87 88define void @v2i32_v2i8(<2 x i32> %a, ptr %result) {89; CHECK-LABEL: v2i32_v2i8:90; CHECK:       // %bb.0:91; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q092; CHECK-NEXT:    mov s1, v0.s[1]93; CHECK-NEXT:    str b0, [x0]94; CHECK-NEXT:    stur b1, [x0, #1]95; CHECK-NEXT:    ret96  %b = trunc <2 x i32> %a to <2 x i8>97  store <2 x i8> %b, ptr %result98  ret void99}100 101define void @v4i32_v4i8(<4 x i32> %a, ptr %result) {102; CHECK-LABEL: v4i32_v4i8:103; CHECK:       // %bb.0:104; CHECK-NEXT:    xtn v0.4h, v0.4s105; CHECK-NEXT:    uzp1 v0.8b, v0.8b, v0.8b106; CHECK-NEXT:    str s0, [x0]107; CHECK-NEXT:    ret108  %b = trunc <4 x i32> %a to <4 x i8>109  store <4 x i8> %b, ptr %result110  ret void111}112 113define void @v8i32_v8i8(<8 x i32> %a, ptr %result) {114; CHECK-LABEL: v8i32_v8i8:115; CHECK:       // %bb.0:116; CHECK-NEXT:    uzp1 v0.8h, v0.8h, v1.8h117; CHECK-NEXT:    xtn v0.8b, v0.8h118; CHECK-NEXT:    str d0, [x0]119; CHECK-NEXT:    ret120  %b = trunc <8 x i32> %a to <8 x i8>121  store <8 x i8> %b, ptr %result122  ret void123}124 125define void @v16i32_v16i8(<16 x i32> %a, ptr %result) {126; CHECK-LABEL: v16i32_v16i8:127; CHECK:       // %bb.0:128; CHECK-NEXT:    uzp1 v2.8h, v2.8h, v3.8h129; CHECK-NEXT:    uzp1 v0.8h, v0.8h, v1.8h130; CHECK-NEXT:    uzp1 v0.16b, v0.16b, v2.16b131; CHECK-NEXT:    str q0, [x0]132; CHECK-NEXT:    ret133  %b = trunc <16 x i32> %a to <16 x i8>134  store <16 x i8> %b, ptr %result135  ret void136}137 138define void @v32i32_v32i8(<32 x i32> %a, ptr %result) {139; CHECK-LABEL: v32i32_v32i8:140; CHECK:       // %bb.0:141; CHECK-NEXT:    uzp1 v6.8h, v6.8h, v7.8h142; CHECK-NEXT:    uzp1 v4.8h, v4.8h, v5.8h143; CHECK-NEXT:    uzp1 v2.8h, v2.8h, v3.8h144; CHECK-NEXT:    uzp1 v0.8h, v0.8h, v1.8h145; CHECK-NEXT:    uzp1 v1.16b, v4.16b, v6.16b146; CHECK-NEXT:    uzp1 v0.16b, v0.16b, v2.16b147; CHECK-NEXT:    stp q0, q1, [x0]148; CHECK-NEXT:    ret149  %b = trunc <32 x i32> %a to <32 x i8>150  store <32 x i8> %b, ptr %result151  ret void152}153 154define void @v2i16_v2i8(<2 x i16> %a, ptr %result) {155; CHECK-LABEL: v2i16_v2i8:156; CHECK:       // %bb.0:157; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0158; CHECK-NEXT:    mov s1, v0.s[1]159; CHECK-NEXT:    str b0, [x0]160; CHECK-NEXT:    stur b1, [x0, #1]161; CHECK-NEXT:    ret162  %b = trunc <2 x i16> %a to <2 x i8>163  store <2 x i8> %b, ptr %result164  ret void165}166 167define void @v4i16_v4i8(<4 x i16> %a, ptr %result) {168; CHECK-LABEL: v4i16_v4i8:169; CHECK:       // %bb.0:170; CHECK-NEXT:    uzp1 v0.8b, v0.8b, v0.8b171; CHECK-NEXT:    str s0, [x0]172; CHECK-NEXT:    ret173  %b = trunc <4 x i16> %a to <4 x i8>174  store <4 x i8> %b, ptr %result175  ret void176}177 178define void @v8i16_v8i8(<8 x i16> %a, ptr %result) {179; CHECK-LABEL: v8i16_v8i8:180; CHECK:       // %bb.0:181; CHECK-NEXT:    xtn v0.8b, v0.8h182; CHECK-NEXT:    str d0, [x0]183; CHECK-NEXT:    ret184  %b = trunc <8 x i16> %a to <8 x i8>185  store <8 x i8> %b, ptr %result186  ret void187}188 189define void @v16i16_v16i8(<16 x i16> %a, ptr %result) {190; CHECK-LABEL: v16i16_v16i8:191; CHECK:       // %bb.0:192; CHECK-NEXT:    uzp1 v0.16b, v0.16b, v1.16b193; CHECK-NEXT:    str q0, [x0]194; CHECK-NEXT:    ret195  %b = trunc <16 x i16> %a to <16 x i8>196  store <16 x i8> %b, ptr %result197  ret void198}199 200define void @v32i16_v32i8(<32 x i16> %a, ptr %result) {201; CHECK-LABEL: v32i16_v32i8:202; CHECK:       // %bb.0:203; CHECK-NEXT:    uzp1 v2.16b, v2.16b, v3.16b204; CHECK-NEXT:    uzp1 v0.16b, v0.16b, v1.16b205; CHECK-NEXT:    stp q0, q2, [x0]206; CHECK-NEXT:    ret207  %b = trunc <32 x i16> %a to <32 x i8>208  store <32 x i8> %b, ptr %result209  ret void210}211