1 /* { dg-do compile } */ 2 /* { dg-options "-O2 -fno-tree-forwprop -fdump-tree-vrp1-details -fdump-tree-optimized" } */ 3 4 5 struct rtx_def; 6 typedef struct rtx_def *rtx; 7 union rtunion_def 8 { 9 rtx rt_rtx; 10 }; 11 typedef union rtunion_def rtunion; 12 struct rtx_def 13 { 14 int code; 15 union u 16 { 17 rtunion fld[1]; 18 } u; 19 }; 20 21 void arf (void); 22 void nit (void); 23 void frob (void); 24 25 void sss(rtx insn,int code1,int code2,int code3)26sss (rtx insn, int code1, int code2, int code3) 27 { 28 _Bool D1562; 29 struct rtx_def * body; 30 int i; 31 int n_sets; 32 int D1544; 33 34 body = insn->u.fld[5].rt_rtx; 35 D1544 = body->code; 36 n_sets = 1; 37 if (D1544 == 55) goto L7; else goto L1; 38 39 L1: 40 n_sets = 0; 41 if (code3 == 99) goto L2; else goto L11; 42 43 L2: 44 D1562 = code1 == 10; 45 n_sets = (int) D1562; 46 if (n_sets > 0) goto L7; else goto L11; 47 48 L37: 49 if (code2 == 42) goto L8; else goto L9; 50 51 L8: 52 arf (); 53 54 L9: 55 i = i + 1; 56 if (i < n_sets) goto L37; else goto L32; 57 58 L32: 59 60 L11: 61 if (n_sets > 1) goto L12; else goto L15; 62 63 L12: 64 nit (); 65 66 L14: 67 i = 0; 68 goto L38; 69 70 L15: 71 if (n_sets > 0) goto L14; else goto L16; 72 73 L38: 74 frob (); 75 i = i + 1; 76 if (n_sets > i) goto L38; else goto L16; 77 78 L16: 79 return; 80 81 L7: 82 i = 0; 83 goto L37; 84 85 } 86 87 /* The first n_sets > 0 test can be simplfiied into n_sets == 1 since 88 n_sets can only have the values [0, 1] as it's the result of a 89 boolean operation. */ 90 91 /* { dg-final { scan-tree-dump-times "Simplified relational" 1 "vrp1" } } */ 92 /* { dg-final { scan-tree-dump-times "if " 4 "optimized" } } */ 93 94