| // { dg-do assemble } |
| |
| // Test of severe performance regression from 2.95. This code generates |
| // a heavily self-referential tree which caused the inliner to take |
| // O(3**N) time to scan it for function calls. |
| // Reported by Kelley Cook <kelley.cook@home.com>. PR c++/1687. |
| |
| bool in0 ; |
| bool in1 ; |
| bool in2 ; |
| bool in3 ; |
| bool in4 ; |
| bool in5 ; |
| bool in6 ; |
| bool in7 ; |
| bool in8 ; |
| bool in9 ; |
| bool in10; |
| bool in11; |
| bool in12; |
| bool in13; |
| bool in14; |
| bool in15; |
| bool in16; |
| bool in17; |
| bool in18; |
| bool in19; |
| bool in20; |
| bool in21; |
| bool in22; |
| bool in23; |
| bool in24; |
| bool in25; |
| bool in26; |
| bool in27; |
| bool in28; |
| bool in29; |
| bool in30; |
| bool in31; |
| unsigned long output; |
| |
| void mux(void) |
| { |
| output = |
| (in0 ? 0x00000001 : 0) | |
| (in1 ? 0x00000002 : 0) | |
| (in2 ? 0x00000004 : 0) | |
| (in3 ? 0x00000008 : 0) | |
| (in4 ? 0x00000010 : 0) | |
| (in5 ? 0x00000020 : 0) | |
| (in6 ? 0x00000040 : 0) | |
| (in7 ? 0x00000080 : 0) | |
| (in8 ? 0x00000100 : 0) | |
| (in9 ? 0x00000200 : 0) | |
| (in10 ? 0x00000400 : 0) | |
| (in11 ? 0x00000800 : 0) | |
| (in12 ? 0x00001000 : 0) | |
| (in13 ? 0x00002000 : 0) | |
| (in14 ? 0x00004000 : 0) | |
| (in15 ? 0x00008000 : 0) | |
| (in16 ? 0x00010000 : 0) | |
| (in17 ? 0x00020000 : 0) | |
| (in18 ? 0x00040000 : 0) | |
| (in19 ? 0x00080000 : 0) | |
| (in20 ? 0x00100000 : 0) | |
| (in21 ? 0x00200000 : 0) | |
| (in22 ? 0x00400000 : 0) | |
| (in23 ? 0x00800000 : 0) | |
| (in24 ? 0x01000000 : 0) | |
| (in25 ? 0x02000000 : 0) | |
| (in26 ? 0x04000000 : 0) | |
| (in27 ? 0x08000000 : 0) | |
| (in28 ? 0x10000000 : 0) | |
| (in29 ? 0x20000000 : 0) | |
| (in30 ? 0x40000000 : 0) | |
| (in31 ? 0x80000000 : 0) ; |
| } |
| |