; ModuleID = '980605-1.c'
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32"
target triple = "i386-pc-linux-gnu"

module asm "\09.ident\09\22GCC: (GNU) 4.5.1 20100510 (prerelease) LLVM: 104604:104605\22"

%char = type i8
%"char[]" = type [4 x i8]
%double = type double
%int = type i32
%"unsigned int" = type i32

@x = global i32 1                                 ; <i32*> [#uses=2]
@.str = private constant %"char[]" c"%d\0A\00", align 1 ; <%"char[]"*> [#uses=1]
@buf = common global [10 x i8] zeroinitializer    ; <[10 x i8]*> [#uses=1]

define i32 @getval() nounwind {
entry:
  %memtmp = alloca i32                            ; <i32*> [#uses=2]
  %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
  %"ssa point" = bitcast i32 0 to i32             ; <i32> [#uses=0]
  br label %"2"

"2":                                              ; preds = %entry
  %0 = load i32* @x, align 4                      ; <i32> [#uses=2]
  %1 = add nsw i32 %0, 1                          ; <i32> [#uses=1]
  store i32 %1, i32* @x, align 4
  store i32 %0, i32* %memtmp, align 1
  br label %return

return:                                           ; preds = %"2"
  %retval = load i32* %memtmp                     ; <i32> [#uses=1]
  ret i32 %retval
}

define i32 @f2(double %x) nounwind {
entry:
  %x_addr = alloca double                         ; <double*> [#uses=2]
  %memtmp = alloca i32                            ; <i32*> [#uses=2]
  %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
  store double %x, double* %x_addr
  %0 = load double* %x_addr, align 64             ; <double> [#uses=1]
  %"ssa point" = bitcast i32 0 to i32             ; <i32> [#uses=0]
  br label %"2"

"2":                                              ; preds = %entry
  %1 = call i32 @getval() nounwind                ; <i32> [#uses=1]
  %2 = call i32 @getval() nounwind                ; <i32> [#uses=1]
  %3 = call i32 @getval() nounwind                ; <i32> [#uses=1]
  %4 = call i32 @getval() nounwind                ; <i32> [#uses=1]
  %5 = call i32 @getval() nounwind                ; <i32> [#uses=1]
  %6 = call i32 @getval() nounwind                ; <i32> [#uses=1]
  %7 = call i32 @getval() nounwind                ; <i32> [#uses=1]
  %8 = call i32 @getval() nounwind                ; <i32> [#uses=1]
  %9 = call i32 @getval() nounwind                ; <i32> [#uses=1]
  %10 = call i32 @getval() nounwind               ; <i32> [#uses=1]
  %11 = fptoui double %0 to i16                   ; <i16> [#uses=1]
  %12 = add nsw i32 %1, %2                        ; <i32> [#uses=1]
  %13 = add nsw i32 %12, %3                       ; <i32> [#uses=1]
  %14 = add nsw i32 %13, %4                       ; <i32> [#uses=1]
  %15 = add nsw i32 %14, %5                       ; <i32> [#uses=1]
  %16 = add nsw i32 %15, %6                       ; <i32> [#uses=1]
  %17 = add nsw i32 %16, %7                       ; <i32> [#uses=1]
  %18 = add nsw i32 %17, %8                       ; <i32> [#uses=1]
  %19 = add nsw i32 %18, %9                       ; <i32> [#uses=1]
  %20 = add nsw i32 %19, %10                      ; <i32> [#uses=1]
  %21 = zext i16 %11 to i32                       ; <i32> [#uses=1]
  %22 = add nsw i32 %20, %21                      ; <i32> [#uses=1]
  store i32 %22, i32* %memtmp, align 1
  br label %return

return:                                           ; preds = %"2"
  %retval = load i32* %memtmp                     ; <i32> [#uses=1]
  ret i32 %retval
}

define void @f() nounwind {
entry:
  %"ssa point" = bitcast i32 0 to i32             ; <i32> [#uses=0]
  br label %"2"

"2":                                              ; preds = %entry
  %0 = call i32 @getval() nounwind                ; <i32> [#uses=2]
  %1 = call i32 @getval() nounwind                ; <i32> [#uses=2]
  %2 = call i32 @getval() nounwind                ; <i32> [#uses=2]
  %3 = call i32 @getval() nounwind                ; <i32> [#uses=2]
  %4 = call i32 @getval() nounwind                ; <i32> [#uses=2]
  %5 = call i32 @getval() nounwind                ; <i32> [#uses=2]
  %6 = call i32 @getval() nounwind                ; <i32> [#uses=2]
  %7 = call i32 @getval() nounwind                ; <i32> [#uses=2]
  %8 = call i32 @getval() nounwind                ; <i32> [#uses=2]
  %9 = call i32 @getval() nounwind                ; <i32> [#uses=2]
  %10 = call i32 @f2(double 1.700000e+01) nounwind ; <i32> [#uses=2]
  %11 = add nsw i32 %0, %1                        ; <i32> [#uses=1]
  %12 = add nsw i32 %11, %2                       ; <i32> [#uses=1]
  %13 = add nsw i32 %12, %3                       ; <i32> [#uses=1]
  %14 = add nsw i32 %13, %4                       ; <i32> [#uses=1]
  %15 = add nsw i32 %14, %5                       ; <i32> [#uses=1]
  %16 = add nsw i32 %15, %6                       ; <i32> [#uses=1]
  %17 = add nsw i32 %16, %7                       ; <i32> [#uses=1]
  %18 = add nsw i32 %17, %8                       ; <i32> [#uses=1]
  %19 = add nsw i32 %18, %9                       ; <i32> [#uses=1]
  %20 = add nsw i32 %19, %10                      ; <i32> [#uses=1]
  %21 = call i32 (i8*, i8*, ...)* @sprintf(i8* getelementptr inbounds ([10 x i8]* @buf, i32 0, i32 0), i8* getelementptr inbounds (%"char[]"* @.str, i32 0, i32 0), i32 %20) nounwind ; <i32> [#uses=0]
  %22 = add nsw i32 %0, %1                        ; <i32> [#uses=1]
  %23 = add nsw i32 %22, %2                       ; <i32> [#uses=1]
  %24 = add nsw i32 %23, %3                       ; <i32> [#uses=1]
  %25 = add nsw i32 %24, %4                       ; <i32> [#uses=1]
  %26 = add nsw i32 %25, %5                       ; <i32> [#uses=1]
  %27 = add nsw i32 %26, %6                       ; <i32> [#uses=1]
  %28 = add nsw i32 %27, %7                       ; <i32> [#uses=1]
  %29 = add nsw i32 %28, %8                       ; <i32> [#uses=1]
  %30 = add nsw i32 %29, %9                       ; <i32> [#uses=1]
  %31 = add nsw i32 %30, %10                      ; <i32> [#uses=1]
  %32 = icmp ne i32 %31, 227                      ; <i1> [#uses=1]
  br i1 %32, label %"3", label %"4"

"3":                                              ; preds = %"2"
  call void @abort() noreturn nounwind
  unreachable

"4":                                              ; preds = %"2"
  br label %return

return:                                           ; preds = %"4"
  ret void
}

declare i32 @sprintf(i8*, i8*, ...) nounwind

declare void @abort() noreturn nounwind

define i32 @main() nounwind {
entry:
  %memtmp = alloca i32                            ; <i32*> [#uses=1]
  %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
  %"ssa point" = bitcast i32 0 to i32             ; <i32> [#uses=0]
  br label %"2"

"2":                                              ; preds = %entry
  call void @f() nounwind
  call void @exit(i32 0) noreturn nounwind
  unreachable

return:                                           ; No predecessors!
  %retval = load i32* %memtmp                     ; <i32> [#uses=1]
  ret i32 %retval
}

declare void @exit(i32) noreturn nounwind
