1 /* PR middle-end/44071 */ 2 /* { dg-do run } */ 3 /* { dg-options "-O2" } */ 4 5 static inline int f1(void)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 b1(int x)17b1 (int x) 18 { 19 if (f1 () || x == 6) 20 x = 1; 21 else 22 x = 2; 23 return x; 24 } 25 26 static inline int f2(void)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 b2(int x)38b2 (int x) 39 { 40 if (f2 () || x == 6) 41 x = 1; 42 else 43 x = 2; 44 return x; 45 } 46 47 static inline int f3(void)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 b3(int x)58b3 (int x) 59 { 60 if (f3 () || x == 6) 61 x = 1; 62 else 63 x = 2; 64 return x; 65 } 66 67 static inline int f4(void)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 b4(int x)78b4 (int x) 79 { 80 if (f4 () || x == 6) 81 x = 1; 82 else 83 x = 2; 84 return x; 85 } 86 87 extern void abort (void); 88 89 int main(void)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