| Tim Northover | 3b0846e | 2014-05-24 12:50:23 +0000 | [diff] [blame] | 1 | ; RUN: llc < %s -march=arm64 -aarch64-neon-syntax=apple | FileCheck %s |
| 2 | |
| 3 | define <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>* %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 | |
| 13 | define <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>* %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 | |
| 23 | define <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>* %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 | |
| 33 | define <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>* %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 | |
| 43 | define <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 | |
| 50 | define <4 x i32> @movi_4s_imm_t1() nounwind readnone ssp { |
| 51 | entry: |
| 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 | |
| 57 | define <4 x i32> @movi_4s_imm_t2() nounwind readnone ssp { |
| 58 | entry: |
| 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 | |
| 64 | define <4 x i32> @movi_4s_imm_t3() nounwind readnone ssp { |
| 65 | entry: |
| 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 | |
| 71 | define <4 x i32> @movi_4s_imm_t4() nounwind readnone ssp { |
| 72 | entry: |
| 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 | |
| 78 | define <8 x i16> @movi_8h_imm_t5() nounwind readnone ssp { |
| 79 | entry: |
| 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 |
| 86 | define <8 x i16> @movi_8h_imm_t6() nounwind readnone ssp { |
| 87 | entry: |
| 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 | |
| 93 | define <4 x i32> @movi_4s_imm_t7() nounwind readnone ssp { |
| 94 | entry: |
| 95 | ; CHECK-LABEL: movi_4s_imm_t7: |
| 96 | ; CHECK: movi.4s v0, #0x4b, msl #8 |
| 97 | ret <4 x i32> <i32 19455, i32 19455, i32 19455, i32 19455> |
| 98 | } |
| 99 | |
| 100 | define <4 x i32> @movi_4s_imm_t8() nounwind readnone ssp { |
| 101 | entry: |
| 102 | ; CHECK-LABEL: movi_4s_imm_t8: |
| 103 | ; CHECK: movi.4s v0, #0x4b, msl #16 |
| 104 | ret <4 x i32> <i32 4980735, i32 4980735, i32 4980735, i32 4980735> |
| 105 | } |
| 106 | |
| 107 | define <16 x i8> @movi_16b_imm_t9() nounwind readnone ssp { |
| 108 | entry: |
| 109 | ; CHECK-LABEL: movi_16b_imm_t9: |
| 110 | ; CHECK: movi.16b v0, #0x4b |
| 111 | ret <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 | |
| 115 | define <2 x i64> @movi_2d_imm_t10() nounwind readnone ssp { |
| 116 | entry: |
| 117 | ; CHECK-LABEL: movi_2d_imm_t10: |
| 118 | ; CHECK: movi.2d v0, #0xff00ff00ff00ff |
| 119 | ret <2 x i64> <i64 71777214294589695, i64 71777214294589695> |
| 120 | } |
| 121 | |
| 122 | define <4 x i32> @movi_4s_imm_t11() nounwind readnone ssp { |
| 123 | entry: |
| 124 | ; CHECK-LABEL: movi_4s_imm_t11: |
| 125 | ; CHECK: fmov.4s v0, #-0.32812500 |
| 126 | ret <4 x i32> <i32 3198681088, i32 3198681088, i32 3198681088, i32 3198681088> |
| 127 | } |
| 128 | |
| 129 | define <2 x i64> @movi_2d_imm_t12() nounwind readnone ssp { |
| 130 | entry: |
| 131 | ; CHECK-LABEL: movi_2d_imm_t12: |
| 132 | ; CHECK: fmov.2d v0, #-0.17187500 |
| 133 | ret <2 x i64> <i64 13818732506632945664, i64 13818732506632945664> |
| 134 | } |