; ModuleID = 'clay' 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" target triple = "x86_64-apple-darwin10" %0 = type { i32, void ()* } %1 = type { %1* } %2 = type { i8 } define i32 @main(i32 %a) { init: %0 = alloca %1 %1 = alloca %1 %2 = call i32 @"clay_assign(Chain, Chain)"(%1* %0, %1* %1) ret i32 0 } define internal i32 @"clay_assign(Chain, Chain)"(%1* %c, %1* %d) { init: %0 = alloca %1* %1 = alloca %1** %2 = alloca %2 %3 = alloca %1** %4 = alloca %2 %5 = alloca %1* %6 = alloca %1* %7 = alloca %1** %8 = alloca %2 %9 = alloca %1** %10 = alloca %2 %11 = alloca %1* %12 = alloca %2 br label %code code: ; preds = %init br label %return2 return: ; preds = %return6 ret i32 0 exception: ; No predecessors! ret i32 1 return1: ; preds = %return2 %13 = load %1*** %1 %14 = load %1** %13 store %1* %14, %1** %5 %15 = load %1** %5 store %1* %15, %1** %0 br label %return3 return2: ; preds = %code %16 = getelementptr %1* %d, i32 0, i32 0 store %1** %16, %1*** %3 %17 = load %1*** %3 store %1** %17, %1*** %1 br label %return1 return3: ; preds = %return1 %18 = load %1** %0 br label %return5 return4: ; preds = %return5 %19 = load %1*** %7 %20 = load %1** %19 store %1* %20, %1** %11 %21 = load %1** %11 store %1* %21, %1** %6 br label %return6 return5: ; preds = %return3 %22 = getelementptr %1* %c, i32 0, i32 0 store %1** %22, %1*** %9 %23 = load %1*** %9 store %1** %23, %1*** %7 br label %return4 return6: ; preds = %return4 %24 = load %1** %6 %25 = call i32 @"clay_assign(Chain, Chain)"(%1* %24, %1* %18) br label %return }