aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.c-torture
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2019-10-19 14:46:57 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2019-10-19 14:46:57 +0200
commit15643a0dfc60e8e53d9b66165f4e2f4fcd8d98de (patch)
tree3f46d62c0e0d813672986e1e5292eaaeb307b3d7 /gcc/testsuite/gcc.c-torture
parent2366bf60c667d968c88e7bcec2eb9e2b84d0172d (diff)
downloadgcc-15643a0dfc60e8e53d9b66165f4e2f4fcd8d98de.zip
gcc-15643a0dfc60e8e53d9b66165f4e2f4fcd8d98de.tar.gz
gcc-15643a0dfc60e8e53d9b66165f4e2f4fcd8d98de.tar.bz2
re PR target/92140 (clang vs gcc optimizing with adc/sbb)
PR target/92140 * config/i386/predicates.md (int_nonimmediate_operand): New special predicate. * config/i386/i386.md (*add<mode>3_eq, *add<mode>3_ne, *add<mode>3_eq_0, *add<mode>3_ne_0, *sub<mode>3_eq, *sub<mode>3_ne, *sub<mode>3_eq_1, *sub<mode>3_eq_0, *sub<mode>3_ne_0): New define_insn_and_split patterns. * gcc.target/i386/pr92140.c: New test. * gcc.c-torture/execute/pr92140.c: New test. Co-Authored-By: Uros Bizjak <ubizjak@gmail.com> From-SVN: r277203
Diffstat (limited to 'gcc/testsuite/gcc.c-torture')
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr92140.c83
1 files changed, 83 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr92140.c b/gcc/testsuite/gcc.c-torture/execute/pr92140.c
new file mode 100644
index 0000000..1036fd8
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr92140.c
@@ -0,0 +1,83 @@
+/* PR target/92140 */
+
+char c;
+int v;
+
+__attribute__((noipa)) void f1 (void) { v += c != 0; }
+__attribute__((noipa)) void f2 (void) { v -= c != 0; }
+__attribute__((noipa)) void f3 (void) { v += c == 0; }
+__attribute__((noipa)) void f4 (void) { v -= c == 0; }
+__attribute__((noipa)) void f5 (void) { v += (c != 0) - 26; }
+__attribute__((noipa)) void f6 (void) { v -= (c != 0) - 26; }
+__attribute__((noipa)) void f7 (void) { v += (c == 0) - 26; }
+__attribute__((noipa)) void f8 (void) { v -= (c == 0) - 26; }
+__attribute__((noipa)) void f9 (void) { v += (c != 0) + 42; }
+__attribute__((noipa)) void f10 (void) { v -= (c != 0) + 42; }
+__attribute__((noipa)) void f11 (void) { v += (c == 0) + 42; }
+__attribute__((noipa)) void f12 (void) { v -= (c == 0) + 42; }
+__attribute__((noipa)) void f13 (int z) { v += (c == 0) + z; }
+__attribute__((noipa)) void f14 (int z) { v -= (c == 0) + z; }
+__attribute__((noipa)) unsigned int f15 (unsigned int n) { return n ? 2 : 1; }
+
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 2; i++)
+ {
+ v = 15;
+ if (i == 1)
+ c = 37;
+ f1 ();
+ if (v != 15 + i)
+ __builtin_abort ();
+ f2 ();
+ if (v != 15)
+ __builtin_abort ();
+ f3 ();
+ if (v != 16 - i)
+ __builtin_abort ();
+ f4 ();
+ if (v != 15)
+ __builtin_abort ();
+ f5 ();
+ if (v != 15 + i - 26)
+ __builtin_abort ();
+ f6 ();
+ if (v != 15)
+ __builtin_abort ();
+ f7 ();
+ if (v != 16 - i - 26)
+ __builtin_abort ();
+ f8 ();
+ if (v != 15)
+ __builtin_abort ();
+ f9 ();
+ if (v != 15 + i + 42)
+ __builtin_abort ();
+ f10 ();
+ if (v != 15)
+ __builtin_abort ();
+ f11 ();
+ if (v != 16 - i + 42)
+ __builtin_abort ();
+ f12 ();
+ if (v != 15)
+ __builtin_abort ();
+ f13 (173);
+ if (v != 16 - i + 173)
+ __builtin_abort ();
+ f14 (173);
+ if (v != 15)
+ __builtin_abort ();
+ f13 (-35);
+ if (v != 16 - i - 35)
+ __builtin_abort ();
+ f14 (-35);
+ if (v != 15)
+ __builtin_abort ();
+ }
+ if (f15 (0) != 1 || f15 (1) != 2 || f15 (371) != 2)
+ __builtin_abort ();
+ return 0;
+}