* builtins.c (expand_builtin_sync_operation): Fold nand to and
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 18 Apr 2005 16:02:14 +0000 (16:02 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 18 Apr 2005 16:02:14 +0000 (16:02 +0000)
        for constants.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@98324 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/builtins.c

index 924cf26..621d263 100644 (file)
@@ -1,3 +1,8 @@
+2005-04-18  Richard Henderson  <rth@redhat.com>
+
+       * builtins.c (expand_builtin_sync_operation): Fold nand to and
+       for constants.
+
 2005-04-18  Devang Patel  <dpatel@apple.com>
 
        * config/rs6000/atlivec.md (mulv4si3): New pattern.
index 33102e0..e907752 100644 (file)
@@ -5255,13 +5255,20 @@ expand_builtin_sync_operation (tree arglist, enum rtx_code code, bool after,
 {
   enum machine_mode mode;
   rtx addr, val, mem;
+  tree valt;
 
   /* Expand the operands.  */
   addr = expand_expr (TREE_VALUE (arglist), NULL, Pmode, EXPAND_SUM);
   mode = TYPE_MODE (TREE_TYPE (TREE_TYPE (TREE_VALUE (arglist))));
 
   arglist = TREE_CHAIN (arglist);
-  val = expand_expr (TREE_VALUE (arglist), NULL, mode, EXPAND_NORMAL);
+  valt = TREE_VALUE (arglist);
+  if (code == NOT && TREE_CONSTANT (valt))
+    {
+      valt = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (valt), valt);
+      code = AND;
+    }
+  val = expand_expr (valt, NULL, mode, EXPAND_NORMAL);
 
   /* Note that we explicitly do not want any alias information for this
      memory, so that we kill all other live memories.  Otherwise we don't