annotate gcc/testsuite/g++.dg/tree-ssa/pr94403.C @ 152:2b5abeee2509

update gcc11
author anatofuz
date Mon, 25 May 2020 07:50:57 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
152
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
1 // PR tree-optimization/94403
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
2 // Only test on some 64-bit targets which do have bswap{si,di}2 patterns and
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
3 // are either big or little endian (not pdp endian).
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
4 // { dg-do compile { target { lp64 && { i?86-*-* x86_64-*-* powerpc*-*-* aarch64*-*-* } } } }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
5 // { dg-require-effective-target store_merge }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
6 // { dg-options "-O2 -fdump-tree-store-merging -std=c++17" }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
7
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
8 namespace std {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
9 template <typename T>
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
10 void swap (T& t1, T& t2) { T tmp (t1); t1 = t2; t2 = tmp; }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
11 enum class byte : unsigned char {};
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
12 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
13
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
14 unsigned
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
15 bswap32 (unsigned int x)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
16 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
17 unsigned int y = x;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
18 std::byte *bytes = reinterpret_cast<std::byte*> (&y);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
19 std::swap (bytes[0], bytes[3]);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
20 std::swap (bytes[1], bytes[2]);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
21 return y;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
22 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
23
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
24 unsigned long long
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
25 bswap64 (unsigned long long x)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
26 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
27 unsigned long long y = x;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
28 std::byte *bytes = reinterpret_cast<std::byte*> (&y);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
29 std::swap (bytes[0], bytes[7]);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
30 std::swap (bytes[1], bytes[6]);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
31 std::swap (bytes[2], bytes[5]);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
32 std::swap (bytes[3], bytes[4]);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
33 return y;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
34 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
35
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
36 /* { dg-final { scan-tree-dump-times "__builtin_bswap64" 1 "store-merging" } } */
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
37 /* { dg-final { scan-tree-dump-times "__builtin_bswap32" 1 "store-merging" } } */