rs6000.md (prefetch): Generate ISA 2.06 instructions dcbtt and dcbtstt if operands...
authorCarl Love <cel@us.ibm.com>
Thu, 10 May 2018 20:22:22 +0000 (20:22 +0000)
committerCarl Love <carll@gcc.gnu.org>
Thu, 10 May 2018 20:22:22 +0000 (20:22 +0000)
gcc/ChangeLog:

2018-05-10  Carl Love  <cel@us.ibm.com>

* config/rs6000/rs6000.md (prefetch): Generate ISA 2.06 instructions
dcbtt and dcbtstt if operands[2] is 0.

From-SVN: r260134

gcc/ChangeLog
gcc/config/rs6000/rs6000.md

index 9b4684c0d225390f788fac2f850c415746dd2d4d..64ec271e7cce6715eed97823963df1448b407d1a 100644 (file)
@@ -1,3 +1,8 @@
+2018-05-10  Carl Love  <cel@us.ibm.com>
+
+       * config/rs6000/rs6000.md (prefetch): Generate ISA 2.06 instructions
+       dcbtt and dcbtstt if operands[2] is 0.
+
 2018-05-10  Uros Bizjak  <ubizjak@gmail.com>
 
        PR target/85693
index 26c90b36c806f52b025f6a7a5ddd2a4b7bd5edb1..253d3f24f95132181e1c8e988bd670c819dbe207 100644 (file)
             (match_operand:SI 2 "const_int_operand" "n"))]
   ""
 {
-  if (GET_CODE (operands[0]) == REG)
-    return INTVAL (operands[1]) ? "dcbtst 0,%0" : "dcbt 0,%0";
-  return INTVAL (operands[1]) ? "dcbtst %a0" : "dcbt %a0";
+  /* dcbtstt, dcbtt and TM=0b10000 support starts with ISA 2.06.  */
+  int inst_select = INTVAL (operands[2]) || !TARGET_POPCNTD;
+
+  if (REG_P (operands[0]))
+    {
+      if (INTVAL (operands[1]) == 0)
+        return inst_select ? "dcbt 0,%0" : "dcbtt 0,%0";
+      else
+        return inst_select ? "dcbtst 0,%0" : "dcbtstt 0,%0";
+    }
+  else
+    {
+      if (INTVAL (operands[1]) == 0)
+        return inst_select ? "dcbt %a0" : "dcbtt %a0";
+      else
+        return inst_select ? "dcbtst %a0" : "dcbtstt %a0";
+    }
 }
   [(set_attr "type" "load")])
 \f