aboutsummaryrefslogtreecommitdiff
path: root/gcc/genconfig.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/genconfig.c')
-rw-r--r--gcc/genconfig.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/gcc/genconfig.c b/gcc/genconfig.c
index 820e1d8..be06d83 100644
--- a/gcc/genconfig.c
+++ b/gcc/genconfig.c
@@ -126,7 +126,15 @@ walk_insn_part (part, recog_p, non_pc_set_src)
return;
case IF_THEN_ELSE:
- if (recog_p && non_pc_set_src)
+ /* Only consider this machine as having a conditional move if the
+ two arms of the IF_THEN_ELSE are both MATCH_OPERAND. Otherwise,
+ we have some specific IF_THEN_ELSE construct (like the doz
+ instruction on the RS/6000) that can't be used in the general
+ context we want it for. */
+
+ if (recog_p && non_pc_set_src
+ && GET_CODE (XEXP (part, 1)) == MATCH_OPERAND
+ && GET_CODE (XEXP (part, 2)) == MATCH_OPERAND)
have_cmove_flag = 1;
break;