Commit 058803ab authored by Bill Wendling's avatar Bill Wendling
Browse files

Merging r196153:

------------------------------------------------------------------------
r196153 | mcrosier | 2013-12-02 13:07:27 -0800 (Mon, 02 Dec 2013) | 2 lines

[AArch64] Implemented vcopy_lane patterns using scalar DUP instruction.
Patch by Ana Pazos!
------------------------------------------------------------------------

llvm-svn: 196232
parent 661ce140
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -835,13 +835,13 @@ def GET_LANE : IInst<"vget_lane", "sdi",
def SET_LANE : IInst<"vset_lane", "dsdi",
                     "csilPcPsUcUsUiUlQcQsQiQlQUcQUsQUiQUlPcPsQPcQPsfdQfQdPlQPl">;
def COPY_LANE : IOpInst<"vcopy_lane", "ddidi",
                        "csiPcPsUcUsUiPcPsfPl", OP_COPY_LN>;
                        "csilPcPsUcUsUiUlPcPsPlfd", OP_COPY_LN>;
def COPYQ_LANE : IOpInst<"vcopy_lane", "ddigi",
                        "QcQsQiQlQUcQUsQUiQUlQPcQPsQfQdQPl", OP_COPYQ_LN>;
def COPY_LANEQ : IOpInst<"vcopy_laneq", "ddiki",
                     "csiPcPsUcUsUif", OP_COPY_LNQ>;
                     "csilPcPsPlUcUsUiUlf", OP_COPY_LNQ>;
def COPYQ_LANEQ : IOpInst<"vcopy_laneq", "ddidi",
                     "QcQsQiQlQUcQUsQUiQUlQPcQPsQfdQPl", OP_COPY_LN>;
                     "QcQsQiQlQUcQUsQUiQUlQPcQPsQfdQdQPl", OP_COPY_LN>;

////////////////////////////////////////////////////////////////////////////////
// Set all lanes to same value
+53 −0
Original line number Diff line number Diff line
@@ -1192,3 +1192,56 @@ float64x2_t test_vmovq_n_f64(float64_t v1) {
  return vmovq_n_f64(v1);
  // CHECK: dup {{v[0-9]+}}.2d, {{v[0-9]+}}.d[0]
}

// CHECK: test_vcopy_lane_s64
int64x1_t test_vcopy_lane_s64(int64x1_t a, int64x1_t c) {
  return vcopy_lane_s64(a, 0, c, 0);
// CHECK: fmov {{d[0-9]+}}, {{d[0-9]+}}
// CHECK-NOT: dup {{d[0-9]+}}, {{v[0-9]+}}.d[0]
}

// CHECK: test_vcopy_lane_u64
uint64x1_t test_vcopy_lane_u64(uint64x1_t a, uint64x1_t c) {
  return vcopy_lane_u64(a, 0, c, 0);
// CHECK: fmov {{d[0-9]+}}, {{d[0-9]+}}
// CHECK-NOT: dup {{d[0-9]+}}, {{v[0-9]+}}.d[0]
}

// CHECK: test_vcopy_lane_f64
float64x1_t test_vcopy_lane_f64(float64x1_t a, float64x1_t c) {
  return vcopy_lane_f64(a, 0, c, 0);
// CHECK: fmov {{d[0-9]+}}, {{d[0-9]+}}
// CHECK-NOT: dup {{d[0-9]+}}, {{v[0-9]+}}.d[0]
}

// CHECK: test_vcopy_laneq_s64
int64x1_t test_vcopy_laneq_s64(int64x1_t a, int64x2_t c) {
  return vcopy_laneq_s64(a, 0, c, 1);
// CHECK: dup {{d[0-9]+}}, {{v[0-9]+}}.d[1]
}

// CHECK: test_vcopy_laneq_u64
uint64x1_t test_vcopy_laneq_u64(uint64x1_t a, uint64x2_t c) {
  return vcopy_laneq_u64(a, 0, c, 1);
// CHECK: dup {{d[0-9]+}}, {{v[0-9]+}}.d[1]
}

// CHECK: test_vcopy_laneq_f64
float64x1_t test_vcopy_laneq_f64(float64x1_t a, float64x1_t c) {
  return vcopy_laneq_f64(a, 0, c, 0);
// CHECK: fmov {{d[0-9]+}}, {{d[0-9]+}}
// CHECK-NOT: dup {{d[0-9]+}}, {{v[0-9]+}}.d[0]
}

// CHECK: test_vcopy_laneq_p64
poly64x1_t test_vcopy_laneq_p64(poly64x1_t a, poly64x2_t c) {
  return vcopy_laneq_p64(a, 0, c, 1);
// CHECK: dup {{d[0-9]+}}, {{v[0-9]+}}.d[1]
}

// CHECK: test_vcopyq_laneq_f64
float64x2_t test_vcopyq_laneq_f64(float64x2_t a, float64x2_t c) {
// CHECK: ins  {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[1]
  return vcopyq_laneq_f64(a, 1, c, 1);
}