From d8d5b17b93f710937e3fcd67840b62d42c6745a4 Mon Sep 17 00:00:00 2001 From: hainque Date: Wed, 6 Oct 2010 14:08:48 +0000 Subject: [PATCH] * config/rs6000/rs6000.c (rs6000_expand_ternop_builtin): Rewrite switch on insn codes as sequence of ifs. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@165025 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/config/rs6000/rs6000.c | 48 ++++++++++++++++++++++++---------------------- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 66f22dc3a00..441293ce247 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2010-10-06 Olivier Hainque + + * config/rs6000/rs6000.c (rs6000_expand_ternop_builtin): Rewrite + switch on insn codes as sequence of ifs. + 2010-10-06 Hariharan Sandanagobalane * config/picochip/picochip.c (TARGET_EXCEPT_UNWIND_INFO): Define it to be UI_NONE for picochip. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 030bb615f0c..adc1d1350b4 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -10904,12 +10904,18 @@ rs6000_expand_ternop_builtin (enum insn_code icode, tree exp, rtx target) || arg2 == error_mark_node) return const0_rtx; - switch (icode) + /* Check and prepare argument depending on the instruction code. + + Note that a switch statement instead of the sequence of tests + would be incorrect as many of the CODE_FOR values could be + CODE_FOR_nothing and that would yield multiple alternatives + with identical values. We'd never reach here at runtime in + this case. */ + if (icode == CODE_FOR_altivec_vsldoi_v4sf + || icode == CODE_FOR_altivec_vsldoi_v4si + || icode == CODE_FOR_altivec_vsldoi_v8hi + || icode == CODE_FOR_altivec_vsldoi_v16qi) { - case CODE_FOR_altivec_vsldoi_v4sf: - case CODE_FOR_altivec_vsldoi_v4si: - case CODE_FOR_altivec_vsldoi_v8hi: - case CODE_FOR_altivec_vsldoi_v16qi: /* Only allow 4-bit unsigned literals. */ STRIP_NOPS (arg2); if (TREE_CODE (arg2) != INTEGER_CST @@ -10918,16 +10924,16 @@ rs6000_expand_ternop_builtin (enum insn_code icode, tree exp, rtx target) error ("argument 3 must be a 4-bit unsigned literal"); return const0_rtx; } - break; - - case CODE_FOR_vsx_xxpermdi_v2df: - case CODE_FOR_vsx_xxpermdi_v2di: - case CODE_FOR_vsx_xxsldwi_v16qi: - case CODE_FOR_vsx_xxsldwi_v8hi: - case CODE_FOR_vsx_xxsldwi_v4si: - case CODE_FOR_vsx_xxsldwi_v4sf: - case CODE_FOR_vsx_xxsldwi_v2di: - case CODE_FOR_vsx_xxsldwi_v2df: + } + else if (icode == CODE_FOR_vsx_xxpermdi_v2df + || icode == CODE_FOR_vsx_xxpermdi_v2di + || icode == CODE_FOR_vsx_xxsldwi_v16qi + || icode == CODE_FOR_vsx_xxsldwi_v8hi + || icode == CODE_FOR_vsx_xxsldwi_v4si + || icode == CODE_FOR_vsx_xxsldwi_v4sf + || icode == CODE_FOR_vsx_xxsldwi_v2di + || icode == CODE_FOR_vsx_xxsldwi_v2df) + { /* Only allow 2-bit unsigned literals. */ STRIP_NOPS (arg2); if (TREE_CODE (arg2) != INTEGER_CST @@ -10936,10 +10942,10 @@ rs6000_expand_ternop_builtin (enum insn_code icode, tree exp, rtx target) error ("argument 3 must be a 2-bit unsigned literal"); return const0_rtx; } - break; - - case CODE_FOR_vsx_set_v2df: - case CODE_FOR_vsx_set_v2di: + } + else if (icode == CODE_FOR_vsx_set_v2df + || icode == CODE_FOR_vsx_set_v2di) + { /* Only allow 1-bit unsigned literals. */ STRIP_NOPS (arg2); if (TREE_CODE (arg2) != INTEGER_CST @@ -10948,10 +10954,6 @@ rs6000_expand_ternop_builtin (enum insn_code icode, tree exp, rtx target) error ("argument 3 must be a 1-bit unsigned literal"); return const0_rtx; } - break; - - default: - break; } if (target == 0 -- 2.11.4.GIT