Home | History | Annotate | Download | only in ArgumentPromotion
      1 ; RUN: opt -inline -argpromotion < %s
      2 ; rdar://7879828
      3 
      4 define void @foo() personality i32 (...)* @__gxx_personality_v0 {
      5   invoke void @foo2()
      6           to label %if.end432 unwind label %for.end520 
      7 
      8 if.end432:  
      9   unreachable
     10 
     11 for.end520: 
     12   %exn = landingpad {i8*, i32}
     13            cleanup
     14   unreachable
     15 }
     16 
     17 define internal  void @foo2() ssp {
     18   %call7 = call fastcc i8* @foo3(i1 (i8*)* @foo4)
     19   %call58 = call fastcc i8* @foo3(i1 (i8*)* @foo5)
     20   unreachable
     21 }
     22 
     23 define internal fastcc i8* @foo3(i1 (i8*)* %Pred) {
     24 entry:
     25   unreachable
     26 }
     27 
     28 define internal i1 @foo4(i8* %O) nounwind {
     29 entry:
     30   %call = call zeroext i1 @foo5(i8* %O) ; <i1> [#uses=0]
     31   unreachable
     32 }
     33 
     34 define internal i1 @foo5(i8* %O) nounwind {
     35 entry:
     36   ret i1 undef
     37 }
     38 
     39 
     40 ; PR8932 - infinite promotion.
     41 %0 = type { %0* }
     42 
     43 define i32 @test2(i32 %a) {
     44 init:
     45   %0 = alloca %0
     46   %1 = alloca %0
     47   %2 = call i32 @"clay_assign(Chain, Chain)"(%0* %0, %0* %1)
     48   ret i32 0
     49 }
     50 
     51 define internal i32 @"clay_assign(Chain, Chain)"(%0* %c, %0* %d) {
     52 init:
     53   %0 = getelementptr %0, %0* %d, i32 0, i32 0
     54   %1 = load %0*, %0** %0
     55   %2 = getelementptr %0, %0* %c, i32 0, i32 0
     56   %3 = load %0*, %0** %2
     57   %4 = call i32 @"clay_assign(Chain, Chain)"(%0* %3, %0* %1)
     58   ret i32 0
     59 }
     60 
     61 declare i32 @__gxx_personality_v0(...)
     62