1/* { dg-do run } */ 2/* { dg-options "-fdump-tree-original" } */ 3 4/* Check that MIN-MAX and MAX-MIN combinations are folded. */ 5 6extern void abort (void); 7 8#define MIN(a,b) ((a) < (b) ? (a) : (b)) 9#define MAX(a,b) ((a) > (b) ? (a) : (b)) 10 11int f1(int a, int b) 12{ 13 return MIN (MAX (a, b), b); /* == b */ 14} 15 16int f2(int a, int b) 17{ 18 return MAX (MIN (a, b), b); /* == b */ 19} 20 21int f3(int a, int b) 22{ 23 return MIN (MAX (b, a), b); /* == b */ 24} 25 26int f4(int a, int b) 27{ 28 return MAX (MIN (b, a), b); /* == b */ 29} 30 31 32int g1(int a, int b) 33{ 34 return MIN (a, MAX (a, b)); /* == a */ 35} 36 37int g2(int a, int b) 38{ 39 return MAX (a, MIN (a, b)); /* == a */ 40} 41 42int g3(int a, int b) 43{ 44 return MIN (a, MAX (b, a)); /* == a */ 45} 46 47int g4(int a, int b) 48{ 49 return MAX (a, MIN (b, a)); /* == a */ 50} 51 52int main(void) 53{ 54 if (f1 (1, 2) != 2) 55 abort (); 56 57 if (f2 (1, 2) != 2) 58 abort (); 59 60 if (f3 (1, 2) != 2) 61 abort (); 62 63 if (f4 (1, 2) != 2) 64 abort (); 65 66 if (g1 (1, 2) != 1) 67 abort (); 68 69 if (g2 (1, 2) != 1) 70 abort (); 71 72 if (g3 (1, 2) != 1) 73 abort (); 74 75 if (g4 (1, 2) != 1) 76 abort (); 77 78 return 0; 79} 80 81/* { dg-final { scan-tree-dump-times "MIN_EXPR" 0 "original"} } */ 82/* { dg-final { scan-tree-dump-times "MAX_EXPR" 0 "original"} } */ 83/* { dg-final { cleanup-tree-dump "original" } } */ 84