239 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 62; RUN: llc -mtriple=aarch64 -mattr=+neon < %s | FileCheck %s --check-prefixes=COMMON,NEON3; RUN: llc -mtriple=aarch64 -mattr=+neon,+sve < %s | FileCheck %s --check-prefixes=COMMON,SVE4 5define <2 x i64> @movi_1_v2i64() {6; NEON-LABEL: movi_1_v2i64:7; NEON: // %bb.0:8; NEON-NEXT: mov w8, #1 // =0x19; NEON-NEXT: dup v0.2d, x810; NEON-NEXT: ret11;12; SVE-LABEL: movi_1_v2i64:13; SVE: // %bb.0:14; SVE-NEXT: mov z0.d, #1 // =0x115; SVE-NEXT: ret16 ret <2 x i64> splat (i64 1)17}18 19define <2 x i64> @movi_127_v2i64() {20; NEON-LABEL: movi_127_v2i64:21; NEON: // %bb.0:22; NEON-NEXT: mov w8, #127 // =0x7f23; NEON-NEXT: dup v0.2d, x824; NEON-NEXT: ret25;26; SVE-LABEL: movi_127_v2i64:27; SVE: // %bb.0:28; SVE-NEXT: mov z0.d, #127 // =0x7f29; SVE-NEXT: ret30 ret <2 x i64> splat (i64 127)31}32 33define <2 x i64> @movi_m128_v2i64() {34; NEON-LABEL: movi_m128_v2i64:35; NEON: // %bb.0:36; NEON-NEXT: mov x8, #-128 // =0xffffffffffffff8037; NEON-NEXT: dup v0.2d, x838; NEON-NEXT: ret39;40; SVE-LABEL: movi_m128_v2i64:41; SVE: // %bb.0:42; SVE-NEXT: mov z0.d, #-128 // =0xffffffffffffff8043; SVE-NEXT: ret44 ret <2 x i64> splat (i64 -128)45}46 47define <2 x i64> @movi_256_v2i64() {48; NEON-LABEL: movi_256_v2i64:49; NEON: // %bb.0:50; NEON-NEXT: mov w8, #256 // =0x10051; NEON-NEXT: dup v0.2d, x852; NEON-NEXT: ret53;54; SVE-LABEL: movi_256_v2i64:55; SVE: // %bb.0:56; SVE-NEXT: mov z0.d, #256 // =0x10057; SVE-NEXT: ret58 ret <2 x i64> splat (i64 256)59}60 61define <2 x i64> @movi_32512_v2i64() {62; NEON-LABEL: movi_32512_v2i64:63; NEON: // %bb.0:64; NEON-NEXT: mov w8, #32512 // =0x7f0065; NEON-NEXT: dup v0.2d, x866; NEON-NEXT: ret67;68; SVE-LABEL: movi_32512_v2i64:69; SVE: // %bb.0:70; SVE-NEXT: mov z0.d, #32512 // =0x7f0071; SVE-NEXT: ret72 ret <2 x i64> splat (i64 32512)73}74 75define <2 x i64> @movi_m32768_v2i64() {76; NEON-LABEL: movi_m32768_v2i64:77; NEON: // %bb.0:78; NEON-NEXT: mov x8, #-32768 // =0xffffffffffff800079; NEON-NEXT: dup v0.2d, x880; NEON-NEXT: ret81;82; SVE-LABEL: movi_m32768_v2i64:83; SVE: // %bb.0:84; SVE-NEXT: mov z0.d, #-32768 // =0xffffffffffff800085; SVE-NEXT: ret86 ret <2 x i64> splat (i64 -32768)87}88 89; Special cases where the destination vector does not have 64-bit elements90 91define <4 x i32> @movi_v4i32_1() {92; NEON-LABEL: movi_v4i32_1:93; NEON: // %bb.0:94; NEON-NEXT: adrp x8, .LCPI6_095; NEON-NEXT: ldr q0, [x8, :lo12:.LCPI6_0]96; NEON-NEXT: ret97;98; SVE-LABEL: movi_v4i32_1:99; SVE: // %bb.0:100; SVE-NEXT: mov z0.d, #127 // =0x7f101; SVE-NEXT: ret102 ret <4 x i32> <i32 127, i32 0, i32 127, i32 0>103}104 105define <4 x i32> @movi_v4i32_2() {106; NEON-LABEL: movi_v4i32_2:107; NEON: // %bb.0:108; NEON-NEXT: adrp x8, .LCPI7_0109; NEON-NEXT: ldr q0, [x8, :lo12:.LCPI7_0]110; NEON-NEXT: ret111;112; SVE-LABEL: movi_v4i32_2:113; SVE: // %bb.0:114; SVE-NEXT: mov z0.d, #32512 // =0x7f00115; SVE-NEXT: ret116 ret <4 x i32> <i32 32512, i32 0, i32 32512, i32 0>117}118 119define <8 x i16> @movi_v8i16_1() {120; NEON-LABEL: movi_v8i16_1:121; NEON: // %bb.0:122; NEON-NEXT: adrp x8, .LCPI8_0123; NEON-NEXT: ldr q0, [x8, :lo12:.LCPI8_0]124; NEON-NEXT: ret125;126; SVE-LABEL: movi_v8i16_1:127; SVE: // %bb.0:128; SVE-NEXT: mov z0.d, #127 // =0x7f129; SVE-NEXT: ret130 ret <8 x i16> <i16 127, i16 0, i16 0, i16 0, i16 127, i16 0, i16 0, i16 0>131}132 133define <8 x i16> @movi_v8i16_2() {134; NEON-LABEL: movi_v8i16_2:135; NEON: // %bb.0:136; NEON-NEXT: adrp x8, .LCPI9_0137; NEON-NEXT: ldr q0, [x8, :lo12:.LCPI9_0]138; NEON-NEXT: ret139;140; SVE-LABEL: movi_v8i16_2:141; SVE: // %bb.0:142; SVE-NEXT: mov z0.d, #32512 // =0x7f00143; SVE-NEXT: ret144 ret <8 x i16> <i16 32512, i16 0, i16 0, i16 0, i16 32512, i16 0, i16 0, i16 0>145}146 147define <16 x i8> @movi_v16i8_1() {148; NEON-LABEL: movi_v16i8_1:149; NEON: // %bb.0:150; NEON-NEXT: adrp x8, .LCPI10_0151; NEON-NEXT: ldr q0, [x8, :lo12:.LCPI10_0]152; NEON-NEXT: ret153;154; SVE-LABEL: movi_v16i8_1:155; SVE: // %bb.0:156; SVE-NEXT: mov z0.d, #127 // =0x7f157; SVE-NEXT: ret158 ret <16 x i8> <i8 127, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 127, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>159}160 161define <16 x i8> @movi_v16i8_2() {162; NEON-LABEL: movi_v16i8_2:163; NEON: // %bb.0:164; NEON-NEXT: adrp x8, .LCPI11_0165; NEON-NEXT: ldr q0, [x8, :lo12:.LCPI11_0]166; NEON-NEXT: ret167;168; SVE-LABEL: movi_v16i8_2:169; SVE: // %bb.0:170; SVE-NEXT: mov z0.d, #32512 // =0x7f00171; SVE-NEXT: ret172 ret <16 x i8> <i8 0, i8 127, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 127, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>173}174 175; Negative cases176 177define <2 x i64> @movi_128_v2i64() {178; COMMON-LABEL: movi_128_v2i64:179; COMMON: // %bb.0:180; COMMON-NEXT: mov w8, #128 // =0x80181; COMMON-NEXT: dup v0.2d, x8182; COMMON-NEXT: ret183 ret <2 x i64> splat (i64 128)184}185 186define <2 x i64> @movi_m127_v2i64() {187; COMMON-LABEL: movi_m127_v2i64:188; COMMON: // %bb.0:189; COMMON-NEXT: mov x8, #-129 // =0xffffffffffffff7f190; COMMON-NEXT: dup v0.2d, x8191; COMMON-NEXT: ret192 ret <2 x i64> splat (i64 -129)193}194 195define <2 x i64> @movi_32513_v2i64() {196; COMMON-LABEL: movi_32513_v2i64:197; COMMON: // %bb.0:198; COMMON-NEXT: mov w8, #32513 // =0x7f01199; COMMON-NEXT: dup v0.2d, x8200; COMMON-NEXT: ret201 ret <2 x i64> splat (i64 32513)202}203 204define <2 x i64> @movi_m32769_v2i64() {205; COMMON-LABEL: movi_m32769_v2i64:206; COMMON: // %bb.0:207; COMMON-NEXT: mov x8, #-32769 // =0xffffffffffff7fff208; COMMON-NEXT: dup v0.2d, x8209; COMMON-NEXT: ret210 ret <2 x i64> splat (i64 -32769)211}212 213define <2 x i64> @movi_257_v2i64() {214; COMMON-LABEL: movi_257_v2i64:215; COMMON: // %bb.0:216; COMMON-NEXT: mov w8, #257 // =0x101217; COMMON-NEXT: dup v0.2d, x8218; COMMON-NEXT: ret219 ret <2 x i64> splat (i64 257)220}221 222define <4 x i32> @movi_v4i32_3() {223; COMMON-LABEL: movi_v4i32_3:224; COMMON: // %bb.0:225; COMMON-NEXT: adrp x8, .LCPI17_0226; COMMON-NEXT: ldr q0, [x8, :lo12:.LCPI17_0]227; COMMON-NEXT: ret228 ret <4 x i32> <i32 -128, i32 0, i32 -128, i32 0>229}230 231define <16 x i8> @movi_v16i8_3() {232; COMMON-LABEL: movi_v16i8_3:233; COMMON: // %bb.0:234; COMMON-NEXT: adrp x8, .LCPI18_0235; COMMON-NEXT: ldr q0, [x8, :lo12:.LCPI18_0]236; COMMON-NEXT: ret237 ret <16 x i8> <i8 0, i8 0, i8 127, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 127, i8 0, i8 0, i8 0, i8 0, i8 0>238}239