1; RUN: llc < %s -march=arm64 -aarch64-neon-syntax=apple | FileCheck %s 2 3define <8 x i8> @v_orrimm(<8 x i8>* %A) nounwind { 4; CHECK-LABEL: v_orrimm: 5; CHECK-NOT: mov 6; CHECK-NOT: mvn 7; CHECK: orr 8 %tmp1 = load <8 x i8>, <8 x i8>* %A 9 %tmp3 = or <8 x i8> %tmp1, <i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1> 10 ret <8 x i8> %tmp3 11} 12 13define <16 x i8> @v_orrimmQ(<16 x i8>* %A) nounwind { 14; CHECK: v_orrimmQ 15; CHECK-NOT: mov 16; CHECK-NOT: mvn 17; CHECK: orr 18 %tmp1 = load <16 x i8>, <16 x i8>* %A 19 %tmp3 = or <16 x i8> %tmp1, <i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1> 20 ret <16 x i8> %tmp3 21} 22 23define <8 x i8> @v_bicimm(<8 x i8>* %A) nounwind { 24; CHECK-LABEL: v_bicimm: 25; CHECK-NOT: mov 26; CHECK-NOT: mvn 27; CHECK: bic 28 %tmp1 = load <8 x i8>, <8 x i8>* %A 29 %tmp3 = and <8 x i8> %tmp1, < i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0 > 30 ret <8 x i8> %tmp3 31} 32 33define <16 x i8> @v_bicimmQ(<16 x i8>* %A) nounwind { 34; CHECK-LABEL: v_bicimmQ: 35; CHECK-NOT: mov 36; CHECK-NOT: mvn 37; CHECK: bic 38 %tmp1 = load <16 x i8>, <16 x i8>* %A 39 %tmp3 = and <16 x i8> %tmp1, < i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0 > 40 ret <16 x i8> %tmp3 41} 42 43define <2 x double> @foo(<2 x double> %bar) nounwind { 44; CHECK: foo 45; CHECK: fmov.2d v1, #1.0000000 46 %add = fadd <2 x double> %bar, <double 1.0, double 1.0> 47 ret <2 x double> %add 48} 49 50define <4 x i32> @movi_4s_imm_t1() nounwind readnone ssp { 51entry: 52; CHECK-LABEL: movi_4s_imm_t1: 53; CHECK: movi.4s v0, #0x4b 54 ret <4 x i32> <i32 75, i32 75, i32 75, i32 75> 55} 56 57define <4 x i32> @movi_4s_imm_t2() nounwind readnone ssp { 58entry: 59; CHECK-LABEL: movi_4s_imm_t2: 60; CHECK: movi.4s v0, #0x4b, lsl #8 61 ret <4 x i32> <i32 19200, i32 19200, i32 19200, i32 19200> 62} 63 64define <4 x i32> @movi_4s_imm_t3() nounwind readnone ssp { 65entry: 66; CHECK-LABEL: movi_4s_imm_t3: 67; CHECK: movi.4s v0, #0x4b, lsl #16 68 ret <4 x i32> <i32 4915200, i32 4915200, i32 4915200, i32 4915200> 69} 70 71define <4 x i32> @movi_4s_imm_t4() nounwind readnone ssp { 72entry: 73; CHECK-LABEL: movi_4s_imm_t4: 74; CHECK: movi.4s v0, #0x4b, lsl #24 75 ret <4 x i32> <i32 1258291200, i32 1258291200, i32 1258291200, i32 1258291200> 76} 77 78define <8 x i16> @movi_8h_imm_t5() nounwind readnone ssp { 79entry: 80; CHECK-LABEL: movi_8h_imm_t5: 81; CHECK: movi.8h v0, #0x4b 82 ret <8 x i16> <i16 75, i16 75, i16 75, i16 75, i16 75, i16 75, i16 75, i16 75> 83} 84 85; rdar://11989841 86define <8 x i16> @movi_8h_imm_t6() nounwind readnone ssp { 87entry: 88; CHECK-LABEL: movi_8h_imm_t6: 89; CHECK: movi.8h v0, #0x4b, lsl #8 90 ret <8 x i16> <i16 19200, i16 19200, i16 19200, i16 19200, i16 19200, i16 19200, i16 19200, i16 19200> 91} 92 93define <4 x i32> @movi_4s_imm_t7() nounwind readnone ssp { 94entry: 95; CHECK-LABEL: movi_4s_imm_t7: 96; CHECK: movi.4s v0, #0x4b, msl #8 97ret <4 x i32> <i32 19455, i32 19455, i32 19455, i32 19455> 98} 99 100define <4 x i32> @movi_4s_imm_t8() nounwind readnone ssp { 101entry: 102; CHECK-LABEL: movi_4s_imm_t8: 103; CHECK: movi.4s v0, #0x4b, msl #16 104ret <4 x i32> <i32 4980735, i32 4980735, i32 4980735, i32 4980735> 105} 106 107define <16 x i8> @movi_16b_imm_t9() nounwind readnone ssp { 108entry: 109; CHECK-LABEL: movi_16b_imm_t9: 110; CHECK: movi.16b v0, #0x4b 111ret <16 x i8> <i8 75, i8 75, i8 75, i8 75, i8 75, i8 75, i8 75, i8 75, 112 i8 75, i8 75, i8 75, i8 75, i8 75, i8 75, i8 75, i8 75> 113} 114 115define <2 x i64> @movi_2d_imm_t10() nounwind readnone ssp { 116entry: 117; CHECK-LABEL: movi_2d_imm_t10: 118; CHECK: movi.2d v0, #0xff00ff00ff00ff 119ret <2 x i64> <i64 71777214294589695, i64 71777214294589695> 120} 121 122define <4 x i32> @movi_4s_imm_t11() nounwind readnone ssp { 123entry: 124; CHECK-LABEL: movi_4s_imm_t11: 125; CHECK: fmov.4s v0, #-0.32812500 126ret <4 x i32> <i32 3198681088, i32 3198681088, i32 3198681088, i32 3198681088> 127} 128 129define <2 x i64> @movi_2d_imm_t12() nounwind readnone ssp { 130entry: 131; CHECK-LABEL: movi_2d_imm_t12: 132; CHECK: fmov.2d v0, #-0.17187500 133ret <2 x i64> <i64 13818732506632945664, i64 13818732506632945664> 134} 135