Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/gcc.target/aarch64/long_branch_1.c @ 152:2b5abeee2509
update gcc11
author | anatofuz |
---|---|
date | Mon, 25 May 2020 07:50:57 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
/* { dg-do assemble } */ /* { dg-timeout-factor 2.0 } */ /* { dg-options "-O1 -fno-reorder-blocks -fno-tree-cselim --save-temps" } */ __attribute__((noinline, noclone)) int restore (int a, int b) { return a * b; } __attribute__((noinline, noclone)) void do_nothing (int *input) { *input = restore (*input, 1); return; } #define ENTRY_SUM(n, x) \ sum = sum / ((n) + (x)); \ sum = restore (sum, (n) + (x)); #define ENTRY_SUM2(n, x) ENTRY_SUM ((n), (x)) ENTRY_SUM ((n), (x)+1) #define ENTRY_SUM4(n, x) ENTRY_SUM2 ((n), (x)) ENTRY_SUM2 ((n), (x)+2) #define ENTRY_SUM8(n, x) ENTRY_SUM4 ((n), (x)) ENTRY_SUM4 ((n), (x)+4) #define ENTRY_SUM16(n, x) ENTRY_SUM8 ((n), (x)) ENTRY_SUM8 ((n), (x)+8) #define ENTRY_SUM32(n, x) ENTRY_SUM16 ((n), (x)) ENTRY_SUM16 ((n), (x)+16) #define ENTRY_SUM64(n, x) ENTRY_SUM32 ((n), (x)) ENTRY_SUM32 ((n), (x)+32) #define ENTRY_SUM128(n, x) ENTRY_SUM64 ((n), (x)) ENTRY_SUM64 ((n), (x)+64) #define CASE_ENTRY(n) \ case n: \ sum = sum / (n + 1); \ sum = restore (sum, n + 1); \ if (sum == (n + addend)) \ break;\ ENTRY_SUM128 ((n), 2) \ ENTRY_SUM16 ((n), 130) \ break; #define CASE_ENTRY2(n) CASE_ENTRY ((n)) CASE_ENTRY ((n)+1) #define CASE_ENTRY4(n) CASE_ENTRY2 ((n)) CASE_ENTRY2 ((n)+2) #define CASE_ENTRY8(n) CASE_ENTRY4 ((n)) CASE_ENTRY4 ((n)+4) #define CASE_ENTRY16(n) CASE_ENTRY8 ((n)) CASE_ENTRY8 ((n)+8) #define CASE_ENTRY32(n) CASE_ENTRY16 ((n)) CASE_ENTRY16 ((n)+16) #define CASE_ENTRY64(n) CASE_ENTRY32 ((n)) CASE_ENTRY32 ((n)+32) #define CASE_ENTRY128(n) CASE_ENTRY64 ((n)) CASE_ENTRY64 ((n)+64) __attribute__((noinline, noclone)) long long test_and_branch (int selector, int addend, int cond) { long long sum = selector + 1; if (selector > 200) { start0: return sum - 1; start3: return sum - 2; } else { switch (selector) { start1: start2: CASE_ENTRY128 (1) CASE_ENTRY64 (129) CASE_ENTRY16 (193) } do_nothing ((int *)&sum); if (cond == 0) goto start0; else if (cond < 0) goto start1; else if ((cond & 0x010) != 0) goto start2; else if (cond >= 14) goto start3; } return -1; } /* { dg-final { scan-assembler "Lbcond" } } */ /* { dg-final { scan-assembler "Lcb" } } */ /* { dg-final { scan-assembler "Ltb" } } */