diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-10-19 14:46:57 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2019-10-19 14:46:57 +0200 |
commit | 15643a0dfc60e8e53d9b66165f4e2f4fcd8d98de (patch) | |
tree | 3f46d62c0e0d813672986e1e5292eaaeb307b3d7 /gcc/testsuite/gcc.c-torture | |
parent | 2366bf60c667d968c88e7bcec2eb9e2b84d0172d (diff) | |
download | gcc-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.c | 83 |
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; +} |