aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Edelsohn <dje.gcc@gmail.com>2014-04-09 19:53:39 +0000
committerDavid Edelsohn <dje@gcc.gnu.org>2014-04-09 15:53:39 -0400
commit8267f6bb0819e2ac831b3d3a9207d7f6710f6bfc (patch)
tree7e8d6b1a2885cc33be6ab56c93dab6bbaf99757c
parent51970b3e3331087ad597ccd3c5df9f788e9fe3e5 (diff)
downloadgcc-8267f6bb0819e2ac831b3d3a9207d7f6710f6bfc.zip
gcc-8267f6bb0819e2ac831b3d3a9207d7f6710f6bfc.tar.gz
gcc-8267f6bb0819e2ac831b3d3a9207d7f6710f6bfc.tar.bz2
Revert
2014-04-08 Pat Haugen <pthaugen@us.ibm.com> * config/rs6000/sync.md (AINT mode_iterator): Move definition. (loadsync_<mode>): Change mode. (load_quadpti, store_quadpti): New. (atomic_load<mode>, atomic_store<mode>): Add support for TI mode. * config/rs6000/rs6000.md (unspec enum): Add UNSPEC_LSQ. * config/rs6000/predicates.md (quad_memory_operand): !TARGET_SYNC_TI. From-SVN: r209253
-rw-r--r--gcc/ChangeLog12
-rw-r--r--gcc/config/rs6000/predicates.md4
-rw-r--r--gcc/config/rs6000/rs6000.md1
-rw-r--r--gcc/config/rs6000/sync.md105
4 files changed, 29 insertions, 93 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5803746..d55168e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,15 @@
+2014-04-09 David Edelsohn <dje.gcc@gmail.com>
+
+ Revert
+ 2014-04-08 Pat Haugen <pthaugen@us.ibm.com>
+
+ * config/rs6000/sync.md (AINT mode_iterator): Move definition.
+ (loadsync_<mode>): Change mode.
+ (load_quadpti, store_quadpti): New.
+ (atomic_load<mode>, atomic_store<mode>): Add support for TI mode.
+ * config/rs6000/rs6000.md (unspec enum): Add UNSPEC_LSQ.
+ * config/rs6000/predicates.md (quad_memory_operand): !TARGET_SYNC_TI.
+
2014-04-09 Cong Hou <congh@google.com>
PR testsuite/60773
diff --git a/gcc/config/rs6000/predicates.md b/gcc/config/rs6000/predicates.md
index d204835..28f4f5d 100644
--- a/gcc/config/rs6000/predicates.md
+++ b/gcc/config/rs6000/predicates.md
@@ -624,14 +624,14 @@
(match_test "offsettable_nonstrict_memref_p (op)")))
;; Return 1 if the operand is suitable for load/store quad memory.
-;; This predicate only checks for non-atomic loads/stores (not lqarx/stqcx).
+;; This predicate only checks for non-atomic loads/stores.
(define_predicate "quad_memory_operand"
(match_code "mem")
{
rtx addr, op0, op1;
int ret;
- if (!TARGET_QUAD_MEMORY && !TARGET_SYNC_TI)
+ if (!TARGET_QUAD_MEMORY)
ret = 0;
else if (!memory_operand (op, mode))
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index f220f43..738011c 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -125,7 +125,6 @@
UNSPEC_P8V_MTVSRD
UNSPEC_P8V_XXPERMDI
UNSPEC_P8V_RELOAD_FROM_VSX
- UNSPEC_LSQ
])
;;
diff --git a/gcc/config/rs6000/sync.md b/gcc/config/rs6000/sync.md
index 63152ed..7db4390 100644
--- a/gcc/config/rs6000/sync.md
+++ b/gcc/config/rs6000/sync.md
@@ -107,17 +107,10 @@
"isync"
[(set_attr "type" "isync")])
-;; Types that we should provide atomic instructions for.
-(define_mode_iterator AINT [QI
- HI
- SI
- (DI "TARGET_POWERPC64")
- (TI "TARGET_SYNC_TI")])
-
;; The control dependency used for load dependency described
;; in B.2.3 of the Power ISA 2.06B.
(define_insn "loadsync_<mode>"
- [(unspec_volatile:BLK [(match_operand:AINT 0 "register_operand" "r")]
+ [(unspec_volatile:BLK [(match_operand:INT1 0 "register_operand" "r")]
UNSPECV_ISYNC)
(clobber (match_scratch:CC 1 "=y"))]
""
@@ -125,56 +118,18 @@
[(set_attr "type" "isync")
(set_attr "length" "12")])
-(define_insn "load_quadpti"
- [(set (match_operand:PTI 0 "quad_int_reg_operand" "=&r")
- (unspec:PTI
- [(match_operand:TI 1 "quad_memory_operand" "wQ")] UNSPEC_LSQ))]
- "TARGET_SYNC_TI
- && !reg_mentioned_p (operands[0], operands[1])"
- "lq %0,%1"
- [(set_attr "type" "load")
- (set_attr "length" "4")])
-
(define_expand "atomic_load<mode>"
- [(set (match_operand:AINT 0 "register_operand" "") ;; output
- (match_operand:AINT 1 "memory_operand" "")) ;; memory
+ [(set (match_operand:INT1 0 "register_operand" "") ;; output
+ (match_operand:INT1 1 "memory_operand" "")) ;; memory
(use (match_operand:SI 2 "const_int_operand" ""))] ;; model
""
{
- if (<MODE>mode == TImode && !TARGET_SYNC_TI)
- FAIL;
-
enum memmodel model = (enum memmodel) INTVAL (operands[2]);
if (model == MEMMODEL_SEQ_CST)
emit_insn (gen_hwsync ());
- if (<MODE>mode != TImode)
- emit_move_insn (operands[0], operands[1]);
- else
- {
- rtx op0 = operands[0];
- rtx op1 = operands[1];
- rtx pti_reg = gen_reg_rtx (PTImode);
-
- // Can't have indexed address for 'lq'
- if (indexed_address (XEXP (op1, 0), TImode))
- {
- rtx old_addr = XEXP (op1, 0);
- rtx new_addr = force_reg (Pmode, old_addr);
- operands[1] = op1 = replace_equiv_address (op1, new_addr);
- }
-
- emit_insn (gen_load_quadpti (pti_reg, op1));
-
- if (WORDS_BIG_ENDIAN)
- emit_move_insn (op0, gen_lowpart (TImode, pti_reg));
- else
- {
- emit_move_insn (gen_lowpart (DImode, op0), gen_highpart (DImode, pti_reg));
- emit_move_insn (gen_highpart (DImode, op0), gen_lowpart (DImode, pti_reg));
- }
- }
+ emit_move_insn (operands[0], operands[1]);
switch (model)
{
@@ -191,24 +146,12 @@
DONE;
})
-(define_insn "store_quadpti"
- [(set (match_operand:PTI 0 "quad_memory_operand" "=wQ")
- (unspec:PTI
- [(match_operand:PTI 1 "quad_int_reg_operand" "r")] UNSPEC_LSQ))]
- "TARGET_SYNC_TI"
- "stq %1,%0"
- [(set_attr "type" "store")
- (set_attr "length" "4")])
-
(define_expand "atomic_store<mode>"
- [(set (match_operand:AINT 0 "memory_operand" "") ;; memory
- (match_operand:AINT 1 "register_operand" "")) ;; input
+ [(set (match_operand:INT1 0 "memory_operand" "") ;; memory
+ (match_operand:INT1 1 "register_operand" "")) ;; input
(use (match_operand:SI 2 "const_int_operand" ""))] ;; model
""
{
- if (<MODE>mode == TImode && !TARGET_SYNC_TI)
- FAIL;
-
enum memmodel model = (enum memmodel) INTVAL (operands[2]);
switch (model)
{
@@ -223,33 +166,7 @@
default:
gcc_unreachable ();
}
- if (<MODE>mode != TImode)
- emit_move_insn (operands[0], operands[1]);
- else
- {
- rtx op0 = operands[0];
- rtx op1 = operands[1];
- rtx pti_reg = gen_reg_rtx (PTImode);
-
- // Can't have indexed address for 'stq'
- if (indexed_address (XEXP (op0, 0), TImode))
- {
- rtx old_addr = XEXP (op0, 0);
- rtx new_addr = force_reg (Pmode, old_addr);
- operands[0] = op0 = replace_equiv_address (op0, new_addr);
- }
-
- if (WORDS_BIG_ENDIAN)
- emit_move_insn (pti_reg, gen_lowpart (PTImode, op1));
- else
- {
- emit_move_insn (gen_lowpart (DImode, pti_reg), gen_highpart (DImode, op1));
- emit_move_insn (gen_highpart (DImode, pti_reg), gen_lowpart (DImode, op1));
- }
-
- emit_insn (gen_store_quadpti (gen_lowpart (PTImode, op0), pti_reg));
- }
-
+ emit_move_insn (operands[0], operands[1]);
DONE;
})
@@ -263,6 +180,14 @@
SI
(DI "TARGET_POWERPC64")])
+;; Types that we should provide atomic instructions for.
+
+(define_mode_iterator AINT [QI
+ HI
+ SI
+ (DI "TARGET_POWERPC64")
+ (TI "TARGET_SYNC_TI")])
+
(define_insn "load_locked<mode>"
[(set (match_operand:ATOMIC 0 "int_reg_operand" "=r")
(unspec_volatile:ATOMIC