brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.3 KiB · 1d4e00d Raw
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