; Example from Milanova, Rountev, and Ryder(Precise Call graphs for C programs with Function Pointers)
; Because table in const, func1, and func2 get inlined into main
;RUN: dsaopt %s -dsa-bu -analyze -check-callees=main,func1,func2

; ModuleID = 'tt1.o'
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-unknown-linux-gnu"

%struct.parse_table = type { i8*, i32 ()* }

@table = internal constant [2 x %struct.parse_table] [%struct.parse_table { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str, i64 0, i64 0), i32 ()* @func1 }, %struct.parse_table { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str1, i64 0, i64 0), i32 ()* @func2 }], align 32 ; <[2 x %struct.parse_table]*> [#uses=2]
@.str = private constant [6 x i8] c"name1\00", align 1 ; <[6 x i8]*> [#uses=1]
@.str1 = private constant [6 x i8] c"name2\00", align 1 ; <[6 x i8]*> [#uses=1]

define internal i32 @func1() nounwind {
entry:
  %retval = alloca i32                            ; <i32*> [#uses=2]
  %0 = alloca i32                                 ; <i32*> [#uses=2]
  %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
  store i32 1, i32* %0, align 4
  %1 = load i32, i32* %0, align 4                      ; <i32> [#uses=1]
  store i32 %1, i32* %retval, align 4
  br label %return

return:                                           ; preds = %entry
  %retval1 = load i32, i32* %retval                    ; <i32> [#uses=1]
  ret i32 %retval1
}

define internal i32 @func2() nounwind {
entry:
  %retval = alloca i32                            ; <i32*> [#uses=2]
  %0 = alloca i32                                 ; <i32*> [#uses=2]
  %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
  store i32 2, i32* %0, align 4
  %1 = load i32, i32* %0, align 4                      ; <i32> [#uses=1]
  store i32 %1, i32* %retval, align 4
  br label %return

return:                                           ; preds = %entry
  %retval1 = load i32, i32* %retval                    ; <i32> [#uses=1]
  ret i32 %retval1
}

define internal i32 ()* @find_p_func(i8* %s) nounwind {
entry:
  %s_addr = alloca i8*                            ; <i8**> [#uses=2]
  %retval = alloca i32 ()*                        ; <i32 ()**> [#uses=2]
  %0 = alloca i32 ()*                             ; <i32 ()**> [#uses=3]
  %i = alloca i32                                 ; <i32*> [#uses=6]
  %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
  store i8* %s, i8** %s_addr
  store i32 0, i32* %i, align 4
  br label %bb3

bb:                                               ; preds = %bb3
  %1 = load i32, i32* %i, align 4                      ; <i32> [#uses=1]
  %2 = sext i32 %1 to i64                         ; <i64> [#uses=1]
  %3 = getelementptr inbounds [2 x %struct.parse_table], [2 x %struct.parse_table]* @table, i64 0, i64 %2 ; <%struct.parse_table*> [#uses=1]
  %4 = getelementptr inbounds %struct.parse_table, %struct.parse_table* %3, i32 0, i32 0 ; <i8**> [#uses=1]
  %5 = load i8*, i8** %4, align 8                      ; <i8*> [#uses=1]
  %6 = load i8*, i8** %s_addr, align 8                 ; <i8*> [#uses=1]
  %7 = call i32 (...) bitcast (i32 (i8*, i8*)* @strcmp to i32 (...)*)(i8* %5, i8* %6) nounwind readonly ; <i32> [#uses=1]
  %8 = icmp eq i32 %7, 0                          ; <i1> [#uses=1]
  br i1 %8, label %bb1, label %bb2

bb1:                                              ; preds = %bb
  %9 = load i32, i32* %i, align 4                      ; <i32> [#uses=1]
  %10 = sext i32 %9 to i64                        ; <i64> [#uses=1]
  %11 = getelementptr inbounds [2 x %struct.parse_table], [2 x %struct.parse_table]* @table, i64 0, i64 %10 ; <%struct.parse_table*> [#uses=1]
  %12 = getelementptr inbounds %struct.parse_table, %struct.parse_table* %11, i32 0, i32 1 ; <i32 ()**> [#uses=1]
  %13 = load i32 ()*, i32 ()** %12, align 8                ; <i32 ()*> [#uses=1]
  store i32 ()* %13, i32 ()** %0, align 8
  br label %bb5

bb2:                                              ; preds = %bb
  %14 = load i32, i32* %i, align 4                     ; <i32> [#uses=1]
  %15 = add nsw i32 %14, 1                        ; <i32> [#uses=1]
  store i32 %15, i32* %i, align 4
  br label %bb3

bb3:                                              ; preds = %bb2, %entry
  %16 = load i32, i32* %i, align 4                     ; <i32> [#uses=1]
  %17 = icmp sle i32 %16, 1                       ; <i1> [#uses=1]
  br i1 %17, label %bb, label %bb4

bb4:                                              ; preds = %bb3
  store i32 ()* null, i32 ()** %0, align 8
  br label %bb5

bb5:                                              ; preds = %bb4, %bb1
  %18 = load i32 ()*, i32 ()** %0, align 8                 ; <i32 ()*> [#uses=1]
  store i32 ()* %18, i32 ()** %retval, align 8
  br label %return

return:                                           ; preds = %bb5
  %retval6 = load i32 ()*, i32 ()** %retval                ; <i32 ()*> [#uses=1]
  ret i32 ()* %retval6
}

declare i32 @strcmp(i8*, i8*) nounwind readonly

define i32 @main(i32 %argc, i8** %argv) nounwind {
entry:
  %argc_addr = alloca i32                         ; <i32*> [#uses=1]
  %argv_addr = alloca i8**                        ; <i8***> [#uses=2]
  %retval = alloca i32                            ; <i32*> [#uses=1]
  %parse_func = alloca i32 ()*                    ; <i32 ()**> [#uses=3]
  %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
  store i32 %argc, i32* %argc_addr
  store i8** %argv, i8*** %argv_addr
  %0 = load i8**, i8*** %argv_addr, align 8             ; <i8**> [#uses=1]
  %1 = getelementptr inbounds i8*, i8** %0, i64 1      ; <i8**> [#uses=1]
  %2 = load i8*, i8** %1, align 1                      ; <i8*> [#uses=1]
  %3 = call i32 ()* (i8*) @find_p_func(i8* %2) nounwind ; <i32 ()*> [#uses=1]
  store i32 ()* %3, i32 ()** %parse_func, align 8
  %4 = load i32 ()*, i32 ()** %parse_func, align 8         ; <i32 ()*> [#uses=1]
  %5 = icmp ne i32 ()* %4, null                   ; <i1> [#uses=1]
  br i1 %5, label %bb, label %bb1

bb:                                               ; preds = %entry
  %6 = load i32 ()*, i32 ()** %parse_func, align 8         ; <i32 ()*> [#uses=1]
  %7 = call i32 %6() nounwind                     ; <i32> [#uses=0]
  br label %bb1

bb1:                                              ; preds = %bb, %entry
  br label %return

return:                                           ; preds = %bb1
  %retval2 = load i32, i32* %retval                    ; <i32> [#uses=1]
  ret i32 %retval2
}
