104 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64-linux-gnu < %s | FileCheck %s3 4target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"5target triple = "aarch64-unknown-linux-gnu"6 7define void @f_undef(<8 x i64> %a, ptr %dst) {8; CHECK-LABEL: f_undef:9; CHECK: // %bb.0: // %BB10; CHECK-NEXT: ret11BB:12 %S = shufflevector <8 x i64> %a, <8 x i64> %a, <16 x i32> undef13 store <16 x i64> %S, ptr %dst, align 6414 ret void15}16 17define void @f_poison(<8 x i64> %a, ptr %dst) {18; CHECK-LABEL: f_poison:19; CHECK: // %bb.0: // %BB20; CHECK-NEXT: ret21BB:22 %S = shufflevector <8 x i64> %a, <8 x i64> %a, <16 x i32> poison23 store <16 x i64> %S, ptr %dst, align 6424 ret void25}26 27define void @f_undef_15(<8 x i64> %a, ptr %dst) {28; CHECK-LABEL: f_undef_15:29; CHECK: // %bb.0: // %BB30; CHECK-NEXT: // kill: def $q0 killed $q0 def $q0_q131; CHECK-NEXT: mov x8, x032; CHECK-NEXT: mov v1.16b, v0.16b33; CHECK-NEXT: st2 { v0.2d, v1.2d }, [x8], #3234; CHECK-NEXT: st2 { v0.2d, v1.2d }, [x8]35; CHECK-NEXT: add x8, x0, #6436; CHECK-NEXT: st2 { v0.2d, v1.2d }, [x8]37; CHECK-NEXT: add x8, x0, #9638; CHECK-NEXT: st2 { v0.2d, v1.2d }, [x8]39; CHECK-NEXT: ret40BB:41 %S = shufflevector <8 x i64> %a, <8 x i64> %a, <16 x i32> <i32 0, i32 undef, i32 undef, i32 undef,i32 undef, i32 undef, i32 undef, i32 undef,i32 undef, i32 undef, i32 undef, i32 undef,i32 undef, i32 undef, i32 undef, i32 undef>42 store <16 x i64> %S, ptr %dst, align 6443 ret void44}45 46define void @f_undef_1(<8 x i64> %a, ptr %dst) {47; CHECK-LABEL: f_undef_1:48; CHECK: // %bb.0: // %BB49; CHECK-NEXT: mov v16.16b, v0.16b50; CHECK-NEXT: mov v5.16b, v2.16b51; CHECK-NEXT: // kill: def $q1 killed $q1 def $q1_q252; CHECK-NEXT: // kill: def $q3 killed $q3 def $q3_q453; CHECK-NEXT: mov x8, x054; CHECK-NEXT: mov v2.16b, v1.16b55; CHECK-NEXT: mov v4.16b, v3.16b56; CHECK-NEXT: mov v17.16b, v16.16b57; CHECK-NEXT: mov v6.16b, v5.16b58; CHECK-NEXT: st2 { v16.2d, v17.2d }, [x8], #3259; CHECK-NEXT: st2 { v1.2d, v2.2d }, [x8]60; CHECK-NEXT: add x8, x0, #6461; CHECK-NEXT: st2 { v5.2d, v6.2d }, [x8]62; CHECK-NEXT: add x8, x0, #9663; CHECK-NEXT: st2 { v3.2d, v4.2d }, [x8]64; CHECK-NEXT: ret65BB:66 %S = shufflevector <8 x i64> %a, <8 x i64> %a, <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 undef, i32 14, i32 7, i32 15>67 store <16 x i64> %S, ptr %dst, align 6468 ret void69}70 71; noundefs and undefs should have the same results.72define void @noundefs(<8 x i32> %a, <8 x i32> %b, ptr %dst) {73; CHECK-LABEL: noundefs:74; CHECK: // %bb.0: // %BB75; CHECK-NEXT: mov v5.16b, v2.16b76; CHECK-NEXT: // kill: def $q3 killed $q3 def $q2_q377; CHECK-NEXT: mov v4.16b, v0.16b78; CHECK-NEXT: mov v2.16b, v1.16b79; CHECK-NEXT: st2 { v4.4s, v5.4s }, [x0], #3280; CHECK-NEXT: st2 { v2.4s, v3.4s }, [x0]81; CHECK-NEXT: ret82BB:83 %S = shufflevector <8 x i32> %a, <8 x i32> %b, <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 undef, i32 14, i32 7, i32 15>84 store <16 x i32> %S, ptr %dst, align 6485 ret void86}87 88define void @undefs(<8 x i32> %a, <8 x i32> %b, ptr %dst) {89; CHECK-LABEL: undefs:90; CHECK: // %bb.0: // %BB91; CHECK-NEXT: mov v5.16b, v2.16b92; CHECK-NEXT: // kill: def $q3 killed $q3 def $q2_q393; CHECK-NEXT: mov v4.16b, v0.16b94; CHECK-NEXT: mov v2.16b, v1.16b95; CHECK-NEXT: st2 { v4.4s, v5.4s }, [x0], #3296; CHECK-NEXT: st2 { v2.4s, v3.4s }, [x0]97; CHECK-NEXT: ret98BB:99 %S = shufflevector <8 x i32> %a, <8 x i32> %b, <16 x i32> <i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 3, i32 11, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 7, i32 15>100 store <16 x i32> %S, ptr %dst, align 64101 ret void102}103 104