1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s 3 4; The mask is all-ones, potentially shifted. 5 6;------------------------------------------------------------------------------; 7; 128-bit vector; 8-bit elements = 16 elements 8;------------------------------------------------------------------------------; 9 10; lshr 11 12define <16 x i8> @test_128_i8_x_16_7_mask_lshr_1(<16 x i8> %a0) { 13; CHECK-LABEL: test_128_i8_x_16_7_mask_lshr_1: 14; CHECK: // %bb.0: 15; CHECK-NEXT: movi v1.16b, #7 16; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 17; CHECK-NEXT: ushr v0.16b, v0.16b, #1 18; CHECK-NEXT: ret 19 %t0 = and <16 x i8> %a0, <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> 20 %t1 = lshr <16 x i8> %t0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 21 ret <16 x i8> %t1 22} 23 24define <16 x i8> @test_128_i8_x_16_28_mask_lshr_1(<16 x i8> %a0) { 25; CHECK-LABEL: test_128_i8_x_16_28_mask_lshr_1: 26; CHECK: // %bb.0: 27; CHECK-NEXT: movi v1.16b, #28 28; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 29; CHECK-NEXT: ushr v0.16b, v0.16b, #1 30; CHECK-NEXT: ret 31 %t0 = and <16 x i8> %a0, <i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28> 32 %t1 = lshr <16 x i8> %t0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 33 ret <16 x i8> %t1 34} 35define <16 x i8> @test_128_i8_x_16_28_mask_lshr_2(<16 x i8> %a0) { 36; CHECK-LABEL: test_128_i8_x_16_28_mask_lshr_2: 37; CHECK: // %bb.0: 38; CHECK-NEXT: movi v1.16b, #28 39; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 40; CHECK-NEXT: ushr v0.16b, v0.16b, #2 41; CHECK-NEXT: ret 42 %t0 = and <16 x i8> %a0, <i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28> 43 %t1 = lshr <16 x i8> %t0, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2> 44 ret <16 x i8> %t1 45} 46define <16 x i8> @test_128_i8_x_16_28_mask_lshr_3(<16 x i8> %a0) { 47; CHECK-LABEL: test_128_i8_x_16_28_mask_lshr_3: 48; CHECK: // %bb.0: 49; CHECK-NEXT: movi v1.16b, #28 50; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 51; CHECK-NEXT: ushr v0.16b, v0.16b, #3 52; CHECK-NEXT: ret 53 %t0 = and <16 x i8> %a0, <i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28> 54 %t1 = lshr <16 x i8> %t0, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3> 55 ret <16 x i8> %t1 56} 57define <16 x i8> @test_128_i8_x_16_28_mask_lshr_4(<16 x i8> %a0) { 58; CHECK-LABEL: test_128_i8_x_16_28_mask_lshr_4: 59; CHECK: // %bb.0: 60; CHECK-NEXT: movi v1.16b, #28 61; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 62; CHECK-NEXT: ushr v0.16b, v0.16b, #4 63; CHECK-NEXT: ret 64 %t0 = and <16 x i8> %a0, <i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28> 65 %t1 = lshr <16 x i8> %t0, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4> 66 ret <16 x i8> %t1 67} 68 69define <16 x i8> @test_128_i8_x_16_224_mask_lshr_1(<16 x i8> %a0) { 70; CHECK-LABEL: test_128_i8_x_16_224_mask_lshr_1: 71; CHECK: // %bb.0: 72; CHECK-NEXT: movi v1.16b, #224 73; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 74; CHECK-NEXT: ushr v0.16b, v0.16b, #1 75; CHECK-NEXT: ret 76 %t0 = and <16 x i8> %a0, <i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224> 77 %t1 = lshr <16 x i8> %t0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 78 ret <16 x i8> %t1 79} 80define <16 x i8> @test_128_i8_x_16_224_mask_lshr_4(<16 x i8> %a0) { 81; CHECK-LABEL: test_128_i8_x_16_224_mask_lshr_4: 82; CHECK: // %bb.0: 83; CHECK-NEXT: movi v1.16b, #224 84; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 85; CHECK-NEXT: ushr v0.16b, v0.16b, #4 86; CHECK-NEXT: ret 87 %t0 = and <16 x i8> %a0, <i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224> 88 %t1 = lshr <16 x i8> %t0, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4> 89 ret <16 x i8> %t1 90} 91define <16 x i8> @test_128_i8_x_16_224_mask_lshr_5(<16 x i8> %a0) { 92; CHECK-LABEL: test_128_i8_x_16_224_mask_lshr_5: 93; CHECK: // %bb.0: 94; CHECK-NEXT: ushr v0.16b, v0.16b, #5 95; CHECK-NEXT: ret 96 %t0 = and <16 x i8> %a0, <i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224> 97 %t1 = lshr <16 x i8> %t0, <i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5> 98 ret <16 x i8> %t1 99} 100define <16 x i8> @test_128_i8_x_16_224_mask_lshr_6(<16 x i8> %a0) { 101; CHECK-LABEL: test_128_i8_x_16_224_mask_lshr_6: 102; CHECK: // %bb.0: 103; CHECK-NEXT: ushr v0.16b, v0.16b, #6 104; CHECK-NEXT: ret 105 %t0 = and <16 x i8> %a0, <i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224> 106 %t1 = lshr <16 x i8> %t0, <i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6> 107 ret <16 x i8> %t1 108} 109 110; ashr 111 112define <16 x i8> @test_128_i8_x_16_7_mask_ashr_1(<16 x i8> %a0) { 113; CHECK-LABEL: test_128_i8_x_16_7_mask_ashr_1: 114; CHECK: // %bb.0: 115; CHECK-NEXT: movi v1.16b, #7 116; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 117; CHECK-NEXT: ushr v0.16b, v0.16b, #1 118; CHECK-NEXT: ret 119 %t0 = and <16 x i8> %a0, <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> 120 %t1 = ashr <16 x i8> %t0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 121 ret <16 x i8> %t1 122} 123 124define <16 x i8> @test_128_i8_x_16_28_mask_ashr_1(<16 x i8> %a0) { 125; CHECK-LABEL: test_128_i8_x_16_28_mask_ashr_1: 126; CHECK: // %bb.0: 127; CHECK-NEXT: movi v1.16b, #28 128; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 129; CHECK-NEXT: ushr v0.16b, v0.16b, #1 130; CHECK-NEXT: ret 131 %t0 = and <16 x i8> %a0, <i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28> 132 %t1 = ashr <16 x i8> %t0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 133 ret <16 x i8> %t1 134} 135define <16 x i8> @test_128_i8_x_16_28_mask_ashr_2(<16 x i8> %a0) { 136; CHECK-LABEL: test_128_i8_x_16_28_mask_ashr_2: 137; CHECK: // %bb.0: 138; CHECK-NEXT: movi v1.16b, #28 139; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 140; CHECK-NEXT: ushr v0.16b, v0.16b, #2 141; CHECK-NEXT: ret 142 %t0 = and <16 x i8> %a0, <i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28> 143 %t1 = ashr <16 x i8> %t0, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2> 144 ret <16 x i8> %t1 145} 146define <16 x i8> @test_128_i8_x_16_28_mask_ashr_3(<16 x i8> %a0) { 147; CHECK-LABEL: test_128_i8_x_16_28_mask_ashr_3: 148; CHECK: // %bb.0: 149; CHECK-NEXT: movi v1.16b, #28 150; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 151; CHECK-NEXT: ushr v0.16b, v0.16b, #3 152; CHECK-NEXT: ret 153 %t0 = and <16 x i8> %a0, <i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28> 154 %t1 = ashr <16 x i8> %t0, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3> 155 ret <16 x i8> %t1 156} 157define <16 x i8> @test_128_i8_x_16_28_mask_ashr_4(<16 x i8> %a0) { 158; CHECK-LABEL: test_128_i8_x_16_28_mask_ashr_4: 159; CHECK: // %bb.0: 160; CHECK-NEXT: movi v1.16b, #28 161; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 162; CHECK-NEXT: ushr v0.16b, v0.16b, #4 163; CHECK-NEXT: ret 164 %t0 = and <16 x i8> %a0, <i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28> 165 %t1 = ashr <16 x i8> %t0, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4> 166 ret <16 x i8> %t1 167} 168 169define <16 x i8> @test_128_i8_x_16_224_mask_ashr_1(<16 x i8> %a0) { 170; CHECK-LABEL: test_128_i8_x_16_224_mask_ashr_1: 171; CHECK: // %bb.0: 172; CHECK-NEXT: movi v1.16b, #224 173; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 174; CHECK-NEXT: sshr v0.16b, v0.16b, #1 175; CHECK-NEXT: ret 176 %t0 = and <16 x i8> %a0, <i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224> 177 %t1 = ashr <16 x i8> %t0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 178 ret <16 x i8> %t1 179} 180define <16 x i8> @test_128_i8_x_16_224_mask_ashr_4(<16 x i8> %a0) { 181; CHECK-LABEL: test_128_i8_x_16_224_mask_ashr_4: 182; CHECK: // %bb.0: 183; CHECK-NEXT: movi v1.16b, #224 184; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 185; CHECK-NEXT: sshr v0.16b, v0.16b, #4 186; CHECK-NEXT: ret 187 %t0 = and <16 x i8> %a0, <i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224> 188 %t1 = ashr <16 x i8> %t0, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4> 189 ret <16 x i8> %t1 190} 191define <16 x i8> @test_128_i8_x_16_224_mask_ashr_5(<16 x i8> %a0) { 192; CHECK-LABEL: test_128_i8_x_16_224_mask_ashr_5: 193; CHECK: // %bb.0: 194; CHECK-NEXT: sshr v0.16b, v0.16b, #5 195; CHECK-NEXT: ret 196 %t0 = and <16 x i8> %a0, <i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224> 197 %t1 = ashr <16 x i8> %t0, <i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5> 198 ret <16 x i8> %t1 199} 200define <16 x i8> @test_128_i8_x_16_224_mask_ashr_6(<16 x i8> %a0) { 201; CHECK-LABEL: test_128_i8_x_16_224_mask_ashr_6: 202; CHECK: // %bb.0: 203; CHECK-NEXT: sshr v0.16b, v0.16b, #6 204; CHECK-NEXT: ret 205 %t0 = and <16 x i8> %a0, <i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224> 206 %t1 = ashr <16 x i8> %t0, <i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6> 207 ret <16 x i8> %t1 208} 209 210; shl 211 212define <16 x i8> @test_128_i8_x_16_7_mask_shl_1(<16 x i8> %a0) { 213; CHECK-LABEL: test_128_i8_x_16_7_mask_shl_1: 214; CHECK: // %bb.0: 215; CHECK-NEXT: movi v1.16b, #7 216; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 217; CHECK-NEXT: add v0.16b, v0.16b, v0.16b 218; CHECK-NEXT: ret 219 %t0 = and <16 x i8> %a0, <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> 220 %t1 = shl <16 x i8> %t0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 221 ret <16 x i8> %t1 222} 223define <16 x i8> @test_128_i8_x_16_7_mask_shl_4(<16 x i8> %a0) { 224; CHECK-LABEL: test_128_i8_x_16_7_mask_shl_4: 225; CHECK: // %bb.0: 226; CHECK-NEXT: movi v1.16b, #7 227; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 228; CHECK-NEXT: shl v0.16b, v0.16b, #4 229; CHECK-NEXT: ret 230 %t0 = and <16 x i8> %a0, <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> 231 %t1 = shl <16 x i8> %t0, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4> 232 ret <16 x i8> %t1 233} 234define <16 x i8> @test_128_i8_x_16_7_mask_shl_5(<16 x i8> %a0) { 235; CHECK-LABEL: test_128_i8_x_16_7_mask_shl_5: 236; CHECK: // %bb.0: 237; CHECK-NEXT: shl v0.16b, v0.16b, #5 238; CHECK-NEXT: ret 239 %t0 = and <16 x i8> %a0, <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> 240 %t1 = shl <16 x i8> %t0, <i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5> 241 ret <16 x i8> %t1 242} 243define <16 x i8> @test_128_i8_x_16_7_mask_shl_6(<16 x i8> %a0) { 244; CHECK-LABEL: test_128_i8_x_16_7_mask_shl_6: 245; CHECK: // %bb.0: 246; CHECK-NEXT: shl v0.16b, v0.16b, #6 247; CHECK-NEXT: ret 248 %t0 = and <16 x i8> %a0, <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> 249 %t1 = shl <16 x i8> %t0, <i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6> 250 ret <16 x i8> %t1 251} 252 253define <16 x i8> @test_128_i8_x_16_28_mask_shl_1(<16 x i8> %a0) { 254; CHECK-LABEL: test_128_i8_x_16_28_mask_shl_1: 255; CHECK: // %bb.0: 256; CHECK-NEXT: movi v1.16b, #28 257; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 258; CHECK-NEXT: add v0.16b, v0.16b, v0.16b 259; CHECK-NEXT: ret 260 %t0 = and <16 x i8> %a0, <i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28> 261 %t1 = shl <16 x i8> %t0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 262 ret <16 x i8> %t1 263} 264define <16 x i8> @test_128_i8_x_16_28_mask_shl_2(<16 x i8> %a0) { 265; CHECK-LABEL: test_128_i8_x_16_28_mask_shl_2: 266; CHECK: // %bb.0: 267; CHECK-NEXT: movi v1.16b, #28 268; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 269; CHECK-NEXT: shl v0.16b, v0.16b, #2 270; CHECK-NEXT: ret 271 %t0 = and <16 x i8> %a0, <i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28> 272 %t1 = shl <16 x i8> %t0, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2> 273 ret <16 x i8> %t1 274} 275define <16 x i8> @test_128_i8_x_16_28_mask_shl_3(<16 x i8> %a0) { 276; CHECK-LABEL: test_128_i8_x_16_28_mask_shl_3: 277; CHECK: // %bb.0: 278; CHECK-NEXT: movi v1.16b, #28 279; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 280; CHECK-NEXT: shl v0.16b, v0.16b, #3 281; CHECK-NEXT: ret 282 %t0 = and <16 x i8> %a0, <i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28> 283 %t1 = shl <16 x i8> %t0, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3> 284 ret <16 x i8> %t1 285} 286define <16 x i8> @test_128_i8_x_16_28_mask_shl_4(<16 x i8> %a0) { 287; CHECK-LABEL: test_128_i8_x_16_28_mask_shl_4: 288; CHECK: // %bb.0: 289; CHECK-NEXT: movi v1.16b, #28 290; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 291; CHECK-NEXT: shl v0.16b, v0.16b, #4 292; CHECK-NEXT: ret 293 %t0 = and <16 x i8> %a0, <i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28, i8 28> 294 %t1 = shl <16 x i8> %t0, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4> 295 ret <16 x i8> %t1 296} 297 298define <16 x i8> @test_128_i8_x_16_224_mask_shl_1(<16 x i8> %a0) { 299; CHECK-LABEL: test_128_i8_x_16_224_mask_shl_1: 300; CHECK: // %bb.0: 301; CHECK-NEXT: movi v1.16b, #224 302; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 303; CHECK-NEXT: add v0.16b, v0.16b, v0.16b 304; CHECK-NEXT: ret 305 %t0 = and <16 x i8> %a0, <i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224, i8 224> 306 %t1 = shl <16 x i8> %t0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 307 ret <16 x i8> %t1 308} 309 310;------------------------------------------------------------------------------; 311; 128-bit vector; 16-bit elements = 8 elements 312;------------------------------------------------------------------------------; 313 314; lshr 315 316define <8 x i16> @test_128_i16_x_8_127_mask_lshr_1(<8 x i16> %a0) { 317; CHECK-LABEL: test_128_i16_x_8_127_mask_lshr_1: 318; CHECK: // %bb.0: 319; CHECK-NEXT: movi v1.8h, #127 320; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 321; CHECK-NEXT: ushr v0.8h, v0.8h, #1 322; CHECK-NEXT: ret 323 %t0 = and <8 x i16> %a0, <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127> 324 %t1 = lshr <8 x i16> %t0, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 325 ret <8 x i16> %t1 326} 327 328define <8 x i16> @test_128_i16_x_8_2032_mask_lshr_3(<8 x i16> %a0) { 329; CHECK-LABEL: test_128_i16_x_8_2032_mask_lshr_3: 330; CHECK: // %bb.0: 331; CHECK-NEXT: mov w8, #2032 332; CHECK-NEXT: dup v1.8h, w8 333; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 334; CHECK-NEXT: ushr v0.8h, v0.8h, #3 335; CHECK-NEXT: ret 336 %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032> 337 %t1 = lshr <8 x i16> %t0, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3> 338 ret <8 x i16> %t1 339} 340define <8 x i16> @test_128_i16_x_8_2032_mask_lshr_4(<8 x i16> %a0) { 341; CHECK-LABEL: test_128_i16_x_8_2032_mask_lshr_4: 342; CHECK: // %bb.0: 343; CHECK-NEXT: mov w8, #2032 344; CHECK-NEXT: dup v1.8h, w8 345; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 346; CHECK-NEXT: ushr v0.8h, v0.8h, #4 347; CHECK-NEXT: ret 348 %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032> 349 %t1 = lshr <8 x i16> %t0, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4> 350 ret <8 x i16> %t1 351} 352define <8 x i16> @test_128_i16_x_8_2032_mask_lshr_5(<8 x i16> %a0) { 353; CHECK-LABEL: test_128_i16_x_8_2032_mask_lshr_5: 354; CHECK: // %bb.0: 355; CHECK-NEXT: mov w8, #2032 356; CHECK-NEXT: dup v1.8h, w8 357; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 358; CHECK-NEXT: ushr v0.8h, v0.8h, #5 359; CHECK-NEXT: ret 360 %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032> 361 %t1 = lshr <8 x i16> %t0, <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5> 362 ret <8 x i16> %t1 363} 364define <8 x i16> @test_128_i16_x_8_2032_mask_lshr_6(<8 x i16> %a0) { 365; CHECK-LABEL: test_128_i16_x_8_2032_mask_lshr_6: 366; CHECK: // %bb.0: 367; CHECK-NEXT: mov w8, #2032 368; CHECK-NEXT: dup v1.8h, w8 369; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 370; CHECK-NEXT: ushr v0.8h, v0.8h, #6 371; CHECK-NEXT: ret 372 %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032> 373 %t1 = lshr <8 x i16> %t0, <i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6> 374 ret <8 x i16> %t1 375} 376 377define <8 x i16> @test_128_i16_x_8_65024_mask_lshr_1(<8 x i16> %a0) { 378; CHECK-LABEL: test_128_i16_x_8_65024_mask_lshr_1: 379; CHECK: // %bb.0: 380; CHECK-NEXT: movi v1.8h, #254, lsl #8 381; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 382; CHECK-NEXT: ushr v0.8h, v0.8h, #1 383; CHECK-NEXT: ret 384 %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024> 385 %t1 = lshr <8 x i16> %t0, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 386 ret <8 x i16> %t1 387} 388define <8 x i16> @test_128_i16_x_8_65024_mask_lshr_8(<8 x i16> %a0) { 389; CHECK-LABEL: test_128_i16_x_8_65024_mask_lshr_8: 390; CHECK: // %bb.0: 391; CHECK-NEXT: movi v1.8h, #254, lsl #8 392; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 393; CHECK-NEXT: ushr v0.8h, v0.8h, #8 394; CHECK-NEXT: ret 395 %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024> 396 %t1 = lshr <8 x i16> %t0, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8> 397 ret <8 x i16> %t1 398} 399define <8 x i16> @test_128_i16_x_8_65024_mask_lshr_9(<8 x i16> %a0) { 400; CHECK-LABEL: test_128_i16_x_8_65024_mask_lshr_9: 401; CHECK: // %bb.0: 402; CHECK-NEXT: ushr v0.8h, v0.8h, #9 403; CHECK-NEXT: ret 404 %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024> 405 %t1 = lshr <8 x i16> %t0, <i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9> 406 ret <8 x i16> %t1 407} 408define <8 x i16> @test_128_i16_x_8_65024_mask_lshr_10(<8 x i16> %a0) { 409; CHECK-LABEL: test_128_i16_x_8_65024_mask_lshr_10: 410; CHECK: // %bb.0: 411; CHECK-NEXT: ushr v0.8h, v0.8h, #10 412; CHECK-NEXT: ret 413 %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024> 414 %t1 = lshr <8 x i16> %t0, <i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10> 415 ret <8 x i16> %t1 416} 417 418; ashr 419 420define <8 x i16> @test_128_i16_x_8_127_mask_ashr_1(<8 x i16> %a0) { 421; CHECK-LABEL: test_128_i16_x_8_127_mask_ashr_1: 422; CHECK: // %bb.0: 423; CHECK-NEXT: movi v1.8h, #127 424; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 425; CHECK-NEXT: ushr v0.8h, v0.8h, #1 426; CHECK-NEXT: ret 427 %t0 = and <8 x i16> %a0, <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127> 428 %t1 = ashr <8 x i16> %t0, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 429 ret <8 x i16> %t1 430} 431 432define <8 x i16> @test_128_i16_x_8_2032_mask_ashr_3(<8 x i16> %a0) { 433; CHECK-LABEL: test_128_i16_x_8_2032_mask_ashr_3: 434; CHECK: // %bb.0: 435; CHECK-NEXT: mov w8, #2032 436; CHECK-NEXT: dup v1.8h, w8 437; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 438; CHECK-NEXT: ushr v0.8h, v0.8h, #3 439; CHECK-NEXT: ret 440 %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032> 441 %t1 = ashr <8 x i16> %t0, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3> 442 ret <8 x i16> %t1 443} 444define <8 x i16> @test_128_i16_x_8_2032_mask_ashr_4(<8 x i16> %a0) { 445; CHECK-LABEL: test_128_i16_x_8_2032_mask_ashr_4: 446; CHECK: // %bb.0: 447; CHECK-NEXT: mov w8, #2032 448; CHECK-NEXT: dup v1.8h, w8 449; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 450; CHECK-NEXT: ushr v0.8h, v0.8h, #4 451; CHECK-NEXT: ret 452 %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032> 453 %t1 = ashr <8 x i16> %t0, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4> 454 ret <8 x i16> %t1 455} 456define <8 x i16> @test_128_i16_x_8_2032_mask_ashr_5(<8 x i16> %a0) { 457; CHECK-LABEL: test_128_i16_x_8_2032_mask_ashr_5: 458; CHECK: // %bb.0: 459; CHECK-NEXT: mov w8, #2032 460; CHECK-NEXT: dup v1.8h, w8 461; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 462; CHECK-NEXT: ushr v0.8h, v0.8h, #5 463; CHECK-NEXT: ret 464 %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032> 465 %t1 = ashr <8 x i16> %t0, <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5> 466 ret <8 x i16> %t1 467} 468define <8 x i16> @test_128_i16_x_8_2032_mask_ashr_6(<8 x i16> %a0) { 469; CHECK-LABEL: test_128_i16_x_8_2032_mask_ashr_6: 470; CHECK: // %bb.0: 471; CHECK-NEXT: mov w8, #2032 472; CHECK-NEXT: dup v1.8h, w8 473; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 474; CHECK-NEXT: ushr v0.8h, v0.8h, #6 475; CHECK-NEXT: ret 476 %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032> 477 %t1 = ashr <8 x i16> %t0, <i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6> 478 ret <8 x i16> %t1 479} 480 481define <8 x i16> @test_128_i16_x_8_65024_mask_ashr_1(<8 x i16> %a0) { 482; CHECK-LABEL: test_128_i16_x_8_65024_mask_ashr_1: 483; CHECK: // %bb.0: 484; CHECK-NEXT: movi v1.8h, #254, lsl #8 485; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 486; CHECK-NEXT: sshr v0.8h, v0.8h, #1 487; CHECK-NEXT: ret 488 %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024> 489 %t1 = ashr <8 x i16> %t0, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 490 ret <8 x i16> %t1 491} 492define <8 x i16> @test_128_i16_x_8_65024_mask_ashr_8(<8 x i16> %a0) { 493; CHECK-LABEL: test_128_i16_x_8_65024_mask_ashr_8: 494; CHECK: // %bb.0: 495; CHECK-NEXT: movi v1.8h, #254, lsl #8 496; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 497; CHECK-NEXT: sshr v0.8h, v0.8h, #8 498; CHECK-NEXT: ret 499 %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024> 500 %t1 = ashr <8 x i16> %t0, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8> 501 ret <8 x i16> %t1 502} 503define <8 x i16> @test_128_i16_x_8_65024_mask_ashr_9(<8 x i16> %a0) { 504; CHECK-LABEL: test_128_i16_x_8_65024_mask_ashr_9: 505; CHECK: // %bb.0: 506; CHECK-NEXT: sshr v0.8h, v0.8h, #9 507; CHECK-NEXT: ret 508 %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024> 509 %t1 = ashr <8 x i16> %t0, <i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9> 510 ret <8 x i16> %t1 511} 512define <8 x i16> @test_128_i16_x_8_65024_mask_ashr_10(<8 x i16> %a0) { 513; CHECK-LABEL: test_128_i16_x_8_65024_mask_ashr_10: 514; CHECK: // %bb.0: 515; CHECK-NEXT: sshr v0.8h, v0.8h, #10 516; CHECK-NEXT: ret 517 %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024> 518 %t1 = ashr <8 x i16> %t0, <i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10> 519 ret <8 x i16> %t1 520} 521 522; shl 523 524define <8 x i16> @test_128_i16_x_8_127_mask_shl_1(<8 x i16> %a0) { 525; CHECK-LABEL: test_128_i16_x_8_127_mask_shl_1: 526; CHECK: // %bb.0: 527; CHECK-NEXT: movi v1.8h, #127 528; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 529; CHECK-NEXT: add v0.8h, v0.8h, v0.8h 530; CHECK-NEXT: ret 531 %t0 = and <8 x i16> %a0, <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127> 532 %t1 = shl <8 x i16> %t0, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 533 ret <8 x i16> %t1 534} 535define <8 x i16> @test_128_i16_x_8_127_mask_shl_8(<8 x i16> %a0) { 536; CHECK-LABEL: test_128_i16_x_8_127_mask_shl_8: 537; CHECK: // %bb.0: 538; CHECK-NEXT: movi v1.8h, #127 539; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 540; CHECK-NEXT: shl v0.8h, v0.8h, #8 541; CHECK-NEXT: ret 542 %t0 = and <8 x i16> %a0, <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127> 543 %t1 = shl <8 x i16> %t0, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8> 544 ret <8 x i16> %t1 545} 546define <8 x i16> @test_128_i16_x_8_127_mask_shl_9(<8 x i16> %a0) { 547; CHECK-LABEL: test_128_i16_x_8_127_mask_shl_9: 548; CHECK: // %bb.0: 549; CHECK-NEXT: shl v0.8h, v0.8h, #9 550; CHECK-NEXT: ret 551 %t0 = and <8 x i16> %a0, <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127> 552 %t1 = shl <8 x i16> %t0, <i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9> 553 ret <8 x i16> %t1 554} 555define <8 x i16> @test_128_i16_x_8_127_mask_shl_10(<8 x i16> %a0) { 556; CHECK-LABEL: test_128_i16_x_8_127_mask_shl_10: 557; CHECK: // %bb.0: 558; CHECK-NEXT: shl v0.8h, v0.8h, #10 559; CHECK-NEXT: ret 560 %t0 = and <8 x i16> %a0, <i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127, i16 127> 561 %t1 = shl <8 x i16> %t0, <i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10> 562 ret <8 x i16> %t1 563} 564 565define <8 x i16> @test_128_i16_x_8_2032_mask_shl_3(<8 x i16> %a0) { 566; CHECK-LABEL: test_128_i16_x_8_2032_mask_shl_3: 567; CHECK: // %bb.0: 568; CHECK-NEXT: mov w8, #2032 569; CHECK-NEXT: dup v1.8h, w8 570; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 571; CHECK-NEXT: shl v0.8h, v0.8h, #3 572; CHECK-NEXT: ret 573 %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032> 574 %t1 = shl <8 x i16> %t0, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3> 575 ret <8 x i16> %t1 576} 577define <8 x i16> @test_128_i16_x_8_2032_mask_shl_4(<8 x i16> %a0) { 578; CHECK-LABEL: test_128_i16_x_8_2032_mask_shl_4: 579; CHECK: // %bb.0: 580; CHECK-NEXT: mov w8, #2032 581; CHECK-NEXT: dup v1.8h, w8 582; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 583; CHECK-NEXT: shl v0.8h, v0.8h, #4 584; CHECK-NEXT: ret 585 %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032> 586 %t1 = shl <8 x i16> %t0, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4> 587 ret <8 x i16> %t1 588} 589define <8 x i16> @test_128_i16_x_8_2032_mask_shl_5(<8 x i16> %a0) { 590; CHECK-LABEL: test_128_i16_x_8_2032_mask_shl_5: 591; CHECK: // %bb.0: 592; CHECK-NEXT: mov w8, #2032 593; CHECK-NEXT: dup v1.8h, w8 594; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 595; CHECK-NEXT: shl v0.8h, v0.8h, #5 596; CHECK-NEXT: ret 597 %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032> 598 %t1 = shl <8 x i16> %t0, <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5> 599 ret <8 x i16> %t1 600} 601define <8 x i16> @test_128_i16_x_8_2032_mask_shl_6(<8 x i16> %a0) { 602; CHECK-LABEL: test_128_i16_x_8_2032_mask_shl_6: 603; CHECK: // %bb.0: 604; CHECK-NEXT: mov w8, #2032 605; CHECK-NEXT: dup v1.8h, w8 606; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 607; CHECK-NEXT: shl v0.8h, v0.8h, #6 608; CHECK-NEXT: ret 609 %t0 = and <8 x i16> %a0, <i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032, i16 2032> 610 %t1 = shl <8 x i16> %t0, <i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6> 611 ret <8 x i16> %t1 612} 613 614define <8 x i16> @test_128_i16_x_8_65024_mask_shl_1(<8 x i16> %a0) { 615; CHECK-LABEL: test_128_i16_x_8_65024_mask_shl_1: 616; CHECK: // %bb.0: 617; CHECK-NEXT: movi v1.8h, #254, lsl #8 618; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 619; CHECK-NEXT: add v0.8h, v0.8h, v0.8h 620; CHECK-NEXT: ret 621 %t0 = and <8 x i16> %a0, <i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024, i16 65024> 622 %t1 = shl <8 x i16> %t0, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 623 ret <8 x i16> %t1 624} 625 626;------------------------------------------------------------------------------; 627; 128-bit vector; 32-bit elements = 4 elements 628;------------------------------------------------------------------------------; 629 630; lshr 631 632define <4 x i32> @test_128_i32_x_4_32767_mask_lshr_1(<4 x i32> %a0) { 633; CHECK-LABEL: test_128_i32_x_4_32767_mask_lshr_1: 634; CHECK: // %bb.0: 635; CHECK-NEXT: movi v1.4s, #127, msl #8 636; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 637; CHECK-NEXT: ushr v0.4s, v0.4s, #1 638; CHECK-NEXT: ret 639 %t0 = and <4 x i32> %a0, <i32 32767, i32 32767, i32 32767, i32 32767> 640 %t1 = lshr <4 x i32> %t0, <i32 1, i32 1, i32 1, i32 1> 641 ret <4 x i32> %t1 642} 643 644define <4 x i32> @test_128_i32_x_4_8388352_mask_lshr_7(<4 x i32> %a0) { 645; CHECK-LABEL: test_128_i32_x_4_8388352_mask_lshr_7: 646; CHECK: // %bb.0: 647; CHECK-NEXT: mov w8, #8388352 648; CHECK-NEXT: dup v1.4s, w8 649; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 650; CHECK-NEXT: ushr v0.4s, v0.4s, #7 651; CHECK-NEXT: ret 652 %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352> 653 %t1 = lshr <4 x i32> %t0, <i32 7, i32 7, i32 7, i32 7> 654 ret <4 x i32> %t1 655} 656define <4 x i32> @test_128_i32_x_4_8388352_mask_lshr_8(<4 x i32> %a0) { 657; CHECK-LABEL: test_128_i32_x_4_8388352_mask_lshr_8: 658; CHECK: // %bb.0: 659; CHECK-NEXT: mov w8, #8388352 660; CHECK-NEXT: dup v1.4s, w8 661; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 662; CHECK-NEXT: ushr v0.4s, v0.4s, #8 663; CHECK-NEXT: ret 664 %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352> 665 %t1 = lshr <4 x i32> %t0, <i32 8, i32 8, i32 8, i32 8> 666 ret <4 x i32> %t1 667} 668define <4 x i32> @test_128_i32_x_4_8388352_mask_lshr_9(<4 x i32> %a0) { 669; CHECK-LABEL: test_128_i32_x_4_8388352_mask_lshr_9: 670; CHECK: // %bb.0: 671; CHECK-NEXT: mov w8, #8388352 672; CHECK-NEXT: dup v1.4s, w8 673; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 674; CHECK-NEXT: ushr v0.4s, v0.4s, #9 675; CHECK-NEXT: ret 676 %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352> 677 %t1 = lshr <4 x i32> %t0, <i32 9, i32 9, i32 9, i32 9> 678 ret <4 x i32> %t1 679} 680define <4 x i32> @test_128_i32_x_4_8388352_mask_lshr_10(<4 x i32> %a0) { 681; CHECK-LABEL: test_128_i32_x_4_8388352_mask_lshr_10: 682; CHECK: // %bb.0: 683; CHECK-NEXT: mov w8, #8388352 684; CHECK-NEXT: dup v1.4s, w8 685; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 686; CHECK-NEXT: ushr v0.4s, v0.4s, #10 687; CHECK-NEXT: ret 688 %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352> 689 %t1 = lshr <4 x i32> %t0, <i32 10, i32 10, i32 10, i32 10> 690 ret <4 x i32> %t1 691} 692 693define <4 x i32> @test_128_i32_x_4_4294836224_mask_lshr_1(<4 x i32> %a0) { 694; CHECK-LABEL: test_128_i32_x_4_4294836224_mask_lshr_1: 695; CHECK: // %bb.0: 696; CHECK-NEXT: mvni v1.4s, #1, msl #16 697; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 698; CHECK-NEXT: ushr v0.4s, v0.4s, #1 699; CHECK-NEXT: ret 700 %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224> 701 %t1 = lshr <4 x i32> %t0, <i32 1, i32 1, i32 1, i32 1> 702 ret <4 x i32> %t1 703} 704define <4 x i32> @test_128_i32_x_4_4294836224_mask_lshr_16(<4 x i32> %a0) { 705; CHECK-LABEL: test_128_i32_x_4_4294836224_mask_lshr_16: 706; CHECK: // %bb.0: 707; CHECK-NEXT: mvni v1.4s, #1, msl #16 708; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 709; CHECK-NEXT: ushr v0.4s, v0.4s, #16 710; CHECK-NEXT: ret 711 %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224> 712 %t1 = lshr <4 x i32> %t0, <i32 16, i32 16, i32 16, i32 16> 713 ret <4 x i32> %t1 714} 715define <4 x i32> @test_128_i32_x_4_4294836224_mask_lshr_17(<4 x i32> %a0) { 716; CHECK-LABEL: test_128_i32_x_4_4294836224_mask_lshr_17: 717; CHECK: // %bb.0: 718; CHECK-NEXT: ushr v0.4s, v0.4s, #17 719; CHECK-NEXT: ret 720 %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224> 721 %t1 = lshr <4 x i32> %t0, <i32 17, i32 17, i32 17, i32 17> 722 ret <4 x i32> %t1 723} 724define <4 x i32> @test_128_i32_x_4_4294836224_mask_lshr_18(<4 x i32> %a0) { 725; CHECK-LABEL: test_128_i32_x_4_4294836224_mask_lshr_18: 726; CHECK: // %bb.0: 727; CHECK-NEXT: ushr v0.4s, v0.4s, #18 728; CHECK-NEXT: ret 729 %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224> 730 %t1 = lshr <4 x i32> %t0, <i32 18, i32 18, i32 18, i32 18> 731 ret <4 x i32> %t1 732} 733 734; ashr 735 736define <4 x i32> @test_128_i32_x_4_32767_mask_ashr_1(<4 x i32> %a0) { 737; CHECK-LABEL: test_128_i32_x_4_32767_mask_ashr_1: 738; CHECK: // %bb.0: 739; CHECK-NEXT: movi v1.4s, #127, msl #8 740; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 741; CHECK-NEXT: ushr v0.4s, v0.4s, #1 742; CHECK-NEXT: ret 743 %t0 = and <4 x i32> %a0, <i32 32767, i32 32767, i32 32767, i32 32767> 744 %t1 = ashr <4 x i32> %t0, <i32 1, i32 1, i32 1, i32 1> 745 ret <4 x i32> %t1 746} 747 748define <4 x i32> @test_128_i32_x_4_8388352_mask_ashr_7(<4 x i32> %a0) { 749; CHECK-LABEL: test_128_i32_x_4_8388352_mask_ashr_7: 750; CHECK: // %bb.0: 751; CHECK-NEXT: mov w8, #8388352 752; CHECK-NEXT: dup v1.4s, w8 753; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 754; CHECK-NEXT: ushr v0.4s, v0.4s, #7 755; CHECK-NEXT: ret 756 %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352> 757 %t1 = ashr <4 x i32> %t0, <i32 7, i32 7, i32 7, i32 7> 758 ret <4 x i32> %t1 759} 760define <4 x i32> @test_128_i32_x_4_8388352_mask_ashr_8(<4 x i32> %a0) { 761; CHECK-LABEL: test_128_i32_x_4_8388352_mask_ashr_8: 762; CHECK: // %bb.0: 763; CHECK-NEXT: mov w8, #8388352 764; CHECK-NEXT: dup v1.4s, w8 765; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 766; CHECK-NEXT: ushr v0.4s, v0.4s, #8 767; CHECK-NEXT: ret 768 %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352> 769 %t1 = ashr <4 x i32> %t0, <i32 8, i32 8, i32 8, i32 8> 770 ret <4 x i32> %t1 771} 772define <4 x i32> @test_128_i32_x_4_8388352_mask_ashr_9(<4 x i32> %a0) { 773; CHECK-LABEL: test_128_i32_x_4_8388352_mask_ashr_9: 774; CHECK: // %bb.0: 775; CHECK-NEXT: mov w8, #8388352 776; CHECK-NEXT: dup v1.4s, w8 777; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 778; CHECK-NEXT: ushr v0.4s, v0.4s, #9 779; CHECK-NEXT: ret 780 %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352> 781 %t1 = ashr <4 x i32> %t0, <i32 9, i32 9, i32 9, i32 9> 782 ret <4 x i32> %t1 783} 784define <4 x i32> @test_128_i32_x_4_8388352_mask_ashr_10(<4 x i32> %a0) { 785; CHECK-LABEL: test_128_i32_x_4_8388352_mask_ashr_10: 786; CHECK: // %bb.0: 787; CHECK-NEXT: mov w8, #8388352 788; CHECK-NEXT: dup v1.4s, w8 789; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 790; CHECK-NEXT: ushr v0.4s, v0.4s, #10 791; CHECK-NEXT: ret 792 %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352> 793 %t1 = ashr <4 x i32> %t0, <i32 10, i32 10, i32 10, i32 10> 794 ret <4 x i32> %t1 795} 796 797define <4 x i32> @test_128_i32_x_4_4294836224_mask_ashr_1(<4 x i32> %a0) { 798; CHECK-LABEL: test_128_i32_x_4_4294836224_mask_ashr_1: 799; CHECK: // %bb.0: 800; CHECK-NEXT: mvni v1.4s, #1, msl #16 801; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 802; CHECK-NEXT: sshr v0.4s, v0.4s, #1 803; CHECK-NEXT: ret 804 %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224> 805 %t1 = ashr <4 x i32> %t0, <i32 1, i32 1, i32 1, i32 1> 806 ret <4 x i32> %t1 807} 808define <4 x i32> @test_128_i32_x_4_4294836224_mask_ashr_16(<4 x i32> %a0) { 809; CHECK-LABEL: test_128_i32_x_4_4294836224_mask_ashr_16: 810; CHECK: // %bb.0: 811; CHECK-NEXT: mvni v1.4s, #1, msl #16 812; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 813; CHECK-NEXT: sshr v0.4s, v0.4s, #16 814; CHECK-NEXT: ret 815 %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224> 816 %t1 = ashr <4 x i32> %t0, <i32 16, i32 16, i32 16, i32 16> 817 ret <4 x i32> %t1 818} 819define <4 x i32> @test_128_i32_x_4_4294836224_mask_ashr_17(<4 x i32> %a0) { 820; CHECK-LABEL: test_128_i32_x_4_4294836224_mask_ashr_17: 821; CHECK: // %bb.0: 822; CHECK-NEXT: sshr v0.4s, v0.4s, #17 823; CHECK-NEXT: ret 824 %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224> 825 %t1 = ashr <4 x i32> %t0, <i32 17, i32 17, i32 17, i32 17> 826 ret <4 x i32> %t1 827} 828define <4 x i32> @test_128_i32_x_4_4294836224_mask_ashr_18(<4 x i32> %a0) { 829; CHECK-LABEL: test_128_i32_x_4_4294836224_mask_ashr_18: 830; CHECK: // %bb.0: 831; CHECK-NEXT: sshr v0.4s, v0.4s, #18 832; CHECK-NEXT: ret 833 %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224> 834 %t1 = ashr <4 x i32> %t0, <i32 18, i32 18, i32 18, i32 18> 835 ret <4 x i32> %t1 836} 837 838; shl 839 840define <4 x i32> @test_128_i32_x_4_32767_mask_shl_1(<4 x i32> %a0) { 841; CHECK-LABEL: test_128_i32_x_4_32767_mask_shl_1: 842; CHECK: // %bb.0: 843; CHECK-NEXT: movi v1.4s, #127, msl #8 844; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 845; CHECK-NEXT: add v0.4s, v0.4s, v0.4s 846; CHECK-NEXT: ret 847 %t0 = and <4 x i32> %a0, <i32 32767, i32 32767, i32 32767, i32 32767> 848 %t1 = shl <4 x i32> %t0, <i32 1, i32 1, i32 1, i32 1> 849 ret <4 x i32> %t1 850} 851define <4 x i32> @test_128_i32_x_4_32767_mask_shl_16(<4 x i32> %a0) { 852; CHECK-LABEL: test_128_i32_x_4_32767_mask_shl_16: 853; CHECK: // %bb.0: 854; CHECK-NEXT: movi v1.4s, #127, msl #8 855; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 856; CHECK-NEXT: shl v0.4s, v0.4s, #16 857; CHECK-NEXT: ret 858 %t0 = and <4 x i32> %a0, <i32 32767, i32 32767, i32 32767, i32 32767> 859 %t1 = shl <4 x i32> %t0, <i32 16, i32 16, i32 16, i32 16> 860 ret <4 x i32> %t1 861} 862define <4 x i32> @test_128_i32_x_4_32767_mask_shl_17(<4 x i32> %a0) { 863; CHECK-LABEL: test_128_i32_x_4_32767_mask_shl_17: 864; CHECK: // %bb.0: 865; CHECK-NEXT: shl v0.4s, v0.4s, #17 866; CHECK-NEXT: ret 867 %t0 = and <4 x i32> %a0, <i32 32767, i32 32767, i32 32767, i32 32767> 868 %t1 = shl <4 x i32> %t0, <i32 17, i32 17, i32 17, i32 17> 869 ret <4 x i32> %t1 870} 871define <4 x i32> @test_128_i32_x_4_32767_mask_shl_18(<4 x i32> %a0) { 872; CHECK-LABEL: test_128_i32_x_4_32767_mask_shl_18: 873; CHECK: // %bb.0: 874; CHECK-NEXT: shl v0.4s, v0.4s, #18 875; CHECK-NEXT: ret 876 %t0 = and <4 x i32> %a0, <i32 32767, i32 32767, i32 32767, i32 32767> 877 %t1 = shl <4 x i32> %t0, <i32 18, i32 18, i32 18, i32 18> 878 ret <4 x i32> %t1 879} 880 881define <4 x i32> @test_128_i32_x_4_8388352_mask_shl_7(<4 x i32> %a0) { 882; CHECK-LABEL: test_128_i32_x_4_8388352_mask_shl_7: 883; CHECK: // %bb.0: 884; CHECK-NEXT: mov w8, #8388352 885; CHECK-NEXT: dup v1.4s, w8 886; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 887; CHECK-NEXT: shl v0.4s, v0.4s, #7 888; CHECK-NEXT: ret 889 %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352> 890 %t1 = shl <4 x i32> %t0, <i32 7, i32 7, i32 7, i32 7> 891 ret <4 x i32> %t1 892} 893define <4 x i32> @test_128_i32_x_4_8388352_mask_shl_8(<4 x i32> %a0) { 894; CHECK-LABEL: test_128_i32_x_4_8388352_mask_shl_8: 895; CHECK: // %bb.0: 896; CHECK-NEXT: mov w8, #8388352 897; CHECK-NEXT: dup v1.4s, w8 898; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 899; CHECK-NEXT: shl v0.4s, v0.4s, #8 900; CHECK-NEXT: ret 901 %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352> 902 %t1 = shl <4 x i32> %t0, <i32 8, i32 8, i32 8, i32 8> 903 ret <4 x i32> %t1 904} 905define <4 x i32> @test_128_i32_x_4_8388352_mask_shl_9(<4 x i32> %a0) { 906; CHECK-LABEL: test_128_i32_x_4_8388352_mask_shl_9: 907; CHECK: // %bb.0: 908; CHECK-NEXT: mov w8, #8388352 909; CHECK-NEXT: dup v1.4s, w8 910; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 911; CHECK-NEXT: shl v0.4s, v0.4s, #9 912; CHECK-NEXT: ret 913 %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352> 914 %t1 = shl <4 x i32> %t0, <i32 9, i32 9, i32 9, i32 9> 915 ret <4 x i32> %t1 916} 917define <4 x i32> @test_128_i32_x_4_8388352_mask_shl_10(<4 x i32> %a0) { 918; CHECK-LABEL: test_128_i32_x_4_8388352_mask_shl_10: 919; CHECK: // %bb.0: 920; CHECK-NEXT: mov w8, #8388352 921; CHECK-NEXT: dup v1.4s, w8 922; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 923; CHECK-NEXT: shl v0.4s, v0.4s, #10 924; CHECK-NEXT: ret 925 %t0 = and <4 x i32> %a0, <i32 8388352, i32 8388352, i32 8388352, i32 8388352> 926 %t1 = shl <4 x i32> %t0, <i32 10, i32 10, i32 10, i32 10> 927 ret <4 x i32> %t1 928} 929 930define <4 x i32> @test_128_i32_x_4_4294836224_mask_shl_1(<4 x i32> %a0) { 931; CHECK-LABEL: test_128_i32_x_4_4294836224_mask_shl_1: 932; CHECK: // %bb.0: 933; CHECK-NEXT: mvni v1.4s, #1, msl #16 934; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 935; CHECK-NEXT: add v0.4s, v0.4s, v0.4s 936; CHECK-NEXT: ret 937 %t0 = and <4 x i32> %a0, <i32 4294836224, i32 4294836224, i32 4294836224, i32 4294836224> 938 %t1 = shl <4 x i32> %t0, <i32 1, i32 1, i32 1, i32 1> 939 ret <4 x i32> %t1 940} 941 942;------------------------------------------------------------------------------; 943; 128-bit vector; 64-bit elements = 2 elements 944;------------------------------------------------------------------------------; 945 946; lshr 947 948define <2 x i64> @test_128_i64_x_2_2147483647_mask_lshr_1(<2 x i64> %a0) { 949; CHECK-LABEL: test_128_i64_x_2_2147483647_mask_lshr_1: 950; CHECK: // %bb.0: 951; CHECK-NEXT: mov w8, #2147483647 952; CHECK-NEXT: dup v1.2d, x8 953; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 954; CHECK-NEXT: ushr v0.2d, v0.2d, #1 955; CHECK-NEXT: ret 956 %t0 = and <2 x i64> %a0, <i64 2147483647, i64 2147483647> 957 %t1 = lshr <2 x i64> %t0, <i64 1, i64 1> 958 ret <2 x i64> %t1 959} 960 961define <2 x i64> @test_128_i64_x_2_140737488289792_mask_lshr_15(<2 x i64> %a0) { 962; CHECK-LABEL: test_128_i64_x_2_140737488289792_mask_lshr_15: 963; CHECK: // %bb.0: 964; CHECK-NEXT: mov x8, #140737488289792 965; CHECK-NEXT: dup v1.2d, x8 966; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 967; CHECK-NEXT: ushr v0.2d, v0.2d, #15 968; CHECK-NEXT: ret 969 %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792> 970 %t1 = lshr <2 x i64> %t0, <i64 15, i64 15> 971 ret <2 x i64> %t1 972} 973define <2 x i64> @test_128_i64_x_2_140737488289792_mask_lshr_16(<2 x i64> %a0) { 974; CHECK-LABEL: test_128_i64_x_2_140737488289792_mask_lshr_16: 975; CHECK: // %bb.0: 976; CHECK-NEXT: mov x8, #140737488289792 977; CHECK-NEXT: dup v1.2d, x8 978; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 979; CHECK-NEXT: ushr v0.2d, v0.2d, #16 980; CHECK-NEXT: ret 981 %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792> 982 %t1 = lshr <2 x i64> %t0, <i64 16, i64 16> 983 ret <2 x i64> %t1 984} 985define <2 x i64> @test_128_i64_x_2_140737488289792_mask_lshr_17(<2 x i64> %a0) { 986; CHECK-LABEL: test_128_i64_x_2_140737488289792_mask_lshr_17: 987; CHECK: // %bb.0: 988; CHECK-NEXT: mov x8, #140737488289792 989; CHECK-NEXT: dup v1.2d, x8 990; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 991; CHECK-NEXT: ushr v0.2d, v0.2d, #17 992; CHECK-NEXT: ret 993 %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792> 994 %t1 = lshr <2 x i64> %t0, <i64 17, i64 17> 995 ret <2 x i64> %t1 996} 997define <2 x i64> @test_128_i64_x_2_140737488289792_mask_lshr_18(<2 x i64> %a0) { 998; CHECK-LABEL: test_128_i64_x_2_140737488289792_mask_lshr_18: 999; CHECK: // %bb.0: 1000; CHECK-NEXT: mov x8, #140737488289792 1001; CHECK-NEXT: dup v1.2d, x8 1002; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 1003; CHECK-NEXT: ushr v0.2d, v0.2d, #18 1004; CHECK-NEXT: ret 1005 %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792> 1006 %t1 = lshr <2 x i64> %t0, <i64 18, i64 18> 1007 ret <2 x i64> %t1 1008} 1009 1010define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_lshr_1(<2 x i64> %a0) { 1011; CHECK-LABEL: test_128_i64_x_2_18446744065119617024_mask_lshr_1: 1012; CHECK: // %bb.0: 1013; CHECK-NEXT: mov x8, #-8589934592 1014; CHECK-NEXT: dup v1.2d, x8 1015; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 1016; CHECK-NEXT: ushr v0.2d, v0.2d, #1 1017; CHECK-NEXT: ret 1018 %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024> 1019 %t1 = lshr <2 x i64> %t0, <i64 1, i64 1> 1020 ret <2 x i64> %t1 1021} 1022define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_lshr_32(<2 x i64> %a0) { 1023; CHECK-LABEL: test_128_i64_x_2_18446744065119617024_mask_lshr_32: 1024; CHECK: // %bb.0: 1025; CHECK-NEXT: mov x8, #-8589934592 1026; CHECK-NEXT: dup v1.2d, x8 1027; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 1028; CHECK-NEXT: ushr v0.2d, v0.2d, #32 1029; CHECK-NEXT: ret 1030 %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024> 1031 %t1 = lshr <2 x i64> %t0, <i64 32, i64 32> 1032 ret <2 x i64> %t1 1033} 1034define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_lshr_33(<2 x i64> %a0) { 1035; CHECK-LABEL: test_128_i64_x_2_18446744065119617024_mask_lshr_33: 1036; CHECK: // %bb.0: 1037; CHECK-NEXT: ushr v0.2d, v0.2d, #33 1038; CHECK-NEXT: ret 1039 %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024> 1040 %t1 = lshr <2 x i64> %t0, <i64 33, i64 33> 1041 ret <2 x i64> %t1 1042} 1043define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_lshr_34(<2 x i64> %a0) { 1044; CHECK-LABEL: test_128_i64_x_2_18446744065119617024_mask_lshr_34: 1045; CHECK: // %bb.0: 1046; CHECK-NEXT: ushr v0.2d, v0.2d, #34 1047; CHECK-NEXT: ret 1048 %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024> 1049 %t1 = lshr <2 x i64> %t0, <i64 34, i64 34> 1050 ret <2 x i64> %t1 1051} 1052 1053; ashr 1054 1055define <2 x i64> @test_128_i64_x_2_2147483647_mask_ashr_1(<2 x i64> %a0) { 1056; CHECK-LABEL: test_128_i64_x_2_2147483647_mask_ashr_1: 1057; CHECK: // %bb.0: 1058; CHECK-NEXT: mov w8, #2147483647 1059; CHECK-NEXT: dup v1.2d, x8 1060; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 1061; CHECK-NEXT: ushr v0.2d, v0.2d, #1 1062; CHECK-NEXT: ret 1063 %t0 = and <2 x i64> %a0, <i64 2147483647, i64 2147483647> 1064 %t1 = ashr <2 x i64> %t0, <i64 1, i64 1> 1065 ret <2 x i64> %t1 1066} 1067 1068define <2 x i64> @test_128_i64_x_2_140737488289792_mask_ashr_15(<2 x i64> %a0) { 1069; CHECK-LABEL: test_128_i64_x_2_140737488289792_mask_ashr_15: 1070; CHECK: // %bb.0: 1071; CHECK-NEXT: mov x8, #140737488289792 1072; CHECK-NEXT: dup v1.2d, x8 1073; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 1074; CHECK-NEXT: ushr v0.2d, v0.2d, #15 1075; CHECK-NEXT: ret 1076 %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792> 1077 %t1 = ashr <2 x i64> %t0, <i64 15, i64 15> 1078 ret <2 x i64> %t1 1079} 1080define <2 x i64> @test_128_i64_x_2_140737488289792_mask_ashr_16(<2 x i64> %a0) { 1081; CHECK-LABEL: test_128_i64_x_2_140737488289792_mask_ashr_16: 1082; CHECK: // %bb.0: 1083; CHECK-NEXT: mov x8, #140737488289792 1084; CHECK-NEXT: dup v1.2d, x8 1085; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 1086; CHECK-NEXT: ushr v0.2d, v0.2d, #16 1087; CHECK-NEXT: ret 1088 %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792> 1089 %t1 = ashr <2 x i64> %t0, <i64 16, i64 16> 1090 ret <2 x i64> %t1 1091} 1092define <2 x i64> @test_128_i64_x_2_140737488289792_mask_ashr_17(<2 x i64> %a0) { 1093; CHECK-LABEL: test_128_i64_x_2_140737488289792_mask_ashr_17: 1094; CHECK: // %bb.0: 1095; CHECK-NEXT: mov x8, #140737488289792 1096; CHECK-NEXT: dup v1.2d, x8 1097; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 1098; CHECK-NEXT: ushr v0.2d, v0.2d, #17 1099; CHECK-NEXT: ret 1100 %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792> 1101 %t1 = ashr <2 x i64> %t0, <i64 17, i64 17> 1102 ret <2 x i64> %t1 1103} 1104define <2 x i64> @test_128_i64_x_2_140737488289792_mask_ashr_18(<2 x i64> %a0) { 1105; CHECK-LABEL: test_128_i64_x_2_140737488289792_mask_ashr_18: 1106; CHECK: // %bb.0: 1107; CHECK-NEXT: mov x8, #140737488289792 1108; CHECK-NEXT: dup v1.2d, x8 1109; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 1110; CHECK-NEXT: ushr v0.2d, v0.2d, #18 1111; CHECK-NEXT: ret 1112 %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792> 1113 %t1 = ashr <2 x i64> %t0, <i64 18, i64 18> 1114 ret <2 x i64> %t1 1115} 1116 1117define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_ashr_1(<2 x i64> %a0) { 1118; CHECK-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_1: 1119; CHECK: // %bb.0: 1120; CHECK-NEXT: mov x8, #-8589934592 1121; CHECK-NEXT: dup v1.2d, x8 1122; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 1123; CHECK-NEXT: sshr v0.2d, v0.2d, #1 1124; CHECK-NEXT: ret 1125 %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024> 1126 %t1 = ashr <2 x i64> %t0, <i64 1, i64 1> 1127 ret <2 x i64> %t1 1128} 1129define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_ashr_32(<2 x i64> %a0) { 1130; CHECK-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_32: 1131; CHECK: // %bb.0: 1132; CHECK-NEXT: mov x8, #-8589934592 1133; CHECK-NEXT: dup v1.2d, x8 1134; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 1135; CHECK-NEXT: sshr v0.2d, v0.2d, #32 1136; CHECK-NEXT: ret 1137 %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024> 1138 %t1 = ashr <2 x i64> %t0, <i64 32, i64 32> 1139 ret <2 x i64> %t1 1140} 1141define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_ashr_33(<2 x i64> %a0) { 1142; CHECK-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_33: 1143; CHECK: // %bb.0: 1144; CHECK-NEXT: sshr v0.2d, v0.2d, #33 1145; CHECK-NEXT: ret 1146 %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024> 1147 %t1 = ashr <2 x i64> %t0, <i64 33, i64 33> 1148 ret <2 x i64> %t1 1149} 1150define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_ashr_34(<2 x i64> %a0) { 1151; CHECK-LABEL: test_128_i64_x_2_18446744065119617024_mask_ashr_34: 1152; CHECK: // %bb.0: 1153; CHECK-NEXT: sshr v0.2d, v0.2d, #34 1154; CHECK-NEXT: ret 1155 %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024> 1156 %t1 = ashr <2 x i64> %t0, <i64 34, i64 34> 1157 ret <2 x i64> %t1 1158} 1159 1160; shl 1161 1162define <2 x i64> @test_128_i64_x_2_2147483647_mask_shl_1(<2 x i64> %a0) { 1163; CHECK-LABEL: test_128_i64_x_2_2147483647_mask_shl_1: 1164; CHECK: // %bb.0: 1165; CHECK-NEXT: mov w8, #2147483647 1166; CHECK-NEXT: dup v1.2d, x8 1167; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 1168; CHECK-NEXT: add v0.2d, v0.2d, v0.2d 1169; CHECK-NEXT: ret 1170 %t0 = and <2 x i64> %a0, <i64 2147483647, i64 2147483647> 1171 %t1 = shl <2 x i64> %t0, <i64 1, i64 1> 1172 ret <2 x i64> %t1 1173} 1174define <2 x i64> @test_128_i64_x_2_2147483647_mask_shl_32(<2 x i64> %a0) { 1175; CHECK-LABEL: test_128_i64_x_2_2147483647_mask_shl_32: 1176; CHECK: // %bb.0: 1177; CHECK-NEXT: mov w8, #2147483647 1178; CHECK-NEXT: dup v1.2d, x8 1179; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 1180; CHECK-NEXT: shl v0.2d, v0.2d, #32 1181; CHECK-NEXT: ret 1182 %t0 = and <2 x i64> %a0, <i64 2147483647, i64 2147483647> 1183 %t1 = shl <2 x i64> %t0, <i64 32, i64 32> 1184 ret <2 x i64> %t1 1185} 1186define <2 x i64> @test_128_i64_x_2_2147483647_mask_shl_33(<2 x i64> %a0) { 1187; CHECK-LABEL: test_128_i64_x_2_2147483647_mask_shl_33: 1188; CHECK: // %bb.0: 1189; CHECK-NEXT: shl v0.2d, v0.2d, #33 1190; CHECK-NEXT: ret 1191 %t0 = and <2 x i64> %a0, <i64 2147483647, i64 2147483647> 1192 %t1 = shl <2 x i64> %t0, <i64 33, i64 33> 1193 ret <2 x i64> %t1 1194} 1195define <2 x i64> @test_128_i64_x_2_2147483647_mask_shl_34(<2 x i64> %a0) { 1196; CHECK-LABEL: test_128_i64_x_2_2147483647_mask_shl_34: 1197; CHECK: // %bb.0: 1198; CHECK-NEXT: shl v0.2d, v0.2d, #34 1199; CHECK-NEXT: ret 1200 %t0 = and <2 x i64> %a0, <i64 2147483647, i64 2147483647> 1201 %t1 = shl <2 x i64> %t0, <i64 34, i64 34> 1202 ret <2 x i64> %t1 1203} 1204 1205define <2 x i64> @test_128_i64_x_2_140737488289792_mask_shl_15(<2 x i64> %a0) { 1206; CHECK-LABEL: test_128_i64_x_2_140737488289792_mask_shl_15: 1207; CHECK: // %bb.0: 1208; CHECK-NEXT: mov x8, #140737488289792 1209; CHECK-NEXT: dup v1.2d, x8 1210; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 1211; CHECK-NEXT: shl v0.2d, v0.2d, #15 1212; CHECK-NEXT: ret 1213 %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792> 1214 %t1 = shl <2 x i64> %t0, <i64 15, i64 15> 1215 ret <2 x i64> %t1 1216} 1217define <2 x i64> @test_128_i64_x_2_140737488289792_mask_shl_16(<2 x i64> %a0) { 1218; CHECK-LABEL: test_128_i64_x_2_140737488289792_mask_shl_16: 1219; CHECK: // %bb.0: 1220; CHECK-NEXT: mov x8, #140737488289792 1221; CHECK-NEXT: dup v1.2d, x8 1222; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 1223; CHECK-NEXT: shl v0.2d, v0.2d, #16 1224; CHECK-NEXT: ret 1225 %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792> 1226 %t1 = shl <2 x i64> %t0, <i64 16, i64 16> 1227 ret <2 x i64> %t1 1228} 1229define <2 x i64> @test_128_i64_x_2_140737488289792_mask_shl_17(<2 x i64> %a0) { 1230; CHECK-LABEL: test_128_i64_x_2_140737488289792_mask_shl_17: 1231; CHECK: // %bb.0: 1232; CHECK-NEXT: mov x8, #140737488289792 1233; CHECK-NEXT: dup v1.2d, x8 1234; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 1235; CHECK-NEXT: shl v0.2d, v0.2d, #17 1236; CHECK-NEXT: ret 1237 %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792> 1238 %t1 = shl <2 x i64> %t0, <i64 17, i64 17> 1239 ret <2 x i64> %t1 1240} 1241define <2 x i64> @test_128_i64_x_2_140737488289792_mask_shl_18(<2 x i64> %a0) { 1242; CHECK-LABEL: test_128_i64_x_2_140737488289792_mask_shl_18: 1243; CHECK: // %bb.0: 1244; CHECK-NEXT: mov x8, #140737488289792 1245; CHECK-NEXT: dup v1.2d, x8 1246; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 1247; CHECK-NEXT: shl v0.2d, v0.2d, #18 1248; CHECK-NEXT: ret 1249 %t0 = and <2 x i64> %a0, <i64 140737488289792, i64 140737488289792> 1250 %t1 = shl <2 x i64> %t0, <i64 18, i64 18> 1251 ret <2 x i64> %t1 1252} 1253 1254define <2 x i64> @test_128_i64_x_2_18446744065119617024_mask_shl_1(<2 x i64> %a0) { 1255; CHECK-LABEL: test_128_i64_x_2_18446744065119617024_mask_shl_1: 1256; CHECK: // %bb.0: 1257; CHECK-NEXT: mov x8, #-8589934592 1258; CHECK-NEXT: dup v1.2d, x8 1259; CHECK-NEXT: and v0.16b, v0.16b, v1.16b 1260; CHECK-NEXT: add v0.2d, v0.2d, v0.2d 1261; CHECK-NEXT: ret 1262 %t0 = and <2 x i64> %a0, <i64 18446744065119617024, i64 18446744065119617024> 1263 %t1 = shl <2 x i64> %t0, <i64 1, i64 1> 1264 ret <2 x i64> %t1 1265} 1266