1/* Test that IPA-CP is able to produce a pass-through jump function for the 2 call of g1 and g2 even though a is addressable. Also test that h is not 3 cloned. */ 4 5/* { dg-do compile } */ 6/* { dg-options "-O3 -fipa-cp -fipa-cp-clone -fdump-ipa-cp -fno-early-inlining" } */ 7/* { dg-add-options bind_pic_locally } */ 8 9extern void use_stuff (int); 10extern void use_pointer (int *); 11 12static int 13h (int a, int b) 14{ 15 int i; 16 17 for (i = 8; i <= b; i++) 18 use_stuff (a+8); 19} 20 21static int 22g1 (int a, int b) 23{ 24 int i; 25 26 for (i = 0; i <= b; i++) 27 use_pointer (&a); 28 h (a, b); 29} 30 31static int 32g2 (int a, int b) 33{ 34 int i; 35 36 for (i = 4; i <= b; i += 2) 37 use_stuff (a); 38} 39 40 41static void 42f (int a, int z) 43{ 44 if (z > 1) 45 g1 (a, z); 46 else 47 g2 (a + 4, z); 48 use_pointer (&a); 49} 50 51int 52main (int argc, char *argv[]) 53{ 54 int i; 55 for (i = 0; i < 100; i++) 56 f (7, argc); 57 return 0; 58} 59 60 61/* { dg-final { scan-ipa-dump "Creating a specialized node of g1.*for all known contexts" "cp" } } */ 62/* { dg-final { scan-ipa-dump "Creating a specialized node of g2.*for all known contexts" "cp" } } */ 63/* { dg-final { scan-ipa-dump-not "Creating a specialized node of h.*for all known contexts" "cp" } } */ 64/* { dg-final { scan-ipa-dump-times "replacing param .0 a with const 7" 2 "cp" } } */ 65/* { dg-final { scan-ipa-dump "replacing param .0 a with const 11" "cp" } } */ 66/* { dg-final { cleanup-ipa-dump "cp" } } */ 67 68 69