1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
Upstream-Status: Inappropriate [Backport]
From 05f12c826eff0c87deeac7347d73cb276ec493cc Mon Sep 17 00:00:00 2001
From: danglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Wed, 20 Apr 2011 23:36:20 +0000
Subject: [PATCH 157/200] PR target/48288
* config/pa/predicates.md (ior_operand): Delete predicate.
(cint_ior_operand, reg_or_cint_ior_operand): New predicates.
* config/pa/pa.md (iordi3): Use reg_or_cint_ior_operand predicate in
expander. Use cint_ior_operand in unnamed insn.
(iorsi3): Likewise.
* config/pa/pa-protos.h (ior_operand): Delete declarations.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172797 138bc75d-0d04-0410-961f-82ee72b054a4
index 085b648..dc42e55 100644
--- a/gcc/config/pa/pa-protos.h
+++ b/gcc/config/pa/pa-protos.h
@@ -80,7 +80,6 @@ extern int move_src_operand (rtx, enum machine_mode);
extern int prefetch_cc_operand (rtx, enum machine_mode);
extern int prefetch_nocc_operand (rtx, enum machine_mode);
extern int and_operand (rtx, enum machine_mode);
-extern int ior_operand (rtx, enum machine_mode);
extern int arith32_operand (rtx, enum machine_mode);
extern int uint32_operand (rtx, enum machine_mode);
extern int reg_before_reload_operand (rtx, enum machine_mode);
@@ -95,7 +94,6 @@ extern int ireg_or_int5_operand (rtx, enum machine_mode);
extern int fmpyaddoperands (rtx *);
extern int fmpysuboperands (rtx *);
extern int call_operand_address (rtx, enum machine_mode);
-extern int ior_operand (rtx, enum machine_mode);
extern void emit_bcond_fp (rtx[]);
extern int emit_move_sequence (rtx *, enum machine_mode, rtx);
extern int emit_hpdiv_const (rtx *, int);
diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md
index 24317a5..a1c92ac 100644
--- a/gcc/config/pa/pa.md
+++ b/gcc/config/pa/pa.md
@@ -5686,7 +5686,7 @@
(define_expand "iordi3"
[(set (match_operand:DI 0 "register_operand" "")
(ior:DI (match_operand:DI 1 "register_operand" "")
- (match_operand:DI 2 "ior_operand" "")))]
+ (match_operand:DI 2 "reg_or_cint_ior_operand" "")))]
""
"
{
@@ -5707,7 +5707,7 @@
(define_insn ""
[(set (match_operand:DI 0 "register_operand" "=r,r")
(ior:DI (match_operand:DI 1 "register_operand" "0,0")
- (match_operand:DI 2 "ior_operand" "M,i")))]
+ (match_operand:DI 2 "cint_ior_operand" "M,i")))]
"TARGET_64BIT"
"* return output_64bit_ior (operands); "
[(set_attr "type" "binary,shift")
@@ -5726,19 +5726,14 @@
(define_expand "iorsi3"
[(set (match_operand:SI 0 "register_operand" "")
(ior:SI (match_operand:SI 1 "register_operand" "")
- (match_operand:SI 2 "arith32_operand" "")))]
+ (match_operand:SI 2 "reg_or_cint_ior_operand" "")))]
""
- "
-{
- if (! (ior_operand (operands[2], SImode)
- || register_operand (operands[2], SImode)))
- operands[2] = force_reg (SImode, operands[2]);
-}")
+ "")
(define_insn ""
[(set (match_operand:SI 0 "register_operand" "=r,r")
(ior:SI (match_operand:SI 1 "register_operand" "0,0")
- (match_operand:SI 2 "ior_operand" "M,i")))]
+ (match_operand:SI 2 "cint_ior_operand" "M,i")))]
""
"* return output_ior (operands); "
[(set_attr "type" "binary,shift")
diff --git a/gcc/config/pa/predicates.md b/gcc/config/pa/predicates.md
index 350e42b..ea41169 100644
--- a/gcc/config/pa/predicates.md
+++ b/gcc/config/pa/predicates.md
@@ -411,11 +411,15 @@
;; True iff depi can be used to compute (reg | OP).
-(define_predicate "ior_operand"
- (match_code "const_int")
-{
- return (GET_CODE (op) == CONST_INT && ior_mask_p (INTVAL (op)));
-})
+(define_predicate "cint_ior_operand"
+ (and (match_code "const_int")
+ (match_test "ior_mask_p (INTVAL (op))")))
+
+;; True iff OP can be used to compute (reg | OP).
+
+(define_predicate "reg_or_cint_ior_operand"
+ (ior (match_operand 0 "register_operand")
+ (match_operand 0 "cint_ior_operand")))
;; True iff OP is a CONST_INT of the forms 0...0xxxx or
;; 0...01...1xxxx. Such values can be the left hand side x in (x <<
--
1.7.0.4
|