129 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64 < %s | FileCheck %s3 4define <16 x i8> @fn1_vector(<16 x i8> %arg) {5; CHECK-LABEL: fn1_vector:6; CHECK: // %bb.0: // %entry7; CHECK-NEXT: adrp x8, .LCPI0_08; CHECK-NEXT: ldr q1, [x8, :lo12:.LCPI0_0]9; CHECK-NEXT: mul v0.16b, v0.16b, v1.16b10; CHECK-NEXT: ret11entry:12 %shl = shl <16 x i8> %arg, <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>13 %mul = mul <16 x i8> %shl, <i8 0, i8 1, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>14 ret <16 x i8> %mul15}16 17define <16 x i8> @fn2_vector(<16 x i8> %arg) {18; CHECK-LABEL: fn2_vector:19; CHECK: // %bb.0: // %entry20; CHECK-NEXT: adrp x8, .LCPI1_021; CHECK-NEXT: ldr q1, [x8, :lo12:.LCPI1_0]22; CHECK-NEXT: mul v0.16b, v0.16b, v1.16b23; CHECK-NEXT: ret24entry:25 %mul = mul <16 x i8> %arg, <i8 0, i8 1, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>26 %shl = shl <16 x i8> %mul, <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>27 ret <16 x i8> %shl28}29 30define <16 x i8> @fn1_vector_undef(<16 x i8> %arg) {31; CHECK-LABEL: fn1_vector_undef:32; CHECK: // %bb.0: // %entry33; CHECK-NEXT: adrp x8, .LCPI2_034; CHECK-NEXT: ldr q1, [x8, :lo12:.LCPI2_0]35; CHECK-NEXT: mul v0.16b, v0.16b, v1.16b36; CHECK-NEXT: ret37entry:38 %shl = shl <16 x i8> %arg, <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 %mul = mul <16 x i8> %shl, <i8 undef, i8 1, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>40 ret <16 x i8> %mul41}42 43define <16 x i8> @fn2_vector_undef(<16 x i8> %arg) {44; CHECK-LABEL: fn2_vector_undef:45; CHECK: // %bb.0: // %entry46; CHECK-NEXT: adrp x8, .LCPI3_047; CHECK-NEXT: ldr q1, [x8, :lo12:.LCPI3_0]48; CHECK-NEXT: mul v0.16b, v0.16b, v1.16b49; CHECK-NEXT: ret50entry:51 %mul = mul <16 x i8> %arg, <i8 undef, i8 1, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>52 %shl = shl <16 x i8> %mul, <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>53 ret <16 x i8> %shl54}55 56define i32 @fn1_scalar(i32 %arg) {57; CHECK-LABEL: fn1_scalar:58; CHECK: // %bb.0: // %entry59; CHECK-NEXT: mov w8, #166460; CHECK-NEXT: mul w0, w0, w861; CHECK-NEXT: ret62entry:63 %shl = shl i32 %arg, 764 %mul = mul i32 %shl, 1365 ret i32 %mul66}67 68define i32 @fn2_scalar(i32 %arg) {69; CHECK-LABEL: fn2_scalar:70; CHECK: // %bb.0: // %entry71; CHECK-NEXT: mov w8, #166472; CHECK-NEXT: mul w0, w0, w873; CHECK-NEXT: ret74entry:75 %mul = mul i32 %arg, 1376 %shl = shl i32 %mul, 777 ret i32 %shl78}79 80define i32 @fn1_scalar_undef(i32 %arg) {81; CHECK-LABEL: fn1_scalar_undef:82; CHECK: // %bb.0: // %entry83; CHECK-NEXT: mov w0, wzr84; CHECK-NEXT: ret85entry:86 %shl = shl i32 %arg, 787 %mul = mul i32 %shl, undef88 ret i32 %mul89}90 91define i32 @fn2_scalar_undef(i32 %arg) {92; CHECK-LABEL: fn2_scalar_undef:93; CHECK: // %bb.0: // %entry94; CHECK-NEXT: mov w0, wzr95; CHECK-NEXT: ret96entry:97 %mul = mul i32 %arg, undef98 %shl = shl i32 %mul, 799 ret i32 %shl100}101 102define i32 @fn1_scalar_opaque(i32 %arg) {103; CHECK-LABEL: fn1_scalar_opaque:104; CHECK: // %bb.0: // %entry105; CHECK-NEXT: mov w8, #13106; CHECK-NEXT: mul w8, w0, w8107; CHECK-NEXT: lsl w0, w8, #7108; CHECK-NEXT: ret109entry:110 %bitcast = bitcast i32 13 to i32111 %shl = shl i32 %arg, 7112 %mul = mul i32 %shl, %bitcast113 ret i32 %mul114}115 116define i32 @fn2_scalar_opaque(i32 %arg) {117; CHECK-LABEL: fn2_scalar_opaque:118; CHECK: // %bb.0: // %entry119; CHECK-NEXT: mov w8, #13120; CHECK-NEXT: mul w8, w0, w8121; CHECK-NEXT: lsl w0, w8, #7122; CHECK-NEXT: ret123entry:124 %bitcast = bitcast i32 13 to i32125 %mul = mul i32 %arg, %bitcast126 %shl = shl i32 %mul, 7127 ret i32 %shl128}129