Home | History | Annotate | Download | only in ArgumentPromotion
      1 ; rdar://7879828
      2 ; RUN: opt -inline -argpromotion %s
      3 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
      4 target triple = "x86_64-apple-darwin10.0.0"
      5 
      6 define void @foo() {
      7   invoke void @foo2()
      8           to label %if.end432 unwind label %for.end520 
      9 
     10 if.end432:  
     11   unreachable
     12 
     13 for.end520: 
     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* %d, i32 0, i32 0
     54   %1 = load %0** %0
     55   %2 = getelementptr %0* %c, i32 0, i32 0
     56   %3 = load %0** %2
     57   %4 = call i32 @"clay_assign(Chain, Chain)"(%0* %3, %0* %1)
     58   ret i32 0
     59 }
     60