1/* PR middle-end/44071 */ 2/* { dg-do run } */ 3/* { dg-options "-O2" } */ 4 5static inline int 6f1 (void) 7{ 8 asm goto ("jmp %l[l1]" : : : : l1, l2); 9 __builtin_unreachable (); 10 l1: 11 return 1; 12 l2: 13 return 0; 14} 15 16__attribute__((noinline)) int 17b1 (int x) 18{ 19 if (f1 () || x == 6) 20 x = 1; 21 else 22 x = 2; 23 return x; 24} 25 26static inline int 27f2 (void) 28{ 29 asm goto ("jmp %l[l2]" : : : : l1, l2); 30 __builtin_unreachable (); 31 l1: 32 return 1; 33 l2: 34 return 0; 35} 36 37__attribute__((noinline)) int 38b2 (int x) 39{ 40 if (f2 () || x == 6) 41 x = 1; 42 else 43 x = 2; 44 return x; 45} 46 47static inline int 48f3 (void) 49{ 50 asm goto ("jmp %l[l1]" : : : : l1, l2); 51 l1: 52 return 1; 53 l2: 54 return 0; 55} 56 57__attribute__((noinline)) int 58b3 (int x) 59{ 60 if (f3 () || x == 6) 61 x = 1; 62 else 63 x = 2; 64 return x; 65} 66 67static inline int 68f4 (void) 69{ 70 asm goto ("jmp %l[l2]" : : : : l1, l2); 71 l1: 72 return 1; 73 l2: 74 return 0; 75} 76 77__attribute__((noinline)) int 78b4 (int x) 79{ 80 if (f4 () || x == 6) 81 x = 1; 82 else 83 x = 2; 84 return x; 85} 86 87extern void abort (void); 88 89int 90main (void) 91{ 92 int x; 93 asm ("" : "=r" (x) : "0" (0)); 94 if (b1 (x) != 1 || b1 (x + 6) != 1) 95 abort (); 96 if (b2 (x) != 2 || b2 (x + 6) != 1) 97 abort (); 98 if (b3 (x) != 1 || b3 (x + 6) != 1) 99 abort (); 100 if (b4 (x) != 2 || b4 (x + 6) != 1) 101 abort (); 102 return 0; 103} 104