]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR target/64304 (AArch64 miscompilation with -mgeneral-regs-only)
authorFei Yang <fyang@gcc.gnu.org>
Tue, 5 May 2015 15:59:12 +0000 (15:59 +0000)
committerFei Yang <fyang@gcc.gnu.org>
Tue, 5 May 2015 15:59:12 +0000 (15:59 +0000)
        Backported from mainline
        2015-01-19  Jiong Wang  <jiong.wang@arm.com>
                    Andrew Pinski  <apinski@cavium.com>

        PR target/64304
        * config/aarch64/aarch64.md (define_insn "*ashl<mode>3_insn"): Deleted.
        (ashl<mode>3): Don't expand if operands[2] is not constant.

From-SVN: r222814

gcc/ChangeLog
gcc/config/aarch64/aarch64.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/aarch64/pr64304.c [new file with mode: 0644]

index 5648860fd0d35f12e7a66f4962c22de549dbbd82..b57291553a0953f922ced91cedf6cc16b57bee6d 100644 (file)
@@ -1,3 +1,13 @@
+2015-05-05  Shanyao Chen  <chenshanyao@huawei.com>
+
+       Backported from mainline
+       2015-01-19  Jiong Wang  <jiong.wang@arm.com>
+                   Andrew Pinski  <apinski@cavium.com>
+
+       PR target/64304
+       * config/aarch64/aarch64.md (define_insn "*ashl<mode>3_insn"): Deleted.
+       (ashl<mode>3): Don't expand if operands[2] is not constant.
+
 2015-05-05  Peter Bergner  <bergner@vnet.ibm.com>
 
        Backport from mainline.
index c879024ebf686910381d98780baeb3c5fc66cc1f..f5c0761d4f1ba88820bc38e240d1f7b45f528a75 100644 (file)
            DONE;
           }
       }
+    else
+      FAIL;
   }
 )
 
    (set_attr "mode" "SI")]
 )
 
-(define_insn "*ashl<mode>3_insn"
-  [(set (match_operand:SHORT 0 "register_operand" "=r")
-       (ashift:SHORT (match_operand:SHORT 1 "register_operand" "r")
-                     (match_operand:QI 2 "aarch64_reg_or_shift_imm_si" "rUss")))]
-  ""
-  "lsl\\t%<w>0, %<w>1, %<w>2"
-  [(set_attr "v8type" "shift")
-   (set_attr "mode" "<MODE>")]
-)
-
 (define_insn "*<optab><mode>3_insn"
   [(set (match_operand:SHORT 0 "register_operand" "=r")
        (ASHIFT:SHORT (match_operand:SHORT 1 "register_operand" "r")
index 2f354153452504d432c7ef6684d37e6eb947fa6a..dde3fb3e441e88175c3e7ba1195fb7adc60dd9b0 100644 (file)
@@ -1,3 +1,10 @@
+2015-05-05  Shanyao chen  <chenshanyao@huawei.com>
+
+       Backported from mainline
+       2015-01-19  Jiong Wang  <jiong.wang@arm.com>
+
+       * gcc.target/aarch64/pr64304.c: New testcase.
+
 2015-05-05  Peter Bergner  <bergner@vnet.ibm.com>
 
        Backport from mainline.
diff --git a/gcc/testsuite/gcc.target/aarch64/pr64304.c b/gcc/testsuite/gcc.target/aarch64/pr64304.c
new file mode 100644 (file)
index 0000000..721b6b9
--- /dev/null
@@ -0,0 +1,18 @@
+/* { dg-do compile } */ 
+/* { dg-options "-O2 --save-temps" } */ 
+unsigned char byte = 0; 
+  
+void 
+set_bit (unsigned int bit, unsigned char value) 
+{ 
+  unsigned char mask = (unsigned char) (1 << (bit & 7)); 
+  if (! value) 
+    byte &= (unsigned char)~mask; 
+  else 
+    byte |= mask; 
+    /* { dg-final { scan-assembler "and\tw\[0-9\]+, w\[0-9\]+, 7" } } */ 
+} 
+  
+/* { dg-final { cleanup-saved-temps } } */