151 lines · plain
1; RUN: llc < %s -mtriple=arm64-eabi -aarch64-neon-syntax=apple | FileCheck %s2 3define <8 x i8> @vsras8(ptr %A, ptr %B) nounwind {4;CHECK-LABEL: vsras8:5;CHECK: ssra.8b6 %tmp1 = load <8 x i8>, ptr %A7 %tmp2 = load <8 x i8>, ptr %B8 %tmp3 = ashr <8 x i8> %tmp2, < i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7 >9 %tmp4 = add <8 x i8> %tmp1, %tmp310 ret <8 x i8> %tmp411}12 13define <4 x i16> @vsras16(ptr %A, ptr %B) nounwind {14;CHECK-LABEL: vsras16:15;CHECK: ssra.4h16 %tmp1 = load <4 x i16>, ptr %A17 %tmp2 = load <4 x i16>, ptr %B18 %tmp3 = ashr <4 x i16> %tmp2, < i16 15, i16 15, i16 15, i16 15 >19 %tmp4 = add <4 x i16> %tmp1, %tmp320 ret <4 x i16> %tmp421}22 23define <2 x i32> @vsras32(ptr %A, ptr %B) nounwind {24;CHECK-LABEL: vsras32:25;CHECK: ssra.2s26 %tmp1 = load <2 x i32>, ptr %A27 %tmp2 = load <2 x i32>, ptr %B28 %tmp3 = ashr <2 x i32> %tmp2, < i32 31, i32 31 >29 %tmp4 = add <2 x i32> %tmp1, %tmp330 ret <2 x i32> %tmp431}32 33define <16 x i8> @vsraQs8(ptr %A, ptr %B) nounwind {34;CHECK-LABEL: vsraQs8:35;CHECK: ssra.16b36 %tmp1 = load <16 x i8>, ptr %A37 %tmp2 = load <16 x i8>, ptr %B38 %tmp3 = ashr <16 x i8> %tmp2, < i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7 >39 %tmp4 = add <16 x i8> %tmp1, %tmp340 ret <16 x i8> %tmp441}42 43define <8 x i16> @vsraQs16(ptr %A, ptr %B) nounwind {44;CHECK-LABEL: vsraQs16:45;CHECK: ssra.8h46 %tmp1 = load <8 x i16>, ptr %A47 %tmp2 = load <8 x i16>, ptr %B48 %tmp3 = ashr <8 x i16> %tmp2, < i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15 >49 %tmp4 = add <8 x i16> %tmp1, %tmp350 ret <8 x i16> %tmp451}52 53define <4 x i32> @vsraQs32(ptr %A, ptr %B) nounwind {54;CHECK-LABEL: vsraQs32:55;CHECK: ssra.4s56 %tmp1 = load <4 x i32>, ptr %A57 %tmp2 = load <4 x i32>, ptr %B58 %tmp3 = ashr <4 x i32> %tmp2, < i32 31, i32 31, i32 31, i32 31 >59 %tmp4 = add <4 x i32> %tmp1, %tmp360 ret <4 x i32> %tmp461}62 63define <2 x i64> @vsraQs64(ptr %A, ptr %B) nounwind {64;CHECK-LABEL: vsraQs64:65;CHECK: ssra.2d66 %tmp1 = load <2 x i64>, ptr %A67 %tmp2 = load <2 x i64>, ptr %B68 %tmp3 = ashr <2 x i64> %tmp2, < i64 63, i64 63 >69 %tmp4 = add <2 x i64> %tmp1, %tmp370 ret <2 x i64> %tmp471}72 73define <8 x i8> @vsrau8(ptr %A, ptr %B) nounwind {74;CHECK-LABEL: vsrau8:75;CHECK: usra.8b76 %tmp1 = load <8 x i8>, ptr %A77 %tmp2 = load <8 x i8>, ptr %B78 %tmp3 = lshr <8 x i8> %tmp2, < i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7 >79 %tmp4 = add <8 x i8> %tmp1, %tmp380 ret <8 x i8> %tmp481}82 83define <4 x i16> @vsrau16(ptr %A, ptr %B) nounwind {84;CHECK-LABEL: vsrau16:85;CHECK: usra.4h86 %tmp1 = load <4 x i16>, ptr %A87 %tmp2 = load <4 x i16>, ptr %B88 %tmp3 = lshr <4 x i16> %tmp2, < i16 15, i16 15, i16 15, i16 15 >89 %tmp4 = add <4 x i16> %tmp1, %tmp390 ret <4 x i16> %tmp491}92 93define <2 x i32> @vsrau32(ptr %A, ptr %B) nounwind {94;CHECK-LABEL: vsrau32:95;CHECK: usra.2s96 %tmp1 = load <2 x i32>, ptr %A97 %tmp2 = load <2 x i32>, ptr %B98 %tmp3 = lshr <2 x i32> %tmp2, < i32 31, i32 31 >99 %tmp4 = add <2 x i32> %tmp1, %tmp3100 ret <2 x i32> %tmp4101}102 103 104define <16 x i8> @vsraQu8(ptr %A, ptr %B) nounwind {105;CHECK-LABEL: vsraQu8:106;CHECK: usra.16b107 %tmp1 = load <16 x i8>, ptr %A108 %tmp2 = load <16 x i8>, ptr %B109 %tmp3 = lshr <16 x i8> %tmp2, < i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7 >110 %tmp4 = add <16 x i8> %tmp1, %tmp3111 ret <16 x i8> %tmp4112}113 114define <8 x i16> @vsraQu16(ptr %A, ptr %B) nounwind {115;CHECK-LABEL: vsraQu16:116;CHECK: usra.8h117 %tmp1 = load <8 x i16>, ptr %A118 %tmp2 = load <8 x i16>, ptr %B119 %tmp3 = lshr <8 x i16> %tmp2, < i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15 >120 %tmp4 = add <8 x i16> %tmp1, %tmp3121 ret <8 x i16> %tmp4122}123 124define <4 x i32> @vsraQu32(ptr %A, ptr %B) nounwind {125;CHECK-LABEL: vsraQu32:126;CHECK: usra.4s127 %tmp1 = load <4 x i32>, ptr %A128 %tmp2 = load <4 x i32>, ptr %B129 %tmp3 = lshr <4 x i32> %tmp2, < i32 31, i32 31, i32 31, i32 31 >130 %tmp4 = add <4 x i32> %tmp1, %tmp3131 ret <4 x i32> %tmp4132}133 134define <2 x i64> @vsraQu64(ptr %A, ptr %B) nounwind {135;CHECK-LABEL: vsraQu64:136;CHECK: usra.2d137 %tmp1 = load <2 x i64>, ptr %A138 %tmp2 = load <2 x i64>, ptr %B139 %tmp3 = lshr <2 x i64> %tmp2, < i64 63, i64 63 >140 %tmp4 = add <2 x i64> %tmp1, %tmp3141 ret <2 x i64> %tmp4142}143 144define <1 x i64> @vsra_v1i64(<1 x i64> %A, <1 x i64> %B) nounwind {145; CHECK-LABEL: vsra_v1i64:146; CHECK: ssra d0, d1, #63147 %tmp3 = ashr <1 x i64> %B, < i64 63 >148 %tmp4 = add <1 x i64> %A, %tmp3149 ret <1 x i64> %tmp4150}151