Commit 3d33d06b by Sofiane Naci Committed by Sofiane Naci

aarch64-simd.md (aarch64_dup_lane<mode>): Add r<-w alternative and update.

	gcc/
	* config/aarch64/aarch64-simd.md (aarch64_dup_lane<mode>): Add r<-w
	alternative and update.
	(aarch64_dup_lanedi): Delete.
	* config/aarch64/arm_neon.h (vdup<bhsd>_lane_*): Update.
	* config/aarch64/aarch64-simd-builtins.def: Update.

	testsuite/
	* gcc.target/aarch64/scalar_intrinsics.c: Update.

From-SVN: r200152
parent ee03e71d
2013-06-17 Sofiane Naci <sofiane.naci@arm.com>
* config/aarch64/aarch64-simd.md (aarch64_dup_lane<mode>): Add r<-w
alternative and update.
(aarch64_dup_lanedi): Delete.
* config/aarch64/arm_neon.h (vdup<bhsd>_lane_*): Update.
* config/aarch64/aarch64-simd-builtins.def: Update.
2013-06-17 Richard Biener <rguenther@suse.de> 2013-06-17 Richard Biener <rguenther@suse.de>
* lto-streamer.h (enum LTO_tags): Add LTO_tree_scc. * lto-streamer.h (enum LTO_tags): Add LTO_tree_scc.
......
...@@ -64,7 +64,7 @@ ...@@ -64,7 +64,7 @@
BUILTIN_VQ (REINTERP, reinterpretv2df, 0) BUILTIN_VQ (REINTERP, reinterpretv2df, 0)
BUILTIN_VDQ_I (BINOP, dup_lane, 0) BUILTIN_VDQ_I (BINOP, dup_lane, 0)
BUILTIN_SDQ_I (BINOP, dup_lane, 0) BUILTIN_VDQ_I (BINOP, dup_lane_scalar, 0)
/* Implemented by aarch64_<sur>q<r>shl<mode>. */ /* Implemented by aarch64_<sur>q<r>shl<mode>. */
BUILTIN_VSDQ_I (BINOP, sqshl, 0) BUILTIN_VSDQ_I (BINOP, sqshl, 0)
BUILTIN_VSDQ_I (BINOP, uqshl, 0) BUILTIN_VSDQ_I (BINOP, uqshl, 0)
......
...@@ -357,29 +357,18 @@ ...@@ -357,29 +357,18 @@
(set_attr "simd_mode" "<MODE>")] (set_attr "simd_mode" "<MODE>")]
) )
(define_insn "aarch64_dup_lane<mode>" (define_insn "aarch64_dup_lane_scalar<mode>"
[(set (match_operand:ALLX 0 "register_operand" "=w") [(set (match_operand:<VEL> 0 "register_operand" "=w, r")
(vec_select:<VEL> (vec_select:<VEL>
(match_operand:<VCON> 1 "register_operand" "w") (match_operand:VDQ 1 "register_operand" "w, w")
(parallel [(match_operand:SI 2 "immediate_operand" "i")]) (parallel [(match_operand:SI 2 "immediate_operand" "i, i")])
))] ))]
"TARGET_SIMD" "TARGET_SIMD"
"dup\\t%<v>0<Vmtype>, %1.<Vetype>[%2]"
[(set_attr "simd_type" "simd_dup")
(set_attr "simd_mode" "<MODE>")]
)
(define_insn "aarch64_dup_lanedi"
[(set (match_operand:DI 0 "register_operand" "=w,r")
(vec_select:DI
(match_operand:V2DI 1 "register_operand" "w,w")
(parallel [(match_operand:SI 2 "immediate_operand" "i,i")])))]
"TARGET_SIMD"
"@ "@
dup\\t%<v>0<Vmtype>, %1.<Vetype>[%2] dup\\t%<Vetype>0, %1.<Vetype>[%2]
umov\t%0, %1.d[%2]" umov\\t%<vw>0, %1.<Vetype>[%2]"
[(set_attr "simd_type" "simd_dup") [(set_attr "simd_type" "simd_dup, simd_movgp")
(set_attr "simd_mode" "DI")] (set_attr "simd_mode" "<MODE>")]
) )
(define_insn "aarch64_simd_dup<mode>" (define_insn "aarch64_simd_dup<mode>"
......
...@@ -20234,49 +20234,49 @@ vcvtpq_u64_f64 (float64x2_t __a) ...@@ -20234,49 +20234,49 @@ vcvtpq_u64_f64 (float64x2_t __a)
__extension__ static __inline int8x1_t __attribute__ ((__always_inline__)) __extension__ static __inline int8x1_t __attribute__ ((__always_inline__))
vdupb_lane_s8 (int8x16_t a, int const b) vdupb_lane_s8 (int8x16_t a, int const b)
{ {
return __builtin_aarch64_dup_laneqi (a, b); return __builtin_aarch64_dup_lane_scalarv16qi (a, b);
} }
__extension__ static __inline uint8x1_t __attribute__ ((__always_inline__)) __extension__ static __inline uint8x1_t __attribute__ ((__always_inline__))
vdupb_lane_u8 (uint8x16_t a, int const b) vdupb_lane_u8 (uint8x16_t a, int const b)
{ {
return (uint8x1_t) __builtin_aarch64_dup_laneqi ((int8x16_t) a, b); return (uint8x1_t) __builtin_aarch64_dup_lane_scalarv16qi ((int8x16_t) a, b);
} }
__extension__ static __inline int16x1_t __attribute__ ((__always_inline__)) __extension__ static __inline int16x1_t __attribute__ ((__always_inline__))
vduph_lane_s16 (int16x8_t a, int const b) vduph_lane_s16 (int16x8_t a, int const b)
{ {
return __builtin_aarch64_dup_lanehi (a, b); return __builtin_aarch64_dup_lane_scalarv8hi (a, b);
} }
__extension__ static __inline uint16x1_t __attribute__ ((__always_inline__)) __extension__ static __inline uint16x1_t __attribute__ ((__always_inline__))
vduph_lane_u16 (uint16x8_t a, int const b) vduph_lane_u16 (uint16x8_t a, int const b)
{ {
return (uint16x1_t) __builtin_aarch64_dup_lanehi ((int16x8_t) a, b); return (uint16x1_t) __builtin_aarch64_dup_lane_scalarv8hi ((int16x8_t) a, b);
} }
__extension__ static __inline int32x1_t __attribute__ ((__always_inline__)) __extension__ static __inline int32x1_t __attribute__ ((__always_inline__))
vdups_lane_s32 (int32x4_t a, int const b) vdups_lane_s32 (int32x4_t a, int const b)
{ {
return __builtin_aarch64_dup_lanesi (a, b); return __builtin_aarch64_dup_lane_scalarv4si (a, b);
} }
__extension__ static __inline uint32x1_t __attribute__ ((__always_inline__)) __extension__ static __inline uint32x1_t __attribute__ ((__always_inline__))
vdups_lane_u32 (uint32x4_t a, int const b) vdups_lane_u32 (uint32x4_t a, int const b)
{ {
return (uint32x1_t) __builtin_aarch64_dup_lanesi ((int32x4_t) a, b); return (uint32x1_t) __builtin_aarch64_dup_lane_scalarv4si ((int32x4_t) a, b);
} }
__extension__ static __inline int64x1_t __attribute__ ((__always_inline__)) __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
vdupd_lane_s64 (int64x2_t a, int const b) vdupd_lane_s64 (int64x2_t a, int const b)
{ {
return __builtin_aarch64_dup_lanedi (a, b); return __builtin_aarch64_dup_lane_scalarv2di (a, b);
} }
__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
vdupd_lane_u64 (uint64x2_t a, int const b) vdupd_lane_u64 (uint64x2_t a, int const b)
{ {
return (uint64x1_t) __builtin_aarch64_dup_lanedi ((int64x2_t) a, b); return (uint64x1_t) __builtin_aarch64_dup_lane_scalarv2di ((int64x2_t) a, b);
} }
/* vldn */ /* vldn */
......
2013-06-17 Sofiane Naci <sofiane.naci@arm.com>
* gcc.target/aarch64/scalar_intrinsics.c: Update.
2013-06-17 Paolo Carlini <paolo.carlini@oracle.com> 2013-06-17 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/16128 PR c++/16128
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O2" } */ /* { dg-options "-O2 -dp" } */
#include <arm_neon.h> #include <arm_neon.h>
...@@ -181,7 +181,7 @@ test_vcltzd_s64 (int64x1_t a) ...@@ -181,7 +181,7 @@ test_vcltzd_s64 (int64x1_t a)
return res; return res;
} }
/* { dg-final { scan-assembler-times "\\tdup\\tb\[0-9\]+, v\[0-9\]+\.b" 2 } } */ /* { dg-final { scan-assembler-times "aarch64_dup_lane_scalarv16qi" 2 } } */
int8x1_t int8x1_t
test_vdupb_lane_s8 (int8x16_t a) test_vdupb_lane_s8 (int8x16_t a)
...@@ -195,7 +195,7 @@ test_vdupb_lane_u8 (uint8x16_t a) ...@@ -195,7 +195,7 @@ test_vdupb_lane_u8 (uint8x16_t a)
return vdupb_lane_u8 (a, 2); return vdupb_lane_u8 (a, 2);
} }
/* { dg-final { scan-assembler-times "\\tdup\\th\[0-9\]+, v\[0-9\]+\.h" 2 } } */ /* { dg-final { scan-assembler-times "aarch64_dup_lane_scalarv8hi" 2 } } */
int16x1_t int16x1_t
test_vduph_lane_s16 (int16x8_t a) test_vduph_lane_s16 (int16x8_t a)
...@@ -209,7 +209,7 @@ test_vduph_lane_u16 (uint16x8_t a) ...@@ -209,7 +209,7 @@ test_vduph_lane_u16 (uint16x8_t a)
return vduph_lane_u16 (a, 2); return vduph_lane_u16 (a, 2);
} }
/* { dg-final { scan-assembler-times "\\tdup\\ts\[0-9\]+, v\[0-9\]+\.s" 2 } } */ /* { dg-final { scan-assembler-times "aarch64_dup_lane_scalarv4si" 2 } } */
int32x1_t int32x1_t
test_vdups_lane_s32 (int32x4_t a) test_vdups_lane_s32 (int32x4_t a)
...@@ -223,7 +223,7 @@ test_vdups_lane_u32 (uint32x4_t a) ...@@ -223,7 +223,7 @@ test_vdups_lane_u32 (uint32x4_t a)
return vdups_lane_u32 (a, 2); return vdups_lane_u32 (a, 2);
} }
/* { dg-final { scan-assembler-times "\\tumov\\tx\[0-9\]+, v\[0-9\]+\.d" 2 } } */ /* { dg-final { scan-assembler-times "aarch64_dup_lane_scalarv2di" 2 } } */
int64x1_t int64x1_t
test_vdupd_lane_s64 (int64x2_t a) test_vdupd_lane_s64 (int64x2_t a)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment