summaryrefslogtreecommitdiff
path: root/support/regression/tests/ast_constant_folding.c
blob: 66767afe677bab280272cdc332f0ffcef583a812 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/* Test ast_constant_folding() in SDCCast.c
 */
#include <testfwk.h>

volatile unsigned i;

unsigned
foo_aa (void)
{
  return i + 5 + i - i + 12;
}

unsigned
foo_asr (void)
{
  return i - 5 + i + i + 12;
}

unsigned
foo_asl (void)
{
  return 5 - i + i + 12;
}

unsigned
foo_ssr (void)
{
  return i - 5 - i - i - 12;
}

unsigned
foo_ssl (void)
{
  return 5 - i - i - 12;
}
unsigned
foo_sa (void)
{
  return i + 5 - i - i - 12;
}

unsigned
foo_mul (void)
{
  return 5 * i * i * 12;
}

unsigned
foo_div (void)
{
  return 33971u / i / 5 / i / i / 12;
}

unsigned
foo_or (void)
{
  return 5 | i | i | 12;
}

unsigned
foo_and (void)
{
  return 5 & i & i & 12;
}

void
test_ast_cf(void)
{
  i = 30; ASSERT(foo_aa () ==    47);
          ASSERT(foo_asr() ==    97);
          ASSERT(foo_asl() ==    17);
          ASSERT(foo_ssr() ==   -47);
          ASSERT(foo_ssl() ==   -67);
          ASSERT(foo_sa () ==   -37);
          ASSERT(foo_mul() == 54000);
  i =  3; ASSERT(foo_div() ==    20);
  i =  3; ASSERT(foo_or () ==    15);
  i =  7; ASSERT(foo_and() ==     4);
}